cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

in6.h (7619B)


      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
     33struct 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
     50struct 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
     60struct 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
     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	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_IOAM		49	/* TEMPORARY IANA allocation for IOAM */
    149#define IPV6_TLV_JUMBO		194
    150#define IPV6_TLV_HAO		201	/* home address option */
    151
    152/*
    153 *	IPV6 socket options
    154 */
    155#if __UAPI_DEF_IPV6_OPTIONS
    156#define IPV6_ADDRFORM		1
    157#define IPV6_2292PKTINFO	2
    158#define IPV6_2292HOPOPTS	3
    159#define IPV6_2292DSTOPTS	4
    160#define IPV6_2292RTHDR		5
    161#define IPV6_2292PKTOPTIONS	6
    162#define IPV6_CHECKSUM		7
    163#define IPV6_2292HOPLIMIT	8
    164#define IPV6_NEXTHOP		9
    165#define IPV6_AUTHHDR		10	/* obsolete */
    166#define IPV6_FLOWINFO		11
    167
    168#define IPV6_UNICAST_HOPS	16
    169#define IPV6_MULTICAST_IF	17
    170#define IPV6_MULTICAST_HOPS	18
    171#define IPV6_MULTICAST_LOOP	19
    172#define IPV6_ADD_MEMBERSHIP	20
    173#define IPV6_DROP_MEMBERSHIP	21
    174#define IPV6_ROUTER_ALERT	22
    175#define IPV6_MTU_DISCOVER	23
    176#define IPV6_MTU		24
    177#define IPV6_RECVERR		25
    178#define IPV6_V6ONLY		26
    179#define IPV6_JOIN_ANYCAST	27
    180#define IPV6_LEAVE_ANYCAST	28
    181#define IPV6_MULTICAST_ALL	29
    182#define IPV6_ROUTER_ALERT_ISOLATE	30
    183#define IPV6_RECVERR_RFC4884	31
    184
    185/* IPV6_MTU_DISCOVER values */
    186#define IPV6_PMTUDISC_DONT		0
    187#define IPV6_PMTUDISC_WANT		1
    188#define IPV6_PMTUDISC_DO		2
    189#define IPV6_PMTUDISC_PROBE		3
    190/* same as IPV6_PMTUDISC_PROBE, provided for symetry with IPv4
    191 * also see comments on IP_PMTUDISC_INTERFACE
    192 */
    193#define IPV6_PMTUDISC_INTERFACE		4
    194/* weaker version of IPV6_PMTUDISC_INTERFACE, which allows packets to
    195 * get fragmented if they exceed the interface mtu
    196 */
    197#define IPV6_PMTUDISC_OMIT		5
    198
    199/* Flowlabel */
    200#define IPV6_FLOWLABEL_MGR	32
    201#define IPV6_FLOWINFO_SEND	33
    202
    203#define IPV6_IPSEC_POLICY	34
    204#define IPV6_XFRM_POLICY	35
    205#define IPV6_HDRINCL		36
    206#endif
    207
    208/*
    209 * Multicast:
    210 * Following socket options are shared between IPv4 and IPv6.
    211 *
    212 * MCAST_JOIN_GROUP		42
    213 * MCAST_BLOCK_SOURCE		43
    214 * MCAST_UNBLOCK_SOURCE		44
    215 * MCAST_LEAVE_GROUP		45
    216 * MCAST_JOIN_SOURCE_GROUP	46
    217 * MCAST_LEAVE_SOURCE_GROUP	47
    218 * MCAST_MSFILTER		48
    219 */
    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	49
    228#define IPV6_PKTINFO		50
    229#define IPV6_RECVHOPLIMIT	51
    230#define IPV6_HOPLIMIT		52
    231#define IPV6_RECVHOPOPTS	53
    232#define IPV6_HOPOPTS		54
    233#define IPV6_RTHDRDSTOPTS	55
    234#define IPV6_RECVRTHDR		56
    235#define IPV6_RTHDR		57
    236#define IPV6_RECVDSTOPTS	58
    237#define IPV6_DSTOPTS		59
    238#define IPV6_RECVPATHMTU	60
    239#define IPV6_PATHMTU		61
    240#define IPV6_DONTFRAG		62
    241#if 0	/* not yet */
    242#define IPV6_USE_MIN_MTU	63
    243#endif
    244
    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		64
    252 * IP6T_SO_SET_ADD_COUNTERS / IP6T_SO_GET_ENTRIES	65
    253 */
    254
    255/*
    256 * Advanced API (RFC3542) (2)
    257 */
    258#define IPV6_RECVTCLASS		66
    259#define IPV6_TCLASS		67
    260
    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	68
    268 * IP6T_SO_GET_REVISION_TARGET	69
    269 * IP6T_SO_ORIGINAL_DST		80
    270 */
    271
    272#define IPV6_AUTOFLOWLABEL	70
    273/* RFC5014: Source address selection */
    274#define IPV6_ADDR_PREFERENCES	72
    275
    276#define IPV6_PREFER_SRC_TMP		0x0001
    277#define IPV6_PREFER_SRC_PUBLIC		0x0002
    278#define IPV6_PREFER_SRC_PUBTMP_DEFAULT	0x0100
    279#define IPV6_PREFER_SRC_COA		0x0004
    280#define IPV6_PREFER_SRC_HOME		0x0400
    281#define IPV6_PREFER_SRC_CGA		0x0008
    282#define IPV6_PREFER_SRC_NONCGA		0x0800
    283
    284/* RFC5082: Generalized Ttl Security Mechanism */
    285#define IPV6_MINHOPCOUNT		73
    286
    287#define IPV6_ORIGDSTADDR        74
    288#define IPV6_RECVORIGDSTADDR    IPV6_ORIGDSTADDR
    289#define IPV6_TRANSPARENT        75
    290#define IPV6_UNICAST_IF         76
    291#define IPV6_RECVFRAGSIZE	77
    292#define IPV6_FREEBIND		78
    293
    294/*
    295 * Multicast Routing:
    296 * see include/uapi/linux/mroute6.h.
    297 *
    298 * MRT6_BASE			200
    299 * ...
    300 * MRT6_MAX
    301 */
    302#endif /* _UAPI_LINUX_IN6_H */