diff options
author | paul <paul> | 2007-11-01 14:29:11 +0000 |
---|---|---|
committer | paul <paul> | 2007-11-01 14:29:11 +0000 |
commit | 504199a5ea02907c0fa5e9519d8816fcdddc28e9 (patch) | |
tree | 7c00c3bf08a444f91acfbcdb6c9562f01a932537 /bgpd/bgp_network.c | |
parent | 7b3ee3c18fcf1d483ed8b66bae68549da4624a39 (diff) | |
download | quagga-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.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 */ |