Rev 616 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*!\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