diff -ur glibc-2.3.2.ds1/inet/netinet/in.h glibc/inet/netinet/in.h
--- glibc-2.3.2.ds1/inet/netinet/in.h	2005-02-09 14:24:47.000000000 +0900
+++ glibc/inet/netinet/in.h	2005-02-21 12:23:18.105802764 +0900
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2001, 2003, 2004 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
@@ -239,7 +239,30 @@
     uint32_t sin6_scope_id;	/* IPv6 scope-id */
   };
 
-/* IPv6 multicast request.  */
+
+/* IPv4 multicast request.  */
+struct ip_mreq
+  {
+    /* IP multicast address of group.  */
+    struct in_addr imr_multiaddr;
+
+    /* Local IP address of interface.  */
+    struct in_addr imr_interface;
+  };
+
+struct ip_mreq_source
+  {
+    /* IP multicast address of group.  */
+    struct in_addr imr_multiaddr;
+
+    /* IP address of source.  */
+    struct in_addr imr_interface;
+
+    /* IP address of interface.  */
+    struct in_addr imr_sourceaddr;
+  };
+
+/* Likewise, for IPv6.  */
 struct ipv6_mreq
   {
     /* IPv6 multicast address of group */
@@ -249,6 +272,75 @@
     unsigned int ipv6mr_interface;
   };
 
+
+/* Multicast group request.  */
+struct group_req
+  {
+    /* Interface index.  */
+    uint32_t gr_interface;
+
+    /* Group address.  */
+    struct sockaddr_storage gr_group;
+  };
+
+struct group_source_req
+  {
+    /* Interface index.  */
+    uint32_t gsr_interface;
+
+    /* Group address.  */
+    struct sockaddr_storage gsr_group;
+
+    /* Source address.  */
+    struct sockaddr_storage gsr_source;
+  };
+
+
+/* Full-state filter operations.  */
+struct ip_msfilter
+  {
+    /* IP multicast address of group.  */
+    struct in_addr imsf_multiaddr;
+
+    /* Local IP address of interface.  */
+    struct in_addr imsf_interface;
+
+    /* Filter mode.  */
+    uint32_t imsf_fmode;
+
+    /* Number of source addresses.  */
+    uint32_t imsf_numsrc;
+    /* Source addresses.  */
+    struct in_addr imsf_slist[1];
+  };
+
+#define IP_MSFILTER_SIZE(numsrc) (sizeof (struct ip_msfilter) \
+				  - sizeof (struct in_addr)		      \
+				  + (numsrc) * sizeof (struct in_addr))
+
+struct group_filter
+  {
+    /* Interface index.  */
+    uint32_t gf_interface;
+
+    /* Group address.  */
+    struct sockaddr_storage gf_group;
+
+    /* Filter mode.  */
+    uint32_t gf_fmode;
+
+    /* Number of source addresses.  */
+    uint32_t gf_numsrc;
+    /* Source addresses.  */
+    struct sockaddr_storage gf_slist[1];
+};
+
+#define GROUP_FILTER_SIZE(numsrc) (sizeof (struct group_filter) \
+				   - sizeof (struct sockaddr_storage)	      \
+				   + ((numsrc)				      \
+				      * sizeof (struct sockaddr_storage)))
+
+
 /* Get system-specific definitions.  */
 #include <bits/in.h>
 
diff -ur glibc-2.3.2.ds1/sysdeps/unix/sysv/linux/bits/in.h glibc/sysdeps/unix/sysv/linux/bits/in.h
--- glibc-2.3.2.ds1/sysdeps/unix/sysv/linux/bits/in.h	2005-02-09 14:24:48.000000000 +0900
+++ glibc/sysdeps/unix/sysv/linux/bits/in.h	2005-02-21 12:17:23.290003826 +0900
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1999, 2000, 2004 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
@@ -25,13 +25,36 @@
 /* Options for use with `getsockopt' and `setsockopt' at the IP level.
    The first word in the comment at the right is the data type used;
    "bool" means a boolean value stored in an `int'.  */
-#define IP_TOS             1	/* int; IP type of service and precedence.  */
-#define IP_TTL             2	/* int; IP time to live.  */
-#define IP_HDRINCL         3	/* int; Header is included with data.  */
-#define IP_OPTIONS         4	/* ip_opts; IP per-packet options.  */
+#define        IP_OPTIONS      4       /* ip_opts; IP per-packet options.  */
+#define        IP_HDRINCL      3       /* int; Header is included with data.  */
+#define        IP_TOS          1       /* int; IP type of service and precedence.  */
+#define        IP_TTL          2       /* int; IP time to live.  */
+#define        IP_RECVOPTS     6       /* bool; Receive all IP options w/datagram.  */
+/* For BSD compatibility.  */
+#define        IP_RECVRETOPTS  IP_RETOPTS       /* bool; Receive IP options for response.  */
+#define        IP_RETOPTS      7       /* ip_opts; Set/get IP per-packet options.  */
+#define IP_MULTICAST_IF 32	/* in_addr; set/get IP multicast i/f */
+#define IP_MULTICAST_TTL 33	/* u_char; set/get IP multicast ttl */
+#define IP_MULTICAST_LOOP 34	/* i_char; set/get IP multicast loopback */
+#define IP_ADD_MEMBERSHIP 35	/* ip_mreq; add an IP group membership */
+#define IP_DROP_MEMBERSHIP 36	/* ip_mreq; drop an IP group membership */
+#define IP_UNBLOCK_SOURCE 37	/* ip_mreq_source: unblock data from source */
+#define IP_BLOCK_SOURCE 38	/* ip_mreq_source: block data from source */
+#define IP_ADD_SOURCE_MEMBERSHIP 39 /* ip_mreq_source: join source group */
+#define IP_DROP_SOURCE_MEMBERSHIP 40 /* ip_mreq_source: leave source group */
+#define IP_MSFILTER 41
+#define MCAST_JOIN_GROUP 42	/* group_req: join any-source group */
+#define MCAST_BLOCK_SOURCE 43	/* group_source_req: block from given group */
+#define MCAST_UNBLOCK_SOURCE 44	/* group_source_req: unblock from given group*/
+#define MCAST_LEAVE_GROUP 45	/* group_req: leave any-source group */
+#define MCAST_JOIN_SOURCE_GROUP 46 /* group_source_req: join source-spec gr */
+#define MCAST_LEAVE_SOURCE_GROUP 47 /* group_source_req: leave source-spec gr*/
+#define MCAST_MSFILTER 48
+
+#define MCAST_EXCLUDE   0
+#define MCAST_INCLUDE   1
+
 #define IP_ROUTER_ALERT    5	/* bool */
-#define IP_RECVOPTS        6	/* bool */
-#define IP_RETOPTS         7	/* bool */
 #define IP_PKTINFO         8	/* bool */
 #define IP_PKTOPTIONS      9
 #define IP_PMTUDISC        10	/* obsolete name? */
@@ -39,14 +62,7 @@
 #define IP_RECVERR         11	/* bool */
 #define IP_RECVTTL         12	/* bool */
 #define IP_RECVTOS         13	/* bool */
-#define IP_MULTICAST_IF    32	/* in_addr; set/get IP multicast i/f */
-#define IP_MULTICAST_TTL   33	/* u_char; set/get IP multicast ttl */
-#define IP_MULTICAST_LOOP  34	/* i_char; set/get IP multicast loopback */
-#define IP_ADD_MEMBERSHIP  35	/* ip_mreq; add an IP group membership */
-#define IP_DROP_MEMBERSHIP 36	/* ip_mreq; drop an IP group membership */
 
-/* For BSD compatibility.  */
-#define IP_RECVRETOPTS	IP_RETOPTS
 
 /* IP_MTU_DISCOVER arguments.  */
 #define IP_PMTUDISC_DONT   0	/* Never send DF frames.  */
@@ -60,23 +76,16 @@
 #define IP_DEFAULT_MULTICAST_LOOP       1
 #define IP_MAX_MEMBERSHIPS              20
 
-/* Structure used to describe IP options for IP_OPTIONS. The `ip_dst'
-   field is used for the first-hop gateway when using a source route
-   (this gets put into the header proper).  */
+/* Structure used to describe IP options for IP_OPTIONS and IP_RETOPTS.
+   The `ip_dst' field is used for the first-hop gateway when using a
+   source route (this gets put into the header proper).  */
 struct ip_opts
   {
     struct in_addr ip_dst;	/* First hop; zero without source route.  */
     char ip_opts[40];		/* Actually variable in size.  */
   };
 
-/* Structure used for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP. */
-struct ip_mreq
-  {
-    struct in_addr imr_multiaddr;	/* IP multicast address of group */
-    struct in_addr imr_interface;	/* local IP address of interface */
-  };
-
-/* As above but including interface specification by index.  */
+/* Like `struct ip_mreq' but including interface specification by index.  */
 struct ip_mreqn
   {
     struct in_addr imr_multiaddr;	/* IP multicast address of group */
@@ -103,6 +112,9 @@
 #define IPV6_PKTOPTIONS		6
 #define IPV6_CHECKSUM		7
 #define IPV6_HOPLIMIT		8
+
+#define SCM_SRCRT		IPV6_RXSRCRT
+
 #define IPV6_NEXTHOP		9
 #define IPV6_AUTHHDR		10
 #define IPV6_UNICAST_HOPS	16
@@ -121,14 +133,11 @@
 #define IPV6_IPSEC_POLICY	34
 #define IPV6_XFRM_POLICY	35
 
-#define SCM_SRCRT		IPV6_RXSRCRT
-
 /* Obsolete synonyms for the above.  */
-#define IPV6_RXHOPOPTS		IPV6_HOPOPTS
-#define IPV6_RXDSTOPTS		IPV6_DSTOPTS
 #define IPV6_ADD_MEMBERSHIP	IPV6_JOIN_GROUP
 #define IPV6_DROP_MEMBERSHIP	IPV6_LEAVE_GROUP
-
+#define IPV6_RXHOPOPTS		IPV6_HOPOPTS
+#define IPV6_RXDSTOPTS		IPV6_DSTOPTS
 
 /* IPV6_MTU_DISCOVER values.  */
 #define IPV6_PMTUDISC_DONT	0	/* Never send DF frames.  */
