303 lines · c
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 Systems11 * <draft-ietf-ipngwg-bsd-api-05.txt>12 *13 * Advanced Sockets API for IPv614 * <draft-stevens-advanced-api-00.txt>15 *16 * This program is free software; you can redistribute it and/or17 * modify it under the terms of the GNU General Public License18 * as published by the Free Software Foundation; either version19 * 2 of the License, or (at your option) any later version.20 */21 22#ifndef _UAPI_LINUX_IN6_H23#define _UAPI_LINUX_IN6_H24 25#include <linux/types.h>26#include <linux/libc-compat.h>27 28/*29 * IPv6 address structure30 */31 32#if __UAPI_DEF_IN6_ADDR33struct in6_addr {34 union {35 __u8 u6_addr8[16];36#if __UAPI_DEF_IN6_ADDR_ALT37 __be16 u6_addr16[8];38 __be32 u6_addr32[4];39#endif40 } in6_u;41#define s6_addr in6_u.u6_addr842#if __UAPI_DEF_IN6_ADDR_ALT43#define s6_addr16 in6_u.u6_addr1644#define s6_addr32 in6_u.u6_addr3245#endif46};47#endif /* __UAPI_DEF_IN6_ADDR */48 49#if __UAPI_DEF_SOCKADDR_IN650struct 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_MREQ60struct 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_multiaddr70 71struct 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 084#define IPV6_FL_A_PUT 185#define IPV6_FL_A_RENEW 286 87#define IPV6_FL_F_CREATE 188#define IPV6_FL_F_EXCL 289#define IPV6_FL_F_REFLECT 490#define IPV6_FL_F_REMOTE 891 92#define IPV6_FL_S_NONE 093#define IPV6_FL_S_EXCL 194#define IPV6_FL_S_PROCESS 295#define IPV6_FL_S_USER 396#define IPV6_FL_S_ANY 25597 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 of104 * sockaddr_in6 is in network byte order.105 */106 107#define IPV6_FLOWINFO_FLOWLABEL 0x000fffff108#define IPV6_FLOWINFO_PRIORITY 0x0ff00000109 110/* These definitions are obsolete */111#define IPV6_PRIORITY_UNCHARACTERIZED 0x0000112#define IPV6_PRIORITY_FILLER 0x0100113#define IPV6_PRIORITY_UNATTENDED 0x0200114#define IPV6_PRIORITY_RESERVED1 0x0300115#define IPV6_PRIORITY_BULK 0x0400116#define IPV6_PRIORITY_RESERVED2 0x0500117#define IPV6_PRIORITY_INTERACTIVE 0x0600118#define IPV6_PRIORITY_CONTROL 0x0700119#define IPV6_PRIORITY_8 0x0800120#define IPV6_PRIORITY_9 0x0900121#define IPV6_PRIORITY_10 0x0a00122#define IPV6_PRIORITY_11 0x0b00123#define IPV6_PRIORITY_12 0x0c00124#define IPV6_PRIORITY_13 0x0d00125#define IPV6_PRIORITY_14 0x0e00126#define IPV6_PRIORITY_15 0x0f00127 128/*129 * IPV6 extension headers130 */131#if __UAPI_DEF_IPPROTO_V6132#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 0145#define IPV6_TLV_PADN 1146#define IPV6_TLV_ROUTERALERT 5147#define IPV6_TLV_CALIPSO 7 /* RFC 5570 */148#define IPV6_TLV_IOAM 49 /* RFC 9486 */149#define IPV6_TLV_JUMBO 194150#define IPV6_TLV_HAO 201 /* home address option */151 152/*153 * IPV6 socket options154 */155#if __UAPI_DEF_IPV6_OPTIONS156#define IPV6_ADDRFORM 1157#define IPV6_2292PKTINFO 2158#define IPV6_2292HOPOPTS 3159#define IPV6_2292DSTOPTS 4160#define IPV6_2292RTHDR 5161#define IPV6_2292PKTOPTIONS 6162#define IPV6_CHECKSUM 7163#define IPV6_2292HOPLIMIT 8164#define IPV6_NEXTHOP 9165#define IPV6_AUTHHDR 10 /* obsolete */166#define IPV6_FLOWINFO 11167 168#define IPV6_UNICAST_HOPS 16169#define IPV6_MULTICAST_IF 17170#define IPV6_MULTICAST_HOPS 18171#define IPV6_MULTICAST_LOOP 19172#define IPV6_ADD_MEMBERSHIP 20173#define IPV6_DROP_MEMBERSHIP 21174#define IPV6_ROUTER_ALERT 22175#define IPV6_MTU_DISCOVER 23176#define IPV6_MTU 24177#define IPV6_RECVERR 25178#define IPV6_V6ONLY 26179#define IPV6_JOIN_ANYCAST 27180#define IPV6_LEAVE_ANYCAST 28181#define IPV6_MULTICAST_ALL 29182#define IPV6_ROUTER_ALERT_ISOLATE 30183#define IPV6_RECVERR_RFC4884 31184 185/* IPV6_MTU_DISCOVER values */186#define IPV6_PMTUDISC_DONT 0187#define IPV6_PMTUDISC_WANT 1188#define IPV6_PMTUDISC_DO 2189#define IPV6_PMTUDISC_PROBE 3190/* same as IPV6_PMTUDISC_PROBE, provided for symetry with IPv4191 * also see comments on IP_PMTUDISC_INTERFACE192 */193#define IPV6_PMTUDISC_INTERFACE 4194/* weaker version of IPV6_PMTUDISC_INTERFACE, which allows packets to195 * get fragmented if they exceed the interface mtu196 */197#define IPV6_PMTUDISC_OMIT 5198 199/* Flowlabel */200#define IPV6_FLOWLABEL_MGR 32201#define IPV6_FLOWINFO_SEND 33202 203#define IPV6_IPSEC_POLICY 34204#define IPV6_XFRM_POLICY 35205#define IPV6_HDRINCL 36206#endif207 208/*209 * Multicast:210 * Following socket options are shared between IPv4 and IPv6.211 *212 * MCAST_JOIN_GROUP 42213 * MCAST_BLOCK_SOURCE 43214 * MCAST_UNBLOCK_SOURCE 44215 * MCAST_LEAVE_GROUP 45216 * MCAST_JOIN_SOURCE_GROUP 46217 * MCAST_LEAVE_SOURCE_GROUP 47218 * MCAST_MSFILTER 48219 */220 221/*222 * Advanced API (RFC3542) (1)223 *224 * Note: IPV6_RECVRTHDRDSTOPTS does not exist. see net/ipv6/datagram.c.225 */226 227#define IPV6_RECVPKTINFO 49228#define IPV6_PKTINFO 50229#define IPV6_RECVHOPLIMIT 51230#define IPV6_HOPLIMIT 52231#define IPV6_RECVHOPOPTS 53232#define IPV6_HOPOPTS 54233#define IPV6_RTHDRDSTOPTS 55234#define IPV6_RECVRTHDR 56235#define IPV6_RTHDR 57236#define IPV6_RECVDSTOPTS 58237#define IPV6_DSTOPTS 59238#define IPV6_RECVPATHMTU 60239#define IPV6_PATHMTU 61240#define IPV6_DONTFRAG 62241#if 0 /* not yet */242#define IPV6_USE_MIN_MTU 63243#endif244 245/*246 * Netfilter (1)247 *248 * Following socket options are used in ip6_tables;249 * see include/linux/netfilter_ipv6/ip6_tables.h.250 *251 * IP6T_SO_SET_REPLACE / IP6T_SO_GET_INFO 64252 * IP6T_SO_SET_ADD_COUNTERS / IP6T_SO_GET_ENTRIES 65253 */254 255/*256 * Advanced API (RFC3542) (2)257 */258#define IPV6_RECVTCLASS 66259#define IPV6_TCLASS 67260 261/*262 * Netfilter (2)263 *264 * Following socket options are used in ip6_tables;265 * see include/linux/netfilter_ipv6/ip6_tables.h.266 *267 * IP6T_SO_GET_REVISION_MATCH 68268 * IP6T_SO_GET_REVISION_TARGET 69269 * IP6T_SO_ORIGINAL_DST 80270 */271 272#define IPV6_AUTOFLOWLABEL 70273/* RFC5014: Source address selection */274#define IPV6_ADDR_PREFERENCES 72275 276#define IPV6_PREFER_SRC_TMP 0x0001277#define IPV6_PREFER_SRC_PUBLIC 0x0002278#define IPV6_PREFER_SRC_PUBTMP_DEFAULT 0x0100279#define IPV6_PREFER_SRC_COA 0x0004280#define IPV6_PREFER_SRC_HOME 0x0400281#define IPV6_PREFER_SRC_CGA 0x0008282#define IPV6_PREFER_SRC_NONCGA 0x0800283 284/* RFC5082: Generalized Ttl Security Mechanism */285#define IPV6_MINHOPCOUNT 73286 287#define IPV6_ORIGDSTADDR 74288#define IPV6_RECVORIGDSTADDR IPV6_ORIGDSTADDR289#define IPV6_TRANSPARENT 75290#define IPV6_UNICAST_IF 76291#define IPV6_RECVFRAGSIZE 77292#define IPV6_FREEBIND 78293 294/*295 * Multicast Routing:296 * see include/uapi/linux/mroute6.h.297 *298 * MRT6_BASE 200299 * ...300 * MRT6_MAX301 */302#endif /* _UAPI_LINUX_IN6_H */303