Home | History | Annotate | Download | only in linux
      1 #ifndef _IPV6_H
      2 #define _IPV6_H
      3 
      4 #include <linux/types.h>
      5 #include <linux/in6.h>
      6 #include <asm/byteorder.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 
     19 struct in6_pktinfo {
     20 	struct in6_addr	ipi6_addr;
     21 	int		ipi6_ifindex;
     22 };
     23 
     24 struct ip6_mtuinfo {
     25 	struct sockaddr_in6	ip6m_addr;
     26 	__u32			ip6m_mtu;
     27 };
     28 
     29 struct in6_ifreq {
     30 	struct in6_addr	ifr6_addr;
     31 	__u32		ifr6_prefixlen;
     32 	int		ifr6_ifindex;
     33 };
     34 
     35 #define IPV6_SRCRT_STRICT	0x01	/* Deprecated; will be removed */
     36 #define IPV6_SRCRT_TYPE_0	0	/* Deprecated; will be removed */
     37 #define IPV6_SRCRT_TYPE_2	2	/* IPv6 type 2 Routing Header	*/
     38 
     39 /*
     40  *	routing header
     41  */
     42 struct ipv6_rt_hdr {
     43 	__u8		nexthdr;
     44 	__u8		hdrlen;
     45 	__u8		type;
     46 	__u8		segments_left;
     47 
     48 	/*
     49 	 *	type specific data
     50 	 *	variable length field
     51 	 */
     52 };
     53 
     54 
     55 struct ipv6_opt_hdr {
     56 	__u8 		nexthdr;
     57 	__u8 		hdrlen;
     58 	/*
     59 	 * TLV encoded option data follows.
     60 	 */
     61 } __attribute__((packed));	/* required for some archs */
     62 
     63 #define ipv6_destopt_hdr ipv6_opt_hdr
     64 #define ipv6_hopopt_hdr  ipv6_opt_hdr
     65 
     66 
     67 /*
     68  *	routing header type 0 (used in cmsghdr struct)
     69  */
     70 
     71 struct rt0_hdr {
     72 	struct ipv6_rt_hdr	rt_hdr;
     73 	__u32			reserved;
     74 	struct in6_addr		addr[0];
     75 
     76 #define rt0_type		rt_hdr.type
     77 };
     78 
     79 /*
     80  *	routing header type 2
     81  */
     82 
     83 struct rt2_hdr {
     84 	struct ipv6_rt_hdr	rt_hdr;
     85 	__u32			reserved;
     86 	struct in6_addr		addr;
     87 
     88 #define rt2_type		rt_hdr.type
     89 };
     90 
     91 /*
     92  *	home address option in destination options header
     93  */
     94 
     95 struct ipv6_destopt_hao {
     96 	__u8			type;
     97 	__u8			length;
     98 	struct in6_addr		addr;
     99 } __attribute__((packed));
    100 
    101 /*
    102  *	IPv6 fixed header
    103  *
    104  *	BEWARE, it is incorrect. The first 4 bits of flow_lbl
    105  *	are glued to priority now, forming "class".
    106  */
    107 
    108 struct ipv6hdr {
    109 #if defined(__LITTLE_ENDIAN_BITFIELD)
    110 	__u8			priority:4,
    111 				version:4;
    112 #elif defined(__BIG_ENDIAN_BITFIELD)
    113 	__u8			version:4,
    114 				priority:4;
    115 #else
    116 #error	"Please fix <asm/byteorder.h>"
    117 #endif
    118 	__u8			flow_lbl[3];
    119 
    120 	__be16			payload_len;
    121 	__u8			nexthdr;
    122 	__u8			hop_limit;
    123 
    124 	struct	in6_addr	saddr;
    125 	struct	in6_addr	daddr;
    126 };
    127 
    128 
    129 /* index values for the variables in ipv6_devconf */
    130 enum {
    131 	DEVCONF_FORWARDING = 0,
    132 	DEVCONF_HOPLIMIT,
    133 	DEVCONF_MTU6,
    134 	DEVCONF_ACCEPT_RA,
    135 	DEVCONF_ACCEPT_REDIRECTS,
    136 	DEVCONF_AUTOCONF,
    137 	DEVCONF_DAD_TRANSMITS,
    138 	DEVCONF_RTR_SOLICITS,
    139 	DEVCONF_RTR_SOLICIT_INTERVAL,
    140 	DEVCONF_RTR_SOLICIT_DELAY,
    141 	DEVCONF_USE_TEMPADDR,
    142 	DEVCONF_TEMP_VALID_LFT,
    143 	DEVCONF_TEMP_PREFERED_LFT,
    144 	DEVCONF_REGEN_MAX_RETRY,
    145 	DEVCONF_MAX_DESYNC_FACTOR,
    146 	DEVCONF_MAX_ADDRESSES,
    147 	DEVCONF_FORCE_MLD_VERSION,
    148 	DEVCONF_ACCEPT_RA_DEFRTR,
    149 	DEVCONF_ACCEPT_RA_PINFO,
    150 	DEVCONF_ACCEPT_RA_RTR_PREF,
    151 	DEVCONF_RTR_PROBE_INTERVAL,
    152 	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN,
    153 	DEVCONF_PROXY_NDP,
    154 	DEVCONF_OPTIMISTIC_DAD,
    155 	DEVCONF_ACCEPT_SOURCE_ROUTE,
    156 	DEVCONF_MC_FORWARDING,
    157 	DEVCONF_DISABLE_IPV6,
    158 	DEVCONF_ACCEPT_DAD,
    159 	DEVCONF_FORCE_TLLAO,
    160 	DEVCONF_MAX
    161 };
    162 
    163 
    164 #endif /* _IPV6_H */
    165