[haiku-commits] r37599 - in haiku/trunk: headers/posix/netinet headers/posix/netinet6 src/libs/compat/freebsd_network/compat/netinet

  • From: axeld@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 19 Jul 2010 17:03:37 +0200 (CEST)

Author: axeld
Date: 2010-07-19 17:03:37 +0200 (Mon, 19 Jul 2010)
New Revision: 37599
Changeset: http://dev.haiku-os.org/changeset/37599

Added:
   haiku/trunk/headers/posix/netinet/icmp6.h
   haiku/trunk/headers/posix/netinet/ip6.h
Removed:
   haiku/trunk/src/libs/compat/freebsd_network/compat/netinet/ip6.h
Modified:
   haiku/trunk/headers/posix/netinet/in.h
   haiku/trunk/headers/posix/netinet6/in6.h
Log:
Patch by Atis Elsts with only minor changes by myself:
* Moved ip6.h header from FreeBSD private to posix/netinet.
* Added some more IPv6 support definitions to in.h, and in6.h.
* Added icmp6.h header.


Added: haiku/trunk/headers/posix/netinet/icmp6.h
===================================================================
--- haiku/trunk/headers/posix/netinet/icmp6.h                           (rev 0)
+++ haiku/trunk/headers/posix/netinet/icmp6.h   2010-07-19 15:03:37 UTC (rev 
37599)
@@ -0,0 +1,524 @@
+/*-
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*-
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ip_icmp.h   8.1 (Berkeley) 6/10/93
+ */
+#ifndef _NETINET_ICMP6_H_
+#define _NETINET_ICMP6_H_
+
+
+#include <endian.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <netinet6/in6.h>
+
+
+#define ICMPV6_PLD_MAXLEN      1232    /* IPV6_MMTU - sizeof(struct ip6_hdr)
+                                          - sizeof(struct icmp6_hdr) */
+
+struct icmp6_hdr {
+       uint8_t icmp6_type;     /* type field */
+       uint8_t icmp6_code;     /* code field */
+       uint16_t        icmp6_cksum;    /* checksum field */
+       union {
+               uint32_t        icmp6_un_data32[1]; /* type-specific field */
+               uint16_t        icmp6_un_data16[2]; /* type-specific field */
+               uint8_t         icmp6_un_data8[4];  /* type-specific field */
+       } icmp6_dataun;
+} _PACKED;
+
+#define icmp6_data32   icmp6_dataun.icmp6_un_data32
+#define icmp6_data16   icmp6_dataun.icmp6_un_data16
+#define icmp6_data8    icmp6_dataun.icmp6_un_data8
+#define icmp6_pptr     icmp6_data32[0]         /* parameter prob */
+#define icmp6_mtu      icmp6_data32[0]         /* packet too big */
+#define icmp6_id       icmp6_data16[0]         /* echo request/reply */
+#define icmp6_seq      icmp6_data16[1]         /* echo request/reply */
+#define icmp6_maxdelay icmp6_data16[0]         /* mcast group membership */
+
+#define ICMP6_DST_UNREACH              1       /* dest unreachable, codes: */
+#define ICMP6_PACKET_TOO_BIG   2       /* packet too big */
+#define ICMP6_TIME_EXCEEDED            3       /* time exceeded, code: */
+#define ICMP6_PARAM_PROB               4       /* ip6 header bad */
+
+#define ICMP6_ECHO_REQUEST             128     /* echo service */
+#define ICMP6_ECHO_REPLY               129     /* echo reply */
+#define MLD_LISTENER_QUERY             130     /* multicast listener query */
+#define MLD_LISTENER_REPORT            131     /* multicast listener report */
+#define MLD_LISTENER_DONE              132     /* multicast listener done */
+#define MLD_LISTENER_REDUCTION MLD_LISTENER_DONE /* RFC3542 definition */
+
+/* RFC2292 decls */
+#define ICMP6_MEMBERSHIP_QUERY         130     /* group membership query */
+#define ICMP6_MEMBERSHIP_REPORT                131     /* group membership 
report */
+#define ICMP6_MEMBERSHIP_REDUCTION     132     /* group membership termination 
*/
+
+#ifndef _KERNEL
+/* the followings are for backward compatibility to old KAME apps. */
+#define MLD6_LISTENER_QUERY    MLD_LISTENER_QUERY
+#define MLD6_LISTENER_REPORT   MLD_LISTENER_REPORT
+#define MLD6_LISTENER_DONE     MLD_LISTENER_DONE
+#endif
+
+#define ND_ROUTER_SOLICIT              133     /* router solicitation */
+#define ND_ROUTER_ADVERT               134     /* router advertisement */
+#define ND_NEIGHBOR_SOLICIT            135     /* neighbor solicitation */
+#define ND_NEIGHBOR_ADVERT             136     /* neighbor advertisement */
+#define ND_REDIRECT                    137     /* redirect */
+
+#define ICMP6_ROUTER_RENUMBERING       138     /* router renumbering */
+
+#define ICMP6_WRUREQUEST               139     /* who are you request */
+#define ICMP6_WRUREPLY                 140     /* who are you reply */
+#define ICMP6_FQDN_QUERY               139     /* FQDN query */
+#define ICMP6_FQDN_REPLY               140     /* FQDN reply */
+#define ICMP6_NI_QUERY                 139     /* node information request */
+#define ICMP6_NI_REPLY                 140     /* node information reply */
+#define MLDV2_LISTENER_REPORT          143     /* RFC3810 listener report */
+
+/* The definitions below are experimental. TBA */
+#define MLD_MTRACE_RESP                        200     /* mtrace resp (to 
sender) */
+#define MLD_MTRACE                     201     /* mtrace messages */
+
+#ifndef _KERNEL
+#define MLD6_MTRACE_RESP       MLD_MTRACE_RESP
+#define MLD6_MTRACE            MLD_MTRACE
+#endif
+
+#define ICMP6_MAXTYPE                  201
+
+#define ICMP6_DST_UNREACH_NOROUTE      0       /* no route to destination */
+#define ICMP6_DST_UNREACH_ADMIN                1       /* administratively 
prohibited */
+#define ICMP6_DST_UNREACH_NOTNEIGHBOR  2       /* not a neighbor(obsolete) */
+#define ICMP6_DST_UNREACH_BEYONDSCOPE  2       /* beyond scope of source 
address */
+#define ICMP6_DST_UNREACH_ADDR         3       /* address unreachable */
+#define ICMP6_DST_UNREACH_NOPORT       4       /* port unreachable */
+
+#define ICMP6_TIME_EXCEED_TRANSIT      0       /* ttl==0 in transit */
+#define ICMP6_TIME_EXCEED_REASSEMBLY   1       /* ttl==0 in reass */
+
+#define ICMP6_PARAMPROB_HEADER                 0       /* erroneous header 
field */
+#define ICMP6_PARAMPROB_NEXTHEADER     1       /* unrecognized next header */
+#define ICMP6_PARAMPROB_OPTION         2       /* unrecognized option */
+
+#define ICMP6_INFOMSG_MASK             0x80    /* all informational messages */
+
+#define ICMP6_NI_SUBJ_IPV6     0       /* Query Subject is an IPv6 address */
+#define ICMP6_NI_SUBJ_FQDN     1       /* Query Subject is a Domain name */
+#define ICMP6_NI_SUBJ_IPV4     2       /* Query Subject is an IPv4 address */
+
+#define ICMP6_NI_SUCCESS       0       /* node information successful reply */
+#define ICMP6_NI_REFUSED       1       /* node information request is refused 
*/
+#define ICMP6_NI_UNKNOWN       2       /* unknown Qtype */
+
+#define ICMP6_ROUTER_RENUMBERING_COMMAND  0    /* rr command */
+#define ICMP6_ROUTER_RENUMBERING_RESULT   1    /* rr result */
+#define ICMP6_ROUTER_RENUMBERING_SEQNUM_RESET   255    /* rr seq num reset */
+
+/* Used in kernel only */
+#define ND_REDIRECT_ONLINK     0       /* redirect to an on-link node */
+#define ND_REDIRECT_ROUTER     1       /* redirect to a better router */
+
+/*
+ * Multicast Listener Discovery
+ */
+struct mld_hdr {
+       struct icmp6_hdr        mld_icmp6_hdr;
+       struct in6_addr         mld_addr; /* multicast address */
+} _PACKED;
+
+/* definitions to provide backward compatibility to old KAME applications */
+#ifndef _KERNEL
+#define mld6_hdr       mld_hdr
+#define mld6_type      mld_type
+#define mld6_code      mld_code
+#define mld6_cksum     mld_cksum
+#define mld6_maxdelay  mld_maxdelay
+#define mld6_reserved  mld_reserved
+#define mld6_addr      mld_addr
+#endif
+
+/* shortcut macro definitions */
+#define mld_type       mld_icmp6_hdr.icmp6_type
+#define mld_code       mld_icmp6_hdr.icmp6_code
+#define mld_cksum      mld_icmp6_hdr.icmp6_cksum
+#define mld_maxdelay   mld_icmp6_hdr.icmp6_data16[0]
+#define mld_reserved   mld_icmp6_hdr.icmp6_data16[1]
+#define mld_v2_reserved        mld_icmp6_hdr.icmp6_data16[0]
+#define mld_v2_numrecs mld_icmp6_hdr.icmp6_data16[1]
+
+/*
+ * Neighbor Discovery
+ */
+
+struct nd_router_solicit {     /* router solicitation */
+       struct icmp6_hdr        nd_rs_hdr;
+       /* could be followed by options */
+} _PACKED;
+
+#define nd_rs_type     nd_rs_hdr.icmp6_type
+#define nd_rs_code     nd_rs_hdr.icmp6_code
+#define nd_rs_cksum    nd_rs_hdr.icmp6_cksum
+#define nd_rs_reserved nd_rs_hdr.icmp6_data32[0]
+
+struct nd_router_advert {      /* router advertisement */
+       struct icmp6_hdr        nd_ra_hdr;
+       uint32_t                nd_ra_reachable;        /* reachable time */
+       uint32_t                nd_ra_retransmit;       /* retransmit timer */
+       /* could be followed by options */
+} _PACKED;
+
+#define nd_ra_type             nd_ra_hdr.icmp6_type
+#define nd_ra_code             nd_ra_hdr.icmp6_code
+#define nd_ra_cksum            nd_ra_hdr.icmp6_cksum
+#define nd_ra_curhoplimit      nd_ra_hdr.icmp6_data8[0]
+#define nd_ra_flags_reserved   nd_ra_hdr.icmp6_data8[1]
+#define ND_RA_FLAG_MANAGED     0x80
+#define ND_RA_FLAG_OTHER       0x40
+#define ND_RA_FLAG_HA          0x20
+
+/*
+ * Router preference values based on draft-draves-ipngwg-router-selection-01.
+ * These are non-standard definitions.
+ */
+#define ND_RA_FLAG_RTPREF_MASK 0x18 /* 00011000 */
+
+#define ND_RA_FLAG_RTPREF_HIGH 0x08 /* 00001000 */
+#define ND_RA_FLAG_RTPREF_MEDIUM       0x00 /* 00000000 */
+#define ND_RA_FLAG_RTPREF_LOW  0x18 /* 00011000 */
+#define ND_RA_FLAG_RTPREF_RSV  0x10 /* 00010000 */
+
+#define nd_ra_router_lifetime  nd_ra_hdr.icmp6_data16[1]
+
+struct nd_neighbor_solicit {   /* neighbor solicitation */
+       struct icmp6_hdr        nd_ns_hdr;
+       struct in6_addr         nd_ns_target;   /*target address */
+       /* could be followed by options */
+} _PACKED;
+
+#define nd_ns_type             nd_ns_hdr.icmp6_type
+#define nd_ns_code             nd_ns_hdr.icmp6_code
+#define nd_ns_cksum            nd_ns_hdr.icmp6_cksum
+#define nd_ns_reserved         nd_ns_hdr.icmp6_data32[0]
+
+struct nd_neighbor_advert {    /* neighbor advertisement */
+       struct icmp6_hdr        nd_na_hdr;
+       struct in6_addr         nd_na_target;   /* target address */
+       /* could be followed by options */
+} _PACKED;
+
+#define nd_na_type             nd_na_hdr.icmp6_type
+#define nd_na_code             nd_na_hdr.icmp6_code
+#define nd_na_cksum            nd_na_hdr.icmp6_cksum
+#define nd_na_flags_reserved   nd_na_hdr.icmp6_data32[0]
+#if BYTE_ORDER == BIG_ENDIAN
+#define ND_NA_FLAG_ROUTER              0x80000000
+#define ND_NA_FLAG_SOLICITED   0x40000000
+#define ND_NA_FLAG_OVERRIDE            0x20000000
+#else
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define ND_NA_FLAG_ROUTER              0x80
+#define ND_NA_FLAG_SOLICITED   0x40
+#define ND_NA_FLAG_OVERRIDE            0x20
+#endif
+#endif
+
+struct nd_redirect {           /* redirect */
+       struct icmp6_hdr        nd_rd_hdr;
+       struct in6_addr         nd_rd_target;   /* target address */
+       struct in6_addr         nd_rd_dst;      /* destination address */
+       /* could be followed by options */
+} _PACKED;
+
+#define nd_rd_type             nd_rd_hdr.icmp6_type
+#define nd_rd_code             nd_rd_hdr.icmp6_code
+#define nd_rd_cksum            nd_rd_hdr.icmp6_cksum
+#define nd_rd_reserved         nd_rd_hdr.icmp6_data32[0]
+
+struct nd_opt_hdr {            /* Neighbor discovery option header */
+       uint8_t nd_opt_type;
+       uint8_t nd_opt_len;
+       /* followed by option specific data*/
+} _PACKED;
+
+#define ND_OPT_SOURCE_LINKADDR         1
+#define ND_OPT_TARGET_LINKADDR         2
+#define ND_OPT_PREFIX_INFORMATION      3
+#define ND_OPT_REDIRECTED_HEADER       4
+#define ND_OPT_MTU                     5
+
+#define ND_OPT_ROUTE_INFO              200     /* 
draft-ietf-ipngwg-router-preference, not officially assigned yet */
+
+struct nd_opt_prefix_info {    /* prefix information */
+       uint8_t         nd_opt_pi_type;
+       uint8_t         nd_opt_pi_len;
+       uint8_t         nd_opt_pi_prefix_len;
+       uint8_t         nd_opt_pi_flags_reserved;
+       uint32_t        nd_opt_pi_valid_time;
+       uint32_t        nd_opt_pi_preferred_time;
+       uint32_t        nd_opt_pi_reserved2;
+       struct in6_addr nd_opt_pi_prefix;
+} _PACKED;
+
+#define ND_OPT_PI_FLAG_ONLINK          0x80
+#define ND_OPT_PI_FLAG_AUTO                    0x40
+
+struct nd_opt_rd_hdr {         /* redirected header */
+       uint8_t         nd_opt_rh_type;
+       uint8_t         nd_opt_rh_len;
+       uint16_t        nd_opt_rh_reserved1;
+       uint32_t        nd_opt_rh_reserved2;
+       /* followed by IP header and data */
+} _PACKED;
+
+struct nd_opt_mtu {            /* MTU option */
+       uint8_t         nd_opt_mtu_type;
+       uint8_t         nd_opt_mtu_len;
+       uint16_t        nd_opt_mtu_reserved;
+       uint32_t        nd_opt_mtu_mtu;
+} _PACKED;
+
+struct nd_opt_route_info {     /* route info */
+       uint8_t         nd_opt_rti_type;
+       uint8_t         nd_opt_rti_len;
+       uint8_t         nd_opt_rti_prefixlen;
+       uint8_t         nd_opt_rti_flags;
+       uint32_t        nd_opt_rti_lifetime;
+       /* prefix follows */
+} _PACKED;
+
+/*
+ * icmp6 namelookup
+ */
+
+struct icmp6_namelookup {
+       struct icmp6_hdr        icmp6_nl_hdr;
+       uint8_t         icmp6_nl_nonce[8];
+       int32_t         icmp6_nl_ttl;
+#if 0
+       uint8_t         icmp6_nl_len;
+       uint8_t         icmp6_nl_name[3];
+#endif
+       /* could be followed by options */
+} _PACKED;
+
+/*
+ * icmp6 node information
+ */
+struct icmp6_nodeinfo {
+       struct icmp6_hdr icmp6_ni_hdr;
+       uint8_t icmp6_ni_nonce[8];
+       /* could be followed by reply data */
+} _PACKED;
+
+#define ni_type                icmp6_ni_hdr.icmp6_type
+#define ni_code                icmp6_ni_hdr.icmp6_code
+#define ni_cksum       icmp6_ni_hdr.icmp6_cksum
+#define ni_qtype       icmp6_ni_hdr.icmp6_data16[0]
+#define ni_flags       icmp6_ni_hdr.icmp6_data16[1]
+
+#define NI_QTYPE_NOOP          0 /* NOOP  */
+#define NI_QTYPE_SUPTYPES      1 /* Supported Qtypes */
+#define NI_QTYPE_FQDN          2 /* FQDN (draft 04) */
+#define NI_QTYPE_DNSNAME       2 /* DNS Name */
+#define NI_QTYPE_NODEADDR      3 /* Node Addresses */
+#define NI_QTYPE_IPV4ADDR      4 /* IPv4 Addresses */
+
+#if BYTE_ORDER == BIG_ENDIAN
+#define NI_SUPTYPE_FLAG_COMPRESS       0x1
+#define NI_FQDN_FLAG_VALIDTTL          0x1
+#elif BYTE_ORDER == LITTLE_ENDIAN
+#define NI_SUPTYPE_FLAG_COMPRESS       0x0100
+#define NI_FQDN_FLAG_VALIDTTL          0x0100
+#endif
+
+#ifdef NAME_LOOKUPS_04
+#if BYTE_ORDER == BIG_ENDIAN
+#define NI_NODEADDR_FLAG_LINKLOCAL     0x1
+#define NI_NODEADDR_FLAG_SITELOCAL     0x2
+#define NI_NODEADDR_FLAG_GLOBAL                0x4
+#define NI_NODEADDR_FLAG_ALL           0x8
+#define NI_NODEADDR_FLAG_TRUNCATE      0x10
+#define NI_NODEADDR_FLAG_ANYCAST       0x20 /* just experimental. not in spec 
*/
+#elif BYTE_ORDER == LITTLE_ENDIAN
+#define NI_NODEADDR_FLAG_LINKLOCAL     0x0100
+#define NI_NODEADDR_FLAG_SITELOCAL     0x0200
+#define NI_NODEADDR_FLAG_GLOBAL                0x0400
+#define NI_NODEADDR_FLAG_ALL           0x0800
+#define NI_NODEADDR_FLAG_TRUNCATE      0x1000
+#define NI_NODEADDR_FLAG_ANYCAST       0x2000 /* just experimental. not in 
spec */
+#endif
+#else  /* draft-ietf-ipngwg-icmp-name-lookups-05 (and later?) */
+#if BYTE_ORDER == BIG_ENDIAN
+#define NI_NODEADDR_FLAG_TRUNCATE      0x1
+#define NI_NODEADDR_FLAG_ALL           0x2
+#define NI_NODEADDR_FLAG_COMPAT                0x4
+#define NI_NODEADDR_FLAG_LINKLOCAL     0x8
+#define NI_NODEADDR_FLAG_SITELOCAL     0x10
+#define NI_NODEADDR_FLAG_GLOBAL                0x20
+#define NI_NODEADDR_FLAG_ANYCAST       0x40 /* just experimental. not in spec 
*/
+#elif BYTE_ORDER == LITTLE_ENDIAN
+#define NI_NODEADDR_FLAG_TRUNCATE      0x0100
+#define NI_NODEADDR_FLAG_ALL           0x0200
+#define NI_NODEADDR_FLAG_COMPAT                0x0400
+#define NI_NODEADDR_FLAG_LINKLOCAL     0x0800
+#define NI_NODEADDR_FLAG_SITELOCAL     0x1000
+#define NI_NODEADDR_FLAG_GLOBAL                0x2000
+#define NI_NODEADDR_FLAG_ANYCAST       0x4000 /* just experimental. not in 
spec */
+#endif
+#endif
+
+struct ni_reply_fqdn {
+       uint32_t ni_fqdn_ttl;   /* TTL */
+       uint8_t ni_fqdn_namelen; /* length in octets of the FQDN */
+       uint8_t ni_fqdn_name[3]; /* XXX: alignment */
+} _PACKED;
+
+/*
+ * Router Renumbering. as router-renum-08.txt
+ */
+struct icmp6_router_renum {    /* router renumbering header */
+       struct icmp6_hdr        rr_hdr;
+       uint8_t rr_segnum;
+       uint8_t rr_flags;
+       uint16_t        rr_maxdelay;
+       uint32_t        rr_reserved;
+} _PACKED;
+
+#define ICMP6_RR_FLAGS_TEST                    0x80
+#define ICMP6_RR_FLAGS_REQRESULT       0x40
+#define ICMP6_RR_FLAGS_FORCEAPPLY      0x20
+#define ICMP6_RR_FLAGS_SPECSITE                0x10
+#define ICMP6_RR_FLAGS_PREVDONE                0x08
+
+#define rr_type                rr_hdr.icmp6_type
+#define rr_code                rr_hdr.icmp6_code
+#define rr_cksum       rr_hdr.icmp6_cksum
+#define rr_seqnum      rr_hdr.icmp6_data32[0]
+
+struct rr_pco_match {          /* match prefix part */
+       uint8_t         rpm_code;
+       uint8_t         rpm_len;
+       uint8_t         rpm_ordinal;
+       uint8_t         rpm_matchlen;
+       uint8_t         rpm_minlen;
+       uint8_t         rpm_maxlen;
+       uint16_t        rpm_reserved;
+       struct  in6_addr        rpm_prefix;
+} _PACKED;
+
+#define RPM_PCO_ADD                    1
+#define RPM_PCO_CHANGE         2
+#define RPM_PCO_SETGLOBAL      3
+#define RPM_PCO_MAX                    4
+
+struct rr_pco_use {            /* use prefix part */
+       uint8_t         rpu_uselen;
+       uint8_t         rpu_keeplen;
+       uint8_t         rpu_ramask;
+       uint8_t         rpu_raflags;
+       uint32_t        rpu_vltime;
+       uint32_t        rpu_pltime;
+       uint32_t        rpu_flags;
+       struct  in6_addr rpu_prefix;
+} _PACKED;
+#define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK 0x80
+#define ICMP6_RR_PCOUSE_RAFLAGS_AUTO   0x40
+
+#if BYTE_ORDER == BIG_ENDIAN
+#define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME     0x80000000
+#define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME     0x40000000
+#elif BYTE_ORDER == LITTLE_ENDIAN
+#define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME     0x80
+#define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME     0x40
+#endif
+
+struct rr_result {             /* router renumbering result message */
+       uint16_t        rrr_flags;
+       uint8_t         rrr_ordinal;
+       uint8_t         rrr_matchedlen;
+       uint32_t        rrr_ifid;
+       struct  in6_addr rrr_prefix;
+} _PACKED;
+#if BYTE_ORDER == BIG_ENDIAN
+#define ICMP6_RR_RESULT_FLAGS_OOB                      0x0002
+#define ICMP6_RR_RESULT_FLAGS_FORBIDDEN                0x0001
+#elif BYTE_ORDER == LITTLE_ENDIAN
+#define ICMP6_RR_RESULT_FLAGS_OOB                      0x0200
+#define ICMP6_RR_RESULT_FLAGS_FORBIDDEN                0x0100
+#endif
+
+/*
+ * icmp6 filter structures.
+ */
+
+struct icmp6_filter {
+       uint32_t icmp6_filt[8];
+};
+
+
+#define        ICMP6_FILTER_SETPASS(type, filterp) \
+       (((filterp)->icmp6_filt[(type) >> 5]) |= (1 << ((type) & 31)))
+#define        ICMP6_FILTER_SETBLOCK(type, filterp) \
+       (((filterp)->icmp6_filt[(type) >> 5]) &= ~(1 << ((type) & 31)))
+#define        ICMP6_FILTER_WILLPASS(type, filterp) \
+       ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) != 0)
+#define        ICMP6_FILTER_WILLBLOCK(type, filterp) \
+       ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) == 0)
+
+
+#endif /* !_NETINET_ICMP6_H_ */

Modified: haiku/trunk/headers/posix/netinet/in.h
===================================================================
--- haiku/trunk/headers/posix/netinet/in.h      2010-07-19 15:02:34 UTC (rev 
37598)
+++ haiku/trunk/headers/posix/netinet/in.h      2010-07-19 15:03:37 UTC (rev 
37599)
@@ -46,13 +46,19 @@
 
 /* Protocol definitions */
 #define IPPROTO_IP                             0       /* 0, IPv4 */
+#define IPPROTO_HOPOPTS                        0       /* 0, IPv6 hop-by-hop 
options */
 #define IPPROTO_ICMP                   1       /* 1, ICMP (v4) */
 #define IPPROTO_IGMP                   2       /* 2, IGMP (group management) */
 #define IPPROTO_TCP                            6       /* 6, tcp */
 #define IPPROTO_UDP                            17      /* 17, UDP */
 #define IPPROTO_IPV6                   41      /* 41, IPv6 in IPv6 */
 #define IPPROTO_ROUTING                        43      /* 43, Routing */
+#define IPPROTO_FRAGMENT               44      /* 44, IPv6 fragmentation 
header */
+#define IPPROTO_ESP                            50      /* 50, Encap Sec. 
Payload */
+#define IPPROTO_AH                             51      /* 51, Auth Header */
 #define IPPROTO_ICMPV6                 58      /* 58, IPv6 ICMP */
+#define IPPROTO_NONE                   59      /* 59, IPv6 no next header */
+#define IPPROTO_DSTOPTS                        60      /* 60, IPv6 destination 
option */
 #define IPPROTO_ETHERIP                        97      /* 97, Ethernet in IPv4 
*/
 #define IPPROTO_RAW                            255     /* 255 */
 
@@ -149,6 +155,15 @@
 #define IPV6_LEAVE_GROUP                       29      /* struct ipv6_mreq */
 #define IPV6_V6ONLY                                    30      /* int */
 
+#define IPV6_PKTINFO                           31      /* struct ipv6_pktinfo 
*/
+#define IPV6_RECVPKTINFO                       32      /* struct ipv6_pktinfo 
*/
+#define IPV6_HOPLIMIT                          33      /* int */
+#define IPV6_RECVHOPLIMIT                      34      /* int */
+
+#define IPV6_HOPOPTS                           35  /* struct ip6_hbh */
+#define IPV6_DSTOPTS                           36  /* struct ip6_dest */
+#define IPV6_RTHDR                                     37  /* struct ip6_rthdr 
*/
+
 #define INADDR_ANY                                     ((in_addr_t)0x00000000)
 #define INADDR_LOOPBACK                                ((in_addr_t)0x7f000001)
 #define INADDR_BROADCAST                       ((in_addr_t)0xffffffff) /* must 
be masked */

Copied: haiku/trunk/headers/posix/netinet/ip6.h (from rev 37575, 
haiku/trunk/src/libs/compat/freebsd_network/compat/netinet/ip6.h)
===================================================================
--- haiku/trunk/headers/posix/netinet/ip6.h                             (rev 0)
+++ haiku/trunk/headers/posix/netinet/ip6.h     2010-07-19 15:03:37 UTC (rev 
37599)
@@ -0,0 +1,263 @@
+/*-
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*-
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ip.h        8.1 (Berkeley) 6/10/93
+ */
+#ifndef _NETINET_IP6_H_
+#define _NETINET_IP6_H_
+
+
+#include <BeBuild.h>
+
+
+/*
+ * Definition for internet protocol version 6.
+ * RFC 2460
+ */
+
+struct ip6_hdr {
+       union {
+               struct ip6_hdrctl {
+                       u_int32_t ip6_un1_flow; /* 20 bits of flow-ID */
+                       u_int16_t ip6_un1_plen; /* payload length */
+                       u_int8_t  ip6_un1_nxt;  /* next header */
+                       u_int8_t  ip6_un1_hlim; /* hop limit */
+               } ip6_un1;
+               u_int8_t ip6_un2_vfc;   /* 4 bits version, top 4 bits class */
+       } ip6_ctlun;
+       struct in6_addr ip6_src;        /* source address */
+       struct in6_addr ip6_dst;        /* destination address */
+} _PACKED;
+
+#define ip6_vfc                ip6_ctlun.ip6_un2_vfc
+#define ip6_flow       ip6_ctlun.ip6_un1.ip6_un1_flow
+#define ip6_plen       ip6_ctlun.ip6_un1.ip6_un1_plen
+#define ip6_nxt                ip6_ctlun.ip6_un1.ip6_un1_nxt
+#define ip6_hlim       ip6_ctlun.ip6_un1.ip6_un1_hlim
+#define ip6_hops       ip6_ctlun.ip6_un1.ip6_un1_hlim
+
+#define IPV6_VERSION           0x60
+#define IPV6_VERSION_MASK      0xf0
+
+#if BYTE_ORDER == BIG_ENDIAN
+#define IPV6_FLOWINFO_MASK     0x0fffffff      /* flow info (28 bits) */
+#define IPV6_FLOWLABEL_MASK    0x000fffff      /* flow label (20 bits) */
+#else
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define IPV6_FLOWINFO_MASK     0xffffff0f      /* flow info (28 bits) */
+#define IPV6_FLOWLABEL_MASK    0xffff0f00      /* flow label (20 bits) */
+#endif /* LITTLE_ENDIAN */
+#endif
+#if 1
+/* ECN bits proposed by Sally Floyd */
+#define IP6TOS_CE              0x01    /* congestion experienced */
+#define IP6TOS_ECT             0x02    /* ECN-capable transport */
+#endif
+
+/*
+ * Extension Headers
+ */
+
+struct ip6_ext {
+       u_int8_t ip6e_nxt;
+       u_int8_t ip6e_len;
+} _PACKED;
+
+/* Hop-by-Hop options header */
+/* XXX should we pad it to force alignment on an 8-byte boundary? */
+struct ip6_hbh {
+       u_int8_t ip6h_nxt;      /* next header */
+       u_int8_t ip6h_len;      /* length in units of 8 octets */
+       /* followed by options */
+} _PACKED;
+
+/* Destination options header */
+/* XXX should we pad it to force alignment on an 8-byte boundary? */
+struct ip6_dest {
+       u_int8_t ip6d_nxt;      /* next header */
+       u_int8_t ip6d_len;      /* length in units of 8 octets */
+       /* followed by options */
+} _PACKED;
+
+/* Option types and related macros */
+#define IP6OPT_PAD1            0x00    /* 00 0 00000 */
+#define IP6OPT_PADN            0x01    /* 00 0 00001 */
+#define IP6OPT_JUMBO           0xC2    /* 11 0 00010 = 194 */
+#define IP6OPT_NSAP_ADDR       0xC3    /* 11 0 00011 */
+#define IP6OPT_TUNNEL_LIMIT    0x04    /* 00 0 00100 */
+#ifndef _KERNEL
+#define IP6OPT_RTALERT         0x05    /* 00 0 00101 (KAME definition) */
+#endif
+#define IP6OPT_ROUTER_ALERT    0x05    /* 00 0 00101 (RFC3542, recommended) */
+
+#define IP6OPT_RTALERT_LEN     4
+#define IP6OPT_RTALERT_MLD     0       /* Datagram contains an MLD message */
+#define IP6OPT_RTALERT_RSVP    1       /* Datagram contains an RSVP message */
+#define IP6OPT_RTALERT_ACTNET  2       /* contains an Active Networks msg */
+#define IP6OPT_MINLEN          2
+
+#define IP6OPT_EID             0x8a    /* 10 0 01010 */
+
+#define IP6OPT_TYPE(o)         ((o) & 0xC0)
+#define IP6OPT_TYPE_SKIP       0x00
+#define IP6OPT_TYPE_DISCARD    0x40
+#define IP6OPT_TYPE_FORCEICMP  0x80
+#define IP6OPT_TYPE_ICMP       0xC0
+
+#define IP6OPT_MUTABLE         0x20
+
+/* IPv6 options: common part */
+struct ip6_opt {
+       u_int8_t ip6o_type;
+       u_int8_t ip6o_len;
+} _PACKED;
+
+/* Jumbo Payload Option */
+struct ip6_opt_jumbo {
+       u_int8_t ip6oj_type;
+       u_int8_t ip6oj_len;
+       u_int8_t ip6oj_jumbo_len[4];
+} _PACKED;
+#define IP6OPT_JUMBO_LEN       6
+
+/* NSAP Address Option */
+struct ip6_opt_nsap {
+       u_int8_t ip6on_type;
+       u_int8_t ip6on_len;
+       u_int8_t ip6on_src_nsap_len;
+       u_int8_t ip6on_dst_nsap_len;
+       /* followed by source NSAP */
+       /* followed by destination NSAP */
+} _PACKED;
+
+/* Tunnel Limit Option */
+struct ip6_opt_tunnel {
+       u_int8_t ip6ot_type;
+       u_int8_t ip6ot_len;
+       u_int8_t ip6ot_encap_limit;
+} _PACKED;
+
+/* Router Alert Option */
+struct ip6_opt_router {
+       u_int8_t ip6or_type;
+       u_int8_t ip6or_len;
+       u_int8_t ip6or_value[2];
+} _PACKED;
+/* Router alert values (in network byte order) */
+#if BYTE_ORDER == BIG_ENDIAN
+#define IP6_ALERT_MLD  0x0000
+#define IP6_ALERT_RSVP 0x0001
+#define IP6_ALERT_AN   0x0002
+#else
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define IP6_ALERT_MLD  0x0000
+#define IP6_ALERT_RSVP 0x0100
+#define IP6_ALERT_AN   0x0200
+#endif /* LITTLE_ENDIAN */
+#endif
+
+/* Routing header */
+struct ip6_rthdr {
+       u_int8_t  ip6r_nxt;     /* next header */
+       u_int8_t  ip6r_len;     /* length in units of 8 octets */
+       u_int8_t  ip6r_type;    /* routing type */
+       u_int8_t  ip6r_segleft; /* segments left */
+       /* followed by routing type specific data */
+} _PACKED;
+
+/* Type 0 Routing header */
+struct ip6_rthdr0 {
+       u_int8_t  ip6r0_nxt;            /* next header */
+       u_int8_t  ip6r0_len;            /* length in units of 8 octets */
+       u_int8_t  ip6r0_type;           /* always zero */
+       u_int8_t  ip6r0_segleft;        /* segments left */
+       u_int32_t  ip6r0_reserved;      /* reserved field */
+       /* followed by up to 127 struct in6_addr */
+} _PACKED;
+
+/* Fragment header */
+struct ip6_frag {
+       u_int8_t  ip6f_nxt;             /* next header */
+       u_int8_t  ip6f_reserved;        /* reserved field */
+       u_int16_t ip6f_offlg;           /* offset, reserved, and flag */
+       u_int32_t ip6f_ident;           /* identification */
+} _PACKED;
+
+#if BYTE_ORDER == BIG_ENDIAN
+#define IP6F_OFF_MASK          0xfff8  /* mask out offset from _offlg */
+#define IP6F_RESERVED_MASK     0x0006  /* reserved bits in ip6f_offlg */
+#define IP6F_MORE_FRAG         0x0001  /* more-fragments flag */
+#else /* BYTE_ORDER == LITTLE_ENDIAN */
+#define IP6F_OFF_MASK          0xf8ff  /* mask out offset from _offlg */
+#define IP6F_RESERVED_MASK     0x0600  /* reserved bits in ip6f_offlg */
+#define IP6F_MORE_FRAG         0x0100  /* more-fragments flag */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
+
+/*
+ * Internet implementation parameters.
+ */
+#define IPV6_MAXHLIM   255     /* maximum hoplimit */
+#define IPV6_DEFHLIM   64      /* default hlim */
+#define IPV6_FRAGTTL   120     /* ttl for fragment packets, in slowtimo tick */
+#define IPV6_HLIMDEC   1       /* subtracted when forwarding */
+
+#define IPV6_MMTU      1280    /* minimal MTU and reassembly. 1024 + 256 */
+#define IPV6_MAXPACKET 65535   /* ip6 max packet size without Jumbo payload*/
+#define IPV6_MAXOPTHDR 2048    /* max option header size, 256 64-bit words */
+
+
+#endif /* !_NETINET_IP6_H_ */

Modified: haiku/trunk/headers/posix/netinet6/in6.h
===================================================================
--- haiku/trunk/headers/posix/netinet6/in6.h    2010-07-19 15:02:34 UTC (rev 
37598)
+++ haiku/trunk/headers/posix/netinet6/in6.h    2010-07-19 15:03:37 UTC (rev 
37599)
@@ -42,6 +42,12 @@
 };
 
 
+struct in6_pktinfo {
+       struct in6_addr ipi6_addr;      /* src/dst IPv6 address */
+       unsigned int    ipi6_ifindex;   /* send/recv interface index */
+};
+
+
 /* Non-standard helper defines (same as in FreeBSD, though) */
 #define __IPV6_ADDR_SCOPE_NODELOCAL                    0x01
 #define __IPV6_ADDR_SCOPE_INTFACELOCAL         0x01


Other related posts:

  • » [haiku-commits] r37599 - in haiku/trunk: headers/posix/netinet headers/posix/netinet6 src/libs/compat/freebsd_network/compat/netinet - axeld