Skip to content

Commit

Permalink
go to holdover if best GM is worse than 10us
Browse files Browse the repository at this point in the history
Summary: We should not allow selection of the GM which has a bad clock quality. It's better to just switch to holdover

Differential Revision: D53310144
  • Loading branch information
leoleovich authored and facebook-github-bot committed Feb 1, 2024
1 parent 0db5072 commit b4eda89
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
3 changes: 2 additions & 1 deletion ptp/sptp/client/bmca.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ func bmca(msgs []*ptp.Announce, prios map[ptp.ClockIdentity]int) *ptp.Announce {
best = b
}
}
if best.AnnounceBody.GrandmasterClockQuality.ClockClass >= ptp.ClockClass13 {
// Never select GM in worse than holdover status or with clock quality worse than 10 microseconds
if best.AnnounceBody.GrandmasterClockQuality.ClockClass > ptp.ClockClass7 || best.AnnounceBody.GrandmasterClockQuality.ClockAccuracy > ptp.ClockAccuracyMicrosecond10 {
return nil
}
return best
Expand Down
11 changes: 9 additions & 2 deletions ptp/sptp/client/bmca_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,15 @@ func TestBmcaProperlyUsesLocalPriority(t *testing.T) {
}

func TestBmcaNoMasterForCalibrating(t *testing.T) {
best := ptp.Announce{AnnounceBody: ptp.AnnounceBody{GrandmasterIdentity: 1, GrandmasterClockQuality: ptp.ClockQuality{ClockClass: ptp.ClockClass52}}}
worse := ptp.Announce{AnnounceBody: ptp.AnnounceBody{GrandmasterIdentity: 2, GrandmasterClockQuality: ptp.ClockQuality{ClockClass: ptp.ClockClass13}}}
best := ptp.Announce{AnnounceBody: ptp.AnnounceBody{GrandmasterIdentity: 1, GrandmasterClockQuality: ptp.ClockQuality{ClockClass: ptp.ClockClass13}}}
worse := ptp.Announce{AnnounceBody: ptp.AnnounceBody{GrandmasterIdentity: 2, GrandmasterClockQuality: ptp.ClockQuality{ClockClass: ptp.ClockClass52}}}
selected := bmca([]*ptp.Announce{&best, &worse}, map[ptp.ClockIdentity]int{1: 2, 2: 1})
require.Empty(t, selected)
}

func TestBmcaNoMasterForLowAccuracy(t *testing.T) {
best := ptp.Announce{AnnounceBody: ptp.AnnounceBody{GrandmasterIdentity: 1, GrandmasterClockQuality: ptp.ClockQuality{ClockAccuracy: ptp.ClockAccuracyMicrosecond100}}}
worse := ptp.Announce{AnnounceBody: ptp.AnnounceBody{GrandmasterIdentity: 2, GrandmasterClockQuality: ptp.ClockQuality{ClockAccuracy: ptp.ClockAccuracySecond10}}}
selected := bmca([]*ptp.Announce{&best, &worse}, map[ptp.ClockIdentity]int{1: 2, 2: 1})
require.Empty(t, selected)
}

0 comments on commit b4eda89

Please sign in to comment.