summaryrefslogtreecommitdiff
path: root/cesar/cp/eoc/sta/action
diff options
context:
space:
mode:
authorNélio Laranjeiro2012-07-05 12:53:25 +0200
committerNélio Laranjeiro2012-07-23 16:27:44 +0200
commit6230bf449d10ea6ee7b36c1350f853b8e4ca0f14 (patch)
tree71bdc2e8a57886c1056700e9af3b997e50da320e /cesar/cp/eoc/sta/action
parent5cc8f2eaf2a8c3e0f6a1880de34ea000b8f19ac4 (diff)
cesar/cp/eoc/sta/action: use master mac addr to synchronise, closes #3250
Diffstat (limited to 'cesar/cp/eoc/sta/action')
-rw-r--r--cesar/cp/eoc/sta/action/src/assoc_slave.c37
-rw-r--r--cesar/cp/eoc/sta/action/test/utest_eoc/src/assoc.c2
2 files changed, 20 insertions, 19 deletions
diff --git a/cesar/cp/eoc/sta/action/src/assoc_slave.c b/cesar/cp/eoc/sta/action/src/assoc_slave.c
index f993edaac0..95daa9d4e5 100644
--- a/cesar/cp/eoc/sta/action/src/assoc_slave.c
+++ b/cesar/cp/eoc/sta/action/src/assoc_slave.c
@@ -102,32 +102,33 @@ cp_eoc_sta_action_detect__beacon_received (cp_t *ctx, bsu_beacon_t *beacon,
cp_nid_t our_nid = cp_sta_own_data_get_nid (ctx);
cp_nid_t its_nid = cp_net_get_nid (ctx, net);
+ cp_nid_t its_snid = cp_net_get_snid (ctx, net);
+ cp_sta_own_data_t *own_data = cp_sta_mgr_get_sta_own_data (ctx);
ctx->sta_action.assoc.beacon_loss = 0;
- if (cp_beacon_synchronised (ctx))
+ if (our_nid == its_nid)
{
- if (ctx->sta_action.assoc.init_count > 0)
- ctx->sta_action.assoc.init_count--;
-
- if (ctx->sta_action.assoc.init_count <= 0)
+ /* Synchronised and tracking the beacon. */
+ if (cp_beacon_synchronised (ctx)
+ && own_data->tei_track == beacon->vf.stei
+ && beacon->bmis.mac_address.present
+ && own_data->cco_mac_addr_track
+ == beacon->bmis.mac_address.mac_address)
{
- if (its_nid == our_nid)
+ if (ctx->sta_action.assoc.init_count > 0)
+ ctx->sta_action.assoc.init_count--;
+ else
{
- cp_sta_own_data_t *own_data = cp_sta_mgr_get_sta_own_data (ctx);
- /* set proper data for tracked AVLN. on second call send assoc. */
- if (own_data->tei_track != MAC_TEI_UNASSOCIATED)
- cp_fsm_post_new_event (ctx, bare, nd_beacon);
+ cp_sta_get_peer (sta, &ctx->sta_action.assoc.peer);
+ cp_fsm_post_new_event (ctx, bare, nd_beacon);
}
}
- }
- if (its_nid == our_nid)
- {
- cp_sta_get_peer (sta, &ctx->sta_action.assoc.peer);
- /* track beacon as soon as possible, sync is important */
- cp_sta_own_data_t *own_data = cp_sta_mgr_get_sta_own_data (ctx);
- /* set proper data for tracked AVLN. on secon call send assoc */
- if (own_data->tei_track == MAC_TEI_UNASSOCIATED)
+ /* No tracking track it.. */
+ else if (own_data->tei_track == MAC_TEI_UNASSOCIATED)
+ {
+ cp_sta_mgr_set_tracking (ctx, its_snid, its_nid);
cp_beacon_process_tracked_avln (ctx, beacon, net);
+ }
}
}
diff --git a/cesar/cp/eoc/sta/action/test/utest_eoc/src/assoc.c b/cesar/cp/eoc/sta/action/test/utest_eoc/src/assoc.c
index 2b4454a54b..a81a73da4a 100644
--- a/cesar/cp/eoc/sta/action/test/utest_eoc/src/assoc.c
+++ b/cesar/cp/eoc/sta/action/test/utest_eoc/src/assoc.c
@@ -105,7 +105,7 @@ assoc_test_case_basic (test_t t)
test_sta_action_beacon_create (&beacon_master2, nid, snid,
master2_tei, master2_mac);
- ctx.cp.sta_action.assoc.init_count = 2;
+ ctx.cp.sta_action.assoc.init_count = 1;
test_begin (t, "Receive a beacon from the master, synchronisation")
{
/* In state DETECTING_BEACON */