1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _UAPI_IPV6_H 2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _UAPI_IPV6_H 3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h> 5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/in6.h> 6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <asm/byteorder.h> 7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* The latest drafts declared increase in minimal mtu up to 1280. */ 9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define IPV6_MIN_MTU 1280 11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Advanced API 14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * source interface/address selection, source routing, etc... 15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * *under construction* 16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct in6_pktinfo { 20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct in6_addr ipi6_addr; 21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int ipi6_ifindex; 22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct ip6_mtuinfo { 25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct sockaddr_in6 ip6m_addr; 26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 ip6m_mtu; 27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct in6_ifreq { 30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct in6_addr ifr6_addr; 31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 ifr6_prefixlen; 32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int ifr6_ifindex; 33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define IPV6_SRCRT_STRICT 0x01 /* Deprecated; will be removed */ 36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define IPV6_SRCRT_TYPE_0 0 /* Deprecated; will be removed */ 37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define IPV6_SRCRT_TYPE_2 2 /* IPv6 type 2 Routing Header */ 38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * routing header 41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct ipv6_rt_hdr { 43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 nexthdr; 44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 hdrlen; 45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 type; 46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 segments_left; 47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng /* 49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * type specific data 50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * variable length field 51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct ipv6_opt_hdr { 56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 nexthdr; 57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 hdrlen; 58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng /* 59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * TLV encoded option data follows. 60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng} __attribute__((packed)); /* required for some archs */ 62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define ipv6_destopt_hdr ipv6_opt_hdr 64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define ipv6_hopopt_hdr ipv6_opt_hdr 65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Router Alert option values (RFC2711) */ 67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define IPV6_OPT_ROUTERALERT_MLD 0x0000 /* MLD(RFC2710) */ 68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * routing header type 0 (used in cmsghdr struct) 71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rt0_hdr { 74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct ipv6_rt_hdr rt_hdr; 75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 reserved; 76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct in6_addr addr[0]; 77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define rt0_type rt_hdr.type 79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * routing header type 2 83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rt2_hdr { 86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct ipv6_rt_hdr rt_hdr; 87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 reserved; 88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct in6_addr addr; 89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define rt2_type rt_hdr.type 91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 93224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 94224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * home address option in destination options header 95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct ipv6_destopt_hao { 98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 type; 99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 length; 100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct in6_addr addr; 101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng} __attribute__((packed)); 102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * IPv6 fixed header 105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * BEWARE, it is incorrect. The first 4 bits of flow_lbl 107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * are glued to priority now, forming "class". 108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct ipv6hdr { 111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#if defined(__LITTLE_ENDIAN_BITFIELD) 112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 priority:4, 113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng version:4; 114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#elif defined(__BIG_ENDIAN_BITFIELD) 115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 version:4, 116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng priority:4; 117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#else 118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#error "Please fix <asm/byteorder.h>" 119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 flow_lbl[3]; 121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __be16 payload_len; 123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 nexthdr; 124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u8 hop_limit; 125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct in6_addr saddr; 127224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng struct in6_addr daddr; 128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* index values for the variables in ipv6_devconf */ 132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_FORWARDING = 0, 134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_HOPLIMIT, 135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_MTU6, 136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_ACCEPT_RA, 137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_ACCEPT_REDIRECTS, 138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_AUTOCONF, 139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_DAD_TRANSMITS, 140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_RTR_SOLICITS, 141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_RTR_SOLICIT_INTERVAL, 142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_RTR_SOLICIT_DELAY, 143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_USE_TEMPADDR, 144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_TEMP_VALID_LFT, 145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_TEMP_PREFERED_LFT, 146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_REGEN_MAX_RETRY, 147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_MAX_DESYNC_FACTOR, 148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_MAX_ADDRESSES, 149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_FORCE_MLD_VERSION, 150224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_ACCEPT_RA_DEFRTR, 151224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_ACCEPT_RA_PINFO, 152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_ACCEPT_RA_RTR_PREF, 153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_RTR_PROBE_INTERVAL, 154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN, 155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_PROXY_NDP, 156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_OPTIMISTIC_DAD, 157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_ACCEPT_SOURCE_ROUTE, 158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_MC_FORWARDING, 159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_DISABLE_IPV6, 160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_ACCEPT_DAD, 161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_FORCE_TLLAO, 162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_NDISC_NOTIFY, 163e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL, 164e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL, 165e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris DEVCONF_SUPPRESS_FRAG_NDISC, 1667c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris DEVCONF_ACCEPT_RA_FROM_LOCAL, 167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DEVCONF_MAX 168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* _UAPI_IPV6_H */ 172