* sysdeps/posix/getaddrinfo.c: Implement handling of DCCP and
authorUlrich Drepper <drepper@redhat.com>
Wed, 14 May 2008 17:33:37 +0000 (17:33 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 14 May 2008 17:33:37 +0000 (17:33 +0000)
UDPlite.

* nss/getent.c (ahosts_keys_int): Handle all known socket types.

* inet/netinet/in.h (IPPIPPROTO_DCCP, IPPROTO_UDPLITE): Define.

* sysdeps/unix/sysv/linux/bits/socket.h (SOCK_DCCP): Define.

ChangeLog
inet/netinet/in.h
nss/getent.c
sysdeps/posix/getaddrinfo.c
sysdeps/unix/sysv/linux/bits/socket.h

index 108beaf..c2745c2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2008-05-14  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/posix/getaddrinfo.c: Implement handling of DCCP and
+       UDPlite.
+
+       * nss/getent.c (ahosts_keys_int): Handle all known socket types.
+
+       * inet/netinet/in.h (IPPIPPROTO_DCCP, IPPROTO_UDPLITE): Define.
+
+       * sysdeps/unix/sysv/linux/bits/socket.h (SOCK_DCCP): Define.
+
 2008-05-13  Ulrich Drepper  <drepper@redhat.com>
 
        * po/lt.po: New file.  From Lituanian translation team.
index e3446a9..180227a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2001, 2003, 2004, 2006, 2007
+/* Copyright (C) 1991-2001, 2003, 2004, 2006, 2007, 2008
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -53,6 +53,8 @@ enum
 #define IPPROTO_IDP            IPPROTO_IDP
     IPPROTO_TP = 29,      /* SO Transport Protocol Class 4.  */
 #define IPPROTO_TP             IPPROTO_TP
+    IPPROTO_DCCP = 33,    /* Datagram Congestion Control Protocol.  */
+#define IPPROTO_DCCP           IPPROTO_DCCP
     IPPROTO_IPV6 = 41,     /* IPv6 header.  */
 #define IPPROTO_IPV6           IPPROTO_IPV6
     IPPROTO_ROUTING = 43,  /* IPv6 routing header.  */
@@ -83,6 +85,8 @@ enum
 #define IPPROTO_COMP           IPPROTO_COMP
     IPPROTO_SCTP = 132,           /* Stream Control Transmission Protocol.  */
 #define IPPROTO_SCTP           IPPROTO_SCTP
+    IPPROTO_UDPLITE = 136, /* UDP-Lite protocol.  */
+#define IPPROTO_UDPLITE                IPPROTO_UDPLITE
     IPPROTO_RAW = 255,    /* Raw IP packets.  */
 #define IPPROTO_RAW            IPPROTO_RAW
     IPPROTO_MAX
index 28c6dce..c8173d0 100644 (file)
@@ -337,6 +337,22 @@ ahosts_keys_int (int af, int xflags, int number, char *key[])
                sockstr = "DGRAM";
              else if (runp->ai_socktype == SOCK_RAW)
                sockstr = "RAW";
+#ifdef SOCK_SEQPACKET
+             else if (runp->ai_socktype == SOCK_SEQPACKET)
+               sockstr = "SEQPACKET";
+#endif
+#ifdef SOCK_RDM
+             else if (runp->ai_socktype == SOCK_RDM)
+               sockstr = "RDM";
+#endif
+#ifdef SOCK_DCCP
+             else if (runp->ai_socktype == SOCK_DCCP)
+               sockstr = "DCCP";
+#endif
+#ifdef SOCK_PACKET
+             else if (runp->ai_socktype == SOCK_PACKET)
+               sockstr = "PACKET";
+#endif
              else
                {
                  snprintf (sockbuf, sizeof (sockbuf), "%d",
index 3de83e3..7548ddf 100644 (file)
@@ -97,8 +97,9 @@ struct gaih_typeproto
   {
     int socktype;
     int protocol;
-    char name[4];
-    int protoflag;
+    uint8_t protoflag;
+    bool defaultflag;
+    char name[8];
   };
 
 /* Values for `protoflag'.  */
@@ -107,11 +108,17 @@ struct gaih_typeproto
 
 static const struct gaih_typeproto gaih_inet_typeproto[] =
 {
-  { 0, 0, "", 0 },
-  { SOCK_STREAM, IPPROTO_TCP, "tcp", 0 },
-  { SOCK_DGRAM, IPPROTO_UDP, "udp", 0 },
-  { SOCK_RAW, 0, "raw", GAI_PROTO_PROTOANY|GAI_PROTO_NOSERVICE },
-  { 0, 0, "", 0 }
+  { 0, 0, 0, false, "" },
+  { SOCK_STREAM, IPPROTO_TCP, 0, true, "tcp" },
+  { SOCK_DGRAM, IPPROTO_UDP, 0, true, "udp" },
+#if defined SOCK_DCCP && defined IPPROTO_DCCP
+  { SOCK_DCCP, IPPROTO_DCCP, 0, false, "dccp" },
+#endif
+#ifdef IPPROTO_UDPLITE
+  { SOCK_DGRAM, IPPROTO_UDPLITE, 0, false, "udplite" },
+#endif
+  { SOCK_RAW, 0, GAI_PROTO_PROTOANY|GAI_PROTO_NOSERVICE, true, "raw" },
+  { 0, 0, 0, false, "" }
 };
 
 struct gaih
@@ -363,18 +370,19 @@ gaih_inet (const char *name, const struct gaih_service *service,
             we know about.  */
          struct gaih_servtuple **lastp = &st;
          for (++tp; tp->name[0]; ++tp)
-           {
-             struct gaih_servtuple *newp;
+           if (tp->defaultflag)
+             {
+               struct gaih_servtuple *newp;
 
-             newp = __alloca (sizeof (struct gaih_servtuple));
-             newp->next = NULL;
-             newp->socktype = tp->socktype;
-             newp->protocol = tp->protocol;
-             newp->port = port;
+               newp = __alloca (sizeof (struct gaih_servtuple));
+               newp->next = NULL;
+               newp->socktype = tp->socktype;
+               newp->protocol = tp->protocol;
+               newp->port = port;
 
-             *lastp = newp;
-             lastp = &newp->next;
-           }
+               *lastp = newp;
+               lastp = &newp->next;
+             }
        }
     }
 
index ceb6013..3dda3d1 100644 (file)
@@ -1,5 +1,5 @@
 /* System-specific socket constants and types.  Linux version.
-   Copyright (C) 1991, 1992, 1994-2001, 2004, 2006, 2007
+   Copyright (C) 1991, 1992, 1994-2001, 2004, 2006, 2007, 2008
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -52,6 +52,8 @@ enum __socket_type
   SOCK_SEQPACKET = 5,          /* Sequenced, reliable, connection-based,
                                   datagrams of fixed maximum length.  */
 #define SOCK_SEQPACKET SOCK_SEQPACKET
+  SOCK_DCCP = 6,
+#define SOCK_DCCP SOCK_DCCP    /* Datagram Congestion Control Protocol.  */
   SOCK_PACKET = 10             /* Linux specific way of getting packets
                                   at the dev level.  For writing rarp and
                                   other similar things on the user level. */