summaryrefslogtreecommitdiff
path: root/cesar/cp/msg/src
diff options
context:
space:
mode:
Diffstat (limited to 'cesar/cp/msg/src')
-rw-r--r--cesar/cp/msg/src/msg.c21
-rw-r--r--cesar/cp/msg/src/msg_cc.c7
-rw-r--r--cesar/cp/msg/src/msg_cm.c2
3 files changed, 23 insertions, 7 deletions
diff --git a/cesar/cp/msg/src/msg.c b/cesar/cp/msg/src/msg.c
index 6a42ce4c81..40c1619686 100644
--- a/cesar/cp/msg/src/msg.c
+++ b/cesar/cp/msg/src/msg.c
@@ -282,6 +282,20 @@ enum cp_msg_allowed_mme_t
};
/**
+ * Increase the FMSN value for the next fragmented MME transaction.
+ * \param ctx the module context.
+ *
+ * \warn fmsn with value 0 is forbidden.
+ */
+PRIVATE void
+cp_msg_mme_fmsn_increase (cp_msg_t *ctx)
+{
+ ctx->fmsn = (ctx->fmsn + 1) % 8;
+ if (ctx->fmsn == 0)
+ ctx->fmsn = 1;
+}
+
+/**
* Compute the current length of the MME fragmented or not.
* \param msg the MME to send.
* \return the length.
@@ -363,6 +377,7 @@ cp_msg_init (cp_t *ctx)
slab_cache_init (&ctx->msg.mme_rx_slab_cache, "MME RX",
sizeof (cp_mme_rx_t),
(slab_object_destructor_t) cp_msg_mme_rx_destructor);
+ ctx->msg.fmsn = 1;
}
/**
@@ -835,7 +850,7 @@ cp_msg_mme_write_frag_header (cp_t *ctx, cp_mme_tx_t *msg, bitstream_t *bs,
cp_mme_tx_t *
cp_msg_mme_init_frag (cp_t *ctx, cp_mme_peer_t *peer, cp_mmtype_t mmtype,
- uint fmi_nbFrag, uint fmi_nb, uint fmi_fmsn)
+ uint fmi_nbFrag, uint fmi_nb)
{
cp_mme_tx_t *msg;
@@ -855,9 +870,9 @@ cp_msg_mme_init_frag (cp_t *ctx, cp_mme_peer_t *peer, cp_mmtype_t mmtype,
msg->fmi_nbfrag = fmi_nbFrag;
msg->fmi_nb = fmi_nb;
- msg->fmi_fmsn = fmi_fmsn;
+ msg->fmi_fmsn = ctx->msg.fmsn;
msg->mmtype = mmtype;
-
+ cp_msg_mme_fmsn_increase (&ctx->msg);
// Initialise the bitstream context and fill the MME header.
bitstream_write_init (&msg->bitstream, msg->p_mme, ETH_PACKET_MAX_SIZE);
cp_msg_mme_write_frag_header (ctx, msg, &msg->bitstream, mmtype);
diff --git a/cesar/cp/msg/src/msg_cc.c b/cesar/cp/msg/src/msg_cc.c
index 72c5697102..5de8174da0 100644
--- a/cesar/cp/msg/src/msg_cc.c
+++ b/cesar/cp/msg/src/msg_cc.c
@@ -525,7 +525,7 @@ cp_msg_cc_set_tei_map_ind_send_begin (
if (sta_nb * 8 > (peer->vlan_tag ? HPAV_MME_PAYLOAD_MAX_SIZE_WITH_VLAN :
HPAV_MME_PAYLOAD_MAX_SIZE) - 2)
{
- msg = cp_msg_mme_init_frag (ctx, peer, CC_SET_TEI_MAP_IND, 1, 0, 0);
+ msg = cp_msg_mme_init_frag (ctx, peer, CC_SET_TEI_MAP_IND, 1, 0);
bitstream_init_buffer_cb (
&msg->bitstream,
@@ -939,7 +939,8 @@ cp_msg_cc_discover_list_cnf_send_begin (cp_t *ctx, cp_mme_peer_t *peer,
uint nbFrag;
nbFrag = mme_length / ETH_PACKET_MAX_SIZE;
- mme = cp_msg_mme_init_frag (ctx, peer, CC_DISCOVER_LIST_CNF, nbFrag, 0, 0);
+ mme = cp_msg_mme_init_frag (
+ ctx, peer, CC_DISCOVER_LIST_CNF, nbFrag, 0);
bitstream_init_buffer_cb (
&mme->bitstream,
@@ -1296,7 +1297,7 @@ cp_msg_cc_handover_info_ind_send_begin (cp_t *ctx, cp_mme_peer_t *peer,
mme = cp_msg_mme_init (ctx, peer, CC_HANDOVER_INFO_IND);
else
{
- mme = cp_msg_mme_init_frag (ctx, peer, CC_HANDOVER_INFO_IND, 1, 0, 0);
+ mme = cp_msg_mme_init_frag (ctx, peer, CC_HANDOVER_INFO_IND, 1, 0);
bitstream_init_buffer_cb (
&mme->bitstream,
(bitstream_buffer_cb_t) cp_msg_mme_tx_change_buffer, mme);
diff --git a/cesar/cp/msg/src/msg_cm.c b/cesar/cp/msg/src/msg_cm.c
index ee17754ede..19bd9e47e0 100644
--- a/cesar/cp/msg/src/msg_cm.c
+++ b/cesar/cp/msg/src/msg_cm.c
@@ -1719,7 +1719,7 @@ cp_msg_cm_nw_stats_cnf_send_begin (cp_t *ctx, cp_mme_peer_t *peer_info,
if (mme_payload_length + mme_header_length > ETH_PACKET_MAX_SIZE)
{
- mme = cp_msg_mme_init_frag (ctx, peer_info, CM_NW_STATS_CNF, 1, 0, 0);
+ mme = cp_msg_mme_init_frag (ctx, peer_info, CM_NW_STATS_CNF, 1, 0);
bitstream_init_buffer_cb (
&mme->bitstream,