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