summaryrefslogtreecommitdiff
path: root/cesar/cl/src
diff options
context:
space:
mode:
authorlaranjeiro2009-07-30 12:55:36 +0000
committerlaranjeiro2009-07-30 12:55:36 +0000
commit7bdcbe96a90a98f121bc092e7ea3772521bdaf75 (patch)
tree1f7011eed8c59d82960770eaa50a14c778ad96b3 /cesar/cl/src
parentfe74f0ce2ab8a5de5d8a06ddff348e98b0905d3b (diff)
*hle, cl, mac/sar: (See #424, #422)
*hle * Drop packets with a length lesser than ETH_PACKET_MIN_SIZE_ALLOWED. * Improved unit tests. * Assert on packet reception if the length is lesser than ETH_PACKET_MIN_SIZE_ALLOWED *cl: * Added correct assert on the length in the send and receive path. *mac/sar: * Assert on TX if buffer's length is lesser than ETH_PACKET_MIN_SIZE_ALLOWED * do not reassembly MF with length lesser than ETH_PACKET_MIN_SIZE_ALLOWED git-svn-id: svn+ssh://pessac/svn/cesar/trunk@5124 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar/cl/src')
-rw-r--r--cesar/cl/src/cl.c109
1 files changed, 61 insertions, 48 deletions
diff --git a/cesar/cl/src/cl.c b/cesar/cl/src/cl.c
index 34ff8acea2..7e32544e43 100644
--- a/cesar/cl/src/cl.c
+++ b/cesar/cl/src/cl.c
@@ -102,8 +102,8 @@ cl_data_send_with_tei (cl_t *ctx, u8 *buffer, uint length, uint tei,
dbg_assert (ctx);
dbg_assert (buffer);
- dbg_assert (length >= ETH_PACKET_MIN_SIZE && length <=
- ETH_PACKET_MAX_SIZE);
+ dbg_assert ((length >= ETH_PACKET_MIN_SIZE_ALLOWED)
+ && (length <= ETH_PACKET_MAX_SIZE));
dbg_assert (tei);
dbg_assert (cl_data);
@@ -215,7 +215,8 @@ void cl_send (cl_t *ctx, u8 *buffer, uint length, uint tag, bool mme,
dbg_assert (ctx);
dbg_assert (buffer);
- dbg_assert (length >= ETH_PACKET_MIN_SIZE && length <= ETH_PACKET_MAX_SIZE);
+ dbg_assert ((length >= ETH_PACKET_MIN_SIZE_ALLOWED)
+ && (length <= ETH_PACKET_MAX_SIZE));
if (!ctx->mac_config->authenticated)
{
@@ -442,14 +443,15 @@ cl_send_unicast (cl_t *ctx, u8 *buffer, uint length, uint tei,
bool added;
dbg_assert (ctx);
dbg_assert (buffer);
- dbg_assert (length);
+ dbg_assert ((length >= ETH_PACKET_MIN_SIZE_ALLOWED)
+ && (length <= ETH_PACKET_MAX_SIZE));
dbg_assert (MAC_TEI_FOREIGN != tei);
- /* Allocate the buffer handler. */
- cl_data = cl_send_init (ctx, buffer, mme);
-
if (mme && ((MAC_TEI_IS_STA (tei)) || (MAC_TEI_BCAST == tei)))
{
+ /* Allocate the buffer handler. */
+ cl_data = cl_send_init (ctx, buffer, mme);
+
mfs = mac_store_mfs_add_tx (ctx->mac_store,
tei == MAC_TEI_BCAST ? true : false,
true /* mme */,
@@ -491,60 +493,68 @@ cl_send_multiunicast (cl_t *ctx, u8 *buffer, uint length, bool mme, uint tag,
sta_t *sta;
dbg_assert (ctx);
dbg_assert (buffer);
- dbg_assert (length);
+ dbg_assert ((length >= ETH_PACKET_MIN_SIZE_ALLOWED)
+ && (length <= ETH_PACKET_MAX_SIZE));
- /* Allocate the buffer handler. */
- cl_data = cl_send_init (ctx, buffer, mme);
-
- for ( i = MAC_TEI_STA_MIN; i < MAC_TEI_STA_NB; i++)
+ if (mme)
{
- sta = mac_store_sta_get (ctx->mac_store, i);
+ /* Allocate the buffer handler. */
+ cl_data = cl_send_init (ctx, buffer, mme);
- if (sta && sta->multi_unicast_receiver)
+ for ( i = MAC_TEI_STA_MIN; i < MAC_TEI_STA_NB; i++)
{
- if (mme)
- {
- mfs_tx_t *mfs;
- bool added;
-
- mfs = mac_store_mfs_add_tx (ctx->mac_store,
- false /* MME */,
- true /* MME */,
- MAC_LID_NONE,
- i,
- &added);
- if (added)
- sar_mfs_add (ctx->sar, (mfs_t *) mfs);
-
- CL_TRACE (MME_SEND_AS_MME, mac_ntb(), length, buffer, mfs->common.tei);
- slab_addref (cl_data);
- sar_msdu_add (ctx->sar, buffer, length,
- lib_rnd32 (&ctx->random_generator),
- mfs, cl_data, arrival_time_ntb);
-
- blk_release (mfs);
- }
- else
+ sta = mac_store_sta_get (ctx->mac_store, i);
+
+ if (sta && sta->multi_unicast_receiver)
{
- slab_addref (cl_data);
- cl_data_send_with_tei (ctx, buffer, length, i, tag, cl_data,
- arrival_time_ntb);
+ if (mme)
+ {
+ mfs_tx_t *mfs;
+ bool added;
+
+ mfs = mac_store_mfs_add_tx (ctx->mac_store,
+ false /* MME */,
+ true /* MME */,
+ MAC_LID_NONE,
+ i,
+ &added);
+ if (added)
+ sar_mfs_add (ctx->sar, (mfs_t *) mfs);
+
+ CL_TRACE (MME_SEND_AS_MME, mac_ntb(), length, buffer,
+ mfs->common.tei);
+ slab_addref (cl_data);
+ sar_msdu_add (ctx->sar, buffer, length,
+ lib_rnd32 (&ctx->random_generator),
+ mfs, cl_data, arrival_time_ntb);
+
+ blk_release (mfs);
+ }
+ else
+ {
+ slab_addref (cl_data);
+ cl_data_send_with_tei (ctx, buffer, length, i, tag,
+ cl_data, arrival_time_ntb);
+ }
+
+ blk_release (sta);
}
-
- blk_release (sta);
}
+ slab_release (cl_data);
}
- slab_release (cl_data);
+ else
+ /* FIXME Implement for DATA too. */
+ dbg_assert_default ();
}
-
void
cl_data_send (cl_t *cl, u8 *buffer, uint length, uint tag,
u32 arrival_time_ntb)
{
dbg_assert (cl);
dbg_assert (buffer);
- dbg_assert (length >= ETH_PACKET_MIN_SIZE && length <= ETH_PACKET_MAX_SIZE);
+ dbg_assert ((length >= ETH_PACKET_MIN_SIZE_ALLOWED)
+ && (length <= ETH_PACKET_MAX_SIZE));
/* Bridging management: buffer coming from the Linux contains a data. */
/* Get source MAC address. */
@@ -579,7 +589,8 @@ cl_mme_send (cl_t *ctx, u8 *buffer, uint length, uint tei)
{
dbg_assert (ctx);
dbg_assert (buffer);
- dbg_assert (length >= ETH_PACKET_MIN_SIZE && length <= ETH_PACKET_MAX_SIZE);
+ dbg_assert ((length >= ETH_PACKET_MIN_SIZE_ALLOWED)
+ && length <= ETH_PACKET_MAX_SIZE);
dbg_assert (ctx->sar);
/* Unicast or broadcast neighbour.
@@ -692,7 +703,8 @@ void cl_mme_recv (cl_t *ctx, u8 *buffer, uint length, mfs_rx_t *mfs, bool
dbg_assert (ctx->mme.mme_recv_cb);
dbg_assert (buffer);
- dbg_assert (length >= ETH_PACKET_MIN_SIZE && length <= ETH_PACKET_MAX_SIZE);
+ dbg_assert ((length >= ETH_PACKET_MIN_SIZE_ALLOWED)
+ && (length <= ETH_PACKET_MAX_SIZE));
(*ctx->mme.mme_recv_cb) (ctx->mme.mme_recv_user_data,
mfs ? mfs->common.tei : MAC_TEI_FOREIGN,
@@ -790,7 +802,8 @@ void cl_data_recv (cl_t *ctx, u8 *buffer, uint length, mfs_rx_t *mfs)
{
dbg_assert (ctx);
dbg_assert (buffer);
- dbg_assert (length >= ETH_PACKET_MIN_SIZE && length <= ETH_PACKET_MAX_SIZE);
+ dbg_assert ((length >= ETH_PACKET_MIN_SIZE_ALLOWED)
+ && (length <= ETH_PACKET_MAX_SIZE));
dbg_assert (mfs);
dbg_assert (ctx->data_rx.cb);