Annotation of embedaddon/libnet/win32/wpdpack/Include/ip6_misc.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (c) 1993, 1994, 1997
                      3:  *     The Regents of the University of California.  All rights reserved.
                      4:  *
                      5:  * Redistribution and use in source and binary forms, with or without
                      6:  * modification, are permitted provided that: (1) source code distributions
                      7:  * retain the above copyright notice and this paragraph in its entirety, (2)
                      8:  * distributions including binary code include the above copyright notice and
                      9:  * this paragraph in its entirety in the documentation or other materials
                     10:  * provided with the distribution, and (3) all advertising materials mentioning
                     11:  * features or use of this software display the following acknowledgement:
                     12:  * ``This product includes software developed by the University of California,
                     13:  * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
                     14:  * the University nor the names of its contributors may be used to endorse
                     15:  * or promote products derived from this software without specific prior
                     16:  * written permission.
                     17:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
                     18:  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
                     19:  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     20:  *
                     21:  * @(#) $Header: /tcpdump/master/libpcap/Win32/Include/ip6_misc.h,v 1.5 2006-01-22 18:02:18 gianluca Exp $ (LBL)
                     22:  */
                     23: 
                     24: /*
                     25:  * This file contains a collage of declarations for IPv6 from FreeBSD not present in Windows
                     26:  */
                     27: 
                     28: #include <winsock2.h>
                     29: 
                     30: #include <ws2tcpip.h>
                     31: 
                     32: #ifndef __MINGW32__
                     33: #define        IN_MULTICAST(a)         IN_CLASSD(a)
                     34: #endif
                     35: 
                     36: #define        IN_EXPERIMENTAL(a)      ((((u_int32_t) (a)) & 0xf0000000) == 0xf0000000)
                     37: 
                     38: #define        IN_LOOPBACKNET          127
                     39: 
                     40: #if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)
                     41: /* IPv6 address */
                     42: struct in6_addr
                     43:   {
                     44:     union
                     45:       {
                     46:        u_int8_t                u6_addr8[16];
                     47:        u_int16_t       u6_addr16[8];
                     48:        u_int32_t       u6_addr32[4];
                     49:       } in6_u;
                     50: #define s6_addr                        in6_u.u6_addr8
                     51: #define s6_addr16              in6_u.u6_addr16
                     52: #define s6_addr32              in6_u.u6_addr32
                     53: #define s6_addr64              in6_u.u6_addr64
                     54:   };
                     55: 
                     56: #define IN6ADDR_ANY_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
                     57: #define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
                     58: #endif /* __MINGW32__ */
                     59: 
                     60: 
                     61: #if (defined _MSC_VER) || (defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF))
                     62: typedef unsigned short sa_family_t;
                     63: #endif
                     64: 
                     65: 
                     66: #if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)
                     67: 
                     68: #define        __SOCKADDR_COMMON(sa_prefix) \
                     69:   sa_family_t sa_prefix##family
                     70: 
                     71: /* Ditto, for IPv6.  */
                     72: struct sockaddr_in6
                     73:   {
                     74:     __SOCKADDR_COMMON (sin6_);
                     75:     u_int16_t sin6_port;               /* Transport layer port # */
                     76:     u_int32_t sin6_flowinfo;   /* IPv6 flow information */
                     77:     struct in6_addr sin6_addr; /* IPv6 address */
                     78:   };
                     79: 
                     80: #define IN6_IS_ADDR_V4MAPPED(a) \
                     81:        ((((u_int32_t *) (a))[0] == 0) && (((u_int32_t *) (a))[1] == 0) && \
                     82:         (((u_int32_t *) (a))[2] == htonl (0xffff)))
                     83: 
                     84: #define IN6_IS_ADDR_MULTICAST(a) (((u_int8_t *) (a))[0] == 0xff)
                     85: 
                     86: #define IN6_IS_ADDR_LINKLOCAL(a) \
                     87:        ((((u_int32_t *) (a))[0] & htonl (0xffc00000)) == htonl (0xfe800000))
                     88: 
                     89: #define IN6_IS_ADDR_LOOPBACK(a) \
                     90:        (((u_int32_t *) (a))[0] == 0 && ((u_int32_t *) (a))[1] == 0 && \
                     91:         ((u_int32_t *) (a))[2] == 0 && ((u_int32_t *) (a))[3] == htonl (1))
                     92: #endif /* __MINGW32__ */
                     93: 
                     94: #define ip6_vfc   ip6_ctlun.ip6_un2_vfc
                     95: #define ip6_flow  ip6_ctlun.ip6_un1.ip6_un1_flow
                     96: #define ip6_plen  ip6_ctlun.ip6_un1.ip6_un1_plen
                     97: #define ip6_nxt   ip6_ctlun.ip6_un1.ip6_un1_nxt
                     98: #define ip6_hlim  ip6_ctlun.ip6_un1.ip6_un1_hlim
                     99: #define ip6_hops  ip6_ctlun.ip6_un1.ip6_un1_hlim
                    100: 
                    101: #define nd_rd_type               nd_rd_hdr.icmp6_type
                    102: #define nd_rd_code               nd_rd_hdr.icmp6_code
                    103: #define nd_rd_cksum              nd_rd_hdr.icmp6_cksum
                    104: #define nd_rd_reserved           nd_rd_hdr.icmp6_data32[0]
                    105: 
                    106: /*
                    107:  *     IPV6 extension headers
                    108:  */
                    109: #define IPPROTO_HOPOPTS                0       /* IPv6 hop-by-hop options      */
                    110: #define IPPROTO_IPV6           41  /* IPv6 header.  */
                    111: #define IPPROTO_ROUTING                43      /* IPv6 routing header          */
                    112: #define IPPROTO_FRAGMENT       44      /* IPv6 fragmentation header    */
                    113: #define IPPROTO_ESP            50      /* encapsulating security payload */
                    114: #define IPPROTO_AH             51      /* authentication header        */
                    115: #define IPPROTO_ICMPV6         58      /* ICMPv6                       */
                    116: #define IPPROTO_NONE           59      /* IPv6 no next header          */
                    117: #define IPPROTO_DSTOPTS                60      /* IPv6 destination options     */
                    118: #define IPPROTO_PIM                    103 /* Protocol Independent Multicast.  */
                    119: 
                    120: #define         IPV6_RTHDR_TYPE_0 0
                    121: 
                    122: /* Option types and related macros */
                    123: #define IP6OPT_PAD1            0x00    /* 00 0 00000 */
                    124: #define IP6OPT_PADN            0x01    /* 00 0 00001 */
                    125: #define IP6OPT_JUMBO           0xC2    /* 11 0 00010 = 194 */
                    126: #define IP6OPT_JUMBO_LEN       6
                    127: #define IP6OPT_ROUTER_ALERT    0x05    /* 00 0 00101 */
                    128: 
                    129: #define IP6OPT_RTALERT_LEN     4
                    130: #define IP6OPT_RTALERT_MLD     0       /* Datagram contains an MLD message */
                    131: #define IP6OPT_RTALERT_RSVP    1       /* Datagram contains an RSVP message */
                    132: #define IP6OPT_RTALERT_ACTNET  2       /* contains an Active Networks msg */
                    133: #define IP6OPT_MINLEN          2
                    134: 
                    135: #define IP6OPT_BINDING_UPDATE  0xc6    /* 11 0 00110 */
                    136: #define IP6OPT_BINDING_ACK     0x07    /* 00 0 00111 */
                    137: #define IP6OPT_BINDING_REQ     0x08    /* 00 0 01000 */
                    138: #define IP6OPT_HOME_ADDRESS    0xc9    /* 11 0 01001 */
                    139: #define IP6OPT_EID             0x8a    /* 10 0 01010 */
                    140: 
                    141: #define IP6OPT_TYPE(o)         ((o) & 0xC0)
                    142: #define IP6OPT_TYPE_SKIP       0x00
                    143: #define IP6OPT_TYPE_DISCARD    0x40
                    144: #define IP6OPT_TYPE_FORCEICMP  0x80
                    145: #define IP6OPT_TYPE_ICMP       0xC0
                    146: 
                    147: #define IP6OPT_MUTABLE         0x20
                    148: 
                    149: 
                    150: #if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)
                    151: #ifndef EAI_ADDRFAMILY
                    152: struct addrinfo {
                    153:        int     ai_flags;       /* AI_PASSIVE, AI_CANONNAME */
                    154:        int     ai_family;      /* PF_xxx */
                    155:        int     ai_socktype;    /* SOCK_xxx */
                    156:        int     ai_protocol;    /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
                    157:        size_t  ai_addrlen;     /* length of ai_addr */
                    158:        char    *ai_canonname;  /* canonical name for hostname */
                    159:        struct sockaddr *ai_addr;       /* binary address */
                    160:        struct addrinfo *ai_next;       /* next structure in linked list */
                    161: };
                    162: #endif
                    163: #endif /* __MINGW32__ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>