diff options
| -rw-r--r-- | include/netinet/icmp6.h | 110 | ||||
| -rw-r--r-- | include/netinet/igmp.h | 45 | ||||
| -rw-r--r-- | include/netinet/ip6.h | 119 | 
3 files changed, 242 insertions, 32 deletions
| diff --git a/include/netinet/icmp6.h b/include/netinet/icmp6.h index 4b17d9cd9..c5138a39c 100644 --- a/include/netinet/icmp6.h +++ b/include/netinet/icmp6.h @@ -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    { diff --git a/include/netinet/igmp.h b/include/netinet/igmp.h index a4683bd7f..67396baaa 100644 --- a/include/netinet/igmp.h +++ b/include/netinet/igmp.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999, 2003 Free Software Foundation, Inc.     This file is part of the GNU C Library.     The GNU C Library is free software; you can redistribute it and/or @@ -22,9 +22,6 @@  #include <sys/cdefs.h>  #include <sys/types.h> -#include <asm/types.h> -#include <linux/igmp.h> -  #ifdef __USE_BSD  #include <netinet/in.h> @@ -74,6 +71,8 @@ struct igmp {    struct in_addr igmp_group;      /* group address */  }; +#define IGMP_MINLEN			8 +  /*   * Message types, including version number.   */ @@ -82,6 +81,44 @@ struct igmp {  #define IGMP_V2_MEMBERSHIP_REPORT	0x16	/* Ver. 2 membership report */  #define IGMP_V2_LEAVE_GROUP		0x17	/* Leave-group message	    */ +#define IGMP_DVMRP			0x13	/* DVMRP routing message    */ +#define IGMP_PIM			0x14	/* PIM routing message      */ +#define IGMP_TRACE			0x15 + +#define IGMP_MTRACE_RESP		0x1e	/* traceroute resp.(to sender)*/ +#define IGMP_MTRACE			0x1f	/* mcast traceroute messages  */ + +#define IGMP_MAX_HOST_REPORT_DELAY	10	/* max delay for response to     */ +						/*  query (in seconds) according */ +						/*  to RFC1112                   */ +#define IGMP_TIMER_SCALE		10	/* denotes that the igmp code field */ +						/* specifies time in 10th of seconds*/ + +/* + * States for the IGMP v2 state table. + */ +#define IGMP_DELAYING_MEMBER	1 +#define IGMP_IDLE_MEMBER	2 +#define IGMP_LAZY_MEMBER	3 +#define IGMP_SLEEPING_MEMBER	4 +#define IGMP_AWAKENING_MEMBER	5 + +/* + * States for IGMP router version cache. + */ +#define IGMP_v1_ROUTER		1 +#define IGMP_v2_ROUTER		2 + +/* + * The following four defininitions are for backwards compatibility. + * They should be removed as soon as all applications are updated to + * use the new constant names. + */ +#define IGMP_HOST_MEMBERSHIP_QUERY	IGMP_MEMBERSHIP_QUERY +#define IGMP_HOST_MEMBERSHIP_REPORT	IGMP_V1_MEMBERSHIP_REPORT +#define IGMP_HOST_NEW_MEMBERSHIP_REPORT	IGMP_V2_MEMBERSHIP_REPORT +#define IGMP_HOST_LEAVE_MESSAGE		IGMP_V2_LEAVE_GROUP +  __END_DECLS  #endif diff --git a/include/netinet/ip6.h b/include/netinet/ip6.h index c6fc2b31c..0ad62f898 100644 --- a/include/netinet/ip6.h +++ b/include/netinet/ip6.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-1997, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1991-1997, 2001, 2003 Free Software Foundation, Inc.     This file is part of the GNU C Library.     The GNU C Library is free software; you can redistribute it and/or @@ -47,51 +47,58 @@ struct ip6_hdr  #define ip6_hlim  ip6_ctlun.ip6_un1.ip6_un1_hlim  #define ip6_hops  ip6_ctlun.ip6_un1.ip6_un1_hlim +/* Generic extension header.  */ +struct ip6_ext +  { +    uint8_t  ip6e_nxt;		/* next header.  */ +    uint8_t  ip6e_len;		/* length in units of 8 octets.  */ +  }; +  /* Hop-by-Hop options header.  */  struct ip6_hbh    { -    uint8_t  ip6h_nxt;        /* next hesder.  */ -    uint8_t  ip6h_len;        /* length in units of 8 octets.  */ +    uint8_t  ip6h_nxt;		/* next header.  */ +    uint8_t  ip6h_len;		/* length in units of 8 octets.  */      /* followed by options */    };  /* Destination options header */  struct ip6_dest    { -    uint8_t  ip6d_nxt;        /* next header */ -    uint8_t  ip6d_len;        /* length in units of 8 octets */ +    uint8_t  ip6d_nxt;		/* next header */ +    uint8_t  ip6d_len;		/* length in units of 8 octets */      /* followed by options */    };  /* Routing header */  struct ip6_rthdr    { -    uint8_t  ip6r_nxt;        /* next header */ -    uint8_t  ip6r_len;        /* length in units of 8 octets */ -    uint8_t  ip6r_type;       /* routing type */ -    uint8_t  ip6r_segleft;    /* segments left */ +    uint8_t  ip6r_nxt;		/* next header */ +    uint8_t  ip6r_len;		/* length in units of 8 octets */ +    uint8_t  ip6r_type;		/* routing type */ +    uint8_t  ip6r_segleft;	/* segments left */      /* followed by routing type specific data */    };  /* Type 0 Routing header */  struct ip6_rthdr0    { -    uint8_t  ip6r0_nxt;       /* next header */ -    uint8_t  ip6r0_len;       /* length in units of 8 octets */ -    uint8_t  ip6r0_type;      /* always zero */ -    uint8_t  ip6r0_segleft;   /* segments left */ -    uint8_t  ip6r0_reserved;  /* reserved field */ -    uint8_t  ip6r0_slmap[3];  /* strict/loose bit map */ +    uint8_t  ip6r0_nxt;		/* next header */ +    uint8_t  ip6r0_len;		/* length in units of 8 octets */ +    uint8_t  ip6r0_type;	/* always zero */ +    uint8_t  ip6r0_segleft;	/* segments left */ +    uint8_t  ip6r0_reserved;	/* reserved field */ +    uint8_t  ip6r0_slmap[3];	/* strict/loose bit map */      struct in6_addr  ip6r0_addr[1];  /* up to 23 addresses */    };  /* Fragment header */  struct ip6_frag    { -    uint8_t   ip6f_nxt;       /* next header */ -    uint8_t   ip6f_reserved;  /* reserved field */ -    uint16_t  ip6f_offlg;     /* offset, reserved, and flag */ -    uint32_t  ip6f_ident;     /* identification */ +    uint8_t   ip6f_nxt;		/* next header */ +    uint8_t   ip6f_reserved;	/* reserved field */ +    uint16_t  ip6f_offlg;	/* offset, reserved, and flag */ +    uint32_t  ip6f_ident;	/* identification */    };  #if     BYTE_ORDER == BIG_ENDIAN @@ -104,4 +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 */ | 
