Contiki-NG
Loading...
Searching...
No Matches
nullnet.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2017, RISE SICS.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of the Institute nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * This file is part of the Contiki operating system.
30 *
31 */
32
33/**
34 * \file
35 * NullNet, a minimal network layer.
36 * \author
37 * Simon Duquennoy <simon.duquennoy@ri.se>
38 *
39 */
40
41/**
42 * \addtogroup nullnet
43 * @{
44 */
45
46#include "contiki.h"
47#include "net/packetbuf.h"
48#include "net/netstack.h"
49#include "net/nullnet/nullnet.h"
50
51/* Log configuration */
52#include "sys/log.h"
53#define LOG_MODULE "NullNet"
54#define LOG_LEVEL LOG_LEVEL_NULLNET
55
56uint8_t *nullnet_buf;
57uint16_t nullnet_len;
58static nullnet_input_callback current_callback = NULL;
59/*--------------------------------------------------------------------*/
60static void
61init(void)
62{
63 LOG_INFO("init\n");
64 current_callback = NULL;
65}
66/*--------------------------------------------------------------------*/
67static void
68input(void)
69{
70 if(current_callback != NULL) {
71 LOG_INFO("received %u bytes from ", packetbuf_datalen());
72 LOG_INFO_LLADDR(packetbuf_addr(PACKETBUF_ADDR_SENDER));
73 LOG_INFO_("\n");
74 current_callback(packetbuf_dataptr(), packetbuf_datalen(),
75 packetbuf_addr(PACKETBUF_ADDR_SENDER), packetbuf_addr(PACKETBUF_ADDR_RECEIVER));
76 }
77}
78/*--------------------------------------------------------------------*/
79void
81{
82 current_callback = callback;
83}
84/*--------------------------------------------------------------------*/
85static uint8_t
86output(const linkaddr_t *dest)
87{
89 packetbuf_copyfrom(nullnet_buf, nullnet_len);
90 if(dest != NULL) {
91 packetbuf_set_addr(PACKETBUF_ADDR_RECEIVER, dest);
92 } else {
93 packetbuf_set_addr(PACKETBUF_ADDR_RECEIVER, &linkaddr_null);
94 }
95 packetbuf_set_addr(PACKETBUF_ADDR_SENDER, &linkaddr_node_addr);
96 LOG_INFO("sending %u bytes to ", packetbuf_datalen());
97 LOG_INFO_LLADDR(packetbuf_addr(PACKETBUF_ADDR_RECEIVER));
98 LOG_INFO_("\n");
99 NETSTACK_MAC.send(NULL, NULL);
100 return 1;
101}
102/*--------------------------------------------------------------------*/
103const struct network_driver nullnet_driver = {
104 "nullnet",
105 init,
106 input,
107 output
108};
109/*--------------------------------------------------------------------*/
110/** @} */
linkaddr_t linkaddr_node_addr
The link-layer address of the node.
Definition linkaddr.c:48
const linkaddr_t linkaddr_null
The null link-layer address.
void nullnet_set_input_callback(nullnet_input_callback callback)
Set input callback for NullNet.
Definition nullnet.c:80
void(* nullnet_input_callback)(const void *data, uint16_t len, const linkaddr_t *src, const linkaddr_t *dest)
Function prototype for NullNet input callback.
Definition nullnet.h:64
uint8_t * nullnet_buf
Buffer used by the output function.
Definition nullnet.c:56
void * packetbuf_dataptr(void)
Get a pointer to the data in the packetbuf.
Definition packetbuf.c:143
uint16_t packetbuf_datalen(void)
Get the length of the data in the packetbuf.
Definition packetbuf.c:155
int packetbuf_copyfrom(const void *from, uint16_t len)
Copy from external data into the packetbuf.
Definition packetbuf.c:84
void packetbuf_clear(void)
Clear and reset the packetbuf.
Definition packetbuf.c:75
Header file for the logging system.
Include file for the Contiki low-layer network stack (NETSTACK)
NullNet, a minimal network layer.
Header file for the Packet buffer (packetbuf) management.
void(* send)(mac_callback_t sent_callback, void *ptr)
Send a packet from the packetbuf
Definition mac.h:75
The structure of a network driver in Contiki.
Definition netstack.h:115
void(* input)(void)
Callback for getting notified of incoming packet in packetbuf.
Definition netstack.h:122
uint8_t(* output)(const linkaddr_t *localdest)
Output funtion, sends from uipbuf.
Definition netstack.h:125
void(* init)(void)
Initialize the network driver.
Definition netstack.h:119