[mc1322x] [Linux-zigbee-devel] Showing all 802.15.4 frames?

Mariano Alvira mar at devl.org
Sat Mar 13 08:35:39 EST 2010


On Thu, Mar 11, 2010 at 07:10:43PM -0500, Mariano Alvira wrote:
> 
> Is there anyway to set a mode were all the traffic is indicated?


The following patch is a proof-of-concept that passes up all received
data, bad or otherwise.

Would you guys take a patch that sets this mode as a module option? 

-Mar.




---
 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