Annotation of embedaddon/libnet/win32/wpdpack/Include/ip6_misc.h, revision 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>