root/include/uapi/linux/in6.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
   2 /*
   3  *      Types and definitions for AF_INET6 
   4  *      Linux INET6 implementation 
   5  *
   6  *      Authors:
   7  *      Pedro Roque             <roque@di.fc.ul.pt>     
   8  *
   9  *      Sources:
  10  *      IPv6 Program Interfaces for BSD Systems
  11  *      <draft-ietf-ipngwg-bsd-api-05.txt>
  12  *
  13  *      Advanced Sockets API for IPv6
  14  *      <draft-stevens-advanced-api-00.txt>
  15  *
  16  *      This program is free software; you can redistribute it and/or
  17  *      modify it under the terms of the GNU General Public License
  18  *      as published by the Free Software Foundation; either version
  19  *      2 of the License, or (at your option) any later version.
  20  */
  21 
  22 #ifndef _UAPI_LINUX_IN6_H
  23 #define _UAPI_LINUX_IN6_H
  24 
  25 #include <linux/types.h>
  26 #include <linux/libc-compat.h>
  27 
  28 /*
  29  *      IPv6 address structure
  30  */
  31 
  32 #if __UAPI_DEF_IN6_ADDR
  33 struct in6_addr {
  34         union {
  35                 __u8            u6_addr8[16];
  36 #if __UAPI_DEF_IN6_ADDR_ALT
  37                 __be16          u6_addr16[8];
  38                 __be32          u6_addr32[4];
  39 #endif
  40         } in6_u;
  41 #define s6_addr                 in6_u.u6_addr8
  42 #if __UAPI_DEF_IN6_ADDR_ALT
  43 #define s6_addr16               in6_u.u6_addr16
  44 #define s6_addr32               in6_u.u6_addr32
  45 #endif
  46 };
  47 #endif /* __UAPI_DEF_IN6_ADDR */
  48 
  49 #if __UAPI_DEF_SOCKADDR_IN6
  50 struct sockaddr_in6 {
  51         unsigned short int      sin6_family;    /* AF_INET6 */
  52         __be16                  sin6_port;      /* Transport layer port # */
  53         __be32                  sin6_flowinfo;  /* IPv6 flow information */
  54         struct in6_addr         sin6_addr;      /* IPv6 address */
  55         __u32                   sin6_scope_id;  /* scope id (new in RFC2553) */
  56 };
  57 #endif /* __UAPI_DEF_SOCKADDR_IN6 */
  58 
  59 #if __UAPI_DEF_IPV6_MREQ
  60 struct ipv6_mreq {
  61         /* IPv6 multicast address of group */
  62         struct in6_addr ipv6mr_multiaddr;
  63 
  64         /* local IPv6 address of interface */
  65         int             ipv6mr_ifindex;
  66 };
  67 #endif /* __UAPI_DEF_IVP6_MREQ */
  68 
  69 #define ipv6mr_acaddr   ipv6mr_multiaddr
  70 
  71 struct in6_flowlabel_req {
  72         struct in6_addr flr_dst;
  73         __be32  flr_label;
  74         __u8    flr_action;
  75         __u8    flr_share;
  76         __u16   flr_flags;
  77         __u16   flr_expires;
  78         __u16   flr_linger;
  79         __u32   __flr_pad;
  80         /* Options in format of IPV6_PKTOPTIONS */
  81 };
  82 
  83 #define IPV6_FL_A_GET   0
  84 #define IPV6_FL_A_PUT   1
  85 #define IPV6_FL_A_RENEW 2
  86 
  87 #define IPV6_FL_F_CREATE        1
  88 #define IPV6_FL_F_EXCL          2
  89 #define IPV6_FL_F_REFLECT       4
  90 #define IPV6_FL_F_REMOTE        8
  91 
  92 #define IPV6_FL_S_NONE          0
  93 #define IPV6_FL_S_EXCL          1
  94 #define IPV6_FL_S_PROCESS       2
  95 #define IPV6_FL_S_USER          3
  96 #define IPV6_FL_S_ANY           255
  97 
  98 
  99 /*
 100  *      Bitmask constant declarations to help applications select out the 
 101  *      flow label and priority fields.
 102  *
 103  *      Note that this are in host byte order while the flowinfo field of
 104  *      sockaddr_in6 is in network byte order.
 105  */
 106 
 107 #define IPV6_FLOWINFO_FLOWLABEL         0x000fffff
 108 #define IPV6_FLOWINFO_PRIORITY          0x0ff00000
 109 
 110 /* These definitions are obsolete */
 111 #define IPV6_PRIORITY_UNCHARACTERIZED   0x0000
 112 #define IPV6_PRIORITY_FILLER            0x0100
 113 #define IPV6_PRIORITY_UNATTENDED        0x0200
 114 #define IPV6_PRIORITY_RESERVED1         0x0300
 115 #define IPV6_PRIORITY_BULK              0x0400
 116 #define IPV6_PRIORITY_RESERVED2         0x0500
 117 #define IPV6_PRIORITY_INTERACTIVE       0x0600
 118 #define IPV6_PRIORITY_CONTROL           0x0700
 119 #define IPV6_PRIORITY_8                 0x0800
 120 #define IPV6_PRIORITY_9                 0x0900
 121 #define IPV6_PRIORITY_10                0x0a00
 122 #define IPV6_PRIORITY_11                0x0b00
 123 #define IPV6_PRIORITY_12                0x0c00
 124 #define IPV6_PRIORITY_13                0x0d00
 125 #define IPV6_PRIORITY_14                0x0e00
 126 #define IPV6_PRIORITY_15                0x0f00
 127 
 128 /*
 129  *      IPV6 extension headers
 130  */
 131 #if __UAPI_DEF_IPPROTO_V6
 132 #define IPPROTO_HOPOPTS         0       /* IPv6 hop-by-hop options      */
 133 #define IPPROTO_ROUTING         43      /* IPv6 routing header          */
 134 #define IPPROTO_FRAGMENT        44      /* IPv6 fragmentation header    */
 135 #define IPPROTO_ICMPV6          58      /* ICMPv6                       */
 136 #define IPPROTO_NONE            59      /* IPv6 no next header          */
 137 #define IPPROTO_DSTOPTS         60      /* IPv6 destination options     */
 138 #define IPPROTO_MH              135     /* IPv6 mobility header         */
 139 #endif /* __UAPI_DEF_IPPROTO_V6 */
 140 
 141 /*
 142  *      IPv6 TLV options.
 143  */
 144 #define IPV6_TLV_PAD1           0
 145 #define IPV6_TLV_PADN           1
 146 #define IPV6_TLV_ROUTERALERT    5
 147 #define IPV6_TLV_CALIPSO        7       /* RFC 5570 */
 148 #define IPV6_TLV_JUMBO          194
 149 #define IPV6_TLV_HAO            201     /* home address option */
 150 
 151 /*
 152  *      IPV6 socket options
 153  */
 154 #if __UAPI_DEF_IPV6_OPTIONS
 155 #define IPV6_ADDRFORM           1
 156 #define IPV6_2292PKTINFO        2
 157 #define IPV6_2292HOPOPTS        3
 158 #define IPV6_2292DSTOPTS        4
 159 #define IPV6_2292RTHDR          5
 160 #define IPV6_2292PKTOPTIONS     6
 161 #define IPV6_CHECKSUM           7
 162 #define IPV6_2292HOPLIMIT       8
 163 #define IPV6_NEXTHOP            9
 164 #define IPV6_AUTHHDR            10      /* obsolete */
 165 #define IPV6_FLOWINFO           11
 166 
 167 #define IPV6_UNICAST_HOPS       16
 168 #define IPV6_MULTICAST_IF       17
 169 #define IPV6_MULTICAST_HOPS     18
 170 #define IPV6_MULTICAST_LOOP     19
 171 #define IPV6_ADD_MEMBERSHIP     20
 172 #define IPV6_DROP_MEMBERSHIP    21
 173 #define IPV6_ROUTER_ALERT       22
 174 #define IPV6_MTU_DISCOVER       23
 175 #define IPV6_MTU                24
 176 #define IPV6_RECVERR            25
 177 #define IPV6_V6ONLY             26
 178 #define IPV6_JOIN_ANYCAST       27
 179 #define IPV6_LEAVE_ANYCAST      28
 180 #define IPV6_MULTICAST_ALL      29
 181 #define IPV6_ROUTER_ALERT_ISOLATE       30
 182 
 183 /* IPV6_MTU_DISCOVER values */
 184 #define IPV6_PMTUDISC_DONT              0
 185 #define IPV6_PMTUDISC_WANT              1
 186 #define IPV6_PMTUDISC_DO                2
 187 #define IPV6_PMTUDISC_PROBE             3
 188 /* same as IPV6_PMTUDISC_PROBE, provided for symetry with IPv4
 189  * also see comments on IP_PMTUDISC_INTERFACE
 190  */
 191 #define IPV6_PMTUDISC_INTERFACE         4
 192 /* weaker version of IPV6_PMTUDISC_INTERFACE, which allows packets to
 193  * get fragmented if they exceed the interface mtu
 194  */
 195 #define IPV6_PMTUDISC_OMIT              5
 196 
 197 /* Flowlabel */
 198 #define IPV6_FLOWLABEL_MGR      32
 199 #define IPV6_FLOWINFO_SEND      33
 200 
 201 #define IPV6_IPSEC_POLICY       34
 202 #define IPV6_XFRM_POLICY        35
 203 #define IPV6_HDRINCL            36
 204 #endif
 205 
 206 /*
 207  * Multicast:
 208  * Following socket options are shared between IPv4 and IPv6.
 209  *
 210  * MCAST_JOIN_GROUP             42
 211  * MCAST_BLOCK_SOURCE           43
 212  * MCAST_UNBLOCK_SOURCE         44
 213  * MCAST_LEAVE_GROUP            45
 214  * MCAST_JOIN_SOURCE_GROUP      46
 215  * MCAST_LEAVE_SOURCE_GROUP     47
 216  * MCAST_MSFILTER               48
 217  */
 218 
 219 /*
 220  * Advanced API (RFC3542) (1)
 221  *
 222  * Note: IPV6_RECVRTHDRDSTOPTS does not exist. see net/ipv6/datagram.c.
 223  */
 224 
 225 #define IPV6_RECVPKTINFO        49
 226 #define IPV6_PKTINFO            50
 227 #define IPV6_RECVHOPLIMIT       51
 228 #define IPV6_HOPLIMIT           52
 229 #define IPV6_RECVHOPOPTS        53
 230 #define IPV6_HOPOPTS            54
 231 #define IPV6_RTHDRDSTOPTS       55
 232 #define IPV6_RECVRTHDR          56
 233 #define IPV6_RTHDR              57
 234 #define IPV6_RECVDSTOPTS        58
 235 #define IPV6_DSTOPTS            59
 236 #define IPV6_RECVPATHMTU        60
 237 #define IPV6_PATHMTU            61
 238 #define IPV6_DONTFRAG           62
 239 #if 0   /* not yet */
 240 #define IPV6_USE_MIN_MTU        63
 241 #endif
 242 
 243 /*
 244  * Netfilter (1)
 245  *
 246  * Following socket options are used in ip6_tables;
 247  * see include/linux/netfilter_ipv6/ip6_tables.h.
 248  *
 249  * IP6T_SO_SET_REPLACE / IP6T_SO_GET_INFO               64
 250  * IP6T_SO_SET_ADD_COUNTERS / IP6T_SO_GET_ENTRIES       65
 251  */
 252 
 253 /*
 254  * Advanced API (RFC3542) (2)
 255  */
 256 #define IPV6_RECVTCLASS         66
 257 #define IPV6_TCLASS             67
 258 
 259 /*
 260  * Netfilter (2)
 261  *
 262  * Following socket options are used in ip6_tables;
 263  * see include/linux/netfilter_ipv6/ip6_tables.h.
 264  *
 265  * IP6T_SO_GET_REVISION_MATCH   68
 266  * IP6T_SO_GET_REVISION_TARGET  69
 267  * IP6T_SO_ORIGINAL_DST         80
 268  */
 269 
 270 #define IPV6_AUTOFLOWLABEL      70
 271 /* RFC5014: Source address selection */
 272 #define IPV6_ADDR_PREFERENCES   72
 273 
 274 #define IPV6_PREFER_SRC_TMP             0x0001
 275 #define IPV6_PREFER_SRC_PUBLIC          0x0002
 276 #define IPV6_PREFER_SRC_PUBTMP_DEFAULT  0x0100
 277 #define IPV6_PREFER_SRC_COA             0x0004
 278 #define IPV6_PREFER_SRC_HOME            0x0400
 279 #define IPV6_PREFER_SRC_CGA             0x0008
 280 #define IPV6_PREFER_SRC_NONCGA          0x0800
 281 
 282 /* RFC5082: Generalized Ttl Security Mechanism */
 283 #define IPV6_MINHOPCOUNT                73
 284 
 285 #define IPV6_ORIGDSTADDR        74
 286 #define IPV6_RECVORIGDSTADDR    IPV6_ORIGDSTADDR
 287 #define IPV6_TRANSPARENT        75
 288 #define IPV6_UNICAST_IF         76
 289 #define IPV6_RECVFRAGSIZE       77
 290 #define IPV6_FREEBIND           78
 291 
 292 /*
 293  * Multicast Routing:
 294  * see include/uapi/linux/mroute6.h.
 295  *
 296  * MRT6_BASE                    200
 297  * ...
 298  * MRT6_MAX
 299  */
 300 #endif /* _UAPI_LINUX_IN6_H */

/* [<][>][^][v][top][bottom][index][help] */