summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_network.c
diff options
context:
space:
mode:
authorpaul <paul>2007-11-01 14:29:11 +0000
committerpaul <paul>2007-11-01 14:29:11 +0000
commit504199a5ea02907c0fa5e9519d8816fcdddc28e9 (patch)
tree7c00c3bf08a444f91acfbcdb6c9562f01a932537 /bgpd/bgp_network.c
parent7b3ee3c18fcf1d483ed8b66bae68549da4624a39 (diff)
downloadquagga-504199a5ea02907c0fa5e9519d8816fcdddc28e9.tar.bz2
quagga-504199a5ea02907c0fa5e9519d8816fcdddc28e9.tar.xz
2007-10-30 Nick Hilliard <nick@inex.ie>
* bgp_main.c: Add 'listenon' argument, to pass address to bind to. * bgp_network.c: (bgp_socket) Extend to take bind address. * bgpd.c: (bgp_init) Pass stored address. * bgpd.h: (struct bgp_master) storage for bind address 2007-11-01 Paul Jakma <paul.jakma@sun.com> * tools/multiple-bgpd.sh: New, quick script to launch a bunch of bgpds.
Diffstat (limited to 'bgpd/bgp_network.c')
-rw-r--r--bgpd/bgp_network.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c
index 8040e47d..6b8c8a44 100644
--- a/bgpd/bgp_network.c
+++ b/bgpd/bgp_network.c
@@ -282,7 +282,7 @@ bgp_getsockname (struct peer *peer)
/* IPv6 supported version of BGP server socket setup. */
#if defined (HAVE_IPV6) && ! defined (NRL)
int
-bgp_socket (struct bgp *bgp, unsigned short port)
+bgp_socket (struct bgp *bgp, unsigned short port, char *address)
{
int ret, en;
struct addrinfo req;
@@ -299,7 +299,7 @@ bgp_socket (struct bgp *bgp, unsigned short port)
sprintf (port_str, "%d", port);
port_str[sizeof (port_str) - 1] = '\0';
- ret = getaddrinfo (NULL, port_str, &req, &ainfo);
+ ret = getaddrinfo (address, port_str, &req, &ainfo);
if (ret != 0)
{
zlog_err ("getaddrinfo: %s", gai_strerror (ret));
@@ -357,7 +357,7 @@ bgp_socket (struct bgp *bgp, unsigned short port)
#else
/* Traditional IPv4 only version. */
int
-bgp_socket (struct bgp *bgp, unsigned short port)
+bgp_socket (struct bgp *bgp, unsigned short port, char *address)
{
int sock;
int socklen;
@@ -379,6 +379,14 @@ bgp_socket (struct bgp *bgp, unsigned short port)
sin.sin_family = AF_INET;
sin.sin_port = htons (port);
socklen = sizeof (struct sockaddr_in);
+
+ ret = inet_aton(address, &sin.sin_addr);
+
+ if (ret < 1)
+ {
+ zlog_err("bgp_socket: could not parse ip address %s: ", address, safe_strerror (errno));
+ return ret;
+ }
#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
sin.sin_len = socklen;
#endif /* HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */