summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSander Vrijders <sander.vrijders@ugent.be>2018-07-25 11:42:53 +0200
committerDimitri Staessens <dimitri.staessens@ugent.be>2018-07-25 13:29:15 +0200
commit55e1cd4caffbf8f31b03c53b99f27dc85c3a9aba (patch)
tree3ef70f9bfdfe4993b4d58ec7ede03f91618f994d
parentd4ce582882e832acda9cbf3802ac1ee7cd5abbfd (diff)
downloadouroboros-0.11.11.tar.gz
ouroboros-0.11.11.zip
ipcpd: Fix sequence number check for link state0.11.11
Commit a3903da659e introduced sequence number for the LSAs to make it more robust, but the check was not done properly, and the seqno was always changed regardless of whether it was an old LSA or not. Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be> Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
-rw-r--r--CMakeLists.txt2
-rw-r--r--src/ipcpd/normal/pol/link_state.c22
2 files changed, 12 insertions, 12 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a2caab14..7893774b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,7 +8,7 @@ include(GNUInstallDirs)
set(PACKAGE_VERSION_MAJOR 0)
set(PACKAGE_VERSION_MINOR 11)
-set(PACKAGE_VERSION_PATCH 10)
+set(PACKAGE_VERSION_PATCH 11)
set(PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
set(PACKAGE_DESCRIPTION "The Ouroboros prototype")
diff --git a/src/ipcpd/normal/pol/link_state.c b/src/ipcpd/normal/pol/link_state.c
index 8e5d3807..c6d641c2 100644
--- a/src/ipcpd/normal/pol/link_state.c
+++ b/src/ipcpd/normal/pol/link_state.c
@@ -60,10 +60,6 @@
#define CLOCK_REALTIME_COARSE CLOCK_REALTIME
#endif
-#define LSA_NEW 0
-#define LSA_UPDATED 1
-#define LSA_OLD 2
-
struct lsa {
uint64_t d_addr;
uint64_t s_addr;
@@ -401,7 +397,7 @@ static int lsdb_add_link(uint64_t src,
struct list_head * p;
struct adjacency * adj;
struct timespec now;
- int ret;
+ int ret = -1;
clock_gettime(CLOCK_REALTIME_COARSE, &now);
@@ -410,9 +406,11 @@ static int lsdb_add_link(uint64_t src,
list_for_each(p, &ls.db) {
struct adjacency * a = list_entry(p, struct adjacency, next);
if (a->dst == dst && a->src == src) {
- ret = (a->seqno <= seqno ? LSA_OLD : LSA_UPDATED);
- a->stamp = now.tv_sec;
- a->seqno = seqno;
+ if (a->seqno < seqno) {
+ a->stamp = now.tv_sec;
+ a->seqno = seqno;
+ ret = 0;
+ }
pthread_rwlock_unlock(&ls.db_lock);
return ret;
}
@@ -443,7 +441,7 @@ static int lsdb_add_link(uint64_t src,
set_pff_modified();
- return LSA_NEW;
+ return 0;
}
static int lsdb_del_link(uint64_t src,
@@ -738,8 +736,10 @@ static void * lsreader(void * o)
if (lsdb_add_link(ntoh64(msg->s_addr),
ntoh64(msg->d_addr),
ntoh64(msg->seqno),
- &qs) != LSA_OLD)
- forward_lsm(buf, len, fd);
+ &qs))
+ continue;
+
+ forward_lsm(buf, len, fd);
}
}