The network stack in Contiki OS is a little different compared to the traditional TCP/IP network stack. In place of MAC Layer, we have three layers namely Framer, Radio Duty-Cycle (RDC) and Medium Access Control (MAC). The different layers can be changed by accessing the global variables NETSTACK_FRAMER, NETSTACK_RDC and NETSTACK_MAC. These variables can be found in core/net/netstack.h
| Layer | Protocols Available |
| MAC | csma.c and nullmac.c |
| RDC | contikimac.c, xmac.c, lpp.c, nullrdc-noframer.c, nullrdc.c and sicslowmac.c |
| Framer | framer-802154.c and framer-nullmac.c |
By default, the following configuration is used in Contiki OS:-
A detailed explanation about the network stack can be found in Contiki Wiki. Let us now dive into the tutorial.
Note: We will be using the project configuration file method as it is a much better approach and doesn’t hamper with the main platform configuration files.
Step 1: Navigate to home/contiki-2.7/examples/ipv6
Step 2: Make a copy of backup file of Makefile and name it Makefile-copy
Step 3: Let’s create a file called my-conf.h. This file should be inserted into your Makefile. Open the file named Makefile using any editor like gedit, nano or vi.
CONTIKI = ../../.. CFLAGS += -DPROJECT_CONF_H=\"my-conf.h\"
Step 4: Now open your file my-conf.h using any editor and start editing based on your required configuration
#ifndef NETSTACK_CONF_MAC #define NETSTACK_CONF_MAC csma_driver #endif /* NETSTACK_CONF_MAC */ #ifndef NETSTACK_CONF_RDC #define NETSTACK_CONF_RDC contikimac_driver #endif /* NETSTACK_CONF_RDC */ #ifndef NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE #define NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE 8 #endif /* NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE */ #ifndef NETSTACK_CONF_RADIO #define NETSTACK_CONF_RADIO cc2420_driver #endif /* NETSTACK_CONF_RADIO */ #ifndef NETSTACK_CONF_FRAMER #define NETSTACK_CONF_FRAMER framer_802154 #endif /* NETSTACK_CONF_FRAMER */
Step 5: In order for your configuration to work you need to navigate to the folder /home/contiki-2.7/platform/sky/contiki-conf.h
Step 6: Open contiki-conf.h and bring the following lines at the start of the file below define CONTIKI_CONF_H which is located at the end of contiki-conf.h
/* include the project config / / PROJECT_CONF_H might be defined in the project Makefile */
ifdef PROJECT_CONF_H
include PROJECT_CONF_H
endif /* PROJECT_CONF_H */
Note 1: Your contiki-conf.h file beginning lines should look like this after making the changes
/* -- C -- */ ifndef CONTIKI_CONF_H define CONTIKI_CONF_H /* include the project config / / PROJECT_CONF_H might be defined in the project Makefile */ ifdef PROJECT_CONF_H include PROJECT_CONF_H endif /* PROJECT_CONF_H */
Note 2: The entire contiki-conf.h file looks like this after modifications
/* -- C -- */ ifndef CONTIKI_CONF_H
define CONTIKI_CONF_H
/* include the project config / / PROJECT_CONF_H might be defined in the project Makefile */ ifdef PROJECT_CONF_H
include PROJECT_CONF_H
endif /* PROJECT_CONF_H */ ifdef PLATFORM_CONF_H
include PLATFORM_CONF_H
else
include "platform-conf.h"
endif /* PLATFORM_CONF_H */ ifndef NETSTACK_CONF_MAC
define NETSTACK_CONF_MAC csma_driver
endif /* NETSTACK_CONF_MAC */ ifndef NETSTACK_CONF_RDC
define NETSTACK_CONF_RDC contikimac_driver
endif /* NETSTACK_CONF_RDC */ ifndef NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE
define NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE 8
endif /* NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE */ ifndef NETSTACK_CONF_RADIO
define NETSTACK_CONF_RADIO cc2420_driver
endif /* NETSTACK_CONF_RADIO */ ifndef NETSTACK_CONF_FRAMER
define NETSTACK_CONF_FRAMER framer_802154
endif /* NETSTACK_CONF_FRAMER */ ifndef CC2420_CONF_AUTOACK
define CC2420_CONF_AUTOACK 1
endif /* CC2420_CONF_AUTOACK */ /* Specify whether the RDC layer should enable
per-packet power profiling. */ define CONTIKIMAC_CONF_COMPOWER 1
define XMAC_CONF_COMPOWER 1
define CXMAC_CONF_COMPOWER 1
if WITH_UIP6
/* Network setup for IPv6 */ define NETSTACK_CONF_NETWORK sicslowpan_driver
/* Specify a minimum packet size for 6lowpan compression to be
enabled. This is needed for ContikiMAC, which needs packets to be
larger than a specified size, if no ContikiMAC header should be
used. */ define SICSLOWPAN_CONF_COMPRESSION_THRESHOLD 63
define CONTIKIMAC_CONF_WITH_CONTIKIMAC_HEADER 0
define CXMAC_CONF_ANNOUNCEMENTS 0
define XMAC_CONF_ANNOUNCEMENTS 0
ifndef QUEUEBUF_CONF_NUM
define QUEUEBUF_CONF_NUM 8
endif
else /* WITH_UIP6 */ /* Network setup for non-IPv6 (rime). */ define NETSTACK_CONF_NETWORK rime_driver
define COLLECT_CONF_ANNOUNCEMENTS 1
define CXMAC_CONF_ANNOUNCEMENTS 0
define XMAC_CONF_ANNOUNCEMENTS 0
define CONTIKIMAC_CONF_ANNOUNCEMENTS 0
ifndef COLLECT_NEIGHBOR_CONF_MAX_COLLECT_NEIGHBORS
define COLLECT_NEIGHBOR_CONF_MAX_COLLECT_NEIGHBORS 32
endif /* COLLECT_NEIGHBOR_CONF_MAX_COLLECT_NEIGHBORS */ ifndef QUEUEBUF_CONF_NUM
define QUEUEBUF_CONF_NUM 16
endif /* QUEUEBUF_CONF_NUM */ ifndef TIMESYNCH_CONF_ENABLED
define TIMESYNCH_CONF_ENABLED 0
endif /* TIMESYNCH_CONF_ENABLED */ if TIMESYNCH_CONF_ENABLED
/* CC2420 SDF timestamps must be on if timesynch is enabled. */ undef CC2420_CONF_SFD_TIMESTAMPS
define CC2420_CONF_SFD_TIMESTAMPS 1
endif /* TIMESYNCH_CONF_ENABLED */ endif /* WITH_UIP6 */ define PACKETBUF_CONF_ATTRS_INLINE 1
ifndef RF_CHANNEL
define RF_CHANNEL 26
endif /* RF_CHANNEL */ define CONTIKIMAC_CONF_BROADCAST_RATE_LIMIT 0
define IEEE802154_CONF_PANID 0xABCD
define SHELL_VARS_CONF_RAM_BEGIN 0x1100
define SHELL_VARS_CONF_RAM_END 0x2000
define PROFILE_CONF_ON 0
ifndef ENERGEST_CONF_ON
define ENERGEST_CONF_ON 1
endif /* ENERGEST_CONF_ON */ define ELFLOADER_CONF_TEXT_IN_ROM 0
ifndef ELFLOADER_CONF_DATAMEMORY_SIZE
define ELFLOADER_CONF_DATAMEMORY_SIZE 0x400
endif /* ELFLOADER_CONF_DATAMEMORY_SIZE */ ifndef ELFLOADER_CONF_TEXTMEMORY_SIZE
define ELFLOADER_CONF_TEXTMEMORY_SIZE 0x800
endif /* ELFLOADER_CONF_TEXTMEMORY_SIZE */ define AODV_COMPLIANCE
define AODV_NUM_RT_ENTRIES 32
define WITH_ASCII 1
define PROCESS_CONF_NUMEVENTS 8
define PROCESS_CONF_STATS 1
/#define PROCESS_CONF_FASTPOLL 4/
ifdef WITH_UIP6
define RIMEADDR_CONF_SIZE 8
define UIP_CONF_LL_802154 1
define UIP_CONF_LLH_LEN 0
define UIP_CONF_ROUTER 1
ifndef UIP_CONF_IPV6_RPL
define UIP_CONF_IPV6_RPL 1
endif /* UIP_CONF_IPV6_RPL */ /* configure number of neighbors and routes */ ifndef NBR_TABLE_CONF_MAX_NEIGHBORS
define NBR_TABLE_CONF_MAX_NEIGHBORS 20
endif /* NBR_TABLE_CONF_MAX_NEIGHBORS */ ifndef UIP_CONF_MAX_ROUTES
define UIP_CONF_MAX_ROUTES 20
endif /* UIP_CONF_MAX_ROUTES */ define UIP_CONF_ND6_SEND_RA 0
define UIP_CONF_ND6_REACHABLE_TIME 600000
define UIP_CONF_ND6_RETRANS_TIMER 10000
define UIP_CONF_IPV6 1
ifndef UIP_CONF_IPV6_QUEUE_PKT
define UIP_CONF_IPV6_QUEUE_PKT 0
endif /* UIP_CONF_IPV6_QUEUE_PKT */ define UIP_CONF_IPV6_CHECKS 1
define UIP_CONF_IPV6_REASSEMBLY 0
define UIP_CONF_NETIF_MAX_ADDRESSES 3
define UIP_CONF_ND6_MAX_PREFIXES 3
define UIP_CONF_ND6_MAX_DEFROUTERS 2
define UIP_CONF_IP_FORWARD 0
ifndef UIP_CONF_BUFFER_SIZE
define UIP_CONF_BUFFER_SIZE 240
endif
define SICSLOWPAN_CONF_COMPRESSION_IPV6 0
define SICSLOWPAN_CONF_COMPRESSION_HC1 1
define SICSLOWPAN_CONF_COMPRESSION_HC01 2
define SICSLOWPAN_CONF_COMPRESSION SICSLOWPAN_COMPRESSION_HC06
ifndef SICSLOWPAN_CONF_FRAG
define SICSLOWPAN_CONF_FRAG 1
define SICSLOWPAN_CONF_MAXAGE 8
endif /* SICSLOWPAN_CONF_FRAG */ define SICSLOWPAN_CONF_CONVENTIONAL_MAC 1
define SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS 2
ifndef SICSLOWPAN_CONF_MAX_MAC_TRANSMISSIONS
define SICSLOWPAN_CONF_MAX_MAC_TRANSMISSIONS 5
endif /* SICSLOWPAN_CONF_MAX_MAC_TRANSMISSIONS */ else /* WITH_UIP6 */ define UIP_CONF_IP_FORWARD 1
define UIP_CONF_BUFFER_SIZE 108
endif /* WITH_UIP6 */ define UIP_CONF_ICMP_DEST_UNREACH 1
define UIP_CONF_DHCP_LIGHT
define UIP_CONF_LLH_LEN 0
ifndef UIP_CONF_RECEIVE_WINDOW
define UIP_CONF_RECEIVE_WINDOW 48
endif
ifndef UIP_CONF_TCP_MSS
define UIP_CONF_TCP_MSS 48
endif
define UIP_CONF_MAX_CONNECTIONS 4
define UIP_CONF_MAX_LISTENPORTS 8
define UIP_CONF_UDP_CONNS 12
define UIP_CONF_FWCACHE_SIZE 30
define UIP_CONF_BROADCAST 1
define UIP_ARCH_IPCHKSUM 1
define UIP_CONF_UDP 1
define UIP_CONF_UDP_CHECKSUMS 1
define UIP_CONF_PINGADDRCONF 0
define UIP_CONF_LOGGING 0
define UIP_CONF_TCP_SPLIT 0
endif /* CONTIKI_CONF_H */ Fire up your Cooja simulator and run a TMote sky device. Confused?? Don’t worry! Follow this Cooja Hello World Tutorial to get started on Cooja simulations immediately. Check device configurations in Mote Output Tool discussed in Cooja Tools.
| Node Id | 1 |
| Network Stack | Rime |
| MAC Protocol | CSMA |
| Radio Duty Cycle (RDC) Protocol | ContkiMAC |
| Sleep Cycle | 8 Hz |
| Channel | 26 |
With over 3 years of versatile experience in IT Specialist, Project Manager, CTO, and Coding Instructor roles, I bring a comprehensive skill set to my current position as a Senior IT Support Analyst at RBC Capital Markets. I am proficient in stakeholder management, envisioning, producing, and delivering well-tested software products, and optimizing business processes. My passion lies in two key areas: technical writing and cloud engineering.
My expertise in technical writing is evidenced by published works on esteemed platforms like Techflow360, FreeCodeCamp, and Elsevier. In the realm of cloud engineering, I am further bolstered by my Google Cloud Associate Cloud Engineer certification.
At She Thinks Code, I actively contribute to offering computer science education to women from Least Developed Countries, harnessing technology to empower individuals. I am eager to explore collaborations and initiatives that capitalize on my expertise in diverse technical environments, including leveraging my cloud engineering skills.
App Engine is a robust platform within Google Cloud that empowers developers to create and…
Django is an open-source web framework that helps developers to create and maintain high-quality, secure…
The problem of converting a string in a zigzag pattern is a classic problem in…
When Neeraj Chopra bagged India's only gold medal in Tokyo 2020 Olympics, the whole nation…
Htmx is short for high power tools for HTML. It simplifies tedious work for developers.…
What is Biomechanics? We know, mechanics is the branch of physics dealing with the motion…