From 2d50a4064340238081c2b506ec5e9201b46bf640 Mon Sep 17 00:00:00 2001 From: Adam Dunkels Date: Sun, 17 Mar 2013 22:54:12 +0100 Subject: [PATCH] A default configuraion file for Contiki The contiki-default-conf.h file is intended as a safe fallback for a number of configuration options in Contiki, to avoid putting too much in the individual contiki-conf.h files. --- core/contiki-default-conf.h | 238 ++++++++++++++++++++++++++++++++++++ core/contiki.h | 1 + core/net/uip-ds6-route.h | 16 +-- core/net/uip-icmp6.c | 1 + 4 files changed, 249 insertions(+), 7 deletions(-) create mode 100644 core/contiki-default-conf.h diff --git a/core/contiki-default-conf.h b/core/contiki-default-conf.h new file mode 100644 index 000000000..1e5c2f5c9 --- /dev/null +++ b/core/contiki-default-conf.h @@ -0,0 +1,238 @@ +/* + * Copyright (c) 2012, Thingsquare, http://www.thingsquare.com/. + * 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 copyright holder 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 COPYRIGHT HOLDERS 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 + * COPYRIGHT HOLDER 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. + * + */ + +#ifndef CONTIKI_DEFAULT_CONF_H +#define CONTIKI_DEFAULT_CONF_H + +/*---------------------------------------------------------------------------*/ +/* Netstack configuration + * + * The netstack configuration is typically overridden by the platform + * configuration, as defined in contiki-conf.h + */ + +/* NETSTACK_CONF_RADIO specifies the radio driver. The radio driver + typically depends on the radio used on the target hardware. */ +#ifndef NETSTACK_CONF_RADIO +#define NETSTACK_CONF_RADIO nullradio_driver +/* #define NETSTACK_CONF_RADIO cc2420_driver */ +#endif /* NETSTACK_CONF_RADIO */ + +/* NETSTACK_CONF_FRAMER specifies the over-the-air frame format used + by Contiki radio packets. For IEEE 802.15.4 radios, use the + framer_802154 driver. */ +#ifndef NETSTACK_CONF_FRAMER +#define NETSTACK_CONF_FRAMER framer_nullmac +/* #define NETSTACK_CONF_FRAMER framer_802154 */ +#endif /* NETSTACK_CONF_FRAMER */ + +/* NETSTACK_CONF_RDC specifies the Radio Duty Cycling (RDC) layer. The + nullrdc_driver never turns the radio off and is compatible with all + radios, but consumes a lot of power. The contikimac_driver is + highly power-efficent and allows sleepy routers, but is not + compatible with all radios. */ +#ifndef NETSTACK_CONF_RDC +#define NETSTACK_CONF_RDC nullrdc_driver +/* #define NETSTACK_CONF_RDC contikimac_driver */ +#endif /* NETSTACK_CONF_RDC */ + +/* NETSTACK_CONF_MAC specifies the Medium Access Control (MAC) + layer. The nullmac_driver does not provide any MAC + functionality. The csma_driver is the default CSMA MAC layer, but + is not compatible with all radios. */ +#ifndef NETSTACK_CONF_MAC +#define NETSTACK_CONF_MAC nullmac_driver +/* #define NETSTACK_CONF_MAC csma_driver */ +#endif /* NETSTACK_CONF_MAC */ + +/* NETSTACK_CONF_NETWORK specifies the network layer and can be either + sicslowpan_driver, for IPv6 networking, or rime_driver, for the + custom Rime network stack. */ +#ifndef NETSTACK_CONF_NETWORK +#define NETSTACK_CONF_NETWORK rime_driver +/* #define NETSTACK_CONF_NETWORK sicslowpan_driver */ +#endif /* NETSTACK_CONF_NETWORK */ + +/* NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE specifies the channel check + rate of the RDC layer. This defines how often the RDC will wake up + and check for radio channel activity. A higher check rate results + in higher communication performance at the cost of a higher power + consumption. */ +#ifndef NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE +#define NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE 8 +#endif /* NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE */ + +/*---------------------------------------------------------------------------*/ +/* Packet buffer size options. + * + * The packet buffer size options can be tweaked on a per-project + * basis to reduce memory consumption. + */ + +/* QUEUEBUF_CONF_NUM specifies the number of queue buffers. Queue + buffers are used throughout the Contiki netstack but the + configuration option can be tweaked to save memory. Performance can + suffer with a too low number of queue buffers though. */ +#ifndef QUEUEBUF_CONF_NUM +#define QUEUEBUF_CONF_NUM 8 +#endif /* QUEUEBUF_CONF_NUM */ +/*---------------------------------------------------------------------------*/ +/* uIPv6 configuration options. + * + * Many of the uIPv6 configuration options can be overriden by a + * project-specific configuration to save memory. + */ + +/* UIP_CONF_IPV6 specifies whether or not IPv6 should be used. If IPv6 + is not used, IPv4 is used instead. */ +#ifndef UIP_CONF_IPV6 +#define UIP_CONF_IPV6 1 +#endif /* UIP_CONF_IPV6 */ + +/* UIP_CONF_BUFFER_SIZE specifies how much memory should be reserved + for the uIP packet buffer. This sets an upper bound on the largest + IP packet that can be received by the system. */ +#ifndef UIP_CONF_BUFFER_SIZE +#define UIP_CONF_BUFFER_SIZE 128 +#endif /* UIP_CONF_BUFFER_SIZE */ + +/* UIP_CONF_ROUTER specifies if the IPv6 node should be a router or + not. By default, all Contiki nodes are routers. */ +#ifndef UIP_CONF_ROUTER +#define UIP_CONF_ROUTER 1 +#endif /* UIP_CONF_ROUTER */ + +/* UIP_CONF_IPV6_RPL specifies if RPL is to be used for IPv6 + routing. */ +#ifndef UIP_CONF_IPV6_RPL +#define UIP_CONF_IPV6_RPL 1 +#endif /* UIP_CONF_IPV6_RPL */ + +/* UIP_CONF_MAX_ROUTES specifies the maximum number of routes that each + node will be able to handle. */ +#ifndef UIP_CONF_MAX_ROUTES +#define UIP_CONF_MAX_ROUTES 20 +#endif /* UIP_CONF_MAX_ROUTES */ + +/* UIP_CONF_UDP specifies if UDP support should be included or + not. Disabling UDP saves memory but breaks a lot of stuff. */ +#ifndef UIP_CONF_UDP +#define UIP_CONF_UDP 1 +#endif /* UIP_CONF_UDP */ + +/* UIP_CONF_MAX_CONNECTIONS specifies the maximum number of + simultaneous TCP connections. */ +#ifndef UIP_CONF_MAX_CONNECTIONS +#define UIP_CONF_MAX_CONNECTIONS 8 +#endif /* UIP_CONF_MAX_CONNECTIONS */ + +/* UIP_CONF_TCP specifies if TCP support should be included or + not. Disabling TCP saves memory. */ +#ifndef UIP_CONF_TCP +#define UIP_CONF_TCP 1 +#endif /* UIP_CONF_TCP */ + +/* UIP_CONF_MAX_CONNECTIONS specifies the maximum number of + simultaneous TCP connections. */ +#ifndef UIP_CONF_MAX_CONNECTIONS +#define UIP_CONF_MAX_CONNECTIONS 8 +#endif /* UIP_CONF_MAX_CONNECTIONS */ + + +/* UIP_CONF_TCP_SPLIT enables a performance optimization hack, where + each maximum-sized TCP segment is split into two, to avoid the + performance degradation that is caused by delayed ACKs. */ +#ifndef UIP_CONF_TCP_SPLIT +#define UIP_CONF_TCP_SPLIT 0 +#endif /* UIP_CONF_TCP_SPLIT */ + + +/*---------------------------------------------------------------------------*/ +/* 6lowpan configuration options. + * + * These options change the behavior of the 6lowpan header compression + * code (sicslowpan). They typically depend on the type of radio used + * on the target platform, and are therefore platform-specific. + */ + +/* SICSLOWPAN_CONF_MAX_MAC_TRANSMISSIONS specifies how many times the + MAC layer should resend packets if no link-layer ACK was + received. This only makes sense with the csma_driver + NETSTACK_CONF_MAC. */ +#ifndef SICSLOWPAN_CONF_MAX_MAC_TRANSMISSIONS +#define SICSLOWPAN_CONF_MAX_MAC_TRANSMISSIONS 4 +#endif /* SICSLOWPAN_CONF_MAX_MAC_TRANSMISSIONS */ + +/* SICSLOWPAN_CONF_FRAG specifies if 6lowpan fragmentation should be + used or not. Fragmentation is on by default. */ +#ifndef SICSLOWPAN_CONF_FRAG +#define SICSLOWPAN_CONF_FRAG 1 +#endif /* SICSLOWPAN_CONF_FRAG */ + +/* SICSLOWPAN_CONF_MAC_MAX_PAYLOAD specifies the maximum size of + packets before they get fragmented. The default is 127 bytes (the + maximum size of a 802.15.4 frame) - 25 bytes (for the 802.15.4 MAC + layer header). This can be increased for systems with larger packet + sizes. */ +#ifndef SICSLOWPAN_CONF_MAC_MAX_PAYLOAD +#define SICSLOWPAN_CONF_MAC_MAX_PAYLOAD (127 - 25) +#endif /* SICSLOWPAN_CONF_MAC_MAX_PAYLOAD */ + +/* SICSLOWPAN_CONF_COMPRESSION_THRESHOLD sets a lower threshold for + when packets should not be compressed. This is used by ContikiMAC, + which requires packets to be larger than a given minimum size. */ +#ifndef SICSLOWPAN_CONF_COMPRESSION_THRESHOLD +#define SICSLOWPAN_CONF_COMPRESSION_THRESHOLD 0 +/* #define SICSLOWPAN_CONF_COMPRESSION_THRESHOLD 63 */ +#endif /* SICSLOWPAN_CONF_COMPRESSION_THRESHOLD */ + +/* SICSLOWPAN_CONF_COMPRESSION specifies what 6lowpan compression + mechanism to be used. 6lowpan hc06 is the default in Contiki. */ +#ifndef SICSLOWPAN_CONF_COMPRESSION +#define SICSLOWPAN_CONF_COMPRESSION SICSLOWPAN_COMPRESSION_HC06 +#endif /* SICSLOWPAN_CONF_COMPRESSION */ + +/*---------------------------------------------------------------------------*/ +/* ContikiMAC configuration options. + * + * These are typically configured on a per-platform basis. + */ + +/* CONTIKIMAC_CONF_WITH_PHASE_OPTIMIZATION specifies if ContikiMAC + should optimize for the phase of neighbors. The phase optimization + may reduce power consumption but is not compatible with all timer + settings and is therefore off by default. */ +#ifndef CONTIKIMAC_CONF_WITH_PHASE_OPTIMIZATION +#define CONTIKIMAC_CONF_WITH_PHASE_OPTIMIZATION 0 +#endif /* CONTIKIMAC_CONF_WITH_PHASE_OPTIMIZATION */ + + +#endif /* CONTIKI_DEFAULT_CONF_H */ diff --git a/core/contiki.h b/core/contiki.h index bc4279190..e3f72fe92 100644 --- a/core/contiki.h +++ b/core/contiki.h @@ -36,6 +36,7 @@ #include "contiki-version.h" #include "contiki-conf.h" +#include "contiki-default-conf.h" #include "sys/process.h" #include "sys/autostart.h" diff --git a/core/net/uip-ds6-route.h b/core/net/uip-ds6-route.h index 59e13db81..7b6f3b25f 100644 --- a/core/net/uip-ds6-route.h +++ b/core/net/uip-ds6-route.h @@ -59,13 +59,15 @@ void uip_ds6_notification_add(struct uip_ds6_notification *n, /* Routing table */ -#define UIP_DS6_ROUTE_NBS 0 -#ifndef UIP_CONF_DS6_ROUTE_NBU -#define UIP_DS6_ROUTE_NBU 4 -#else -#define UIP_DS6_ROUTE_NBU UIP_CONF_DS6_ROUTE_NBU -#endif -#define UIP_DS6_ROUTE_NB UIP_DS6_ROUTE_NBS + UIP_DS6_ROUTE_NBU +#ifndef UIP_CONF_MAX_ROUTES +#ifdef UIP_CONF_DS6_ROUTE_NBU +#define UIP_DS6_ROUTE_NB UIP_CONF_DS6_ROUTE_NBU +#else /* UIP_CONF_DS6_ROUTE_NBU */ +#define UIP_DS6_ROUTE_NB 4 +#endif /* UIP_CONF_DS6_ROUTE_NBU */ +#else /* UIP_CONF_MAX_ROUTES */ +#define UIP_DS6_ROUTE_NB UIP_CONF_MAX_ROUTES +#endif /* UIP_CONF_MAX_ROUTES */ /** \brief define some additional RPL related route state and * neighbor callback for RPL - if not a DS6_ROUTE_STATE is already set */ diff --git a/core/net/uip-icmp6.c b/core/net/uip-icmp6.c index 59a71013d..6b4038afe 100644 --- a/core/net/uip-icmp6.c +++ b/core/net/uip-icmp6.c @@ -45,6 +45,7 @@ #include #include "net/uip-ds6.h" #include "net/uip-icmp6.h" +#include "contiki-default-conf.h" #define DEBUG 0 #if DEBUG