"Fossies" - the Fresh Open Source Software Archive

Member "daq-2.0.7/sfbpf/IP6_misc.h" (8 Apr 2020, 5730 Bytes) of package /linux/misc/daq-2.0.7.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "IP6_misc.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 2.0.6_vs_2.0.7.

    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: //depot/firepower/daq-opensource/DAQ_2_0_7/sfbpf/IP6_misc.h#1 $ (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__ */