Contiki 3.x
uip-fw.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2004, Swedish Institute of Computer Science.
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  * Author: Adam Dunkels <adam@sics.se>
32  *
33  */
34 
35 /**
36  * \file
37  * uIP packet forwarding header file.
38  * \author Adam Dunkels <adam@sics.se>
39  */
40 
41 /**
42  * \addtogroup uipfw
43  * @{
44  */
45 
46 #ifndef UIP_FW_H_
47 #define UIP_FW_H_
48 
49 #include "net/ip/uip.h"
50 
51 /**
52  * Representation of a uIP network interface.
53  */
54 struct uip_fw_netif {
55  struct uip_fw_netif *next; /**< Pointer to the next interface when
56  linked in a list. */
57  uip_ipaddr_t ipaddr; /**< The IP address of this interface. */
58  uip_ipaddr_t netmask; /**< The netmask of the interface. */
59  uint8_t (* output)(void);
60  /**< A pointer to the function that
61  sends a packet. */
62 };
63 
64 /**
65  * Instantiating macro for a uIP network interface.
66  *
67  * Example:
68  \code
69  struct uip_fw_netif slipnetif =
70  {UIP_FW_NETIF(192,168,76,1, 255,255,255,0, slip_output)};
71  \endcode
72  * \param ip1,ip2,ip3,ip4 The IP address of the network interface.
73  *
74  * \param nm1,nm2,nm3,nm4 The netmask of the network interface.
75  *
76  * \param outputfunc A pointer to the output function of the network interface.
77  *
78  * \hideinitializer
79  */
80 #define UIP_FW_NETIF(ip1,ip2,ip3,ip4, nm1,nm2,nm3,nm4, outputfunc) \
81  NULL, \
82  { {ip1, ip2, ip3, ip4} }, \
83  { {nm1, nm2, nm3, nm4} }, \
84  outputfunc
85 
86 /**
87  * Set the IP address of a network interface.
88  *
89  * \param netif A pointer to the uip_fw_netif structure for the network interface.
90  *
91  * \param addr A pointer to an IP address.
92  *
93  * \hideinitializer
94  */
95 #define uip_fw_setipaddr(netif, addr) \
96  do { (netif)->ipaddr[0] = ((uint16_t *)(addr))[0]; \
97  (netif)->ipaddr[1] = ((uint16_t *)(addr))[1]; } while(0)
98 /**
99  * Set the netmask of a network interface.
100  *
101  * \param netif A pointer to the uip_fw_netif structure for the network interface.
102  *
103  * \param addr A pointer to an IP address representing the netmask.
104  *
105  * \hideinitializer
106  */
107 #define uip_fw_setnetmask(netif, addr) \
108  do { (netif)->netmask[0] = ((uint16_t *)(addr))[0]; \
109  (netif)->netmask[1] = ((uint16_t *)(addr))[1]; } while(0)
110 
111 void uip_fw_init(void);
112 uint8_t uip_fw_forward(void);
113 uint8_t uip_fw_output(void);
114 void uip_fw_register(struct uip_fw_netif *netif);
115 void uip_fw_default(struct uip_fw_netif *netif);
116 void uip_fw_periodic(void);
117 
118 
119 /**
120  * A non-error message that indicates that a packet should be
121  * processed locally.
122  *
123  * \hideinitializer
124  */
125 #define UIP_FW_LOCAL 0
126 
127 /**
128  * A non-error message that indicates that something went OK.
129  *
130  * \hideinitializer
131  */
132 #define UIP_FW_OK 0
133 
134 /**
135  * A non-error message that indicates that a packet was forwarded.
136  *
137  * \hideinitializer
138  */
139 #define UIP_FW_FORWARDED 1
140 
141 /**
142  * A non-error message that indicates that a zero-length packet
143  * transmission was attempted, and that no packet was sent.
144  *
145  * \hideinitializer
146  */
147 #define UIP_FW_ZEROLEN 2
148 
149 /**
150  * An error message that indicates that a packet that was too large
151  * for the outbound network interface was detected.
152  *
153  * \hideinitializer
154  */
155 #define UIP_FW_TOOLARGE 3
156 
157 /**
158  * An error message that indicates that no suitable interface could be
159  * found for an outbound packet.
160  *
161  * \hideinitializer
162  */
163 #define UIP_FW_NOROUTE 4
164 
165 /**
166  * An error message that indicates that a packet that should be
167  * forwarded or output was dropped.
168  *
169  * \hideinitializer
170  */
171 #define UIP_FW_DROPPED 5
172 
173 
174 #endif /* UIP_FW_H_ */
175 
176 /** @} */
Representation of a uIP network interface.
Definition: uip-fw.h:54
struct uip_fw_netif * next
Pointer to the next interface when linked in a list.
Definition: uip-fw.h:55
uint8_t(* output)(void)
A pointer to the function that sends a packet.
Definition: uip-fw.h:59
uip_ipaddr_t ipaddr
The IP address of this interface.
Definition: uip-fw.h:57
Header file for the uIP TCP/IP stack.
void uip_fw_init(void)
Initialize the uIP packet forwarding module.
Definition: uip-fw.c:185
uint8_t uip_fw_forward(void)
Forward an IP packet in the uip_buf buffer.
Definition: uip-fw.c:403
void uip_fw_default(struct uip_fw_netif *netif)
Register a default network interface.
Definition: uip-fw.c:515
void uip_fw_register(struct uip_fw_netif *netif)
Register a network interface with the forwarding module.
Definition: uip-fw.c:498
uint8_t uip_fw_output(void)
Output an IP packet on the correct network interface.
Definition: uip-fw.c:354
uip_ipaddr_t netmask
The netmask of the interface.
Definition: uip-fw.h:58
void uip_fw_periodic(void)
Perform periodic processing.
Definition: uip-fw.c:525