From 93eb48940a1bdca5ecc5ff9bb2a549ff039120d7 Mon Sep 17 00:00:00 2001 From: Thierry Carré Date: Fri, 22 Mar 2013 16:53:40 +0100 Subject: cesar/cp/{msg, av/fsm, sta/action}: add force_role drv to be received, refs #3789 --- cesar/cp/msg/src/msg.c | 2 ++ cesar/cp/msg/src/msg_drv.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) (limited to 'cesar/cp/msg/src') diff --git a/cesar/cp/msg/src/msg.c b/cesar/cp/msg/src/msg.c index c5c136fb7c..aa51703e68 100644 --- a/cesar/cp/msg/src/msg.c +++ b/cesar/cp/msg/src/msg.c @@ -256,6 +256,8 @@ cp_msg_mme_allowed_t cp_msg_mme_allowed[] = CP_MSG_MME_ALLOWED_ENTRY (DRV_STA_SET_CONFIG_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT), CP_MSG_MME_ALLOWED_ENTRY (DRV_MCAST_SET_LIST_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, DRV_MCAST_SET_LIST_REQ), CP_MSG_MME_ALLOWED_ENTRY (DRV_MCAST_SET_LIST_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT), + CP_MSG_MME_ALLOWED_ENTRY (DRV_STA_FORCE_ROLE_REQ, STA_UNASSOC, NEK_ENC_NO, FROM_H1_YES, DRV_STA_FORCE_ROLE_REQ), + CP_MSG_MME_ALLOWED_ENTRY (DRV_STA_FORCE_ROLE_CNF, STA_UNASSOC, NEK_ENC_NO, FROM_H1_NO, NO_EVENT), }; uint cp_msg_mme_allowed_count = COUNT (cp_msg_mme_allowed); diff --git a/cesar/cp/msg/src/msg_drv.c b/cesar/cp/msg/src/msg_drv.c index 5a4051f4de..b0d0a279a3 100644 --- a/cesar/cp/msg/src/msg_drv.c +++ b/cesar/cp/msg/src/msg_drv.c @@ -532,6 +532,23 @@ cp_msg_drv_sta_get_key_cnf_send (cp_t *ctx, cp_mme_peer_t *peer, cp_msg_mme_send (ctx, tx); } +bool +cp_msg_drv_sta_force_role_req_receive ( + cp_t *ctx, cp_mme_rx_t *mme, char *force_role) +{ + dbg_assert (ctx); + dbg_assert (mme); + + if (cp_msg_mme_read_error (ctx, mme)) + { + *force_role = bitstream_read (&mme->bitstream, 8); + + /* TODO: Add range value check. */ + return true; + } + return false; +} + bool cp_msg_drv_sta_status_req_receive (cp_t *ctx, cp_mme_rx_t *mme) { -- cgit v1.2.3 From 6162df52d45db0b1ac71d58cbd6ff44b2485caac Mon Sep 17 00:00:00 2001 From: Thierry Carré Date: Thu, 28 Mar 2013 10:43:05 +0100 Subject: cesar/cp/av/sta: save force_role in sta_own_data struct, refs #3789 --- cesar/cp/av/sta/mgr/src/sta_own_data.c | 2 ++ cesar/cp/msg/src/msg_drv.c | 4 ++-- cesar/cp/sta/action/src/drv.c | 6 +++++- cesar/cp/sta/mgr/sta_own_data.h | 5 +++++ cesar/mac/common/defs.h | 10 ++++++++++ 5 files changed, 24 insertions(+), 3 deletions(-) (limited to 'cesar/cp/msg/src') diff --git a/cesar/cp/av/sta/mgr/src/sta_own_data.c b/cesar/cp/av/sta/mgr/src/sta_own_data.c index 373d696797..ecd63ae118 100644 --- a/cesar/cp/av/sta/mgr/src/sta_own_data.c +++ b/cesar/cp/av/sta/mgr/src/sta_own_data.c @@ -56,6 +56,8 @@ cp_av_sta_own_data_init (cp_t *ctx) dbg_assert (ctx); memset (&ctx->sta_mgr.sta_own_data, 0, sizeof (cp_sta_own_data_private_t)); + ctx->sta_mgr.sta_own_data.public.force_role = + MAC_FORCE_ROLE_AUTO; /* Store the hybrid mode. */ ctx->sta_mgr.sta_own_data.public.hybrid_mode = MAC_COEXISTENCE_HYBRID_DELIMITERS_MODE; diff --git a/cesar/cp/msg/src/msg_drv.c b/cesar/cp/msg/src/msg_drv.c index b0d0a279a3..9427b26a6f 100644 --- a/cesar/cp/msg/src/msg_drv.c +++ b/cesar/cp/msg/src/msg_drv.c @@ -543,8 +543,8 @@ cp_msg_drv_sta_force_role_req_receive ( { *force_role = bitstream_read (&mme->bitstream, 8); - /* TODO: Add range value check. */ - return true; + if (*force_role < MAC_FORCE_ROLE_NB) + return true; } return false; } diff --git a/cesar/cp/sta/action/src/drv.c b/cesar/cp/sta/action/src/drv.c index aacae40880..0e95aa02e0 100644 --- a/cesar/cp/sta/action/src/drv.c +++ b/cesar/cp/sta/action/src/drv.c @@ -286,7 +286,11 @@ cp_sta_action_drv__stopped__drv_sta_force_role_req ( if (cp_msg_drv_sta_force_role_req_receive ( ctx, mme, &force_role)) { - /* TODO: action to code. */ + cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx); + + /* 'force_role' values in MME are the same as 'mac_force_role_t'. */ + own->force_role = force_role; + cp_msg_drv_any_cnf_send ( ctx, &mme->peer, DRV_STA_FORCE_ROLE_CNF, CP_MSG_DRV_RESULT_SUCCESS); diff --git a/cesar/cp/sta/mgr/sta_own_data.h b/cesar/cp/sta/mgr/sta_own_data.h index 072e306fd2..6dcf1d9da7 100644 --- a/cesar/cp/sta/mgr/sta_own_data.h +++ b/cesar/cp/sta/mgr/sta_own_data.h @@ -74,6 +74,11 @@ struct cp_sta_own_data_t * The PCo to discuss with. */ cp_sta_t * pco; + + /** + * Current Force Role + */ + mac_force_role_t force_role; }; typedef struct cp_sta_own_data_t cp_sta_own_data_t; diff --git a/cesar/mac/common/defs.h b/cesar/mac/common/defs.h index 867832e951..7e5600b942 100644 --- a/cesar/mac/common/defs.h +++ b/cesar/mac/common/defs.h @@ -115,6 +115,16 @@ enum mac_coexistence_mode_t }; typedef enum mac_coexistence_mode_t mac_coexistence_mode_t; +/** Force role. */ +enum mac_force_role_t +{ + MAC_FORCE_ROLE_AUTO, + MAC_FORCE_ROLE_CCO, + MAC_FORCE_ROLE_STA, + MAC_FORCE_ROLE_NB, +}; +typedef enum mac_force_role_t mac_force_role_t; + /** Network modes. */ enum mac_network_mode_t { -- cgit v1.2.3