Add LISTEN support for txtinfo. Thanks to Sebastian Harl for the patch for dotdraw
authorHenning Rogge <hrogge@googlemail.com>
Sun, 16 Aug 2009 11:16:40 +0000 (13:16 +0200)
committerHenning Rogge <hrogge@googlemail.com>
Sun, 16 Aug 2009 11:16:40 +0000 (13:16 +0200)
lib/txtinfo/src/olsrd_plugin.c
lib/txtinfo/src/olsrd_txtinfo.c
lib/txtinfo/src/olsrd_txtinfo.h

index 9a8aa55..bff2774 100644 (file)
@@ -60,7 +60,8 @@
 #define MOD_DESC PLUGIN_NAME " " PLUGIN_VERSION " by " PLUGIN_AUTHOR
 #define PLUGIN_INTERFACE_VERSION 5
 
-union olsr_ip_addr ipc_accept_ip;
+union olsr_ip_addr txtinfo_accept_ip;
+union olsr_ip_addr txtinfo_listen_ip;
 int ipc_port;
 int nompr;
 
@@ -79,9 +80,11 @@ my_init(void)
   /* defaults for parameters */
   ipc_port = 2006;
   if (olsr_cnf->ip_version == AF_INET) {
-    ipc_accept_ip.v4.s_addr = htonl(INADDR_LOOPBACK);
+    txtinfo_accept_ip.v4.s_addr = htonl(INADDR_LOOPBACK);
+    txtinfo_listen_ip.v4.s_addr = htonl(INADDR_ANY);
   } else {
-    ipc_accept_ip.v6 = in6addr_loopback;
+    txtinfo_accept_ip.v6 = in6addr_loopback;
+    txtinfo_listen_ip.v6 = in6addr_any;
   }
 
   /* highlite neighbours by default */
@@ -111,7 +114,8 @@ olsrd_plugin_interface_version(void)
 
 static const struct olsrd_plugin_parameters plugin_parameters[] = {
   {.name = "port",.set_plugin_parameter = &set_plugin_port,.data = &ipc_port},
-  {.name = "accept",.set_plugin_parameter = &set_plugin_ipaddress,.data = &ipc_accept_ip},
+  {.name = "accept",.set_plugin_parameter = &set_plugin_ipaddress,.data = &txtinfo_accept_ip},
+  {.name = "listen",.set_plugin_parameter = &set_plugin_ipaddress,.data = &txtinfo_listen_ip},
 };
 
 void
index 5461460..5ac8d19 100644 (file)
@@ -192,7 +192,7 @@ plugin_ipc_init(void)
 #ifdef SIN6_LEN
       sin->sin_len = addrlen;
 #endif
-      sin->sin_addr.s_addr = INADDR_ANY;
+      sin->sin_addr.s_addr = txtinfo_listen_ip.v4.s_addr;
       sin->sin_port = htons(ipc_port);
     } else {
       sin6 = (struct sockaddr_in6 *)&sst;
@@ -201,7 +201,7 @@ plugin_ipc_init(void)
 #ifdef SIN6_LEN
       sin6->sin6_len = addrlen;
 #endif
-      sin6->sin6_addr = in6addr_any;
+      sin6->sin6_addr = txtinfo_listen_ip.v6;
       sin6->sin6_port = htons(ipc_port);
     }
 
@@ -257,7 +257,7 @@ ipc_action(int fd)
     sin4 = (struct sockaddr_in *)&pin;
     if (inet_ntop(olsr_cnf->ip_version, &sin4->sin_addr, addr, INET6_ADDRSTRLEN) == NULL)
       addr[0] = '\0';
-    if (!ip4equal(&sin4->sin_addr, &ipc_accept_ip.v4)) {
+    if (!ip4equal(&sin4->sin_addr, &txtinfo_accept_ip.v4)) {
       olsr_printf(1, "(TXTINFO) From host(%s) not allowed!\n", addr);
       close(ipc_connection);
       return;
@@ -267,7 +267,7 @@ ipc_action(int fd)
     if (inet_ntop(olsr_cnf->ip_version, &sin6->sin6_addr, addr, INET6_ADDRSTRLEN) == NULL)
       addr[0] = '\0';
     /* Use in6addr_any (::) in olsr.conf to allow anybody. */
-    if (!ip6equal(&in6addr_any, &ipc_accept_ip.v6) && !ip6equal(&sin6->sin6_addr, &ipc_accept_ip.v6)) {
+    if (!ip6equal(&in6addr_any, &txtinfo_accept_ip.v6) && !ip6equal(&sin6->sin6_addr, &txtinfo_accept_ip.v6)) {
       olsr_printf(1, "(TXTINFO) From host(%s) not allowed!\n", addr);
       close(ipc_connection);
       return;
index a378acf..6f37b1b 100644 (file)
@@ -54,7 +54,8 @@
 /* uncomment this to include VTime values into Link/Topology command */
 /* #define ACTIVATE_VTIME_TXTINFO */
 
-extern union olsr_ip_addr ipc_accept_ip;
+extern union olsr_ip_addr txtinfo_accept_ip;
+extern union olsr_ip_addr txtinfo_listen_ip;
 extern int ipc_port;
 extern int nompr;