summaryrefslogtreecommitdiff
path: root/cesar
diff options
context:
space:
mode:
authorlaranjeiro2010-06-04 07:47:00 +0000
committerlaranjeiro2010-06-04 07:47:00 +0000
commitab205eb1c57a7c82f4419e105367043096122661 (patch)
tree92604c4b471b90dccd2f53f2083714f5f82317c7 /cesar
parente4b716cfbbdbe47e3a356a97e47a871964fbac8c (diff)
cesar/cp/beacon: update discover info, closes #1608
Each time the station receives a central beacon (The beacon timer does not expires in this case). git-svn-id: svn+ssh://pessac/svn/cesar/trunk@7171 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar')
-rw-r--r--cesar/cp/beacon/src/beacon.c65
-rw-r--r--cesar/cp/beacon/test/src/bsu_stub.c5
2 files changed, 45 insertions, 25 deletions
diff --git a/cesar/cp/beacon/src/beacon.c b/cesar/cp/beacon/src/beacon.c
index 035187b2a5..1da5d5071d 100644
--- a/cesar/cp/beacon/src/beacon.c
+++ b/cesar/cp/beacon/src/beacon.c
@@ -64,6 +64,38 @@ cp_get_next_beacon_shared_memory (cp_t *ctx)
return next_beacon_shared_memory;
}
+/**
+ * Fill the discover info beacon entry.
+ * \param ctx the module context.
+ * \param beacon the beacon to fill.
+ */
+static void
+cp_beacon_fill_discover_info (cp_t *ctx,
+ bsu_beacon_bmi_discover_info_t *discover)
+{
+ cp_sta_own_data_t *sta = cp_sta_mgr_get_sta_own_data (ctx);
+ cp_beacon_discover_info_t discover_info;
+ discover_info.updated = ctx->beacon.discover_info_last.updated;
+ discover_info.cco_cap = CP_CCO_LEVEL;
+ discover_info.proxy_net_cap = CP_PCO_CAP;
+ discover_info.backup_cco_cap = CP_BACKUP_CCO_CAP;
+ discover_info.cco_status = cp_sta_own_data_get_cco_status (ctx);
+ discover_info.pco_status = cp_sta_own_data_get_pco_status (ctx);
+ discover_info.backup_cco_status = false;
+ discover_info.num_dis_sta = cp_sta_mgr_get_num_discovered_stas (ctx);
+ discover_info.num_dis_net = cp_sta_mgr_get_num_discovered_net (ctx);
+ discover_info.authentication =
+ cp_sta_own_data_get_authenticated_status (ctx);
+ discover_info.status_user_ap_cco = sta->cco_prefered;
+ discover_info.rsvd = 0;
+ discover_info.updated = (*((u32*)(char*)&ctx->beacon.discover_info_last)
+ != *((u32*)(char*)&discover_info));
+ discover->info_data = *((u32*)(char*)&discover_info);
+ *((u32*)(char*)&ctx->beacon.discover_info_last) =
+ *((u32*)(char*)&discover_info);
+ discover->present = true;
+}
+
//static void
//cp_beacon_clk_sync_call_spoc (cp_t *ctx, u32 fe)
//{
@@ -185,30 +217,7 @@ cp_beacon_fill_share_memory (cp_t *ctx)
else
beacon->bmis.discover.present = false;
- cp_beacon_discover_info_t discover_info;
-
- discover_info.updated = ctx->beacon.discover_info_last.updated;
- discover_info.cco_cap = CP_CCO_LEVEL;
- discover_info.proxy_net_cap = CP_PCO_CAP;
- discover_info.backup_cco_cap = CP_BACKUP_CCO_CAP;
- discover_info.cco_status = cp_sta_own_data_get_cco_status (ctx);
- discover_info.pco_status = cp_sta_own_data_get_pco_status (ctx);
- discover_info.backup_cco_status = false;
- discover_info.num_dis_sta = cp_sta_mgr_get_num_discovered_stas (ctx);
- discover_info.num_dis_net = cp_sta_mgr_get_num_discovered_net (ctx);
- discover_info.authentication =
- cp_sta_own_data_get_authenticated_status (ctx);
- discover_info.status_user_ap_cco = sta->cco_prefered;
- discover_info.rsvd = 0;
-
- discover_info.updated = (*((u32*)(char*)&ctx->beacon.discover_info_last) !=
- *((u32*)(char*)&discover_info));
-
- beacon->bmis.discover_info.info_data = *((u32*)(char*)&discover_info);
- *((u32*)(char*)&ctx->beacon.discover_info_last) =
- *((u32*)(char*)&discover_info);
-
- beacon->bmis.discover_info.present = true;
+ cp_beacon_fill_discover_info (ctx, &beacon->bmis.discover_info);
/* If the EKS countdown is not 0. */
if (ctx->beacon.eks.kccd)
@@ -744,7 +753,9 @@ cp_beacon_get_and_process_beacon (cp_t *ctx)
/** Update the schedules. */
cp_beacon_sta_compute_schedules (ctx, &beacon_data);
-
+ bsu_beacon_bmi_discover_info_t discover;
+ cp_beacon_fill_discover_info (ctx, &discover);
+ bsu_update_discover_info (&discover);
/** Program the timer. */
cp_beacon_reconfigure_timer (ctx, false);
}
@@ -804,6 +815,10 @@ cp_beacon_beacon_not_received (cp_t *ctx)
cp_beacon_countdowns (ctx);
cp_fsm_post_new_event (ctx, bare, BEACON_NOT_RECEIVED);
+ /* Update the discover info for the BSU. */
+ bsu_beacon_bmi_discover_info_t discover;
+ cp_beacon_fill_discover_info (ctx, &discover);
+ bsu_update_discover_info (&discover);
// Program the timer.
cp_beacon_reconfigure_timer (ctx, false);
}
diff --git a/cesar/cp/beacon/test/src/bsu_stub.c b/cesar/cp/beacon/test/src/bsu_stub.c
index 94dd631359..e9c4c7c64b 100644
--- a/cesar/cp/beacon/test/src/bsu_stub.c
+++ b/cesar/cp/beacon/test/src/bsu_stub.c
@@ -44,3 +44,8 @@ void
bsu_track_avln (u64 nid, u16 snid, u8 tei, mac_coexistence_mode_t hm)
{
}
+
+void
+bsu_update_discover_info (bsu_beacon_bmi_discover_info_t *discover)
+{
+}