brintos

brintos / linux-shallow public Read only

0
0
Text · 7.4 KiB · ff8d21f Raw
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