diff options
author | Paul Jakma <paul.jakma@sun.com> | 2007-11-01 14:29:11 +0000 |
---|---|---|
committer | Paul Jakma <paul.jakma@sun.com> | 2007-11-01 14:29:11 +0000 |
commit | 3a02d1f7fb778a1ea4f45d037f13dfcd126e2337 (patch) | |
tree | 2ffa6c8c2c2feb9d423a277c0761151e56884d38 /bgpd/bgp_network.c | |
parent | 5619f56ba38b255f699f76b327cf82388c4a90cf (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.c | 14 |
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 */ |