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