summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2016-02-28 15:13:00 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2016-02-19 20:10:24 +0900
commit19faff590fca061481b8b820e2afe2667f7e6403 (patch)
tree2effea519da547ce49021c7196886c1af96cfa0f
parentbc694ab7ce5443b9f4256bfdc70efa198fd46037 (diff)
rpki: handle serial number wraparound
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--server/rpki.go10
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()
}