1511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* 2511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Copyright (c) 1993, 1994, 1997 3511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * The Regents of the University of California. All rights reserved. 4511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 5511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Redistribution and use in source and binary forms, with or without 6511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * modification, are permitted provided that: (1) source code distributions 7511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * retain the above copyright notice and this paragraph in its entirety, (2) 8511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * distributions including binary code include the above copyright notice and 9511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * this paragraph in its entirety in the documentation or other materials 10511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * provided with the distribution, and (3) all advertising materials mentioning 11511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * features or use of this software display the following acknowledgement: 12511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * ``This product includes software developed by the University of California, 13511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 14511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * the University nor the names of its contributors may be used to endorse 15511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * or promote products derived from this software without specific prior 16511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * written permission. 17511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 18511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 19511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 20511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 21511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * @(#) $Header: /tcpdump/master/libpcap/Win32/Include/ip6_misc.h,v 1.5 2006-01-22 18:02:18 gianluca Exp $ (LBL) 22511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 23511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 24511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* 25511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * This file contains a collage of declarations for IPv6 from FreeBSD not present in Windows 26511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 27511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 28511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#include <winsock2.h> 29511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 30511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#include <ws2tcpip.h> 31511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 32511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef __MINGW32__ 33511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IN_MULTICAST(a) IN_CLASSD(a) 34511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 35511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 36511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IN_EXPERIMENTAL(a) ((((u_int32_t) (a)) & 0xf0000000) == 0xf0000000) 37511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 38511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IN_LOOPBACKNET 127 39511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 40511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF) 41511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* IPv6 address */ 42511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct in6_addr 43511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { 44511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall union 45511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { 46511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall u_int8_t u6_addr8[16]; 47511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall u_int16_t u6_addr16[8]; 48511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall u_int32_t u6_addr32[4]; 49511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } in6_u; 50511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define s6_addr in6_u.u6_addr8 51511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define s6_addr16 in6_u.u6_addr16 52511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define s6_addr32 in6_u.u6_addr32 53511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define s6_addr64 in6_u.u6_addr64 54511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall }; 55511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 56511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IN6ADDR_ANY_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } 57511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } 58511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif /* __MINGW32__ */ 59511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 60511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 61511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#if (defined _MSC_VER) || (defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)) 62511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltypedef unsigned short sa_family_t; 63511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 64511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 65511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 66511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF) 67511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 68511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define __SOCKADDR_COMMON(sa_prefix) \ 69511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall sa_family_t sa_prefix##family 70511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 71511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* Ditto, for IPv6. */ 72511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct sockaddr_in6 73511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { 74511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall __SOCKADDR_COMMON (sin6_); 75511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall u_int16_t sin6_port; /* Transport layer port # */ 76511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall u_int32_t sin6_flowinfo; /* IPv6 flow information */ 77511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall struct in6_addr sin6_addr; /* IPv6 address */ 78511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall }; 79511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 80511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IN6_IS_ADDR_V4MAPPED(a) \ 81511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ((((u_int32_t *) (a))[0] == 0) && (((u_int32_t *) (a))[1] == 0) && \ 82511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall (((u_int32_t *) (a))[2] == htonl (0xffff))) 83511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 84511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IN6_IS_ADDR_MULTICAST(a) (((u_int8_t *) (a))[0] == 0xff) 85511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 86511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IN6_IS_ADDR_LINKLOCAL(a) \ 87511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ((((u_int32_t *) (a))[0] & htonl (0xffc00000)) == htonl (0xfe800000)) 88511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 89511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IN6_IS_ADDR_LOOPBACK(a) \ 90511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall (((u_int32_t *) (a))[0] == 0 && ((u_int32_t *) (a))[1] == 0 && \ 91511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ((u_int32_t *) (a))[2] == 0 && ((u_int32_t *) (a))[3] == htonl (1)) 92511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif /* __MINGW32__ */ 93511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 94511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define ip6_vfc ip6_ctlun.ip6_un2_vfc 95511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow 96511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen 97511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define ip6_nxt ip6_ctlun.ip6_un1.ip6_un1_nxt 98511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim 99511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim 100511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 101511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define nd_rd_type nd_rd_hdr.icmp6_type 102511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define nd_rd_code nd_rd_hdr.icmp6_code 103511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define nd_rd_cksum nd_rd_hdr.icmp6_cksum 104511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define nd_rd_reserved nd_rd_hdr.icmp6_data32[0] 105511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 106511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* 107511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * IPV6 extension headers 108511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 109511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IPPROTO_HOPOPTS 0 /* IPv6 hop-by-hop options */ 110511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IPPROTO_IPV6 41 /* IPv6 header. */ 111511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IPPROTO_ROUTING 43 /* IPv6 routing header */ 112511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IPPROTO_FRAGMENT 44 /* IPv6 fragmentation header */ 113511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IPPROTO_ESP 50 /* encapsulating security payload */ 114511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IPPROTO_AH 51 /* authentication header */ 115511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IPPROTO_ICMPV6 58 /* ICMPv6 */ 116511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IPPROTO_NONE 59 /* IPv6 no next header */ 117511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IPPROTO_DSTOPTS 60 /* IPv6 destination options */ 118511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IPPROTO_PIM 103 /* Protocol Independent Multicast. */ 119511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 120511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IPV6_RTHDR_TYPE_0 0 121511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 122511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* Option types and related macros */ 123511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_PAD1 0x00 /* 00 0 00000 */ 124511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_PADN 0x01 /* 00 0 00001 */ 125511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_JUMBO 0xC2 /* 11 0 00010 = 194 */ 126511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_JUMBO_LEN 6 127511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_ROUTER_ALERT 0x05 /* 00 0 00101 */ 128511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 129511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_RTALERT_LEN 4 130511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_RTALERT_MLD 0 /* Datagram contains an MLD message */ 131511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_RTALERT_RSVP 1 /* Datagram contains an RSVP message */ 132511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_RTALERT_ACTNET 2 /* contains an Active Networks msg */ 133511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_MINLEN 2 134511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 135511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_BINDING_UPDATE 0xc6 /* 11 0 00110 */ 136511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_BINDING_ACK 0x07 /* 00 0 00111 */ 137511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_BINDING_REQ 0x08 /* 00 0 01000 */ 138511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_HOME_ADDRESS 0xc9 /* 11 0 01001 */ 139511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_EID 0x8a /* 10 0 01010 */ 140511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 141511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_TYPE(o) ((o) & 0xC0) 142511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_TYPE_SKIP 0x00 143511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_TYPE_DISCARD 0x40 144511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_TYPE_FORCEICMP 0x80 145511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_TYPE_ICMP 0xC0 146511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 147511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define IP6OPT_MUTABLE 0x20 148511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 149511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 150511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF) 151511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef EAI_ADDRFAMILY 152511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct addrinfo { 153511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ 154511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int ai_family; /* PF_xxx */ 155511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int ai_socktype; /* SOCK_xxx */ 156511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ 157511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall size_t ai_addrlen; /* length of ai_addr */ 158511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall char *ai_canonname; /* canonical name for hostname */ 159511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall struct sockaddr *ai_addr; /* binary address */ 160511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall struct addrinfo *ai_next; /* next structure in linked list */ 161511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall}; 162511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 163511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif /* __MINGW32__ */ 164