Contiki-NG
routing.h
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 * \addtogroup net-layer
34 * @{
35 *
36 * \defgroup routing An API for routing
37 * @{
38*/
39
40/**
41 * \file
42 * Routing driver header file
43 * \author
44 * Simon Duquennoy <simon.duquennoy@ri.se>
45 */
46
47#ifndef ROUTING_H_
48#define ROUTING_H_
49
50#include "contiki.h"
51#include "net/ipv6/uip.h"
54#include "net/ipv6/uip-sr.h"
55#include "net/linkaddr.h"
56
57/**
58 * The structure of a routing protocol driver.
59 */
61 char *name;
62 /** Initialize the routing protocol */
63 void (* init)(void);
64 /**
65 * Set the prefix, for nodes that will operate as root
66 *
67 * \param prefix The prefix. If NULL, uip_ds6_default_prefix() is used instead
68 * \param iid The IID. If NULL, it will be built from uip_ds6_set_addr_iid.
69 */
70 void (* root_set_prefix)(uip_ipaddr_t *prefix, uip_ipaddr_t *iid);
71 /**
72 * Set the node as root and start a network
73 *
74 * \return 0 in case of success, -1 otherwise
75 */
76 int (* root_start)(void);
77 /**
78 * Tells whether the node is a network root or not
79 *
80 * \return 1 if we are root, 0 otherwise
81 */
82 int (* node_is_root)(void);
83 /**
84 * Returns the IPv6 address of the network root, if any
85 *
86 * \param ipaddr A pointer where to copy the IP address of the root
87 * \return 1 if the root address was copied, 0 otherwise
88 */
89 int (* get_root_ipaddr)(uip_ipaddr_t *ipaddr);
90 /**
91 * Returns the global IPv6 address of a source routing node
92 *
93 * \param ipaddr A pointer where to copy the IP address of the node
94 * \param node The source routing node
95 * \return 1 if the global node address was copied, 0 otherwise
96 */
97 int (* get_sr_node_ipaddr)(uip_ipaddr_t *ipaddr, const uip_sr_node_t *node);
98 /**
99 * Leave the network the node is part of
100 *
101 */
102 void (* leave_network)(void);
103 /**
104 * Tells whether the node is currently part of a network
105 *
106 * \return 1 if we have joined a network, 0 otherwise.
107 */
108 int (* node_has_joined)(void);
109 /**
110 * Tells whether the node is currently reachable as part of the network
111 *
112 * \return 1 if we are reachable, 0 otherwise.
113 */
114 int (* node_is_reachable)(void);
115 /**
116 * Triggers a global topology repair
117 *
118 * \param str A textual description of the cause for triggering a repair
119 */
120 void (* global_repair)(const char *str);
121 /**
122 * Triggers a RPL local topology repair
123 *
124 * \param str A textual description of the cause for triggering a repair
125 */
126 void (* local_repair)(const char *str);
127 /**
128 * Removes all extension headers that pertain to the routing protocol.
129 *
130 * \return true in case of success, false otherwise
131 */
132 bool (* ext_header_remove)(void);
133 /**
134 * Adds/updates routing protocol extension headers to current uIP packet.
135 *
136 * \return 1 in case of success, 0 otherwise
137 */
138 int (* ext_header_update)(void);
139 /**
140 * Process and update the routing protocol hob-by-hop
141 * extention headers of the current uIP packet.
142 *
143 * \param ext_buf A pointer to the ext header buffer
144 * \param opt_offset The offset within the extension header where
145 * the option starts
146 * \return 1 in case the packet is valid and to be processed further,
147 * 0 in case the packet must be dropped.
148 */
149 int (* ext_header_hbh_update)(uint8_t *ext_buf, int opt_offset);
150 /**
151 * Process and update SRH in-place,
152 * i.e. internal address swapping as per RFC6554
153 * \return 1 if SRH found, 0 otherwise
154 */
156 /**
157 * Look for next hop from SRH of current uIP packet.
158 *
159 * \param ipaddr A pointer to the address where to store the next hop.
160 * \return 1 if a next hop was found, 0 otherwise
161 */
162 int (* ext_header_srh_get_next_hop)(uip_ipaddr_t *ipaddr);
163 /**
164 * Called by lower layers after every packet transmission
165 *
166 * \param addr The link-layer addrress of the packet destination
167 * \param status The transmission status (see os/net/mac/mac.h)
168 * \param numtx The total number of transmission attempts
169 */
170 void (* link_callback)(const linkaddr_t *addr, int status, int numtx);
171 /**
172 * Called by uIP to notify addition/removal of IPv6 neighbor entries
173 *
174 * \param nbr The neighbor entry
175 */
177 /**
178 * Called by uIP if it has decided to drop a route because
179 *
180 * \param route The route that will be dropped after this function returns
181 */
182 void (* drop_route)(uip_ds6_route_t *route);
183 /**
184 * Tells whether the protocol is in leaf mode
185 *
186 * \retval 1 if the protocol is in leaf mode, 0 if not.
187 */
188 uint8_t (* is_in_leaf_mode)(void);
189};
190
191#endif /* ROUTING_H_ */
192/**
193 * @}
194 * @}
195 */
Header file for the link-layer address representation.
The structure of a routing protocol driver.
Definition: routing.h:60
int(* root_start)(void)
Set the node as root and start a network.
Definition: routing.h:76
int(* ext_header_srh_get_next_hop)(uip_ipaddr_t *ipaddr)
Look for next hop from SRH of current uIP packet.
Definition: routing.h:162
void(* init)(void)
Initialize the routing protocol.
Definition: routing.h:63
int(* get_root_ipaddr)(uip_ipaddr_t *ipaddr)
Returns the IPv6 address of the network root, if any.
Definition: routing.h:89
bool(* ext_header_remove)(void)
Removes all extension headers that pertain to the routing protocol.
Definition: routing.h:132
void(* link_callback)(const linkaddr_t *addr, int status, int numtx)
Called by lower layers after every packet transmission.
Definition: routing.h:170
void(* leave_network)(void)
Leave the network the node is part of.
Definition: routing.h:102
int(* ext_header_hbh_update)(uint8_t *ext_buf, int opt_offset)
Process and update the routing protocol hob-by-hop extention headers of the current uIP packet.
Definition: routing.h:149
void(* root_set_prefix)(uip_ipaddr_t *prefix, uip_ipaddr_t *iid)
Set the prefix, for nodes that will operate as root.
Definition: routing.h:70
void(* neighbor_state_changed)(uip_ds6_nbr_t *nbr)
Called by uIP to notify addition/removal of IPv6 neighbor entries.
Definition: routing.h:176
void(* global_repair)(const char *str)
Triggers a global topology repair.
Definition: routing.h:120
int(* get_sr_node_ipaddr)(uip_ipaddr_t *ipaddr, const uip_sr_node_t *node)
Returns the global IPv6 address of a source routing node.
Definition: routing.h:97
int(* node_has_joined)(void)
Tells whether the node is currently part of a network.
Definition: routing.h:108
void(* local_repair)(const char *str)
Triggers a RPL local topology repair.
Definition: routing.h:126
int(* ext_header_srh_update)(void)
Process and update SRH in-place, i.e.
Definition: routing.h:155
uint8_t(* is_in_leaf_mode)(void)
Tells whether the protocol is in leaf mode.
Definition: routing.h:188
int(* node_is_root)(void)
Tells whether the node is a network root or not.
Definition: routing.h:82
int(* node_is_reachable)(void)
Tells whether the node is currently reachable as part of the network.
Definition: routing.h:114
int(* ext_header_update)(void)
Adds/updates routing protocol extension headers to current uIP packet.
Definition: routing.h:138
void(* drop_route)(uip_ds6_route_t *route)
Called by uIP if it has decided to drop a route because.
Definition: routing.h:182
The default nbr_table entry (when UIP_DS6_NBR_MULTI_IPV6_ADDRS is disabled), that implements nbr cach...
Definition: uip-ds6-nbr.h:105
An entry in the routing table.
A node in a source routing graph, stored at the root and representing all child-parent relationship.
Definition: uip-sr.h:92
IPv6 Neighbor cache (link-layer/IPv6 address mapping)
Header file for routing table manipulation.
static uip_ds6_nbr_t * nbr
Pointer to llao option in uip_buf.
Definition: uip-nd6.c:106
static uip_ipaddr_t ipaddr
Pointer to prefix information option in uip_buf.
Definition: uip-nd6.c:116
static uip_ds6_addr_t * addr
Pointer to a nbr cache entry.
Definition: uip-nd6.c:107
Source routing support.
Header file for the uIP TCP/IP stack.