Loading...
Searching...
No Matches
nettype.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2015 Martine Lenders <mlenders@inf.fu-berlin.de>
3 *
4 * This file is subject to the terms and conditions of the GNU Lesser
5 * General Public License v2.1. See the file LICENSE in the top level
6 * directory for more details.
7 */
8
33#ifndef NET_GNRC_NETTYPE_H
34#define NET_GNRC_NETTYPE_H
35
36#include <inttypes.h>
37
38#include "modules.h"
39#include "net/ethertype.h"
40#include "net/protnum.h"
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
51typedef enum {
68#if IS_USED(MODULE_GNRC_NETTYPE_GOMACH) || defined(DOXYGEN)
75#endif
76#if IS_USED(MODULE_GNRC_NETTYPE_LWMAC) || defined(DOXYGEN)
83#endif
84#if IS_USED(MODULE_GNRC_NETTYPE_CUSTOM) || defined(DOXYGEN)
86#endif
89#if IS_USED(MODULE_GNRC_NETTYPE_SIXLOWPAN) || defined(DOXYGEN)
91#endif
92
93#if IS_USED(MODULE_GNRC_NETTYPE_LORAWAN) || defined(DOXYGEN)
99#define GNRC_NETTYPE_LORAWAN GNRC_NETTYPE_UNDEF
100#endif
101
106#if IS_USED(MODULE_GNRC_NETTYPE_IPV6) || defined(DOXYGEN)
108#endif
109#if IS_USED(MODULE_GNRC_NETTYPE_IPV6_EXT) || defined(DOXYGEN)
111#endif
112#if IS_USED(MODULE_GNRC_NETTYPE_ICMPV6) || defined(DOXYGEN)
114#endif
115
116#if IS_USED(MODULE_GNRC_NETTYPE_CCN) || defined(DOXYGEN)
120#endif
121
122#if IS_USED(MODULE_GNRC_NETTYPE_NDN) || defined(DOXYGEN)
124#endif
131#if IS_USED(MODULE_GNRC_NETTYPE_TCP) || defined(DOXYGEN)
133#endif
134#if IS_USED(MODULE_GNRC_NETTYPE_UDP) || defined(DOXYGEN)
136#endif
143#ifdef TEST_SUITES
145#endif
150
160static inline gnrc_nettype_t gnrc_nettype_from_ethertype(uint16_t type)
161{
162 switch (type) {
163#if IS_USED(MODULE_GNRC_NETTYPE_IPV6)
164 case ETHERTYPE_IPV6:
165 return GNRC_NETTYPE_IPV6;
166#endif
167#if IS_USED(MODULE_GNRC_NETTYPE_CCN) || IS_USED(MODULE_GNRC_NETTYPE_NDN)
168 case ETHERTYPE_NDN:
169#if IS_USED(MODULE_GNRC_NETTYPE_CCN)
170 return GNRC_NETTYPE_CCN;
171#elif IS_USED(MODULE_GNRC_NETTYPE_NDN)
172 return GNRC_NETTYPE_NDN;
173#endif
174#endif
175#if IS_USED(MODULE_GNRC_SIXLOENC) && IS_USED(MODULE_GNRC_NETTYPE_SIXLOWPAN)
176 case ETHERTYPE_6LOENC:
178#endif
179#if IS_USED(MODULE_GNRC_NETTYPE_CUSTOM)
180 case ETHERTYPE_CUSTOM:
181 return GNRC_NETTYPE_CUSTOM;
182#endif
183 default:
184 return GNRC_NETTYPE_UNDEF;
185 }
186}
187
197static inline uint16_t gnrc_nettype_to_ethertype(gnrc_nettype_t type)
198{
199 switch (type) {
200#if IS_USED(MODULE_GNRC_NETTYPE_CUSTOM)
202 return ETHERTYPE_CUSTOM;
203#endif
204#if IS_USED(MODULE_GNRC_SIXLOENC) && IS_USED(MODULE_GNRC_NETTYPE_SIXLOWPAN)
206 return ETHERTYPE_6LOENC;
207#endif
208#if IS_USED(MODULE_GNRC_NETTYPE_IPV6)
210 return ETHERTYPE_IPV6;
211#endif
212#if IS_USED(MODULE_GNRC_NETTYPE_CCN)
213 case GNRC_NETTYPE_CCN:
214 return ETHERTYPE_NDN;
215#endif
216#if IS_USED(MODULE_GNRC_NETTYPE_NDN)
217 case GNRC_NETTYPE_NDN:
218 return ETHERTYPE_NDN;
219#endif
220 default:
221 return ETHERTYPE_UNKNOWN;
222 }
223}
224
237{
238 switch (num) {
239#if IS_USED(MODULE_GNRC_NETTYPE_ICMPV6)
240 case PROTNUM_ICMPV6:
241 return GNRC_NETTYPE_ICMPV6;
242#endif
243#if IS_USED(MODULE_GNRC_NETTYPE_IPV6)
244 case PROTNUM_IPV6:
245 return GNRC_NETTYPE_IPV6;
246#endif
247#if IS_USED(MODULE_GNRC_NETTYPE_TCP)
248 case PROTNUM_TCP:
249 return GNRC_NETTYPE_TCP;
250#endif
251#if IS_USED(MODULE_GNRC_NETTYPE_UDP)
252 case PROTNUM_UDP:
253 return GNRC_NETTYPE_UDP;
254#endif
255#if IS_USED(MODULE_GNRC_NETTYPE_IPV6_EXT)
264#endif
265 default:
266 return GNRC_NETTYPE_UNDEF;
267 }
268}
269
281static inline uint8_t gnrc_nettype_to_protnum(gnrc_nettype_t type)
282{
283 switch (type) {
284#if IS_USED(MODULE_GNRC_NETTYPE_IPV6)
286 return PROTNUM_IPV6;
287#endif
288#if IS_USED(MODULE_GNRC_NETTYPE_ICMPV6)
290 return PROTNUM_ICMPV6;
291#endif
292#if IS_USED(MODULE_GNRC_NETTYPE_TCP)
293 case GNRC_NETTYPE_TCP:
294 return PROTNUM_TCP;
295#endif
296#if IS_USED(MODULE_GNRC_NETTYPE_UDP)
297 case GNRC_NETTYPE_UDP:
298 return PROTNUM_UDP;
299#endif
300 default:
301 return PROTNUM_RESERVED;
302 }
303}
304
305#ifdef __cplusplus
306}
307#endif
308
309#endif /* NET_GNRC_NETTYPE_H */
Ether type definitions.
#define ETHERTYPE_CUSTOM
Custom ethertype.
Definition ethertype.h:51
#define ETHERTYPE_6LOENC
6LoWPAN encapsulation
Definition ethertype.h:39
#define ETHERTYPE_IPV6
Internet protocol version 6.
Definition ethertype.h:38
#define ETHERTYPE_UNKNOWN
Reserved (no protocol specified)
Definition ethertype.h:57
#define ETHERTYPE_NDN
NDN Protocol (http://named-data.net/)
Definition ethertype.h:37
gnrc_nettype_t
Definition of protocol types in the network stack.
Definition nettype.h:51
static gnrc_nettype_t gnrc_nettype_from_ethertype(uint16_t type)
Translates an Ether Type number to gnrc_nettype_t.
Definition nettype.h:160
static uint8_t gnrc_nettype_to_protnum(gnrc_nettype_t type)
Translates gnrc_nettype_t to a Protocol Number.
Definition nettype.h:281
static gnrc_nettype_t gnrc_nettype_from_protnum(uint8_t num)
Translates a Protocol Number to gnrc_nettype_t.
Definition nettype.h:236
static uint16_t gnrc_nettype_to_ethertype(gnrc_nettype_t type)
Translates gnrc_nettype_t to an Ether Type number.
Definition nettype.h:197
@ GNRC_NETTYPE_TX_SYNC
TX synchronization data for passing up error data or auxiliary data.
Definition nettype.h:56
@ GNRC_NETTYPE_IPV6_EXT
Protocol is IPv6 extension header.
Definition nettype.h:110
@ GNRC_NETTYPE_CCN_CHUNK
Protocol is CCN, packet contains a content chunk.
Definition nettype.h:118
@ GNRC_NETTYPE_CCN
Protocol is CCN.
Definition nettype.h:117
@ GNRC_NETTYPE_CUSTOM
Custom ethertype.
Definition nettype.h:85
@ GNRC_NETTYPE_TEST
Usable with test vectors.
Definition nettype.h:144
@ GNRC_NETTYPE_NETIF
Protocol is as defined in gnrc_netif_hdr_t.
Definition nettype.h:61
@ GNRC_NETTYPE_IPV6
Protocol is IPv6.
Definition nettype.h:107
@ GNRC_NETTYPE_LWMAC
Protocol is lwMAC.
Definition nettype.h:82
@ GNRC_NETTYPE_UDP
Protocol is UDP.
Definition nettype.h:135
@ GNRC_NETTYPE_UNDEF
Protocol is undefined.
Definition nettype.h:62
@ GNRC_NETTYPE_ICMPV6
Protocol is ICMPv6.
Definition nettype.h:113
@ GNRC_NETTYPE_GOMACH
Protocol is GoMacH.
Definition nettype.h:74
@ GNRC_NETTYPE_SIXLOWPAN
Protocol is 6LoWPAN.
Definition nettype.h:90
@ GNRC_NETTYPE_TCP
Protocol is TCP.
Definition nettype.h:132
@ GNRC_NETTYPE_NDN
Protocol is NDN.
Definition nettype.h:123
@ GNRC_NETTYPE_NUMOF
maximum number of available protocols
Definition nettype.h:148
#define PROTNUM_IPV6_EXT_MOB
IPv6 Mobility Extension Header.
Definition protnum.h:170
#define PROTNUM_IPV6_EXT_HOPOPT
IPv6 Hop-by-Hop Option.
Definition protnum.h:33
#define PROTNUM_IPV6_EXT_FRAG
Fragment Header for IPv6.
Definition protnum.h:78
#define PROTNUM_RESERVED
Reserved.
Definition protnum.h:178
#define PROTNUM_IPV6_EXT_ESP
IPv6 Encap Security Payload Extension Header.
Definition protnum.h:84
#define PROTNUM_ICMPV6
ICMP for IPv6.
Definition protnum.h:95
#define PROTNUM_IPV6_EXT_DST
IPv6 Extension Header: Destination Options.
Definition protnum.h:97
#define PROTNUM_IPV6
IPv6 encapsulation.
Definition protnum.h:75
#define PROTNUM_UDP
User Datagram.
Definition protnum.h:51
#define PROTNUM_IPV6_EXT_AH
IPv6 Authentication Extension Header.
Definition protnum.h:86
#define PROTNUM_TCP
Transmission Control.
Definition protnum.h:39
#define PROTNUM_IPV6_EXT_RH
Routing Header for IPv6.
Definition protnum.h:77
Adds include for missing inttype definitions.
Common macros and compiler attributes/pragmas configuration.
Protocol number definitions.