Loading...
Searching...
No Matches
nettype.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2015 Martine Lenders <mlenders@inf.fu-berlin.de>
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
32
33#include <inttypes.h>
34
35#include "modules.h"
36#include "net/ethertype.h"
37#include "net/protnum.h"
38
39#ifdef __cplusplus
40extern "C" {
41#endif
42
48typedef enum {
60
65#if IS_USED(MODULE_GNRC_NETTYPE_CUSTOM) || defined(DOXYGEN)
67#endif
69
70#if IS_USED(MODULE_GNRC_NETTYPE_SIXLOWPAN) || defined(DOXYGEN)
72#endif
73
78#if IS_USED(MODULE_GNRC_NETTYPE_IPV6) || defined(DOXYGEN)
80#endif
81#if IS_USED(MODULE_GNRC_NETTYPE_IPV6_EXT) || defined(DOXYGEN)
83#endif
84#if IS_USED(MODULE_GNRC_NETTYPE_ICMPV6) || defined(DOXYGEN)
86#endif
87
88#if IS_USED(MODULE_GNRC_NETTYPE_CCN) || defined(DOXYGEN)
92#endif
93
94#if IS_USED(MODULE_GNRC_NETTYPE_NDN) || defined(DOXYGEN)
96#endif
98
103#if IS_USED(MODULE_GNRC_NETTYPE_TCP) || defined(DOXYGEN)
105#endif
106#if IS_USED(MODULE_GNRC_NETTYPE_UDP) || defined(DOXYGEN)
108#endif
110
122
140
145#ifdef TEST_SUITES
147#endif
149
152
162static inline gnrc_nettype_t gnrc_nettype_from_ethertype(uint16_t type)
163{
164 switch (type) {
165#if IS_USED(MODULE_GNRC_NETTYPE_IPV6)
166 case ETHERTYPE_IPV6:
167 return GNRC_NETTYPE_IPV6;
168#endif
169#if IS_USED(MODULE_GNRC_NETTYPE_CCN) || IS_USED(MODULE_GNRC_NETTYPE_NDN)
170 case ETHERTYPE_NDN:
171#if IS_USED(MODULE_GNRC_NETTYPE_CCN)
172 return GNRC_NETTYPE_CCN;
173#elif IS_USED(MODULE_GNRC_NETTYPE_NDN)
174 return GNRC_NETTYPE_NDN;
175#endif
176#endif
177#if IS_USED(MODULE_GNRC_SIXLOENC) && IS_USED(MODULE_GNRC_NETTYPE_SIXLOWPAN)
178 case ETHERTYPE_6LOENC:
180#endif
181#if IS_USED(MODULE_GNRC_NETTYPE_CUSTOM)
182 case ETHERTYPE_CUSTOM:
183 return GNRC_NETTYPE_CUSTOM;
184#endif
185 default:
186 return GNRC_NETTYPE_UNDEF;
187 }
188}
189
199static inline uint16_t gnrc_nettype_to_ethertype(gnrc_nettype_t type)
200{
201 switch (type) {
202#if IS_USED(MODULE_GNRC_NETTYPE_CUSTOM)
204 return ETHERTYPE_CUSTOM;
205#endif
206#if IS_USED(MODULE_GNRC_SIXLOENC) && IS_USED(MODULE_GNRC_NETTYPE_SIXLOWPAN)
208 return ETHERTYPE_6LOENC;
209#endif
210#if IS_USED(MODULE_GNRC_NETTYPE_IPV6)
212 return ETHERTYPE_IPV6;
213#endif
214#if IS_USED(MODULE_GNRC_NETTYPE_CCN)
215 case GNRC_NETTYPE_CCN:
216 return ETHERTYPE_NDN;
217#endif
218#if IS_USED(MODULE_GNRC_NETTYPE_NDN)
219 case GNRC_NETTYPE_NDN:
220 return ETHERTYPE_NDN;
221#endif
222 default:
223 return ETHERTYPE_UNKNOWN;
224 }
225}
226
239{
240 switch (num) {
241#if IS_USED(MODULE_GNRC_NETTYPE_ICMPV6)
242 case PROTNUM_ICMPV6:
243 return GNRC_NETTYPE_ICMPV6;
244#endif
245#if IS_USED(MODULE_GNRC_NETTYPE_IPV6)
246 case PROTNUM_IPV6:
247 return GNRC_NETTYPE_IPV6;
248#endif
249#if IS_USED(MODULE_GNRC_NETTYPE_TCP)
250 case PROTNUM_TCP:
251 return GNRC_NETTYPE_TCP;
252#endif
253#if IS_USED(MODULE_GNRC_NETTYPE_UDP)
254 case PROTNUM_UDP:
255 return GNRC_NETTYPE_UDP;
256#endif
257#if IS_USED(MODULE_GNRC_NETTYPE_IPV6_EXT)
266#endif
267 default:
268 return GNRC_NETTYPE_UNDEF;
269 }
270}
271
283static inline uint8_t gnrc_nettype_to_protnum(gnrc_nettype_t type)
284{
285 switch (type) {
286#if IS_USED(MODULE_GNRC_NETTYPE_IPV6)
288 return PROTNUM_IPV6;
289#endif
290#if IS_USED(MODULE_GNRC_NETTYPE_ICMPV6)
292 return PROTNUM_ICMPV6;
293#endif
294#if IS_USED(MODULE_GNRC_NETTYPE_TCP)
295 case GNRC_NETTYPE_TCP:
296 return PROTNUM_TCP;
297#endif
298#if IS_USED(MODULE_GNRC_NETTYPE_UDP)
299 case GNRC_NETTYPE_UDP:
300 return PROTNUM_UDP;
301#endif
302 default:
303 return PROTNUM_RESERVED;
304 }
305}
306
307#ifdef __cplusplus
308}
309#endif
310
Ether type definitions.
#define ETHERTYPE_CUSTOM
Custom ethertype.
Definition ethertype.h:47
#define ETHERTYPE_6LOENC
6LoWPAN encapsulation
Definition ethertype.h:35
#define ETHERTYPE_IPV6
Internet protocol version 6.
Definition ethertype.h:34
#define ETHERTYPE_UNKNOWN
Reserved (no protocol specified)
Definition ethertype.h:53
#define ETHERTYPE_NDN
NDN Protocol (http://named-data.net/)
Definition ethertype.h:33
gnrc_nettype_t
Definition of protocol types in the network stack.
Definition nettype.h:48
static gnrc_nettype_t gnrc_nettype_from_ethertype(uint16_t type)
Translates an Ether Type number to gnrc_nettype_t.
Definition nettype.h:162
static uint8_t gnrc_nettype_to_protnum(gnrc_nettype_t type)
Translates gnrc_nettype_t to a Protocol Number.
Definition nettype.h:283
static gnrc_nettype_t gnrc_nettype_from_protnum(uint8_t num)
Translates a Protocol Number to gnrc_nettype_t.
Definition nettype.h:238
static uint16_t gnrc_nettype_to_ethertype(gnrc_nettype_t type)
Translates gnrc_nettype_t to an Ether Type number.
Definition nettype.h:199
@ GNRC_NETTYPE_L2_DISCOVERY
Reports the reachability of link-layer neighbors.
Definition nettype.h:129
@ GNRC_NETTYPE_TX_SYNC
TX synchronization data for passing up error data or auxiliary data.
Definition nettype.h:53
@ GNRC_NETTYPE_IPV6_EXT
Protocol is IPv6 extension header.
Definition nettype.h:82
@ GNRC_NETTYPE_CCN_CHUNK
Protocol is CCN, packet contains a content chunk.
Definition nettype.h:90
@ GNRC_NETTYPE_CCN
Protocol is CCN.
Definition nettype.h:89
@ GNRC_NETTYPE_CUSTOM
Custom ethertype.
Definition nettype.h:66
@ GNRC_NETTYPE_TEST
Usable with test vectors.
Definition nettype.h:146
@ GNRC_NETTYPE_NETIF
Protocol is as defined in gnrc_netif_hdr_t.
Definition nettype.h:58
@ GNRC_NETTYPE_IPV6
Protocol is IPv6.
Definition nettype.h:79
@ GNRC_NETTYPE_UDP
Protocol is UDP.
Definition nettype.h:107
@ GNRC_NETTYPE_UNDEF
Protocol is undefined.
Definition nettype.h:59
@ GNRC_NETTYPE_L3_ROUTING
Reports routing-relevant information, e.g., discovered or unreachable nodes, from the IPv6-layer to r...
Definition nettype.h:138
@ GNRC_NETTYPE_ICMPV6
Protocol is ICMPv6.
Definition nettype.h:85
@ GNRC_NETTYPE_SIXLOWPAN
Protocol is 6LoWPAN.
Definition nettype.h:71
@ GNRC_NETTYPE_TCP
Protocol is TCP.
Definition nettype.h:104
@ GNRC_NETTYPE_NDN
Protocol is NDN.
Definition nettype.h:95
@ GNRC_NETTYPE_NUMOF
maximum number of available protocols
Definition nettype.h:150
#define PROTNUM_IPV6_EXT_MOB
IPv6 Mobility Extension Header.
Definition protnum.h:167
#define PROTNUM_IPV6_EXT_HOPOPT
IPv6 Hop-by-Hop Option.
Definition protnum.h:30
#define PROTNUM_IPV6_EXT_FRAG
Fragment Header for IPv6.
Definition protnum.h:75
#define PROTNUM_RESERVED
Reserved.
Definition protnum.h:175
#define PROTNUM_IPV6_EXT_ESP
IPv6 Encap Security Payload Extension Header.
Definition protnum.h:81
#define PROTNUM_ICMPV6
ICMP for IPv6.
Definition protnum.h:92
#define PROTNUM_IPV6_EXT_DST
IPv6 Extension Header: Destination Options.
Definition protnum.h:94
#define PROTNUM_IPV6
IPv6 encapsulation.
Definition protnum.h:72
#define PROTNUM_UDP
User Datagram.
Definition protnum.h:48
#define PROTNUM_IPV6_EXT_AH
IPv6 Authentication Extension Header.
Definition protnum.h:83
#define PROTNUM_TCP
Transmission Control.
Definition protnum.h:36
#define PROTNUM_IPV6_EXT_RH
Routing Header for IPv6.
Definition protnum.h:74
Adds include for missing inttype definitions.
Common macros and compiler attributes/pragmas configuration.
Protocol number definitions.