diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2016-02-28 15:13:00 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2016-02-19 20:10:24 +0900 |
commit | 19faff590fca061481b8b820e2afe2667f7e6403 (patch) | |
tree | 2effea519da547ce49021c7196886c1af96cfa0f | |
parent | bc694ab7ce5443b9f4256bfdc70efa198fd46037 (diff) |
rpki: handle serial number wraparound
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | server/rpki.go | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/server/rpki.go b/server/rpki.go index afead13a..d7ffdbbf 100644 --- a/server/rpki.go +++ b/server/rpki.go @@ -33,6 +33,10 @@ import ( "gopkg.in/tomb.v2" ) +func before(a, b uint32) bool { + return int32(a-b) < 0 +} + type ipPrefix struct { Prefix net.IP Length uint8 @@ -313,9 +317,11 @@ func (c *roaManager) handleRTRMsg(client *roaClient, state *config.RpkiServerSta if err == nil { switch msg := m.(type) { case *bgp.RTRSerialNotify: - if client.serialNumber < msg.RTRCommon.SerialNumber { + if before(client.serialNumber, msg.RTRCommon.SerialNumber) { client.enable(client.serialNumber) - } else if client.serialNumber > msg.RTRCommon.SerialNumber { + } else if client.serialNumber == msg.RTRCommon.SerialNumber { + // nothing + } else { // should not happen. try to get the whole ROAs. client.softReset() } |