github.com/cilium/cilium@v1.16.2/bpf/include/linux/ipv6.h (about)

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