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