[prev in list] [next in list] [prev in thread] [next in thread]
List: quagga-dev
Subject: [quagga-dev 5126] Re: views vs multiple instances of quagga
From: Paul Jakma <paul () clubi ! ie>
Date: 2007-10-29 17:09:23
Message-ID: alpine.LFD.0.9999.0710291704560.6106 () localhost ! localdomain
[Download RAW message or body]
(Ccing quagga-dev)
On Sat, 27 Oct 2007, Nick Hilliard wrote:
>> listenon needs to imply no-kernel, I'll add that. I presume you /do/
>> want to be credited (that you mailed me directly, not -dev makes me
>> wonder). I'll merge it once I hear back on that.
>
> uh, hadn't even thought about that. Yep, why not.
Attached is that tiny change. I'm running about 5 bgpd's here
locally. :) This is going to be great for testing, I don't know why
we didn't do this before!
Thanks.
regards,
--
Paul Jakma paul@clubi.ie paul@jakma.org Key ID: 64A2FF6A
Fortune:
"Yeah, but you're taking the universe out of context."
["quagga-bgpd-listenon-diff.patch" (TEXT/PLAIN)]
diff -ur work/quagga-0.99.9/bgpd/bgp_main.c quagga-0.99.9/bgpd/bgp_main.c
--- work/quagga-0.99.9/bgpd/bgp_main.c 2006-10-16 00:34:47.000000000 +0100
+++ quagga-0.99.9/bgpd/bgp_main.c 2007-10-26 13:49:07.000000000 +0100
@@ -43,6 +43,7 @@
{ "config_file", required_argument, NULL, 'f'},
{ "pid_file", required_argument, NULL, 'i'},
{ "bgp_port", required_argument, NULL, 'p'},
+ { "listenon", required_argument, NULL, 'l'},
{ "vty_addr", required_argument, NULL, 'A'},
{ "vty_port", required_argument, NULL, 'P'},
{ "retain", no_argument, NULL, 'r'},
@@ -135,6 +136,7 @@
-f, --config_file Set configuration file name\n\
-i, --pid_file Set process identifier file name\n\
-p, --bgp_port Set bgp protocol's port number\n\
+-l, --listenon Listen on specified address\n\
-A, --vty_addr Set vty's bind address\n\
-P, --vty_port Set vty's port number\n\
-r, --retain When program terminates, retain added route by bgpd.\n\
@@ -217,7 +219,7 @@
/* Command line argument treatment. */
while (1)
{
- opt = getopt_long (argc, argv, "df:i:hp:A:P:rnu:g:vC", longopts, 0);
+ opt = getopt_long (argc, argv, "df:i:hp:l:A:P:rnu:g:vC", longopts, 0);
if (opt == EOF)
break;
@@ -238,6 +240,9 @@
case 'p':
bm->port = atoi (optarg);
break;
+ case 'l':
+ bm->address = optarg;
+ break;
case 'A':
vty_addr = optarg;
break;
@@ -315,8 +320,8 @@
vty_serv_sock (vty_addr, vty_port, BGP_VTYSH_PATH);
/* Print banner. */
- zlog_notice ("BGPd %s starting: vty@%d, bgp@%d", QUAGGA_VERSION,
- vty_port, bm->port);
+ zlog_notice ("BGPd %s starting: vty@%d, bgp@%s:%d", QUAGGA_VERSION,
+ vty_port, bm->address, bm->port);
/* Start finite state machine, here we go! */
while (thread_fetch (master, &thread))
diff -ur work/quagga-0.99.9/bgpd/bgp_network.c quagga-0.99.9/bgpd/bgp_network.c
--- work/quagga-0.99.9/bgpd/bgp_network.c 2007-10-26 14:09:48.000000000 +0100
+++ quagga-0.99.9/bgpd/bgp_network.c 2007-10-26 13:56:05.000000000 +0100
@@ -301,7 +301,7 @@
/* 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;
@@ -318,7 +318,7 @@
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));
@@ -376,7 +376,7 @@
#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;
@@ -398,6 +398,14 @@
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 */
diff -ur work/quagga-0.99.9/bgpd/bgp_network.h quagga-0.99.9/bgpd/bgp_network.h
--- work/quagga-0.99.9/bgpd/bgp_network.h 2007-06-29 14:41:43.000000000 +0100
+++ quagga-0.99.9/bgpd/bgp_network.h 2007-10-26 12:40:06.000000000 +0100
@@ -21,7 +21,7 @@
#ifndef _QUAGGA_BGP_NETWORK_H
#define _QUAGGA_BGP_NETWORK_H
-extern int bgp_socket (struct bgp *, unsigned short);
+extern int bgp_socket (struct bgp *, unsigned short, char *);
extern int bgp_connect (struct peer *);
extern void bgp_getsockname (struct peer *);
diff -ur work/quagga-0.99.9/bgpd/bgpd.c quagga-0.99.9/bgpd/bgpd.c
--- work/quagga-0.99.9/bgpd/bgpd.c 2007-10-26 14:09:48.000000000 +0100
+++ quagga-0.99.9/bgpd/bgpd.c 2007-10-26 12:16:52.000000000 +0100
@@ -5021,7 +5021,7 @@
bgp_vty_init ();
/* Create BGP server socket. */
- bgp_socket (NULL, bm->port);
+ bgp_socket (NULL, bm->port, bm->address);
/* Init zebra. */
bgp_zebra_init ();
diff -ur work/quagga-0.99.9/bgpd/bgpd.h quagga-0.99.9/bgpd/bgpd.h
--- work/quagga-0.99.9/bgpd/bgpd.h 2007-10-26 14:09:48.000000000 +0100
+++ quagga-0.99.9/bgpd/bgpd.h 2007-10-26 12:33:39.000000000 +0100
@@ -44,6 +44,9 @@
/* BGP port number. */
u_int16_t port;
+ /* Listener address */
+ char *address;
+
/* BGP start time. */
time_t start_time;
_______________________________________________
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