Contiki 2.5
uip-fw.h
Go to the documentation of this file.
1 /**
2  * \addtogroup uipfw
3  * @{
4  */
5 
6 /**
7  * \file
8  * uIP packet forwarding header file.
9  * \author Adam Dunkels <adam@sics.se>
10  */
11 
12 /*
13  * Copyright (c) 2004, Swedish Institute of Computer Science.
14  * All rights reserved.
15  *
16  * Redistribution and use in source and binary forms, with or without
17  * modification, are permitted provided that the following conditions
18  * are met:
19  * 1. Redistributions of source code must retain the above copyright
20  * notice, this list of conditions and the following disclaimer.
21  * 2. Redistributions in binary form must reproduce the above copyright
22  * notice, this list of conditions and the following disclaimer in the
23  * documentation and/or other materials provided with the distribution.
24  * 3. Neither the name of the Institute nor the names of its contributors
25  * may be used to endorse or promote products derived from this software
26  * without specific prior written permission.
27  *
28  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
29  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31  * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
32  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38  * SUCH DAMAGE.
39  *
40  * This file is part of the Contiki operating system.
41  *
42  * Author: Adam Dunkels <adam@sics.se>
43  *
44  * $Id: uip-fw.h,v 1.4 2009/03/15 20:29:04 nvt-se Exp $
45  */
46 #ifndef __UIP_FW_H__
47 #define __UIP_FW_H__
48 
49 #include "net/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  u8_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] = ((u16_t *)(addr))[0]; \
97  (netif)->ipaddr[1] = ((u16_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] = ((u16_t *)(addr))[0]; \
109  (netif)->netmask[1] = ((u16_t *)(addr))[1]; } while(0)
110 
111 void uip_fw_init(void);
112 u8_t uip_fw_forward(void);
113 u8_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 /** @} */