From 5e43a6998b6c52b2e3bdcc20ac5ff5dde4d15ff4 Mon Sep 17 00:00:00 2001 From: nifi Date: Mon, 1 Mar 2010 13:30:21 +0000 Subject: [PATCH] Replaced old framer (framer_get/framer_set) with new NETSTACK style configuration. Added nullrdc-framer that is a nullrdc with framer support. --- core/net/mac/Makefile.mac | 4 +- core/net/mac/contikimac.c | 9 +- core/net/mac/cxmac.c | 13 +-- core/net/mac/framer.h | 8 +- core/net/mac/nullrdc-framer.c | 120 ++++++++++++++++++++ core/net/mac/{framer.c => nullrdc-framer.h} | 35 ++---- core/net/mac/xmac.c | 13 +-- core/net/netstack.h | 12 +- platform/sky/contiki-conf.h | 4 +- platform/sky/contiki-sky-main.c | 7 +- 10 files changed, 166 insertions(+), 59 deletions(-) create mode 100644 core/net/mac/nullrdc-framer.c rename core/net/mac/{framer.c => nullrdc-framer.h} (63%) diff --git a/core/net/mac/Makefile.mac b/core/net/mac/Makefile.mac index 3e89ecb50..07cd0b6c2 100644 --- a/core/net/mac/Makefile.mac +++ b/core/net/mac/Makefile.mac @@ -1,2 +1,2 @@ -CONTIKI_SOURCEFILES += cxmac.c xmac.c nullmac.c lpp.c frame802154.c sicslowmac.c nullrdc.c mac.c -CONTIKI_SOURCEFILES += framer.c framer-nullmac.c framer-802154.c csma.c contikimac.c phase.c +CONTIKI_SOURCEFILES += cxmac.c xmac.c nullmac.c lpp.c frame802154.c sicslowmac.c nullrdc.c nullrdc-framer.c mac.c +CONTIKI_SOURCEFILES += framer-nullmac.c framer-802154.c csma.c contikimac.c phase.c diff --git a/core/net/mac/contikimac.c b/core/net/mac/contikimac.c index 53b34b06b..b3663af33 100644 --- a/core/net/mac/contikimac.c +++ b/core/net/mac/contikimac.c @@ -28,7 +28,7 @@ * * This file is part of the Contiki operating system. * - * $Id: contikimac.c,v 1.7 2010/02/28 20:19:47 adamdunkels Exp $ + * $Id: contikimac.c,v 1.8 2010/03/01 13:30:22 nifi Exp $ */ /** @@ -45,7 +45,6 @@ #include "dev/radio.h" #include "dev/watchdog.h" #include "lib/random.h" -#include "net/mac/framer.h" #include "net/mac/contikimac.h" #include "net/rime.h" #include "sys/compower.h" @@ -498,7 +497,7 @@ send_packet(mac_callback_t mac_callback, void *mac_callback_ptr) } is_reliable = packetbuf_attr(PACKETBUF_ATTR_RELIABLE) || packetbuf_attr(PACKETBUF_ATTR_ERELIABLE); - len = framer_get()->create(); + len = NETSTACK_FRAMER.create(); if(len == 0) { /* Failed to send */ PRINTF("contikimac: send failed, too large header\n"); @@ -723,7 +722,7 @@ input_packet(void) packet_indication_flag = 0; - if(packetbuf_totlen() > 0 && framer_get()->parse()) { + if(packetbuf_totlen() > 0 && NETSTACK_FRAMER.parse()) { if(packetbuf_datalen() > 0 && packetbuf_totlen() > 0 && @@ -783,7 +782,7 @@ send_announcement(void *ptr) packetbuf_set_addr(PACKETBUF_ADDR_RECEIVER, &rimeaddr_null); packetbuf_set_attr(PACKETBUF_ATTR_RADIO_TXPOWER, announcement_radio_txpower); - if(framer_get()->create()) { + if(NETSTACK_FRAMER.create()) { we_are_sending = 1; NETSTACK_RADIO.send(packetbuf_hdrptr(), packetbuf_totlen()); we_are_sending = 0; diff --git a/core/net/mac/cxmac.c b/core/net/mac/cxmac.c index 846f0f78e..6db52dd0d 100644 --- a/core/net/mac/cxmac.c +++ b/core/net/mac/cxmac.c @@ -28,7 +28,7 @@ * * This file is part of the Contiki operating system. * - * $Id: cxmac.c,v 1.11 2010/02/23 20:09:11 nifi Exp $ + * $Id: cxmac.c,v 1.12 2010/03/01 13:30:22 nifi Exp $ */ /** @@ -45,7 +45,6 @@ #include "dev/watchdog.h" #include "net/netstack.h" #include "lib/random.h" -#include "net/mac/framer.h" #include "net/mac/cxmac.h" #include "net/rime.h" #include "net/rime/timesynch.h" @@ -453,7 +452,7 @@ send_packet(void) } is_reliable = packetbuf_attr(PACKETBUF_ATTR_RELIABLE) || packetbuf_attr(PACKETBUF_ATTR_ERELIABLE); - len = framer_get()->create(); + len = NETSTACK_FRAMER.create(); strobe_len = len + sizeof(struct cxmac_hdr); if(len == 0 || strobe_len > sizeof(strobe)) { /* Failed to send */ @@ -565,7 +564,7 @@ send_packet(void) len = NETSTACK_RADIO.read(packetbuf_dataptr(), PACKETBUF_SIZE); if(len > 0) { packetbuf_set_datalen(len); - if(framer_get()->parse()) { + if(NETSTACK_FRAMER.parse()) { hdr = packetbuf_dataptr(); if(hdr->dispatch == DISPATCH && hdr->type == TYPE_STROBE_ACK) { if(rimeaddr_cmp(packetbuf_addr(PACKETBUF_ADDR_RECEIVER), @@ -706,7 +705,7 @@ input_packet(void) { struct cxmac_hdr *hdr; - if(framer_get()->parse()) { + if(NETSTACK_FRAMER.parse()) { hdr = packetbuf_dataptr(); if(hdr->dispatch != DISPATCH) { @@ -761,7 +760,7 @@ input_packet(void) packetbuf_addr(PACKETBUF_ADDR_SENDER)); packetbuf_set_addr(PACKETBUF_ADDR_SENDER, &rimeaddr_node_addr); packetbuf_compact(); - if(framer_get()->create()) { + if(NETSTACK_FRAMER.create()) { /* We turn on the radio in anticipation of the incoming packet. */ someone_is_sending = 1; @@ -825,7 +824,7 @@ send_announcement(void *ptr) packetbuf_set_addr(PACKETBUF_ADDR_SENDER, &rimeaddr_node_addr); packetbuf_set_addr(PACKETBUF_ADDR_RECEIVER, &rimeaddr_null); packetbuf_set_attr(PACKETBUF_ATTR_RADIO_TXPOWER, announcement_radio_txpower); - if(framer_get()->create()) { + if(NETSTACK_FRAMER.create()) { NETSTACK_RADIO.send(packetbuf_hdrptr(), packetbuf_totlen()); } } diff --git a/core/net/mac/framer.h b/core/net/mac/framer.h index e859bc5ff..1624cb312 100644 --- a/core/net/mac/framer.h +++ b/core/net/mac/framer.h @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: framer.h,v 1.1 2009/10/19 18:30:03 adamdunkels Exp $ + * $Id: framer.h,v 1.2 2010/03/01 13:30:23 nifi Exp $ */ /** @@ -49,10 +49,4 @@ struct framer { }; -extern const struct framer *framer_current; - -const struct framer *framer_get(void); - -void framer_set(const struct framer *f); - #endif /* __FRAMER_H__ */ diff --git a/core/net/mac/nullrdc-framer.c b/core/net/mac/nullrdc-framer.c new file mode 100644 index 000000000..a0363cd69 --- /dev/null +++ b/core/net/mac/nullrdc-framer.c @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2010, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * $Id: nullrdc-framer.c,v 1.1 2010/03/01 13:30:23 nifi Exp $ + */ + +/** + * \file + * A null RDC implementation that uses framer for headers. + * \author + * Adam Dunkels + * Niclas Finne + */ + +#include "net/mac/nullrdc-framer.h" +#include "net/rime/packetbuf.h" +#include "net/netstack.h" + +#define DEBUG 0 +#if DEBUG +#include +#define PRINTF(...) printf(__VA_ARGS__) +#else +#define PRINTF(...) +#endif + +/*---------------------------------------------------------------------------*/ +static void +send_packet(mac_callback_t sent, void *ptr) +{ + int ret; + packetbuf_set_addr(PACKETBUF_ADDR_SENDER, &rimeaddr_node_addr); + if(NETSTACK_FRAMER.create() == 0) { + /* Failed to allocate space for headers */ + PRINTF("nullrdc_framer: send failed, too large header\n"); + ret = MAC_TX_ERR_FATAL; + } else if(NETSTACK_RADIO.send(packetbuf_hdrptr(), packetbuf_totlen()) + == RADIO_TX_OK) { + ret = MAC_TX_OK; + } else { + ret = MAC_TX_ERR; + } + mac_call_sent_callback(sent, ptr, ret, 1); +} +/*---------------------------------------------------------------------------*/ +static void +packet_input(void) +{ + if(NETSTACK_FRAMER.parse() == 0) { + PRINTF("nullrdc_framer: failed to parse %u\n", packetbuf_datalen()); + } else { + NETSTACK_MAC.input(); + } +} +/*---------------------------------------------------------------------------*/ +static int +on(void) +{ + return NETSTACK_RADIO.on(); +} +/*---------------------------------------------------------------------------*/ +static int +off(int keep_radio_on) +{ + if(keep_radio_on) { + return NETSTACK_RADIO.on(); + } else { + return NETSTACK_RADIO.off(); + } +} +/*---------------------------------------------------------------------------*/ +static unsigned short +channel_check_interval(void) +{ + return 0; +} +/*---------------------------------------------------------------------------*/ +static void +init(void) +{ + on(); +} +/*---------------------------------------------------------------------------*/ +const struct rdc_driver nullrdc_framer_driver = { + "nullrdc-framer", + init, + send_packet, + packet_input, + on, + off, + channel_check_interval, +}; +/*---------------------------------------------------------------------------*/ diff --git a/core/net/mac/framer.c b/core/net/mac/nullrdc-framer.h similarity index 63% rename from core/net/mac/framer.c rename to core/net/mac/nullrdc-framer.h index b72d7afaf..7f5ad92b8 100644 --- a/core/net/mac/framer.c +++ b/core/net/mac/nullrdc-framer.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Swedish Institute of Computer Science. + * Copyright (c) 2010, Swedish Institute of Computer Science. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,35 +26,24 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: framer.c,v 1.1 2009/10/19 18:30:03 adamdunkels Exp $ + * This file is part of the Contiki operating system. + * + * $Id: nullrdc-framer.h,v 1.1 2010/03/01 13:30:23 nifi Exp $ */ /** * \file - * A MAC framer is responsible for constructing and parsing - * the header in MAC frames. At least the sender and receiver - * are required to be encoded in the MAC frame headers. + * A null RDC implementation that uses framer for headers. * \author + * Adam Dunkels * Niclas Finne - * Joakim Eriksson */ -#include "contiki.h" -#include "net/mac/framer.h" -#include "net/mac/framer-nullmac.h" +#ifndef __NULLRDC_FRAMER_H__ +#define __NULLRDC_FRAMER_H__ -const struct framer *framer_current; +#include "net/mac/rdc.h" -/*---------------------------------------------------------------------------*/ -const struct framer * -framer_get(void) -{ - return framer_current != NULL ? framer_current : &framer_nullmac; -} -/*---------------------------------------------------------------------------*/ -void -framer_set(const struct framer *f) -{ - framer_current = f; -} -/*---------------------------------------------------------------------------*/ +extern const struct rdc_driver nullrdc_framer_driver; + +#endif /* __NULLRDC_FRAMER_H__ */ diff --git a/core/net/mac/xmac.c b/core/net/mac/xmac.c index 08aaf6a7f..22e6d6a77 100644 --- a/core/net/mac/xmac.c +++ b/core/net/mac/xmac.c @@ -28,7 +28,7 @@ * * This file is part of the Contiki operating system. * - * $Id: xmac.c,v 1.54 2010/02/23 20:09:11 nifi Exp $ + * $Id: xmac.c,v 1.55 2010/03/01 13:30:23 nifi Exp $ */ /** @@ -45,7 +45,6 @@ #include "dev/watchdog.h" #include "lib/random.h" #include "net/netstack.h" -#include "net/mac/framer.h" #include "net/mac/xmac.h" #include "net/rime.h" #include "net/rime/timesynch.h" @@ -448,7 +447,7 @@ send_packet(void) } is_reliable = packetbuf_attr(PACKETBUF_ATTR_RELIABLE) || packetbuf_attr(PACKETBUF_ATTR_ERELIABLE); - len = framer_get()->create(); + len = NETSTACK_FRAMER.create(); strobe_len = len + sizeof(struct xmac_hdr); if(len == 0 || strobe_len > sizeof(strobe)) { /* Failed to send */ @@ -560,7 +559,7 @@ send_packet(void) len = NETSTACK_RADIO.read(packetbuf_dataptr(), PACKETBUF_SIZE); if(len > 0) { packetbuf_set_datalen(len); - if(framer_get()->parse()) { + if(NETSTACK_FRAMER.parse()) { hdr = packetbuf_dataptr(); if(hdr->dispatch == DISPATCH && hdr->type == TYPE_STROBE_ACK) { if(rimeaddr_cmp(packetbuf_addr(PACKETBUF_ADDR_RECEIVER), @@ -702,7 +701,7 @@ input_packet(void) { struct xmac_hdr *hdr; - if(framer_get()->parse()) { + if(NETSTACK_FRAMER.parse()) { hdr = packetbuf_dataptr(); if(hdr->dispatch != DISPATCH) { @@ -757,7 +756,7 @@ input_packet(void) packetbuf_addr(PACKETBUF_ADDR_SENDER)); packetbuf_set_addr(PACKETBUF_ADDR_SENDER, &rimeaddr_node_addr); packetbuf_compact(); - if(framer_get()->create()) { + if(NETSTACK_FRAMER.create()) { /* We turn on the radio in anticipation of the incoming packet. */ someone_is_sending = 1; @@ -821,7 +820,7 @@ send_announcement(void *ptr) packetbuf_set_addr(PACKETBUF_ADDR_SENDER, &rimeaddr_node_addr); packetbuf_set_addr(PACKETBUF_ADDR_RECEIVER, &rimeaddr_null); packetbuf_set_attr(PACKETBUF_ATTR_RADIO_TXPOWER, announcement_radio_txpower); - if(framer_get()->create()) { + if(NETSTACK_FRAMER.create()) { NETSTACK_RADIO.send(packetbuf_hdrptr(), packetbuf_totlen()); } } diff --git a/core/net/netstack.h b/core/net/netstack.h index 3f7c511cc..1e67869ab 100644 --- a/core/net/netstack.h +++ b/core/net/netstack.h @@ -28,7 +28,7 @@ * * This file is part of the Contiki operating system. * - * $Id: netstack.h,v 1.4 2010/02/23 20:09:11 nifi Exp $ + * $Id: netstack.h,v 1.5 2010/03/01 13:30:21 nifi Exp $ */ /** @@ -75,8 +75,17 @@ #endif /* NETSTACK_CONF_RADIO */ #endif /* NETSTACK_RADIO */ +#ifndef NETSTACK_FRAMER +#ifdef NETSTACK_CONF_FRAMER +#define NETSTACK_FRAMER NETSTACK_CONF_FRAMER +#else /* NETSTACK_CONF_FRAMER */ +#define NETSTACK_FRAMER framer_nullmac +#endif /* NETSTACK_CONF_FRAMER */ +#endif /* NETSTACK_FRAMER */ + #include "net/mac/mac.h" #include "net/mac/rdc.h" +#include "net/mac/framer.h" #include "dev/radio.h" /** @@ -96,6 +105,7 @@ extern const struct network_driver NETSTACK_NETWORK; extern const struct rdc_driver NETSTACK_RDC; extern const struct mac_driver NETSTACK_MAC; extern const struct radio_driver NETSTACK_RADIO; +extern const struct framer NETSTACK_FRAMER; void netstack_init(void); diff --git a/platform/sky/contiki-conf.h b/platform/sky/contiki-conf.h index b9dcf0216..cc30c5950 100644 --- a/platform/sky/contiki-conf.h +++ b/platform/sky/contiki-conf.h @@ -1,5 +1,5 @@ /* -*- C -*- */ -/* @(#)$Id: contiki-conf.h,v 1.74 2010/02/25 15:51:37 joxe Exp $ */ +/* @(#)$Id: contiki-conf.h,v 1.75 2010/03/01 13:30:21 nifi Exp $ */ #ifndef CONTIKI_CONF_H #define CONTIKI_CONF_H @@ -15,6 +15,7 @@ #define NETSTACK_CONF_MAC csma_driver #define NETSTACK_CONF_RDC contikimac_driver #define NETSTACK_CONF_RADIO cc2420_driver +#define NETSTACK_CONF_FRAMER framer_802154 #define CC2420_CONF_AUTOACK 1 #define MAC_CONF_CHANNEL_CHECK_RATE 8 @@ -30,6 +31,7 @@ #define NETSTACK_CONF_MAC csma_driver #define NETSTACK_CONF_RDC contikimac_driver #define NETSTACK_CONF_RADIO cc2420_driver +#define NETSTACK_CONF_FRAMER framer_802154 #define CC2420_CONF_AUTOACK 1 #define MAC_CONF_CHANNEL_CHECK_RATE 8 diff --git a/platform/sky/contiki-sky-main.c b/platform/sky/contiki-sky-main.c index b17752215..c391f2da2 100644 --- a/platform/sky/contiki-sky-main.c +++ b/platform/sky/contiki-sky-main.c @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)$Id: contiki-sky-main.c,v 1.72 2010/02/23 21:02:30 nifi Exp $ + * @(#)$Id: contiki-sky-main.c,v 1.73 2010/03/01 13:30:21 nifi Exp $ */ #include @@ -50,9 +50,6 @@ #include "lib/random.h" #include "net/netstack.h" #include "net/mac/frame802154.h" -#include "net/mac/framer-802154.h" -#include "net/mac/framer-nullmac.h" -#include "net/mac/framer.h" #if WITH_UIP6 #include "net/sicslowpan.h" @@ -271,8 +268,6 @@ main(int argc, char **argv) ds2411_id[0], ds2411_id[1], ds2411_id[2], ds2411_id[3], ds2411_id[4], ds2411_id[5], ds2411_id[6], ds2411_id[7]);*/ - framer_set(&framer_802154); - #if WITH_UIP6 memcpy(&uip_lladdr.addr, ds2411_id, sizeof(uip_lladdr.addr)); /* Setup nullmac-like MAC for 802.15.4 */