Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 #ifndef _UAPI_IPV6_H
0003 #define _UAPI_IPV6_H
0004 
0005 #include <linux/libc-compat.h>
0006 #include <linux/types.h>
0007 #include <linux/in6.h>
0008 #include <asm/byteorder.h>
0009 
0010 /* The latest drafts declared increase in minimal mtu up to 1280. */
0011 
0012 #define IPV6_MIN_MTU    1280
0013 
0014 /*
0015  *  Advanced API
0016  *  source interface/address selection, source routing, etc...
0017  *  *under construction*
0018  */
0019 
0020 #if __UAPI_DEF_IN6_PKTINFO
0021 struct in6_pktinfo {
0022     struct in6_addr ipi6_addr;
0023     int     ipi6_ifindex;
0024 };
0025 #endif
0026 
0027 #if __UAPI_DEF_IP6_MTUINFO
0028 struct ip6_mtuinfo {
0029     struct sockaddr_in6 ip6m_addr;
0030     __u32           ip6m_mtu;
0031 };
0032 #endif
0033 
0034 struct in6_ifreq {
0035     struct in6_addr ifr6_addr;
0036     __u32       ifr6_prefixlen;
0037     int     ifr6_ifindex; 
0038 };
0039 
0040 #define IPV6_SRCRT_STRICT   0x01    /* Deprecated; will be removed */
0041 #define IPV6_SRCRT_TYPE_0   0   /* Deprecated; will be removed */
0042 #define IPV6_SRCRT_TYPE_2   2   /* IPv6 type 2 Routing Header   */
0043 #define IPV6_SRCRT_TYPE_3   3   /* RPL Segment Routing with IPv6 */
0044 #define IPV6_SRCRT_TYPE_4   4   /* Segment Routing with IPv6 */
0045 
0046 /*
0047  *  routing header
0048  */
0049 struct ipv6_rt_hdr {
0050     __u8        nexthdr;
0051     __u8        hdrlen;
0052     __u8        type;
0053     __u8        segments_left;
0054 
0055     /*
0056      *  type specific data
0057      *  variable length field
0058      */
0059 };
0060 
0061 
0062 struct ipv6_opt_hdr {
0063     __u8        nexthdr;
0064     __u8        hdrlen;
0065     /* 
0066      * TLV encoded option data follows.
0067      */
0068 } __attribute__((packed));  /* required for some archs */
0069 
0070 #define ipv6_destopt_hdr ipv6_opt_hdr
0071 #define ipv6_hopopt_hdr  ipv6_opt_hdr
0072 
0073 /* Router Alert option values (RFC2711) */
0074 #define IPV6_OPT_ROUTERALERT_MLD    0x0000  /* MLD(RFC2710) */
0075 
0076 /*
0077  *  routing header type 0 (used in cmsghdr struct)
0078  */
0079 
0080 struct rt0_hdr {
0081     struct ipv6_rt_hdr  rt_hdr;
0082     __u32           reserved;
0083     struct in6_addr     addr[0];
0084 
0085 #define rt0_type        rt_hdr.type
0086 };
0087 
0088 /*
0089  *  routing header type 2
0090  */
0091 
0092 struct rt2_hdr {
0093     struct ipv6_rt_hdr  rt_hdr;
0094     __u32           reserved;
0095     struct in6_addr     addr;
0096 
0097 #define rt2_type        rt_hdr.type
0098 };
0099 
0100 /*
0101  *  home address option in destination options header
0102  */
0103 
0104 struct ipv6_destopt_hao {
0105     __u8            type;
0106     __u8            length;
0107     struct in6_addr     addr;
0108 } __attribute__((packed));
0109 
0110 /*
0111  *  IPv6 fixed header
0112  *
0113  *  BEWARE, it is incorrect. The first 4 bits of flow_lbl
0114  *  are glued to priority now, forming "class".
0115  */
0116 
0117 struct ipv6hdr {
0118 #if defined(__LITTLE_ENDIAN_BITFIELD)
0119     __u8            priority:4,
0120                 version:4;
0121 #elif defined(__BIG_ENDIAN_BITFIELD)
0122     __u8            version:4,
0123                 priority:4;
0124 #else
0125 #error  "Please fix <asm/byteorder.h>"
0126 #endif
0127     __u8            flow_lbl[3];
0128 
0129     __be16          payload_len;
0130     __u8            nexthdr;
0131     __u8            hop_limit;
0132 
0133     struct  in6_addr    saddr;
0134     struct  in6_addr    daddr;
0135 };
0136 
0137 
0138 /* index values for the variables in ipv6_devconf */
0139 enum {
0140     DEVCONF_FORWARDING = 0,
0141     DEVCONF_HOPLIMIT,
0142     DEVCONF_MTU6,
0143     DEVCONF_ACCEPT_RA,
0144     DEVCONF_ACCEPT_REDIRECTS,
0145     DEVCONF_AUTOCONF,
0146     DEVCONF_DAD_TRANSMITS,
0147     DEVCONF_RTR_SOLICITS,
0148     DEVCONF_RTR_SOLICIT_INTERVAL,
0149     DEVCONF_RTR_SOLICIT_DELAY,
0150     DEVCONF_USE_TEMPADDR,
0151     DEVCONF_TEMP_VALID_LFT,
0152     DEVCONF_TEMP_PREFERED_LFT,
0153     DEVCONF_REGEN_MAX_RETRY,
0154     DEVCONF_MAX_DESYNC_FACTOR,
0155     DEVCONF_MAX_ADDRESSES,
0156     DEVCONF_FORCE_MLD_VERSION,
0157     DEVCONF_ACCEPT_RA_DEFRTR,
0158     DEVCONF_ACCEPT_RA_PINFO,
0159     DEVCONF_ACCEPT_RA_RTR_PREF,
0160     DEVCONF_RTR_PROBE_INTERVAL,
0161     DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN,
0162     DEVCONF_PROXY_NDP,
0163     DEVCONF_OPTIMISTIC_DAD,
0164     DEVCONF_ACCEPT_SOURCE_ROUTE,
0165     DEVCONF_MC_FORWARDING,
0166     DEVCONF_DISABLE_IPV6,
0167     DEVCONF_ACCEPT_DAD,
0168     DEVCONF_FORCE_TLLAO,
0169     DEVCONF_NDISC_NOTIFY,
0170     DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL,
0171     DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL,
0172     DEVCONF_SUPPRESS_FRAG_NDISC,
0173     DEVCONF_ACCEPT_RA_FROM_LOCAL,
0174     DEVCONF_USE_OPTIMISTIC,
0175     DEVCONF_ACCEPT_RA_MTU,
0176     DEVCONF_STABLE_SECRET,
0177     DEVCONF_USE_OIF_ADDRS_ONLY,
0178     DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT,
0179     DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
0180     DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
0181     DEVCONF_DROP_UNSOLICITED_NA,
0182     DEVCONF_KEEP_ADDR_ON_DOWN,
0183     DEVCONF_RTR_SOLICIT_MAX_INTERVAL,
0184     DEVCONF_SEG6_ENABLED,
0185     DEVCONF_SEG6_REQUIRE_HMAC,
0186     DEVCONF_ENHANCED_DAD,
0187     DEVCONF_ADDR_GEN_MODE,
0188     DEVCONF_DISABLE_POLICY,
0189     DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN,
0190     DEVCONF_NDISC_TCLASS,
0191     DEVCONF_RPL_SEG_ENABLED,
0192     DEVCONF_RA_DEFRTR_METRIC,
0193     DEVCONF_IOAM6_ENABLED,
0194     DEVCONF_IOAM6_ID,
0195     DEVCONF_IOAM6_ID_WIDE,
0196     DEVCONF_NDISC_EVICT_NOCARRIER,
0197     DEVCONF_ACCEPT_UNTRACKED_NA,
0198     DEVCONF_MAX
0199 };
0200 
0201 
0202 #endif /* _UAPI_IPV6_H */