linux/include/uapi/linux/ipv6.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
   2#ifndef _UAPI_IPV6_H
   3#define _UAPI_IPV6_H
   4
   5#include <linux/libc-compat.h>
   6#include <linux/types.h>
   7#include <linux/in6.h>
   8#include <asm/byteorder.h>
   9
  10/* The latest drafts declared increase in minimal mtu up to 1280. */
  11
  12#define IPV6_MIN_MTU    1280
  13
  14/*
  15 *      Advanced API
  16 *      source interface/address selection, source routing, etc...
  17 *      *under construction*
  18 */
  19
  20#if __UAPI_DEF_IN6_PKTINFO
  21struct in6_pktinfo {
  22        struct in6_addr ipi6_addr;
  23        int             ipi6_ifindex;
  24};
  25#endif
  26
  27#if __UAPI_DEF_IP6_MTUINFO
  28struct ip6_mtuinfo {
  29        struct sockaddr_in6     ip6m_addr;
  30        __u32                   ip6m_mtu;
  31};
  32#endif
  33
  34struct in6_ifreq {
  35        struct in6_addr ifr6_addr;
  36        __u32           ifr6_prefixlen;
  37        int             ifr6_ifindex; 
  38};
  39
  40#define IPV6_SRCRT_STRICT       0x01    /* Deprecated; will be removed */
  41#define IPV6_SRCRT_TYPE_0       0       /* Deprecated; will be removed */
  42#define IPV6_SRCRT_TYPE_2       2       /* IPv6 type 2 Routing Header   */
  43#define IPV6_SRCRT_TYPE_3       3       /* RPL Segment Routing with IPv6 */
  44#define IPV6_SRCRT_TYPE_4       4       /* Segment Routing with IPv6 */
  45
  46/*
  47 *      routing header
  48 */
  49struct ipv6_rt_hdr {
  50        __u8            nexthdr;
  51        __u8            hdrlen;
  52        __u8            type;
  53        __u8            segments_left;
  54
  55        /*
  56         *      type specific data
  57         *      variable length field
  58         */
  59};
  60
  61
  62struct ipv6_opt_hdr {
  63        __u8            nexthdr;
  64        __u8            hdrlen;
  65        /* 
  66         * TLV encoded option data follows.
  67         */
  68} __attribute__((packed));      /* required for some archs */
  69
  70#define ipv6_destopt_hdr ipv6_opt_hdr
  71#define ipv6_hopopt_hdr  ipv6_opt_hdr
  72
  73/* Router Alert option values (RFC2711) */
  74#define IPV6_OPT_ROUTERALERT_MLD        0x0000  /* MLD(RFC2710) */
  75
  76/*
  77 *      routing header type 0 (used in cmsghdr struct)
  78 */
  79
  80struct rt0_hdr {
  81        struct ipv6_rt_hdr      rt_hdr;
  82        __u32                   reserved;
  83        struct in6_addr         addr[0];
  84
  85#define rt0_type                rt_hdr.type
  86};
  87
  88/*
  89 *      routing header type 2
  90 */
  91
  92struct rt2_hdr {
  93        struct ipv6_rt_hdr      rt_hdr;
  94        __u32                   reserved;
  95        struct in6_addr         addr;
  96
  97#define rt2_type                rt_hdr.type
  98};
  99
 100/*
 101 *      home address option in destination options header
 102 */
 103
 104struct ipv6_destopt_hao {
 105        __u8                    type;
 106        __u8                    length;
 107        struct in6_addr         addr;
 108} __attribute__((packed));
 109
 110/*
 111 *      IPv6 fixed header
 112 *
 113 *      BEWARE, it is incorrect. The first 4 bits of flow_lbl
 114 *      are glued to priority now, forming "class".
 115 */
 116
 117struct ipv6hdr {
 118#if defined(__LITTLE_ENDIAN_BITFIELD)
 119        __u8                    priority:4,
 120                                version:4;
 121#elif defined(__BIG_ENDIAN_BITFIELD)
 122        __u8                    version:4,
 123                                priority:4;
 124#else
 125#error  "Please fix <asm/byteorder.h>"
 126#endif
 127        __u8                    flow_lbl[3];
 128
 129        __be16                  payload_len;
 130        __u8                    nexthdr;
 131        __u8                    hop_limit;
 132
 133        struct  in6_addr        saddr;
 134        struct  in6_addr        daddr;
 135};
 136
 137
 138/* index values for the variables in ipv6_devconf */
 139enum {
 140        DEVCONF_FORWARDING = 0,
 141        DEVCONF_HOPLIMIT,
 142        DEVCONF_MTU6,
 143        DEVCONF_ACCEPT_RA,
 144        DEVCONF_ACCEPT_REDIRECTS,
 145        DEVCONF_AUTOCONF,
 146        DEVCONF_DAD_TRANSMITS,
 147        DEVCONF_RTR_SOLICITS,
 148        DEVCONF_RTR_SOLICIT_INTERVAL,
 149        DEVCONF_RTR_SOLICIT_DELAY,
 150        DEVCONF_USE_TEMPADDR,
 151        DEVCONF_TEMP_VALID_LFT,
 152        DEVCONF_TEMP_PREFERED_LFT,
 153        DEVCONF_REGEN_MAX_RETRY,
 154        DEVCONF_MAX_DESYNC_FACTOR,
 155        DEVCONF_MAX_ADDRESSES,
 156        DEVCONF_FORCE_MLD_VERSION,
 157        DEVCONF_ACCEPT_RA_DEFRTR,
 158        DEVCONF_ACCEPT_RA_PINFO,
 159        DEVCONF_ACCEPT_RA_RTR_PREF,
 160        DEVCONF_RTR_PROBE_INTERVAL,
 161        DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN,
 162        DEVCONF_PROXY_NDP,
 163        DEVCONF_OPTIMISTIC_DAD,
 164        DEVCONF_ACCEPT_SOURCE_ROUTE,
 165        DEVCONF_MC_FORWARDING,
 166        DEVCONF_DISABLE_IPV6,
 167        DEVCONF_ACCEPT_DAD,
 168        DEVCONF_FORCE_TLLAO,
 169        DEVCONF_NDISC_NOTIFY,
 170        DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL,
 171        DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL,
 172        DEVCONF_SUPPRESS_FRAG_NDISC,
 173        DEVCONF_ACCEPT_RA_FROM_LOCAL,
 174        DEVCONF_USE_OPTIMISTIC,
 175        DEVCONF_ACCEPT_RA_MTU,
 176        DEVCONF_STABLE_SECRET,
 177        DEVCONF_USE_OIF_ADDRS_ONLY,
 178        DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT,
 179        DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
 180        DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
 181        DEVCONF_DROP_UNSOLICITED_NA,
 182        DEVCONF_KEEP_ADDR_ON_DOWN,
 183        DEVCONF_RTR_SOLICIT_MAX_INTERVAL,
 184        DEVCONF_SEG6_ENABLED,
 185        DEVCONF_SEG6_REQUIRE_HMAC,
 186        DEVCONF_ENHANCED_DAD,
 187        DEVCONF_ADDR_GEN_MODE,
 188        DEVCONF_DISABLE_POLICY,
 189        DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN,
 190        DEVCONF_NDISC_TCLASS,
 191        DEVCONF_RPL_SEG_ENABLED,
 192        DEVCONF_MAX
 193};
 194
 195
 196#endif /* _UAPI_IPV6_H */
 197