[BZ 1865]
authorUlrich Drepper <drepper@redhat.com>
Wed, 16 Nov 2005 07:52:07 +0000 (07:52 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 16 Nov 2005 07:52:07 +0000 (07:52 +0000)
* inet/netinet/icmp6.h: More updates for RFC3542.
* inet/netinet/ip6.h: Likewise.
* sysdeps/unix/sysv/linux/bits/in.h: Adjust for current kernel sources.
Patch by David L Stevens <dlstevens@us.ibm.com>.

ChangeLog
inet/netinet/icmp6.h
inet/netinet/ip6.h
sysdeps/unix/sysv/linux/bits/in.h

index ea2a482..333522c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2005-11-15  Ulrich Drepper  <drepper@redhat.com>
 
+       [BZ 1865]
+       * inet/netinet/icmp6.h: More updates for RFC3542.
+       * inet/netinet/ip6.h: Likewise.
+       * sysdeps/unix/sysv/linux/bits/in.h: Adjust for current kernel sources.
+       Patch by David L Stevens <dlstevens@us.ibm.com>.
+
        * sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c (__fxstatat):
        Return -1 on failure.
        * sysdeps/unix/sysv/linux/fchownat.c (fchownat): Likewise.
index 4b17d9c..c5138a3 100644 (file)
@@ -33,7 +33,7 @@
 
 struct icmp6_filter
   {
-    uint32_t data[8];
+    uint32_t icmp6_filt[8];
   };
 
 struct icmp6_hdr
@@ -67,14 +67,14 @@ struct icmp6_hdr
 
 #define ICMP6_ECHO_REQUEST          128
 #define ICMP6_ECHO_REPLY            129
-#define ICMP6_MEMBERSHIP_QUERY      130
-#define ICMP6_MEMBERSHIP_REPORT     131
-#define ICMP6_MEMBERSHIP_REDUCTION  132
+#define MLD_LISTENER_QUERY          130
+#define MLD_LISTENER_REPORT         131
+#define MLD_LISTENER_REDUCTION      132
 
 #define ICMP6_DST_UNREACH_NOROUTE     0 /* no route to destination */
 #define ICMP6_DST_UNREACH_ADMIN       1 /* communication with destination */
                                         /* administratively prohibited */
-#define ICMP6_DST_UNREACH_NOTNEIGHBOR 2 /* not a neighbor */
+#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 /* bad port */
 
@@ -86,16 +86,16 @@ struct icmp6_hdr
 #define ICMP6_PARAMPROB_OPTION        2 /* unrecognized IPv6 option */
 
 #define ICMP6_FILTER_WILLPASS(type, filterp) \
-       ((((filterp)->data[(type) >> 5]) & (1 << ((type) & 31))) == 0)
+       ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) == 0)
 
 #define ICMP6_FILTER_WILLBLOCK(type, filterp) \
-       ((((filterp)->data[(type) >> 5]) & (1 << ((type) & 31))) != 0)
+       ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) != 0)
 
 #define ICMP6_FILTER_SETPASS(type, filterp) \
-       ((((filterp)->data[(type) >> 5]) &= ~(1 << ((type) & 31))))
+       ((((filterp)->icmp6_filt[(type) >> 5]) &= ~(1 << ((type) & 31))))
 
 #define ICMP6_FILTER_SETBLOCK(type, filterp) \
-       ((((filterp)->data[(type) >> 5]) |=  (1 << ((type) & 31))))
+       ((((filterp)->icmp6_filt[(type) >> 5]) |=  (1 << ((type) & 31))))
 
 #define ICMP6_FILTER_SETPASSALL(filterp) \
        memset (filterp, 0, sizeof (struct icmp6_filter));
@@ -232,6 +232,98 @@ struct nd_opt_mtu             /* MTU option */
     uint32_t  nd_opt_mtu_mtu;
   };
 
+struct mld_hdr
+  {
+    struct icmp6_hdr    mld_icmp6_hdr;
+    struct in6_addr     mld_addr; /* multicast address */
+  };
+
+#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 ICMP6_ROUTER_RENUMBERING    138
+
+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;
+  };
+
+#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]
+
+/* Router renumbering flags */
+#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
+
+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;
+  };
+
+/* PCO code values */
+#define RPM_PCO_ADD             1
+#define RPM_PCO_CHANGE          2
+#define RPM_PCO_SETGLOBAL       3
+
+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;
+  };
+
+#define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK  0x20
+#define ICMP6_RR_PCOUSE_RAFLAGS_AUTO    0x10
+
+#if BYTE_ORDER == BIG_ENDIAN
+# define ICMP6_RR_PCOUSE_DECRVLTIME      0x80000000
+# define ICMP6_RR_PCOUSE_DECRPLTIME      0x40000000
+#elif BYTE_ORDER == LITTLE_ENDIAN
+# define ICMP6_RR_PCOUSE_DECRVLTIME      0x80
+# define ICMP6_RR_PCOUSE_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;
+  };
+
+#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
+
 /* Mobile IPv6 extension: Advertisement Interval.  */
 struct nd_opt_adv_interval
   {
index 7045836..0ad62f8 100644 (file)
@@ -111,8 +111,78 @@ struct ip6_frag
 #define IP6F_MORE_FRAG      0x0100  /* more-fragments flag */
 #endif
 
+/* IPv6 options */
+struct ip6_opt
+  {
+    uint8_t  ip6o_type;
+    uint8_t  ip6o_len;
+  };
+
+/* The high-order 3 bits of the option type define the behavior
+ * when processing an unknown option and whether or not the option
+ * content changes in flight.
+ */
+#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_TYPE_MUTABLE    0x20
+
 /* Special option types for padding.  */
 #define IP6OPT_PAD1    0
 #define IP6OPT_PADN    1
 
+#define IP6OPT_JUMBO           0xc2
+#define IP6OPT_NSAP_ADDR       0xc3
+#define IP6OPT_TUNNEL_LIMIT    0x04
+#define IP6OPT_ROUTER_ALERT    0x05
+
+/* Jumbo Payload Option */
+struct ip6_opt_jumbo
+  {
+    uint8_t  ip6oj_type;
+    uint8_t  ip6oj_len;
+    uint8_t  ip6oj_jumbo_len[4];
+  };
+#define IP6OPT_JUMBO_LEN       6
+
+/* NSAP Address Option */
+struct ip6_opt_nsap
+  {
+    uint8_t  ip6on_type;
+    uint8_t  ip6on_len;
+    uint8_t  ip6on_src_nsap_len;
+    uint8_t  ip6on_dst_nsap_len;
+      /* followed by source NSAP */
+      /* followed by destination NSAP */
+  };
+
+/* Tunnel Limit Option */
+struct ip6_opt_tunnel
+  {
+    uint8_t  ip6ot_type;
+    uint8_t  ip6ot_len;
+    uint8_t  ip6ot_encap_limit;
+  };
+
+/* Router Alert Option */
+struct ip6_opt_router
+  {
+    uint8_t  ip6or_type;
+    uint8_t  ip6or_len;
+    uint8_t  ip6or_value[2];
+  };
+
+/* 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 /* BYTE_ORDER == LITTLE_ENDING */
+# define IP6_ALERT_MLD 0x0000
+# define IP6_ALERT_RSVP        0x0100
+# define IP6_ALERT_AN  0x0200
+#endif
+
 #endif /* netinet/ip6.h */
index 9d58789..6880a2e 100644 (file)
@@ -105,13 +105,13 @@ struct in_pktinfo
    The first word in the comment at the right is the data type used;
    "bool" means a boolean value stored in an `int'.  */
 #define IPV6_ADDRFORM          1
-#define IPV6_PKTINFO           2
-#define IPV6_HOPOPTS           3
-#define IPV6_DSTOPTS           4
-#define IPV6_RTHDR             5
-#define IPV6_PKTOPTIONS                6
+#define IPV6_2292PKTINFO       2
+#define IPV6_2292HOPOPTS       3
+#define IPV6_2292DSTOPTS       4
+#define IPV6_2292RTHDR         5
+#define IPV6_2292PKTOPTIONS    6
 #define IPV6_CHECKSUM          7
-#define IPV6_HOPLIMIT          8
+#define IPV6_2292HOPLIMIT      8
 
 #define SCM_SRCRT              IPV6_RXSRCRT
 
@@ -133,6 +133,21 @@ struct in_pktinfo
 #define IPV6_IPSEC_POLICY      34
 #define IPV6_XFRM_POLICY       35
 
+#define IPV6_RECVPKTINFO       49
+#define IPV6_PKTINFO           50
+#define IPV6_RECVHOPLIMIT      51
+#define IPV6_HOPLIMIT          52
+#define IPV6_RECVHOPOPTS       53
+#define IPV6_HOPOPTS           54
+#define IPV6_RTHDRDSTOPTS      55
+#define IPV6_RECVRTHDR         56
+#define IPV6_RTHDR             57
+#define IPV6_RECVDSTOPTS       58
+#define IPV6_DSTOPTS           59
+
+#define IPV6_RECVTCLASS                66
+#define IPV6_TCLASS            67
+
 /* Obsolete synonyms for the above.  */
 #define IPV6_ADD_MEMBERSHIP    IPV6_JOIN_GROUP
 #define IPV6_DROP_MEMBERSHIP   IPV6_LEAVE_GROUP