iotcontikipromiscuous-mode

Contiki OS: Set Promiscuous Mode and receive all UDP Packets


i'm trying to do the following:

a) Set Contiki in Promiscuous Mode.

b) Then retrieve all UDP and RPL packets send, not only to current node but also between two other nodes within communication range.

I have the following code:

NETSTACK_RADIO.set_value(RADIO_PARAM_RX_MODE, 0);   
simple_udp_register(&unicast_connection, 3001,
                  NULL, 3000, receiver);

where receiver is an appropriate callback function. I am able to collect UDP packets send to the current node, but still unable to receive packets send between other nodes in my communication range.


Solution

  • Setting the RADIO_PARAM_RX_MODE only controls which packets the radio driver filters out. There are multiple layers in an OS network stack, of which the radio driver is only the first one. The next ones are RDC and MAC, which still filter out packets addressed to other nodes, and there is no API to disable that.

    The solution is to either modify the MAC to disable dropping of packets not addressed to the local mode or write your own simple MAC. The latter is what the Sensniff (Contiki packet sniffer) does - see its README and source code. By the way, if you just want to log all received packets, just use Sensniff!