mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-27 03:33:33 +08:00
[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>.
This commit is contained in:
parent
baf532c127
commit
c2280dc039
@ -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.
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user