1#ifndef __NET_TUN_PROTO_H
2#define __NET_TUN_PROTO_H
3
4#include <linux/if_ether.h>
5#include <linux/types.h>
6
7/* One byte protocol values as defined by VXLAN-GPE and NSH. These will
8 * hopefully get a shared IANA registry.
9 */
10#define TUN_P_IPV4 0x01
11#define TUN_P_IPV6 0x02
12#define TUN_P_ETHERNET 0x03
13#define TUN_P_NSH 0x04
14#define TUN_P_MPLS_UC 0x05
15
16static inline __be16 tun_p_to_eth_p(u8 proto)
17{
18 switch (proto) {
19 case TUN_P_IPV4:
20 return htons(ETH_P_IP);
21 case TUN_P_IPV6:
22 return htons(ETH_P_IPV6);
23 case TUN_P_ETHERNET:
24 return htons(ETH_P_TEB);
25 case TUN_P_NSH:
26 return htons(ETH_P_NSH);
27 case TUN_P_MPLS_UC:
28 return htons(ETH_P_MPLS_UC);
29 }
30 return 0;
31}
32
33static inline u8 tun_p_from_eth_p(__be16 proto)
34{
35 switch (proto) {
36 case htons(ETH_P_IP):
37 return TUN_P_IPV4;
38 case htons(ETH_P_IPV6):
39 return TUN_P_IPV6;
40 case htons(ETH_P_TEB):
41 return TUN_P_ETHERNET;
42 case htons(ETH_P_NSH):
43 return TUN_P_NSH;
44 case htons(ETH_P_MPLS_UC):
45 return TUN_P_MPLS_UC;
46 }
47 return 0;
48}
49
50#endif
51

source code of linux/include/net/tun_proto.h