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