X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=libs%2Fwatt32%2Fnetinet%2Fipv6.h;fp=libs%2Fwatt32%2Fnetinet%2Fipv6.h;h=eacdb7954febb098be3500219f8c3f886727a82e;hb=214a070238552de6167bbf506cbc23006969a182;hp=0000000000000000000000000000000000000000;hpb=d3c8a942b99443abf0c11d9759994022ed6da597;p=oftp diff --git a/libs/watt32/netinet/ipv6.h b/libs/watt32/netinet/ipv6.h new file mode 100644 index 0000000..eacdb79 --- /dev/null +++ b/libs/watt32/netinet/ipv6.h @@ -0,0 +1,175 @@ +/*!\file netinet/ipv6.h + * Linux IPv6 definitions. + */ + +/* + * Linux INET6 implementation + * + * Authors: + * Pedro Roque + * + * $Id: ipv6.h,v 1.6 1997/04/01 02:22:58 davem Exp $ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + * + * NB! Don't ue this file. Use instread. + */ + +#ifndef _NET_IPV6_H +#define _NET_IPV6_H + +#ifndef __NETINET_IN_H +#include /* in6_addr */ +#endif + +/* + * Advanced API + * source interface/address selection, source routing, etc... + * *under construction* + */ + +#include + +/* + * IPv6 fixed header + */ +struct ipv6hdr { + unsigned char ipv6_priority:4; + unsigned char ipv6_version:4; + unsigned char ipv6_flow_lbl[3]; + unsigned short ipv6_len; + unsigned char ipv6_nextheader; + unsigned char ipv6_hoplimit; + struct in6_addr ipv6_src; + struct in6_addr ipv6_dst; + }; + + + +/* + * The length of this struct cannot be greater than the length of + * the proto_priv field in a sk_buff which is currently + * defined to be 16 bytes. + * Pointers take upto 8 bytes (sizeof(void *) is 8 on the alpha). + */ +struct ipv6_options { + /* length of extension headers */ + unsigned short opt_flen; /* after fragment hdr */ + unsigned short opt_nflen; /* before fragment hdr */ + /* + * protocol options + * usualy carried in IPv6 extension headers + */ + struct ipv6_rt_hdr *srcrt; /* Routing Header */ + }; + +struct in6_pktinfo { + struct in6_addr ipi6_addr; + int ipi6_ifindex; + }; + + +struct in6_ifreq { + struct in6_addr ifr6_addr; + unsigned long ifr6_prefixlen; + unsigned long ifr6_ifindex; + }; + +#define IPV6_SRCRT_STRICT 0x01 /* this hop must be a neighbor */ +#define IPV6_SRCRT_TYPE_0 0 /* IPv6 type 0 Routing Header */ + +/* + * routing header + */ +struct ipv6_rt_hdr { + unsigned char nexthdr; + unsigned char hdrlen; + unsigned char type; + unsigned char segments_left; + /* + * type specific data + * variable length field + */ + }; + +/* + * routing header type 0 (used in cmsghdr struct) + */ +struct ipv6_rt0_hdr { + struct ipv6_rt_hdr rt_hdr; + unsigned long bitmap; /* strict/loose bit map */ +#ifndef __WATCOMC__ + struct in6_addr addr[0]; +#endif +#define rt0_type rt_hdr.type; + }; + +/* + * NextHeader field of IPv6 header + */ + +#define NEXTHDR_HOP 0 /* Hop-by-hop option header. */ +#define NEXTHDR_TCP 6 /* TCP segment. */ +#define NEXTHDR_UDP 17 /* UDP message. */ +#define NEXTHDR_IPV6 41 /* IPv6 in IPv6 */ +#define NEXTHDR_ROUTING 43 /* Routing header. */ +#define NEXTHDR_FRAGMENT 44 /* Fragmentation/reassembly header. */ +#define NEXTHDR_ESP 50 /* Encapsulating security payload. */ +#define NEXTHDR_AUTH 51 /* Authentication header. */ +#define NEXTHDR_ICMP 58 /* ICMP for IPv6. */ +#define NEXTHDR_NONE 59 /* No next header */ +#define NEXTHDR_DEST 60 /* Destination options header. */ + +#define NEXTHDR_MAX 255 + + +#define IPV6_DEFAULT_HOPLIMIT 64 +#define IPV6_DEFAULT_MCASTHOPS 1 + +/* + * Addr type + * + * type - unicast | multicast | anycast + * scope - local | site | global + * v4 - compat + * v4mapped + * any + * loopback + */ + +#define IPV6_ADDR_ANY 0x0000U + +#define IPV6_ADDR_UNICAST 0x0001U +#define IPV6_ADDR_MULTICAST 0x0002U +#define IPV6_ADDR_ANYCAST 0x0004U + +#define IPV6_ADDR_LOOPBACK 0x0010U +#define IPV6_ADDR_LINKLOCAL 0x0020U +#define IPV6_ADDR_SITELOCAL 0x0040U + +#define IPV6_ADDR_COMPATv4 0x0080U + +#define IPV6_ADDR_SCOPE_MASK 0x00f0U + +#define IPV6_ADDR_MAPPED 0x1000U +#define IPV6_ADDR_RESERVED 0x2000U /* reserved address space */ + +/* + * fragmentation header + */ + +struct ipv6_fraghdr { + unsigned char nexthdr; + unsigned char reserved; + unsigned short frag_off; + unsigned long identification; + }; +#define fraghdr ipv6_fraghdr + +#include + +#endif +