about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-04-02 03:09:41 +0000
committerUlrich Drepper <drepper@redhat.com>2000-04-02 03:09:41 +0000
commitad483238a1ef7bce6d8534a84ba548c455d1631e (patch)
treecb89ea9fdeba2be20d846869bcf726d9dca43f25
parent9b48fa9b416094acd0f25a605c768f6cf3798f71 (diff)
downloadglibc-ad483238a1ef7bce6d8534a84ba548c455d1631e.tar.gz
glibc-ad483238a1ef7bce6d8534a84ba548c455d1631e.tar.xz
glibc-ad483238a1ef7bce6d8534a84ba548c455d1631e.zip
Update.
	* inet/arpa/inet.h (inet_addr): Change return type to in_addr_t.
	(inet_lnaof): Likewise.
	(inet_netof): Likewise.
	(inet_network): Likewise.
	(inet_aton): Likewise.
	(inet_makeaddr): Change parameter types to in_addr_t.
	(inet_neta): Likewise.
	(inet_ntop): Change type of last parameter to socklen_t.
	(inet_aton): Only make available if __USE_MISC.
	(inet_neta): Likewise.
	(inet_net_ntop): Likewise.
	(inet_net_pton): Likewise.
	(inet_nsap_ntoa): Likewise.

	* inet/in.h: Define in_port_t type.
	Define in_addr_t type.
	(struct in_addr): Use in_addr_t in definition.
	(IN_CLASSA): Use cast to in_addr_t.
	(IN_CLASSB): Likewise.
	(IN_CLASSC): Likewise.
	(IN_CLASSD): Likewise.
	(IN_EXPERIMENTAL): Likewise.
	(IN_BADCLASS): Likewise.
	(INADDR_ANY): Likewise.
	(INADDR_BROADCAST): Likewise.
	(INADDR_NONE): Likewise.
	(INADDR_LOOPBACK): Likewise.
	(INADDR_UNSPEC_GROUP): Likewise.
	(INADDR_ALLHOSTS_GROUP): Likewise.
	(INADDR_ALLRTRS_GROUP): Likewise.
	(INADDR_MAX_LOCAL_GROUP): Likewise.
	(struct sockaddr_in): Use in_port_t for sin_port element.
	(struct sockaddr_in6): Use in_port_t for sin6_port element.
	Use uint8_t instead of u_int8_t.

	* resolv/inet_addr.c (inet_addr): Change return type to in_addr_t.
	Call __inet_aton instead of inet_aton.
	(__inet_aton): Renamed from inet_aton.  Add weak alias under old name.

	* resolv/netdb.h (gethostbyname2): Define only is __USE_MISC.
	(innetgr): Likewise.
	(struct addrinfo): Use socklen_t for ai_addrlen element.

	* sysdeps/unix/sysv/linux/bits/in.h (IPV6_MTU_DISCOVER, IPV6_MTU,
	IPV6_RECVERR): New defines.
-rw-r--r--ChangeLog46
-rw-r--r--inet/arpa/inet.h60
-rw-r--r--inet/netinet/in.h80
-rw-r--r--resolv/inet_addr.c13
-rw-r--r--resolv/netdb.h6
-rw-r--r--sysdeps/unix/sysv/linux/bits/in.h3
6 files changed, 137 insertions, 71 deletions
diff --git a/ChangeLog b/ChangeLog
index 80b2564c78..9273002005 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,51 @@
 2000-04-01  Ulrich Drepper  <drepper@redhat.com>
 
+	* inet/arpa/inet.h (inet_addr): Change return type to in_addr_t.
+	(inet_lnaof): Likewise.
+	(inet_netof): Likewise.
+	(inet_network): Likewise.
+	(inet_aton): Likewise.
+	(inet_makeaddr): Change parameter types to in_addr_t.
+	(inet_neta): Likewise.
+	(inet_ntop): Change type of last parameter to socklen_t.
+	(inet_aton): Only make available if __USE_MISC.
+	(inet_neta): Likewise.
+	(inet_net_ntop): Likewise.
+	(inet_net_pton): Likewise.
+	(inet_nsap_ntoa): Likewise.
+
+	* inet/in.h: Define in_port_t type.
+	Define in_addr_t type.
+	(struct in_addr): Use in_addr_t in definition.
+	(IN_CLASSA): Use cast to in_addr_t.
+	(IN_CLASSB): Likewise.
+	(IN_CLASSC): Likewise.
+	(IN_CLASSD): Likewise.
+	(IN_EXPERIMENTAL): Likewise.
+	(IN_BADCLASS): Likewise.
+	(INADDR_ANY): Likewise.
+	(INADDR_BROADCAST): Likewise.
+	(INADDR_NONE): Likewise.
+	(INADDR_LOOPBACK): Likewise.
+	(INADDR_UNSPEC_GROUP): Likewise.
+	(INADDR_ALLHOSTS_GROUP): Likewise.
+	(INADDR_ALLRTRS_GROUP): Likewise.
+	(INADDR_MAX_LOCAL_GROUP): Likewise.
+	(struct sockaddr_in): Use in_port_t for sin_port element.
+	(struct sockaddr_in6): Use in_port_t for sin6_port element.
+	Use uint8_t instead of u_int8_t.
+
+	* resolv/inet_addr.c (inet_addr): Change return type to in_addr_t.
+	Call __inet_aton instead of inet_aton.
+	(__inet_aton): Renamed from inet_aton.  Add weak alias under old name.
+
+	* resolv/netdb.h (gethostbyname2): Define only is __USE_MISC.
+	(innetgr): Likewise.
+	(struct addrinfo): Use socklen_t for ai_addrlen element.
+
+	* sysdeps/unix/sysv/linux/bits/in.h (IPV6_MTU_DISCOVER, IPV6_MTU,
+	IPV6_RECVERR): New defines.
+
 	* include/netdb.h: Change type of first parameter of __getnetbyaddr_r.
 	* inet/getnetbyad.c: Likewise.
 	* inet/getnetbyad_r.c: Likewise.
diff --git a/inet/arpa/inet.h b/inet/arpa/inet.h
index 7e0a40f73f..72a90ba3da 100644
--- a/inet/arpa/inet.h
+++ b/inet/arpa/inet.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1999, 2000 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
@@ -20,7 +20,6 @@
 #define	_ARPA_INET_H	1
 
 #include <features.h>
-
 #include <sys/types.h>
 #include <netinet/in.h>		/* To define `struct in_addr'.  */
 
@@ -28,41 +27,22 @@ __BEGIN_DECLS
 
 /* Convert Internet host address from numbers-and-dots notation in CP
    into binary data in network byte order.  */
-extern u_int32_t inet_addr (__const char *__cp) __THROW;
-
-/* Convert Internet host address from numbers-and-dots notation in CP
-   into binary data and store the result in the structure INP.  */
-extern int inet_aton (__const char *__cp, struct in_addr *__inp) __THROW;
+extern in_addr_t inet_addr (__const char *__cp) __THROW;
 
 /* Return the local host address part of the Internet address in IN.  */
-extern u_int32_t inet_lnaof (struct in_addr __in) __THROW;
+extern in_addr_t inet_lnaof (struct in_addr __in) __THROW;
 
 /* Make Internet host address in network byte order by combining the
    network number NET with the local address HOST.  */
-extern struct in_addr inet_makeaddr (u_int32_t __net, u_int32_t __host) __THROW;
-
-/* Format a network number NET into presentation format and place result
-   in buffer starting at BUF with length of LEN bytes.  */
-extern char *inet_neta (u_int32_t __net, char *__buf, size_t __len) __THROW;
+extern struct in_addr inet_makeaddr (in_addr_t __net, in_addr_t __host)
+     __THROW;
 
 /* Return network number part of the Internet address IN.  */
-extern u_int32_t inet_netof (struct in_addr __in) __THROW;
+extern in_addr_t inet_netof (struct in_addr __in) __THROW;
 
 /* Extract the network number in network byte order from the address
    in numbers-and-dots natation starting at CP.  */
-extern u_int32_t inet_network (__const char *__cp) __THROW;
-
-/* Convert network number for interface type AF in buffer starting at
-   CP to presentation format.  The result will specifiy BITS bits of
-   the number.  */
-extern char *inet_net_ntop (int __af, __const void *__cp, int __bits,
-			    char *__buf, size_t __len) __THROW;
-
-/* Convert network number for interface type AF from presentation in
-   buffer starting at CP to network format and store result int
-   buffer starting at BUF of size LEN.  */
-extern int inet_net_pton (int __af, __const char *__cp,
-			  void *__buf, size_t __len) __THROW;
+extern in_addr_t inet_network (__const char *__cp) __THROW;
 
 /* Convert Internet number in IN to ASCII representation.  The return value
    is a pointer to an internal array containing the string.  */
@@ -77,7 +57,30 @@ extern int inet_pton (int __af, __const char *__cp, void *__buf) __THROW;
    type AF in buffer starting at CP to presentation form and place
    result in buffer of length LEN astarting at BUF.  */
 extern __const char *inet_ntop (int __af, __const void *__cp,
-				char *__buf, size_t __len) __THROW;
+				char *__buf, socklen_t __len) __THROW;
+
+
+/* The following functions are not part of XNS 5.2.  */
+#ifdef __USE_MISC
+/* Convert Internet host address from numbers-and-dots notation in CP
+   into binary data and store the result in the structure INP.  */
+extern in_addr_t inet_aton (__const char *__cp, struct in_addr *__inp) __THROW;
+
+/* Format a network number NET into presentation format and place result
+   in buffer starting at BUF with length of LEN bytes.  */
+extern char *inet_neta (in_addr_t __net, char *__buf, size_t __len) __THROW;
+
+/* Convert network number for interface type AF in buffer starting at
+   CP to presentation format.  The result will specifiy BITS bits of
+   the number.  */
+extern char *inet_net_ntop (int __af, __const void *__cp, int __bits,
+			    char *__buf, size_t __len) __THROW;
+
+/* Convert network number for interface type AF from presentation in
+   buffer starting at CP to network format and store result int
+   buffer starting at BUF of size LEN.  */
+extern int inet_net_pton (int __af, __const char *__cp,
+			  void *__buf, size_t __len) __THROW;
 
 /* Convert ASCII representation in hexadecimal form of the Internet
    address to binary form and place result in buffer of length LEN
@@ -89,6 +92,7 @@ extern unsigned int inet_nsap_addr (__const char *__cp,
    a presentation form and place result in BUF.  */
 extern char *inet_nsap_ntoa (int __len, __const unsigned char *__cp,
 			     char *__buf) __THROW;
+#endif
 
 __END_DECLS
 
diff --git a/inet/netinet/in.h b/inet/netinet/in.h
index fb668a204d..9f73638e05 100644
--- a/inet/netinet/in.h
+++ b/inet/netinet/in.h
@@ -61,6 +61,10 @@ enum
     IPPROTO_MAX
   };
 
+
+/* Type to represent a port.  */
+typedef uint16_t in_port_t;
+
 /* Standard well-known ports.  */
 enum
   {
@@ -103,9 +107,10 @@ enum
 
 
 /* Internet address.  */
+typedef uint32_t in_addr_t;
 struct in_addr
   {
-    uint32_t s_addr;
+    in_addr_t s_addr;
   };
 
 
@@ -114,48 +119,48 @@ struct in_addr
    On subnets, host and network parts are found according to
    the subnet mask, not these masks.  */
 
-#define	IN_CLASSA(a)		((((uint32_t) (a)) & 0x80000000) == 0)
+#define	IN_CLASSA(a)		((((in_addr_t)(a)) & 0x80000000) == 0)
 #define	IN_CLASSA_NET		0xff000000
 #define	IN_CLASSA_NSHIFT	24
 #define	IN_CLASSA_HOST		(0xffffffff & ~IN_CLASSA_NET)
 #define	IN_CLASSA_MAX		128
 
-#define	IN_CLASSB(a)		((((uint32_t) (a)) & 0xc0000000) == 0x80000000)
+#define	IN_CLASSB(a)		((((in_addr_t)(a)) & 0xc0000000) == 0x80000000)
 #define	IN_CLASSB_NET		0xffff0000
 #define	IN_CLASSB_NSHIFT	16
 #define	IN_CLASSB_HOST		(0xffffffff & ~IN_CLASSB_NET)
 #define	IN_CLASSB_MAX		65536
 
-#define	IN_CLASSC(a)		((((uint32_t) (a)) & 0xe0000000) == 0xc0000000)
+#define	IN_CLASSC(a)		((((in_addr_t)(a)) & 0xe0000000) == 0xc0000000)
 #define	IN_CLASSC_NET		0xffffff00
 #define	IN_CLASSC_NSHIFT	8
 #define	IN_CLASSC_HOST		(0xffffffff & ~IN_CLASSC_NET)
 
-#define	IN_CLASSD(a)		((((uint32_t) (a)) & 0xf0000000) == 0xe0000000)
+#define	IN_CLASSD(a)		((((in_addr_t)(a)) & 0xf0000000) == 0xe0000000)
 #define	IN_MULTICAST(a)		IN_CLASSD(a)
 
-#define	IN_EXPERIMENTAL(a)	((((uint32_t) (a)) & 0xe0000000) == 0xe0000000)
-#define	IN_BADCLASS(a)		((((uint32_t) (a)) & 0xf0000000) == 0xf0000000)
+#define	IN_EXPERIMENTAL(a)	((((in_addr_t)(a)) & 0xe0000000) == 0xe0000000)
+#define	IN_BADCLASS(a)		((((in_addr_t)(a)) & 0xf0000000) == 0xf0000000)
 
 /* Address to accept any incoming messages.  */
-#define	INADDR_ANY		((uint32_t) 0x00000000)
+#define	INADDR_ANY		((in_addr_t) 0x00000000)
 /* Address to send to all hosts.  */
-#define	INADDR_BROADCAST	((uint32_t) 0xffffffff)
+#define	INADDR_BROADCAST	((in_addr_t) 0xffffffff)
 /* Address indicating an error return.  */
-#define	INADDR_NONE		((uint32_t) 0xffffffff)
+#define	INADDR_NONE		((in_addr_t) 0xffffffff)
 
 /* Network number for local host loopback.  */
 #define	IN_LOOPBACKNET		127
 /* Address to loopback in software to local host.  */
 #ifndef INADDR_LOOPBACK
-# define INADDR_LOOPBACK	((uint32_t) 0x7f000001)	/* Inet 127.0.0.1.  */
+# define INADDR_LOOPBACK	((in_addr_t) 0x7f000001) /* Inet 127.0.0.1.  */
 #endif
 
 /* Defines for Multicast INADDR.  */
-#define INADDR_UNSPEC_GROUP	((uint32_t) 0xe0000000)      /* 224.0.0.0 */
-#define INADDR_ALLHOSTS_GROUP	((uint32_t) 0xe0000001)      /* 224.0.0.1 */
-#define INADDR_ALLRTRS_GROUP    ((uint32_t) 0xe0000002)      /* 224.0.0.2 */
-#define INADDR_MAX_LOCAL_GROUP  ((uint32_t) 0xe00000ff)      /* 224.0.0.255 */
+#define INADDR_UNSPEC_GROUP	((in_addr_t) 0xe0000000) /* 224.0.0.0 */
+#define INADDR_ALLHOSTS_GROUP	((in_addr_t) 0xe0000001) /* 224.0.0.1 */
+#define INADDR_ALLRTRS_GROUP    ((in_addr_t) 0xe0000002) /* 224.0.0.2 */
+#define INADDR_MAX_LOCAL_GROUP  ((in_addr_t) 0xe00000ff) /* 224.0.0.255 */
 
 
 /* IPv6 address */
@@ -163,11 +168,11 @@ struct in6_addr
   {
     union
       {
-	uint8_t		u6_addr8[16];
-	uint16_t	u6_addr16[8];
-	uint32_t	u6_addr32[4];
+	uint8_t	u6_addr8[16];
+	uint16_t u6_addr16[8];
+	uint32_t u6_addr32[4];
 #if ULONG_MAX > 0xffffffff
-	uint64_t	u6_addr64[2];
+	uint64_t u6_addr64[2];
 #endif
       } in6_u;
 #define s6_addr			in6_u.u6_addr8
@@ -192,13 +197,13 @@ extern const struct in6_addr in6addr_loopback;   /* ::1 */
 struct sockaddr_in
   {
     __SOCKADDR_COMMON (sin_);
-    uint16_t sin_port;			/* Port number.  */
+    in_port_t sin_port;			/* Port number.  */
     struct in_addr sin_addr;		/* Internet address.  */
 
     /* Pad to size of `struct sockaddr'.  */
     unsigned char sin_zero[sizeof (struct sockaddr) -
 			   __SOCKADDR_COMMON_SIZE -
-			   sizeof (uint16_t) -
+			   sizeof (in_port_t) -
 			   sizeof (struct in_addr)];
   };
 
@@ -206,7 +211,7 @@ struct sockaddr_in
 struct sockaddr_in6
   {
     __SOCKADDR_COMMON (sin6_);
-    uint16_t sin6_port;		/* Transport layer port # */
+    in_port_t sin6_port;	/* Transport layer port # */
     uint32_t sin6_flowinfo;	/* IPv6 flow information */
     struct in6_addr sin6_addr;	/* IPv6 address */
     uint32_t sin6_scope_id;	/* IPv6 scope-id */
@@ -245,19 +250,24 @@ extern uint16_t htons (uint16_t __hostshort)
 /* Get machine dependent optimized versions of byte swapping functions.  */
 #include <bits/byteswap.h>
 
-#if __BYTE_ORDER == __BIG_ENDIAN && defined __OPTIMIZE__
+#ifdef __OPTIMIZE__
+/* We can optimize calls to the conversion functions.  Either nothing has
+   to be done or we are using directly the byte-swapping functions which
+   often can be inlined.  */
+# if __BYTE_ORDER == __BIG_ENDIAN
 /* The host byte order is the same as network byte order,
    so these functions are all just identity.  */
 # define ntohl(x)	(x)
 # define ntohs(x)	(x)
 # define htonl(x)	(x)
 # define htons(x)	(x)
-#else
-# if __BYTE_ORDER == __LITTLE_ENDIAN && defined __OPTIMIZE__
-#  define ntohl(x)	__bswap_32 (x)
-#  define ntohs(x)	__bswap_16 (x)
-#  define htonl(x)	__bswap_32 (x)
-#  define htons(x)	__bswap_16 (x)
+# else
+#  if __BYTE_ORDER == __LITTLE_ENDIAN
+#   define ntohl(x)	__bswap_32 (x)
+#   define ntohs(x)	__bswap_16 (x)
+#   define htonl(x)	__bswap_32 (x)
+#   define htons(x)	__bswap_16 (x)
+#  endif
 # endif
 #endif
 
@@ -269,7 +279,7 @@ extern uint16_t htons (uint16_t __hostshort)
 	(((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \
 	 ((uint32_t *) (a))[2] == 0 && ((uint32_t *) (a))[3] == htonl (1))
 
-#define IN6_IS_ADDR_MULTICAST(a) (((u_int8_t *) (a))[0] == 0xff)
+#define IN6_IS_ADDR_MULTICAST(a) (((uint8_t *) (a))[0] == 0xff)
 
 #define IN6_IS_ADDR_LINKLOCAL(a) \
 	((((uint32_t *) (a))[0] & htonl (0xffc00000)) == htonl (0xfe800000))
@@ -300,19 +310,19 @@ extern int bindresvport6 (int __sockfd, struct sockaddr_in6 *__sock_in)
 
 
 #define IN6_IS_ADDR_MC_NODELOCAL(a) \
-	(IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t *) (a))[1] & 0xf) == 0x1))
+	(IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x1))
 
 #define IN6_IS_ADDR_MC_LINKLOCAL(a) \
-	(IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t *) (a))[1] & 0xf) == 0x2))
+	(IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x2))
 
 #define IN6_IS_ADDR_MC_SITELOCAL(a) \
-	(IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t *) (a))[1] & 0xf) == 0x5))
+	(IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x5))
 
 #define IN6_IS_ADDR_MC_ORGLOCAL(a) \
-	(IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t *) (a))[1] & 0xf) == 0x8))
+	(IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x8))
 
 #define IN6_IS_ADDR_MC_GLOBAL(a) \
-	(IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t *) (a))[1] & 0xf) == 0xe))
+	(IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0xe))
 
 /* IPv6 packet information.  */
 struct in6_pktinfo
diff --git a/resolv/inet_addr.c b/resolv/inet_addr.c
index 60f0cbe3b4..48373b2060 100644
--- a/resolv/inet_addr.c
+++ b/resolv/inet_addr.c
@@ -74,13 +74,13 @@ static char rcsid[] = "$Id$";
  * Ascii internet address interpretation routine.
  * The value returned is in network order.
  */
-u_int32_t
+in_addr_t
 inet_addr(cp)
 	register const char *cp;
 {
 	struct in_addr val;
 
-	if (inet_aton(cp, &val))
+	if (__inet_aton(cp, &val))
 		return (val.s_addr);
 	return (INADDR_NONE);
 }
@@ -92,13 +92,13 @@ inet_addr(cp)
  * This replaces inet_addr, the return value from which
  * cannot distinguish between failure and a local broadcast address.
  */
-int
-inet_aton(cp, addr)
+in_addr_t
+__inet_aton(cp, addr)
 	const char *cp;
 	struct in_addr *addr;
 {
-	static const u_int32_t max[4] = { 0xffffffff, 0xffffff, 0xffff, 0xff };
-	register u_int32_t val;	/* changed from u_long --david */
+	static const in_addr_t max[4] = { 0xffffffff, 0xffffff, 0xffff, 0xff };
+	register in_addr_t val;
 #ifndef _LIBC
 	register int base;
 #endif
@@ -207,3 +207,4 @@ ret_0:
 #endif
 	return (0);
 }
+weak_alias (__inet_aton, inet_aton)
diff --git a/resolv/netdb.h b/resolv/netdb.h
index 50420c3e44..1f96351e36 100644
--- a/resolv/netdb.h
+++ b/resolv/netdb.h
@@ -131,10 +131,12 @@ extern struct hostent *gethostbyaddr (__const char *__addr, size_t __len,
 /* Return entry from host data base for host with NAME.  */
 extern struct hostent *gethostbyname (__const char *__name) __THROW;
 
+#ifdef __USE_MISC
 /* Return entry from host data base for host with NAME.  AF must be
    set to the address type which is `AF_INET' for IPv4 or `AF_INET6'
    for IPv6.  */
 extern struct hostent *gethostbyname2 (__const char *__name, int __af) __THROW;
+#endif
 
 #ifdef __USE_UNIX98
 /* Return entry from host data base which address match ADDR with
@@ -343,11 +345,11 @@ extern int getnetgrent (char **__restrict __hostp,
 			char **__restrict __userp,
 			char **__restrict __domainp) __THROW;
 
+#ifdef	__USE_MISC
 /* Test whether NETGROUP contains the triple (HOST,USER,DOMAIN).  */
 extern int innetgr (__const char *__netgroup, __const char *__host,
 		    __const char *__user, __const char *domain) __THROW;
 
-#ifdef	__USE_MISC
 /* Reentrant version of `getnetgrent' where result is placed in BUFFER.  */
 extern int getnetgrent_r (char **__restrict __hostp,
 			  char **__restrict __userp,
@@ -428,7 +430,7 @@ struct addrinfo
   int ai_family;		/* Protocol family for socket.  */
   int ai_socktype;		/* Socket type.  */
   int ai_protocol;		/* Protocol for socket.  */
-  int ai_addrlen;		/* Length of socket address.  */
+  socklen_t ai_addrlen;		/* Length of socket address.  */
   struct sockaddr *ai_addr;	/* Socket address for socket.  */
   char *ai_canonname;		/* Canonical name for service location.  */
   struct addrinfo *ai_next;	/* Pointer to next in list.  */
diff --git a/sysdeps/unix/sysv/linux/bits/in.h b/sysdeps/unix/sysv/linux/bits/in.h
index 1493541f7e..8efe2427a4 100644
--- a/sysdeps/unix/sysv/linux/bits/in.h
+++ b/sysdeps/unix/sysv/linux/bits/in.h
@@ -112,6 +112,9 @@ struct in_pktinfo
 #define IPV6_ADD_MEMBERSHIP	20
 #define IPV6_DROP_MEMBERSHIP	21
 #define IPV6_ROUTER_ALERT	22
+#define IPV6_MTU_DISCOVER	23
+#define IPV6_MTU		24
+#define IPV6_RECVERR		25
 
 #define SCM_SRCRT		IPV6_RXSRCRT