0,0 → 1,175 |
/*!\file netinet/ipv6.h |
* Linux IPv6 definitions. |
*/ |
|
/* |
* Linux INET6 implementation |
* |
* Authors: |
* Pedro Roque <roque@di.fc.ul.pt> |
* |
* $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 <netinet/in.h> instread. |
*/ |
|
#ifndef _NET_IPV6_H |
#define _NET_IPV6_H |
|
#ifndef __NETINET_IN_H |
#include <netinet/in.h> /* in6_addr */ |
#endif |
|
/* |
* Advanced API |
* source interface/address selection, source routing, etc... |
* *under construction* |
*/ |
|
#include <sys/packon.h> |
|
/* |
* 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 <sys/packoff.h> |
|
#endif |
|