[mc1322x] [PATCH] sniffing proof of concept

Mariano Alvira mar at devl.org
Mon Mar 29 19:52:27 EDT 2010


---
 net/mac802154/dev.c |   42 ++++++++++++++++++++++++------------------
 1 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/net/mac802154/dev.c b/net/mac802154/dev.c
index cdd0f78..f0171e9 100644
--- a/net/mac802154/dev.c
+++ b/net/mac802154/dev.c
@@ -643,21 +643,24 @@ static int ieee802154_subif_frame(struct ieee802154_sub_if_data *sdata,
 		dev_warn(&sdata->dev->dev,
 			"ACK requested, however AACK not supported.\n");
 
-	switch (mac_cb_type(skb)) {
-	case IEEE802154_FC_TYPE_BEACON:
-		return ieee802154_process_beacon(sdata->dev, skb);
-	case IEEE802154_FC_TYPE_ACK:
-		return ieee802154_process_ack(sdata->dev, skb);
-	case IEEE802154_FC_TYPE_MAC_CMD:
-		return ieee802154_process_cmd(sdata->dev, skb);
-	case IEEE802154_FC_TYPE_DATA:
-		return ieee802154_process_data(sdata->dev, skb);
-	default:
-		pr_warning("ieee802154: Bad frame received (type = %d)\n",
-				mac_cb_type(skb));
-		kfree_skb(skb);
-		return NET_RX_DROP;
-	}
+	/* when sniffing, treat everything like data */
+	return ieee802154_process_data(sdata->dev, skb);
+
+/* 	switch (mac_cb_type(skb)) { */
+/* 	case IEEE802154_FC_TYPE_BEACON: */
+/* 		return ieee802154_process_beacon(sdata->dev, skb); */
+/* 	case IEEE802154_FC_TYPE_ACK: */
+/* 		return ieee802154_process_ack(sdata->dev, skb); */
+/* 	case IEEE802154_FC_TYPE_MAC_CMD: */
+/* 		return ieee802154_process_cmd(sdata->dev, skb); */
+/* 	case IEEE802154_FC_TYPE_DATA: */
+/* 		return ieee802154_process_data(sdata->dev, skb); */
+/* 	default: */
+/* 		pr_warning("ieee802154: Bad frame received (type = %d)\n", */
+/* 				mac_cb_type(skb)); */
+/* 		kfree_skb(skb); */
+/* 		return NET_RX_DROP; */
+/* 	} */
 }
 
 static u8 fetch_skb_u8(struct sk_buff *skb)
@@ -824,12 +827,14 @@ void ieee802154_subif_rx(struct ieee802154_dev *hw, struct sk_buff *skb)
 
 		if (skb->len < 2) {
 			pr_debug("%s(): Got invalid frame\n", __func__);
-			goto out;
+			/* don't bail if sniffing */
+			//goto out;
 		}
 		crc = crc_ccitt(0, skb->data, skb->len);
 		if (crc) {
 			pr_debug("%s(): CRC mismatch\n", __func__);
-			goto out;
+			/* don't bail if sniffing */
+			//goto out;
 		}
 		skb_trim(skb, skb->len - 2); /* CRC */
 	}
@@ -837,7 +842,8 @@ void ieee802154_subif_rx(struct ieee802154_dev *hw, struct sk_buff *skb)
 	ret = parse_frame_start(skb); /* 3 bytes pulled after this */
 	if (ret) {
 		pr_debug("%s(): Got invalid frame\n", __func__);
-		goto out;
+		/* don't bail if sniffing */
+		//goto out;
 	}
 
 	pr_debug("%s() frame %d\n", __func__, mac_cb_type(skb));
-- 
1.6.3.1




More information about the mc1322x mailing list