From f39d2bd4c6ef3ff2e11713bd27c6eff94c3d15f5 Mon Sep 17 00:00:00 2001 From: nifi Date: Tue, 26 May 2009 12:08:29 +0000 Subject: [PATCH] Fixed link panid for broadcasts to be standard compliant. Ignore packets addressed to other non-broadcast panids. --- core/net/mac/sicslowmac.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/core/net/mac/sicslowmac.c b/core/net/mac/sicslowmac.c index 2ee70305e..dbc24779e 100644 --- a/core/net/mac/sicslowmac.c +++ b/core/net/mac/sicslowmac.c @@ -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,9 +184,17 @@ 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)) { - packetbuf_set_addr(PACKETBUF_ADDR_RECEIVER, &frame.dest_addr); + 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);