Skip to content

Commit

Permalink
go to holdover if best GM is worse than 10us (#326)
Browse files Browse the repository at this point in the history
Summary:
Pull Request resolved: #326

We should not allow selection of the GM which has a bad clock quality. It's better to just switch to holdover

Reviewed By: vvfedorenko

Differential Revision: D53310144

fbshipit-source-id: 8025da97b253884358c8dcb1e98c7ac4159a6c2a
  • Loading branch information
leoleovich authored and facebook-github-bot committed Feb 1, 2024
1 parent 0db5072 commit 1996517
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
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
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 1996517

Please sign in to comment.