summaryrefslogtreecommitdiff
path: root/cesar/bsu
diff options
context:
space:
mode:
authorNélio Laranjeiro2011-09-19 16:18:49 +0200
committerNélio Laranjeiro2011-09-22 16:45:18 +0200
commitc67adcebd4e99f320128bc1bae7301a89a8aaa50 (patch)
treea2ffd0515be2a92d2be74e9e67d4cf822fa747be /cesar/bsu
parent24b34d140745034d6b9042d4f7a312d6b3b7fdaf (diff)
cesar: update tracking after handover, refs #2693, #2524
Diffstat (limited to 'cesar/bsu')
-rw-r--r--cesar/bsu/bsu.h9
-rw-r--r--cesar/bsu/src/bsu.c10
-rw-r--r--cesar/bsu/stub/src/bsu.c7
-rw-r--r--cesar/bsu/test/utest/src/bsut.c21
4 files changed, 47 insertions, 0 deletions
diff --git a/cesar/bsu/bsu.h b/cesar/bsu/bsu.h
index cedb08a40c..bec3d49e11 100644
--- a/cesar/bsu/bsu.h
+++ b/cesar/bsu/bsu.h
@@ -167,6 +167,15 @@ bsu_update_nid (bsu_t *ctx, u64 nid);
void
bsu_avln_remove (bsu_t *ctx, u64 nid, u8 snid, mac_t mac);
+/**
+ * Update the tracking after a CCo change (Handover case)
+ * \param ctx the module context.
+ * \param tei the new CCo's TEI to track.
+ * \param mac_addr_track the new CCo's Mac address to track.
+ */
+void
+bsu_update_tracking (bsu_t *ctx, u8 tei, mac_t mac_addr_track);
+
END_DECLS
#endif /* bsu_bsu_h */
diff --git a/cesar/bsu/src/bsu.c b/cesar/bsu/src/bsu.c
index ccbf601f35..ccf7173783 100644
--- a/cesar/bsu/src/bsu.c
+++ b/cesar/bsu/src/bsu.c
@@ -1340,3 +1340,13 @@ bsu_update_nid (bsu_t *ctx, u64 nid)
ctx->sta_avln->beacon.vf.nid = nid;
arch_dsr_unlock ();
}
+
+void
+bsu_update_tracking (bsu_t *ctx, u8 tei, mac_t mac_addr_track)
+{
+ dbg_assert (ctx);
+ arch_dsr_lock ();
+ ctx->tei_track = tei;
+ ctx->cco_mac_address_track = mac_addr_track;
+ arch_dsr_unlock ();
+}
diff --git a/cesar/bsu/stub/src/bsu.c b/cesar/bsu/stub/src/bsu.c
index e4e9e72bab..7e6a305652 100644
--- a/cesar/bsu/stub/src/bsu.c
+++ b/cesar/bsu/stub/src/bsu.c
@@ -75,3 +75,10 @@ bsu_avln_remove (
void
bsu_avln_remove (bsu_t *ctx, u64 nid, u8 snid, mac_t mac) {}
+
+void
+bsu_update_tracking (bsu_t *ctx, u8 tei, mac_t mac_addr_track)
+ __attribute__((weak));
+void
+bsu_update_tracking (bsu_t *ctx, u8 tei, mac_t mac_addr_track)
+{}
diff --git a/cesar/bsu/test/utest/src/bsut.c b/cesar/bsu/test/utest/src/bsut.c
index 8dfe19384b..c993f63d28 100644
--- a/cesar/bsu/test/utest/src/bsut.c
+++ b/cesar/bsu/test/utest/src/bsut.c
@@ -916,6 +916,26 @@ test_case_bsu_avln_remove (test_t t)
}
void
+test_case_bsu_update_tracking (test_t t)
+{
+ test_case_begin (t, "Update tracking");
+ test_begin (t, "update tracking")
+ {
+ u8 tei = MAC_TEI_STA_MAX;
+ mac_t mac = MAC_ADDRESS (0x00, 0x13, 0xd7, 0x78, 0x79, 0x80);
+ bsu_test_t ctx;
+ bsu_test_init (&ctx);
+ test_fail_unless (ctx.bsu->tei_track != tei);
+ test_fail_unless (ctx.bsu->cco_mac_address_track != mac);
+ bsu_update_tracking (ctx.bsu, tei, mac);
+ test_fail_unless (ctx.bsu->tei_track == tei);
+ test_fail_unless (ctx.bsu->cco_mac_address_track == mac);
+ bsu_test_uninit (&ctx);
+ }
+ test_end;
+}
+
+void
test_suite_bsu (test_t t)
{
test_suite_begin (t, "BSU test");
@@ -930,4 +950,5 @@ test_suite_bsu (test_t t)
test_case_bsu_discover_update (t);
test_case_bsu_add_avln_array_full (t);
test_case_bsu_avln_remove (t);
+ test_case_bsu_update_tracking (t);
}