1*53ee8cc1Swenshuai.xi #ifndef _IPV6_H 2*53ee8cc1Swenshuai.xi #define _IPV6_H 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi #include <linux/in6.h> 5*53ee8cc1Swenshuai.xi #include <asm/byteorder.h> 6*53ee8cc1Swenshuai.xi 7*53ee8cc1Swenshuai.xi /* The latest drafts declared increase in minimal mtu up to 1280. */ 8*53ee8cc1Swenshuai.xi 9*53ee8cc1Swenshuai.xi #define IPV6_MIN_MTU 1280 10*53ee8cc1Swenshuai.xi 11*53ee8cc1Swenshuai.xi /* 12*53ee8cc1Swenshuai.xi * Advanced API 13*53ee8cc1Swenshuai.xi * source interface/address selection, source routing, etc... 14*53ee8cc1Swenshuai.xi * *under construction* 15*53ee8cc1Swenshuai.xi */ 16*53ee8cc1Swenshuai.xi 17*53ee8cc1Swenshuai.xi 18*53ee8cc1Swenshuai.xi struct in6_pktinfo { 19*53ee8cc1Swenshuai.xi struct in6_addr ipi6_addr; 20*53ee8cc1Swenshuai.xi int ipi6_ifindex; 21*53ee8cc1Swenshuai.xi }; 22*53ee8cc1Swenshuai.xi 23*53ee8cc1Swenshuai.xi 24*53ee8cc1Swenshuai.xi struct in6_ifreq { 25*53ee8cc1Swenshuai.xi struct in6_addr ifr6_addr; 26*53ee8cc1Swenshuai.xi __u32 ifr6_prefixlen; 27*53ee8cc1Swenshuai.xi int ifr6_ifindex; 28*53ee8cc1Swenshuai.xi }; 29*53ee8cc1Swenshuai.xi 30*53ee8cc1Swenshuai.xi #define IPV6_SRCRT_STRICT 0x01 /* Deprecated; will be removed */ 31*53ee8cc1Swenshuai.xi #define IPV6_SRCRT_TYPE_0 0 /* Deprecated; will be removed */ 32*53ee8cc1Swenshuai.xi #define IPV6_SRCRT_TYPE_2 2 /* IPv6 type 2 Routing Header */ 33*53ee8cc1Swenshuai.xi 34*53ee8cc1Swenshuai.xi /* 35*53ee8cc1Swenshuai.xi * routing header 36*53ee8cc1Swenshuai.xi */ 37*53ee8cc1Swenshuai.xi struct ipv6_rt_hdr { 38*53ee8cc1Swenshuai.xi __u8 nexthdr; 39*53ee8cc1Swenshuai.xi __u8 hdrlen; 40*53ee8cc1Swenshuai.xi __u8 type; 41*53ee8cc1Swenshuai.xi __u8 segments_left; 42*53ee8cc1Swenshuai.xi 43*53ee8cc1Swenshuai.xi /* 44*53ee8cc1Swenshuai.xi * type specific data 45*53ee8cc1Swenshuai.xi * variable length field 46*53ee8cc1Swenshuai.xi */ 47*53ee8cc1Swenshuai.xi }; 48*53ee8cc1Swenshuai.xi 49*53ee8cc1Swenshuai.xi 50*53ee8cc1Swenshuai.xi struct ipv6_opt_hdr { 51*53ee8cc1Swenshuai.xi __u8 nexthdr; 52*53ee8cc1Swenshuai.xi __u8 hdrlen; 53*53ee8cc1Swenshuai.xi /* 54*53ee8cc1Swenshuai.xi * TLV encoded option data follows. 55*53ee8cc1Swenshuai.xi */ 56*53ee8cc1Swenshuai.xi } __attribute__ ((packed)); /* required for some archs */ 57*53ee8cc1Swenshuai.xi 58*53ee8cc1Swenshuai.xi #define ipv6_destopt_hdr ipv6_opt_hdr 59*53ee8cc1Swenshuai.xi #define ipv6_hopopt_hdr ipv6_opt_hdr 60*53ee8cc1Swenshuai.xi 61*53ee8cc1Swenshuai.xi 62*53ee8cc1Swenshuai.xi /* 63*53ee8cc1Swenshuai.xi * routing header type 0 (used in cmsghdr struct) 64*53ee8cc1Swenshuai.xi */ 65*53ee8cc1Swenshuai.xi 66*53ee8cc1Swenshuai.xi struct rt0_hdr { 67*53ee8cc1Swenshuai.xi struct ipv6_rt_hdr rt_hdr; 68*53ee8cc1Swenshuai.xi __u32 reserved; 69*53ee8cc1Swenshuai.xi struct in6_addr addr[0]; 70*53ee8cc1Swenshuai.xi 71*53ee8cc1Swenshuai.xi #define rt0_type rt_hdr.type 72*53ee8cc1Swenshuai.xi }; 73*53ee8cc1Swenshuai.xi 74*53ee8cc1Swenshuai.xi /* 75*53ee8cc1Swenshuai.xi * routing header type 2 76*53ee8cc1Swenshuai.xi */ 77*53ee8cc1Swenshuai.xi 78*53ee8cc1Swenshuai.xi struct rt2_hdr { 79*53ee8cc1Swenshuai.xi struct ipv6_rt_hdr rt_hdr; 80*53ee8cc1Swenshuai.xi __u32 reserved; 81*53ee8cc1Swenshuai.xi struct in6_addr addr; 82*53ee8cc1Swenshuai.xi 83*53ee8cc1Swenshuai.xi #define rt2_type rt_hdr.type 84*53ee8cc1Swenshuai.xi }; 85*53ee8cc1Swenshuai.xi 86*53ee8cc1Swenshuai.xi /* 87*53ee8cc1Swenshuai.xi * home address option in destination options header 88*53ee8cc1Swenshuai.xi */ 89*53ee8cc1Swenshuai.xi 90*53ee8cc1Swenshuai.xi struct ipv6_destopt_hao { 91*53ee8cc1Swenshuai.xi __u8 type; 92*53ee8cc1Swenshuai.xi __u8 length; 93*53ee8cc1Swenshuai.xi struct in6_addr addr; 94*53ee8cc1Swenshuai.xi } __attribute__ ((__packed__)); 95*53ee8cc1Swenshuai.xi 96*53ee8cc1Swenshuai.xi /* 97*53ee8cc1Swenshuai.xi * IPv6 fixed header 98*53ee8cc1Swenshuai.xi * 99*53ee8cc1Swenshuai.xi * BEWARE, it is incorrect. The first 4 bits of flow_lbl 100*53ee8cc1Swenshuai.xi * are glued to priority now, forming "class". 101*53ee8cc1Swenshuai.xi */ 102*53ee8cc1Swenshuai.xi 103*53ee8cc1Swenshuai.xi struct ipv6hdr { 104*53ee8cc1Swenshuai.xi #if defined(__LITTLE_ENDIAN_BITFIELD) 105*53ee8cc1Swenshuai.xi __u8 priority:4, 106*53ee8cc1Swenshuai.xi version:4; 107*53ee8cc1Swenshuai.xi #elif defined(__BIG_ENDIAN_BITFIELD) 108*53ee8cc1Swenshuai.xi __u8 version:4, 109*53ee8cc1Swenshuai.xi priority:4; 110*53ee8cc1Swenshuai.xi #else 111*53ee8cc1Swenshuai.xi #error "Please fix <asm/byteorder.h>" 112*53ee8cc1Swenshuai.xi #endif 113*53ee8cc1Swenshuai.xi __u8 flow_lbl[3]; 114*53ee8cc1Swenshuai.xi 115*53ee8cc1Swenshuai.xi __be16 payload_len; 116*53ee8cc1Swenshuai.xi __u8 nexthdr; 117*53ee8cc1Swenshuai.xi __u8 hop_limit; 118*53ee8cc1Swenshuai.xi 119*53ee8cc1Swenshuai.xi struct in6_addr saddr; 120*53ee8cc1Swenshuai.xi struct in6_addr daddr; 121*53ee8cc1Swenshuai.xi }; 122*53ee8cc1Swenshuai.xi 123*53ee8cc1Swenshuai.xi /* 124*53ee8cc1Swenshuai.xi * This structure contains configuration options per IPv6 link. 125*53ee8cc1Swenshuai.xi */ 126*53ee8cc1Swenshuai.xi struct ipv6_devconf { 127*53ee8cc1Swenshuai.xi __s32 forwarding; 128*53ee8cc1Swenshuai.xi __s32 hop_limit; 129*53ee8cc1Swenshuai.xi __s32 mtu6; 130*53ee8cc1Swenshuai.xi __s32 accept_ra; 131*53ee8cc1Swenshuai.xi __s32 accept_redirects; 132*53ee8cc1Swenshuai.xi __s32 autoconf; 133*53ee8cc1Swenshuai.xi __s32 dad_transmits; 134*53ee8cc1Swenshuai.xi __s32 rtr_solicits; 135*53ee8cc1Swenshuai.xi __s32 rtr_solicit_interval; 136*53ee8cc1Swenshuai.xi __s32 rtr_solicit_delay; 137*53ee8cc1Swenshuai.xi __s32 force_mld_version; 138*53ee8cc1Swenshuai.xi #ifdef CONFIG_IPV6_PRIVACY 139*53ee8cc1Swenshuai.xi __s32 use_tempaddr; 140*53ee8cc1Swenshuai.xi __s32 temp_valid_lft; 141*53ee8cc1Swenshuai.xi __s32 temp_prefered_lft; 142*53ee8cc1Swenshuai.xi __s32 regen_max_retry; 143*53ee8cc1Swenshuai.xi __s32 max_desync_factor; 144*53ee8cc1Swenshuai.xi #endif 145*53ee8cc1Swenshuai.xi __s32 max_addresses; 146*53ee8cc1Swenshuai.xi __s32 accept_ra_defrtr; 147*53ee8cc1Swenshuai.xi __s32 accept_ra_pinfo; 148*53ee8cc1Swenshuai.xi #ifdef CONFIG_IPV6_ROUTER_PREF 149*53ee8cc1Swenshuai.xi __s32 accept_ra_rtr_pref; 150*53ee8cc1Swenshuai.xi __s32 rtr_probe_interval; 151*53ee8cc1Swenshuai.xi #ifdef CONFIG_IPV6_ROUTE_INFO 152*53ee8cc1Swenshuai.xi __s32 accept_ra_rt_info_max_plen; 153*53ee8cc1Swenshuai.xi #endif 154*53ee8cc1Swenshuai.xi #endif 155*53ee8cc1Swenshuai.xi __s32 proxy_ndp; 156*53ee8cc1Swenshuai.xi __s32 accept_source_route; 157*53ee8cc1Swenshuai.xi #ifdef CONFIG_IPV6_OPTIMISTIC_DAD 158*53ee8cc1Swenshuai.xi __s32 optimistic_dad; 159*53ee8cc1Swenshuai.xi #endif 160*53ee8cc1Swenshuai.xi #ifdef CONFIG_IPV6_MROUTE 161*53ee8cc1Swenshuai.xi __s32 mc_forwarding; 162*53ee8cc1Swenshuai.xi #endif 163*53ee8cc1Swenshuai.xi void *sysctl; 164*53ee8cc1Swenshuai.xi }; 165*53ee8cc1Swenshuai.xi 166*53ee8cc1Swenshuai.xi /* index values for the variables in ipv6_devconf */ 167*53ee8cc1Swenshuai.xi enum { 168*53ee8cc1Swenshuai.xi DEVCONF_FORWARDING = 0, 169*53ee8cc1Swenshuai.xi DEVCONF_HOPLIMIT, 170*53ee8cc1Swenshuai.xi DEVCONF_MTU6, 171*53ee8cc1Swenshuai.xi DEVCONF_ACCEPT_RA, 172*53ee8cc1Swenshuai.xi DEVCONF_ACCEPT_REDIRECTS, 173*53ee8cc1Swenshuai.xi DEVCONF_AUTOCONF, 174*53ee8cc1Swenshuai.xi DEVCONF_DAD_TRANSMITS, 175*53ee8cc1Swenshuai.xi DEVCONF_RTR_SOLICITS, 176*53ee8cc1Swenshuai.xi DEVCONF_RTR_SOLICIT_INTERVAL, 177*53ee8cc1Swenshuai.xi DEVCONF_RTR_SOLICIT_DELAY, 178*53ee8cc1Swenshuai.xi DEVCONF_USE_TEMPADDR, 179*53ee8cc1Swenshuai.xi DEVCONF_TEMP_VALID_LFT, 180*53ee8cc1Swenshuai.xi DEVCONF_TEMP_PREFERED_LFT, 181*53ee8cc1Swenshuai.xi DEVCONF_REGEN_MAX_RETRY, 182*53ee8cc1Swenshuai.xi DEVCONF_MAX_DESYNC_FACTOR, 183*53ee8cc1Swenshuai.xi DEVCONF_MAX_ADDRESSES, 184*53ee8cc1Swenshuai.xi DEVCONF_FORCE_MLD_VERSION, 185*53ee8cc1Swenshuai.xi DEVCONF_ACCEPT_RA_DEFRTR, 186*53ee8cc1Swenshuai.xi DEVCONF_ACCEPT_RA_PINFO, 187*53ee8cc1Swenshuai.xi DEVCONF_ACCEPT_RA_RTR_PREF, 188*53ee8cc1Swenshuai.xi DEVCONF_RTR_PROBE_INTERVAL, 189*53ee8cc1Swenshuai.xi DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN, 190*53ee8cc1Swenshuai.xi DEVCONF_PROXY_NDP, 191*53ee8cc1Swenshuai.xi DEVCONF_OPTIMISTIC_DAD, 192*53ee8cc1Swenshuai.xi DEVCONF_ACCEPT_SOURCE_ROUTE, 193*53ee8cc1Swenshuai.xi DEVCONF_MC_FORWARDING, 194*53ee8cc1Swenshuai.xi DEVCONF_MAX 195*53ee8cc1Swenshuai.xi }; 196*53ee8cc1Swenshuai.xi 197*53ee8cc1Swenshuai.xi 198*53ee8cc1Swenshuai.xi #endif /* _IPV6_H */ 199