summaryrefslogtreecommitdiff
path: root/cesar/mac
diff options
context:
space:
mode:
authorNélio Laranjeiro2012-07-20 16:46:10 +0200
committerNélio Laranjeiro2012-07-24 15:11:11 +0200
commita270c1d337517068b1afb45b2a69fa6ed8c98d94 (patch)
tree18d9e1bafe77dccadc47d564d366fd1d51a9e2bf /cesar/mac
parent77c896ecac8ebae5a798415829b7d8df65e3ac64 (diff)
cesar/mac/sar: split pb_dropped into two stats, refs #3268
In sar_rx_mpdu_process the pb_dropped is split into two variables, one to count the number of PB's dropped because of: * it is before the SSN min (already received) * it is duplicate (already received) If the PB is dropped because it's SSN is before the SSN min it is maybe because the SSN are not synchronised between the TX and RX MFS.
Diffstat (limited to 'cesar/mac')
-rw-r--r--cesar/mac/sar/inc/context.h8
-rw-r--r--cesar/mac/sar/src/rx.c30
-rw-r--r--cesar/mac/sar/src/sar.c4
3 files changed, 33 insertions, 9 deletions
diff --git a/cesar/mac/sar/inc/context.h b/cesar/mac/sar/inc/context.h
index 14ac890565..5eeb8823c8 100644
--- a/cesar/mac/sar/inc/context.h
+++ b/cesar/mac/sar/inc/context.h
@@ -111,6 +111,14 @@ struct sar_stats_t
u32 mfs_data_mfs_cmd_init_nb;
/** Number of MFS COMMAND INIT for MME MFS. */
u32 mfs_mme_mfs_cmd_init_nb;
+ /** Number of DATA PB duplicated. */
+ u32 pb_data_duplicated;
+ /** Number of MME PB duplicated. */
+ u32 pb_mme_duplicated;
+ /** Number of DATA PB dropped because it is before the SSN min. */
+ u32 pb_data_before_ssn_min;
+ /** Number of MME PB dropped because it is before the SSN min. */
+ u32 pb_mme_before_ssn_min;
};
typedef struct sar_stats_t sar_stats_t;
diff --git a/cesar/mac/sar/src/rx.c b/cesar/mac/sar/src/rx.c
index a8308b9abe..d83fe28fda 100644
--- a/cesar/mac/sar/src/rx.c
+++ b/cesar/mac/sar/src/rx.c
@@ -441,12 +441,15 @@ sar_rx_mpdu_process (sar_t *ctx, sar_mpdu_t * rx)
u32 ber_sum = 0;
/* Statistics variables. */
uint pb_data_nb = 0;
- uint pb_data_dropped = 0;
+ uint pb_data_before_ssn_min = 0;
+ uint pb_data_duplicated = 0;
uint pb_mme_nb = 0;
- uint pb_mme_dropped = 0;
+ uint pb_mme_before_ssn_min = 0;
+ uint pb_mme_duplicated = 0;
/* Pointer to statistics variable (to save time). */
uint *pb_nb = &pb_data_nb;
- uint *pb_dropped = &pb_data_dropped;
+ uint *pb_before_ssn_min = &pb_data_before_ssn_min;
+ uint *pb_duplicated = &pb_data_duplicated;
/* Delay the RX PBs have to pass the mac layer.
* Initialised with the mfs->common.expiration_delay_tck later. */
uint pb_delay_tck = 0;
@@ -513,14 +516,16 @@ sar_rx_mpdu_process (sar_t *ctx, sar_mpdu_t * rx)
if (mme)
{
pb_nb = &pb_mme_nb;
- pb_dropped = &pb_mme_dropped;
+ pb_before_ssn_min = &pb_mme_before_ssn_min;
+ pb_duplicated = &pb_mme_duplicated;
pb_delay_tck =
mfs_current->common.expiration_delay_tck;
}
else
{
pb_nb = &pb_data_nb;
- pb_dropped = &pb_data_dropped;
+ pb_before_ssn_min = &pb_data_before_ssn_min;
+ pb_duplicated = &pb_data_duplicated;
pb_delay_tck =
mfs_current->common.expiration_delay_tck;
}
@@ -535,7 +540,8 @@ sar_rx_mpdu_process (sar_t *ctx, sar_mpdu_t * rx)
(*pb_nb)++;
/* PB is lesser than the SSN min. */
if (less_mod2p16 (rx_head->header.ssn, mfs_current->ssn_min))
- rx_head = sar_rx_drop_and_stat (ctx, rx_head, pb_dropped);
+ rx_head = sar_rx_drop_and_stat (ctx, rx_head,
+ pb_before_ssn_min);
else if (mfs_current->head == NULL)
{
mfs_current->head = rx_head;
@@ -568,7 +574,7 @@ sar_rx_mpdu_process (sar_t *ctx, sar_mpdu_t * rx)
pb_current = pb_current->next;
if (pb_current->header.ssn == rx_head->header.ssn)
rx_head = sar_rx_drop_and_stat (ctx, rx_head,
- pb_dropped);
+ pb_duplicated);
/* Insert the rx_head in the MFS. */
else
{
@@ -596,14 +602,20 @@ sar_rx_mpdu_process (sar_t *ctx, sar_mpdu_t * rx)
ctx->stats.rx_pb_count += rx->rx.pb_nb;
ctx->stats.rx_pb_crc_error_count += pb_crc_error;
ctx->stats.ber_sum += ber_sum;
+ ctx->stats.pb_mme_duplicated += pb_mme_duplicated;
+ ctx->stats.pb_data_duplicated += pb_data_duplicated;
+ ctx->stats.pb_data_before_ssn_min += pb_data_before_ssn_min;
+ ctx->stats.pb_mme_before_ssn_min += pb_mme_before_ssn_min;
#endif
/* Link statistics. Only DATA are incremented. */
if (rx->rx.mfs)
sar_stats_mpdu_process (&rx->rx.params, &rx->rx.mfs->rx,
- pb_data_nb, pb_data_dropped);
+ pb_data_nb,
+ pb_data_before_ssn_min + pb_data_duplicated);
if (rx->rx.mfs_mme)
sar_stats_mpdu_process (&rx->rx.params, &rx->rx.mfs_mme->rx,
- pb_mme_nb, pb_mme_dropped);
+ pb_mme_nb,
+ pb_mme_before_ssn_min + pb_mme_duplicated);
}
/**
diff --git a/cesar/mac/sar/src/sar.c b/cesar/mac/sar/src/sar.c
index 33ae111c41..724f0f9e50 100644
--- a/cesar/mac/sar/src/sar.c
+++ b/cesar/mac/sar/src/sar.c
@@ -76,6 +76,10 @@ sar_stats_init (sar_stats_t *ctx)
SAR_STAT_DEBUG (mfs_rx_data_pb_expired_nb);
SAR_STAT_DEBUG (mfs_data_mfs_cmd_init_nb);
SAR_STAT_DEBUG (mfs_mme_mfs_cmd_init_nb);
+ SAR_STAT_DEBUG (pb_data_duplicated);
+ SAR_STAT_DEBUG (pb_mme_duplicated);
+ SAR_STAT_DEBUG (pb_data_before_ssn_min);
+ SAR_STAT_DEBUG (pb_mme_before_ssn_min);
#endif /* !CONFIG_STATS */
}