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