0001
0002 #ifndef _UAPI_IF_TUNNEL_H_
0003 #define _UAPI_IF_TUNNEL_H_
0004
0005 #include <linux/types.h>
0006 #include <linux/if.h>
0007 #include <linux/ip.h>
0008 #include <linux/in6.h>
0009 #include <asm/byteorder.h>
0010
0011
0012 #define SIOCGETTUNNEL (SIOCDEVPRIVATE + 0)
0013 #define SIOCADDTUNNEL (SIOCDEVPRIVATE + 1)
0014 #define SIOCDELTUNNEL (SIOCDEVPRIVATE + 2)
0015 #define SIOCCHGTUNNEL (SIOCDEVPRIVATE + 3)
0016 #define SIOCGETPRL (SIOCDEVPRIVATE + 4)
0017 #define SIOCADDPRL (SIOCDEVPRIVATE + 5)
0018 #define SIOCDELPRL (SIOCDEVPRIVATE + 6)
0019 #define SIOCCHGPRL (SIOCDEVPRIVATE + 7)
0020 #define SIOCGET6RD (SIOCDEVPRIVATE + 8)
0021 #define SIOCADD6RD (SIOCDEVPRIVATE + 9)
0022 #define SIOCDEL6RD (SIOCDEVPRIVATE + 10)
0023 #define SIOCCHG6RD (SIOCDEVPRIVATE + 11)
0024
0025 #define GRE_CSUM __cpu_to_be16(0x8000)
0026 #define GRE_ROUTING __cpu_to_be16(0x4000)
0027 #define GRE_KEY __cpu_to_be16(0x2000)
0028 #define GRE_SEQ __cpu_to_be16(0x1000)
0029 #define GRE_STRICT __cpu_to_be16(0x0800)
0030 #define GRE_REC __cpu_to_be16(0x0700)
0031 #define GRE_ACK __cpu_to_be16(0x0080)
0032 #define GRE_FLAGS __cpu_to_be16(0x0078)
0033 #define GRE_VERSION __cpu_to_be16(0x0007)
0034
0035 #define GRE_IS_CSUM(f) ((f) & GRE_CSUM)
0036 #define GRE_IS_ROUTING(f) ((f) & GRE_ROUTING)
0037 #define GRE_IS_KEY(f) ((f) & GRE_KEY)
0038 #define GRE_IS_SEQ(f) ((f) & GRE_SEQ)
0039 #define GRE_IS_STRICT(f) ((f) & GRE_STRICT)
0040 #define GRE_IS_REC(f) ((f) & GRE_REC)
0041 #define GRE_IS_ACK(f) ((f) & GRE_ACK)
0042
0043 #define GRE_VERSION_0 __cpu_to_be16(0x0000)
0044 #define GRE_VERSION_1 __cpu_to_be16(0x0001)
0045 #define GRE_PROTO_PPP __cpu_to_be16(0x880b)
0046 #define GRE_PPTP_KEY_MASK __cpu_to_be32(0xffff)
0047
0048 struct ip_tunnel_parm {
0049 char name[IFNAMSIZ];
0050 int link;
0051 __be16 i_flags;
0052 __be16 o_flags;
0053 __be32 i_key;
0054 __be32 o_key;
0055 struct iphdr iph;
0056 };
0057
0058 enum {
0059 IFLA_IPTUN_UNSPEC,
0060 IFLA_IPTUN_LINK,
0061 IFLA_IPTUN_LOCAL,
0062 IFLA_IPTUN_REMOTE,
0063 IFLA_IPTUN_TTL,
0064 IFLA_IPTUN_TOS,
0065 IFLA_IPTUN_ENCAP_LIMIT,
0066 IFLA_IPTUN_FLOWINFO,
0067 IFLA_IPTUN_FLAGS,
0068 IFLA_IPTUN_PROTO,
0069 IFLA_IPTUN_PMTUDISC,
0070 IFLA_IPTUN_6RD_PREFIX,
0071 IFLA_IPTUN_6RD_RELAY_PREFIX,
0072 IFLA_IPTUN_6RD_PREFIXLEN,
0073 IFLA_IPTUN_6RD_RELAY_PREFIXLEN,
0074 IFLA_IPTUN_ENCAP_TYPE,
0075 IFLA_IPTUN_ENCAP_FLAGS,
0076 IFLA_IPTUN_ENCAP_SPORT,
0077 IFLA_IPTUN_ENCAP_DPORT,
0078 IFLA_IPTUN_COLLECT_METADATA,
0079 IFLA_IPTUN_FWMARK,
0080 __IFLA_IPTUN_MAX,
0081 };
0082 #define IFLA_IPTUN_MAX (__IFLA_IPTUN_MAX - 1)
0083
0084 enum tunnel_encap_types {
0085 TUNNEL_ENCAP_NONE,
0086 TUNNEL_ENCAP_FOU,
0087 TUNNEL_ENCAP_GUE,
0088 TUNNEL_ENCAP_MPLS,
0089 };
0090
0091 #define TUNNEL_ENCAP_FLAG_CSUM (1<<0)
0092 #define TUNNEL_ENCAP_FLAG_CSUM6 (1<<1)
0093 #define TUNNEL_ENCAP_FLAG_REMCSUM (1<<2)
0094
0095
0096 #define SIT_ISATAP 0x0001
0097
0098 struct ip_tunnel_prl {
0099 __be32 addr;
0100 __u16 flags;
0101 __u16 __reserved;
0102 __u32 datalen;
0103 __u32 __reserved2;
0104
0105 };
0106
0107
0108 #define PRL_DEFAULT 0x0001
0109
0110 struct ip_tunnel_6rd {
0111 struct in6_addr prefix;
0112 __be32 relay_prefix;
0113 __u16 prefixlen;
0114 __u16 relay_prefixlen;
0115 };
0116
0117 enum {
0118 IFLA_GRE_UNSPEC,
0119 IFLA_GRE_LINK,
0120 IFLA_GRE_IFLAGS,
0121 IFLA_GRE_OFLAGS,
0122 IFLA_GRE_IKEY,
0123 IFLA_GRE_OKEY,
0124 IFLA_GRE_LOCAL,
0125 IFLA_GRE_REMOTE,
0126 IFLA_GRE_TTL,
0127 IFLA_GRE_TOS,
0128 IFLA_GRE_PMTUDISC,
0129 IFLA_GRE_ENCAP_LIMIT,
0130 IFLA_GRE_FLOWINFO,
0131 IFLA_GRE_FLAGS,
0132 IFLA_GRE_ENCAP_TYPE,
0133 IFLA_GRE_ENCAP_FLAGS,
0134 IFLA_GRE_ENCAP_SPORT,
0135 IFLA_GRE_ENCAP_DPORT,
0136 IFLA_GRE_COLLECT_METADATA,
0137 IFLA_GRE_IGNORE_DF,
0138 IFLA_GRE_FWMARK,
0139 IFLA_GRE_ERSPAN_INDEX,
0140 IFLA_GRE_ERSPAN_VER,
0141 IFLA_GRE_ERSPAN_DIR,
0142 IFLA_GRE_ERSPAN_HWID,
0143 __IFLA_GRE_MAX,
0144 };
0145
0146 #define IFLA_GRE_MAX (__IFLA_GRE_MAX - 1)
0147
0148
0149 #define VTI_ISVTI ((__force __be16)0x0001)
0150
0151 enum {
0152 IFLA_VTI_UNSPEC,
0153 IFLA_VTI_LINK,
0154 IFLA_VTI_IKEY,
0155 IFLA_VTI_OKEY,
0156 IFLA_VTI_LOCAL,
0157 IFLA_VTI_REMOTE,
0158 IFLA_VTI_FWMARK,
0159 __IFLA_VTI_MAX,
0160 };
0161
0162 #define IFLA_VTI_MAX (__IFLA_VTI_MAX - 1)
0163
0164 #define TUNNEL_CSUM __cpu_to_be16(0x01)
0165 #define TUNNEL_ROUTING __cpu_to_be16(0x02)
0166 #define TUNNEL_KEY __cpu_to_be16(0x04)
0167 #define TUNNEL_SEQ __cpu_to_be16(0x08)
0168 #define TUNNEL_STRICT __cpu_to_be16(0x10)
0169 #define TUNNEL_REC __cpu_to_be16(0x20)
0170 #define TUNNEL_VERSION __cpu_to_be16(0x40)
0171 #define TUNNEL_NO_KEY __cpu_to_be16(0x80)
0172 #define TUNNEL_DONT_FRAGMENT __cpu_to_be16(0x0100)
0173 #define TUNNEL_OAM __cpu_to_be16(0x0200)
0174 #define TUNNEL_CRIT_OPT __cpu_to_be16(0x0400)
0175 #define TUNNEL_GENEVE_OPT __cpu_to_be16(0x0800)
0176 #define TUNNEL_VXLAN_OPT __cpu_to_be16(0x1000)
0177 #define TUNNEL_NOCACHE __cpu_to_be16(0x2000)
0178 #define TUNNEL_ERSPAN_OPT __cpu_to_be16(0x4000)
0179 #define TUNNEL_GTP_OPT __cpu_to_be16(0x8000)
0180
0181 #define TUNNEL_OPTIONS_PRESENT \
0182 (TUNNEL_GENEVE_OPT | TUNNEL_VXLAN_OPT | TUNNEL_ERSPAN_OPT | \
0183 TUNNEL_GTP_OPT)
0184
0185 #endif