[prev in list] [next in list] [prev in thread] [next in thread] 

List:       quagga-dev
Subject:    [quagga-dev 5229] [PATCH] bgpd crashes or does not open listening
From:       "Jorge Boncompte [DTI2]" <jorge () dti2 ! net>
Date:       2008-01-28 16:39:06
Message-ID: 1231BE8399DE4FC498C6F59261408A83 () intranet ! dti2 ! net
[Download RAW message or body]

Hi all,

    bgpd from quagga-cvs as of 01/23/2008 crashes on my debian etch with 
libc 2.3.6 at startup in bgp_network.c::bgp_socket:inet_aton(). On my uclibc 
systems inet_aton does not crash but reports an error an the daemon does not 
open the listening socket, so quagga/bgpd to quagga/bgpd connections can not 
be established.

    The problem is that the "address" argument passed to the bgp_socket 
function is NULL if you don't specify the "-l" argument on the command line. 
Seems to be a regression from the patch to add the "listenon" argument.

    The IPv6 part is untested as I don't have any IPv6 enabled host. Please 
check.

    Regards,

    -Jorge

==============================================================
Jorge Boncompte - Ingenieria y Gestion de RED
DTI2 - Desarrollo de la Tecnologia de las Comunicaciones
--------------------------------------------------------------
C/ Abogado Enriquez Barrios, 5   14004 CORDOBA (SPAIN)
Tlf: +34 957 761395 / FAX: +34 957 450380
==============================================================
- Sin pistachos no hay Rock & Roll...
- Without wicker a basket cannot be made.
==============================================================

["bgpd-no-listen-socket.patch" (application/octet-stream)]

diff -uNrp quagga-0.99.9-20080123.orig/bgpd/bgp_network.c quagga-0.99.9-20080123/bgpd/bgp_network.c
--- quagga-0.99.9-20080123.orig/bgpd/bgp_network.c	2007-11-01 15:29:11.000000000 +0100
+++ quagga-0.99.9-20080123/bgpd/bgp_network.c	2008-01-28 17:27:12.000000000 +0100
@@ -299,8 +299,7 @@ bgp_socket (struct bgp *bgp, unsigned sh
   sprintf (port_str, "%d", port);
   port_str[sizeof (port_str) - 1] = '\0';
 
-  ret = getaddrinfo (address, port_str, &req, &ainfo);
-  if (ret != 0)
+  if (address && ((ret = getaddrinfo (address, port_str, &req, &ainfo)) != 0))
     {
       zlog_err ("getaddrinfo: %s", gai_strerror (ret));
       return -1;
@@ -380,11 +379,9 @@ bgp_socket (struct bgp *bgp, unsigned sh
   sin.sin_port = htons (port);
   socklen = sizeof (struct sockaddr_in);
 
-  ret = inet_aton(address, &sin.sin_addr);
-
-  if (ret < 1)
+  if (address && ((ret = inet_aton(address, &sin.sin_addr)) < 1))
     {
-      zlog_err("bgp_socket: could not parse ip address %s: ", address, safe_strerror (errno));
+      zlog_err("bgp_socket: could not parse ip address %s: %s", address, safe_strerror (errno));
       return ret;
     }
 #ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN


_______________________________________________
Quagga-dev mailing list
Quagga-dev@lists.quagga.net
http://lists.quagga.net/mailman/listinfo/quagga-dev


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic