[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