Fixed link panid for broadcasts to be standard compliant. Ignore packets addressed to other non-broadcast panids.

This commit is contained in:
nifi 2009-05-26 12:08:29 +00:00
parent 88766d8740
commit f39d2bd4c6

View File

@ -28,7 +28,7 @@
*
* This file is part of the Contiki operating system.
*
* $Id: sicslowmac.c,v 1.1 2009/04/06 13:19:03 nifi Exp $
* $Id: sicslowmac.c,v 1.2 2009/05/26 12:08:29 nifi Exp $
*/
@ -131,7 +131,6 @@ send_packet(void)
if(rimeaddr_cmp(packetbuf_addr(PACKETBUF_ADDR_RECEIVER), &rimeaddr_null)) {
/* Broadcast requires short address mode. */
params.fcf.dest_addr_mode = FRAME802154_SHORTADDRMODE;
params.dest_pid = FRAME802154_BROADCASTPANDID;
params.dest_addr.u8[0] = 0xFF;
params.dest_addr.u8[1] = 0xFF;
@ -185,10 +184,18 @@ read_packet(void)
packetbuf_set_datalen(len);
if(frame802154_parse(packetbuf_dataptr(), len, &frame) &&
packetbuf_hdrreduce(len - frame.payload_len)) {
if(frame.fcf.dest_addr_mode &&
!is_broadcast_addr(frame.fcf.dest_addr_mode, frame.dest_addr.u8)) {
if(frame.fcf.dest_addr_mode) {
if(frame.dest_pid != mac_src_pan_id &&
frame.dest_pid != FRAME802154_BROADCASTPANDID) {
/* Not broadcast or for our PAN */
PRINTF("6MAC: for another pan %u\n", frame.dest_pid);
return 0;
}
if(!is_broadcast_addr(frame.fcf.dest_addr_mode, frame.dest_addr.u8)) {
packetbuf_set_addr(PACKETBUF_ADDR_RECEIVER, &frame.dest_addr);
}
}
packetbuf_set_addr(PACKETBUF_ADDR_SENDER, &frame.src_addr);
PRINTF("6MAC-IN: %2X", frame.fcf.frame_type);