summaryrefslogtreecommitdiff
path: root/bgpd/bgp_network.c
diff options
context:
space:
mode:
authorPaul Jakma <paul.jakma@sun.com>2007-11-01 14:29:11 +0000
committerPaul Jakma <paul.jakma@sun.com>2007-11-01 14:29:11 +0000
commit3a02d1f7fb778a1ea4f45d037f13dfcd126e2337 (patch)
tree2ffa6c8c2c2feb9d423a277c0761151e56884d38 /bgpd/bgp_network.c
parent5619f56ba38b255f699f76b327cf82388c4a90cf (diff)
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 */