Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
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 /* SIT-mode i_flags */
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     /* data follows */
0105 };
0106 
0107 /* PRL flags */
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 /* VTI-mode i_flags */
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 /* _UAPI_IF_TUNNEL_H_ */