Add boolean ipv6only parameter to txtinfo and jsoninfo
authorHenning Rogge <hrogge@gmail.com>
Sun, 24 Aug 2014 11:07:58 +0000 (13:07 +0200)
committerHenning Rogge <hrogge@gmail.com>
Sun, 24 Aug 2014 11:07:58 +0000 (13:07 +0200)
lib/jsoninfo/README_JSONINFO
lib/jsoninfo/src/olsrd_jsoninfo.c
lib/jsoninfo/src/olsrd_plugin.c
lib/txtinfo/README_TXTINFO
lib/txtinfo/src/olsrd_plugin.c
lib/txtinfo/src/olsrd_txtinfo.c

index 4e63859..2f6ea40 100644 (file)
@@ -68,6 +68,10 @@ LoadPlugin "olsrd_jsoninfo.so.0.0"
     # is allowed by default.  jsoninfo will only use the first "accept"
     # parameter specified and will ignore the rest.
 
+    # Set this parameter to activate the IPV6_V6ONLY flag for the plugin
+    # to prevent it from receiving IPv4 messages
+    #PlParam     "ipv6only"   "false"
+
     # to allow a specific host:
     #PlParam      "accept" "172.29.44.23"
     # if you set it to 0.0.0.0, it will accept all connections
index 0db7609..4c5fcd6 100644 (file)
@@ -386,7 +386,7 @@ plugin_ipc_init(void)
     }
 #endif /* (defined __FreeBSD__ || defined __FreeBSD_kernel__) && defined SO_NOSIGPIPE */
 #if defined linux
-    if (olsr_cnf->ip_version == AF_INET6) {
+    if (jsoninfo_ipv6_only && olsr_cnf->ip_version == AF_INET6) {
       if (setsockopt(ipc_socket, IPPROTO_IPV6, IPV6_V6ONLY, (char *)&yes, sizeof(yes)) < 0) {
         perror("IPV6_V6ONLY failed");
         return 0;
index 03aa45f..c74f552 100644 (file)
@@ -65,6 +65,7 @@ union olsr_ip_addr jsoninfo_listen_ip;
 int ipc_port;
 int nompr;
 bool http_headers;
+bool jsoninfo_ipv6_only;
 
 static void my_init(void) __attribute__ ((constructor));
 static void my_fini(void) __attribute__ ((destructor));
@@ -81,6 +82,8 @@ my_init(void)
   /* defaults for parameters */
   ipc_port = 9090;
   http_headers = false;
+  jsoninfo_ipv6_only = false;
+
   if (olsr_cnf->ip_version == AF_INET) {
     jsoninfo_accept_ip.v4.s_addr = htonl(INADDR_LOOPBACK);
     jsoninfo_listen_ip.v4.s_addr = htonl(INADDR_ANY);
@@ -142,6 +145,7 @@ static const struct olsrd_plugin_parameters plugin_parameters[] = {
   {.name = "listen",.set_plugin_parameter = &set_plugin_ipaddress,.data = &jsoninfo_listen_ip},
   {.name = "uuidfile",.set_plugin_parameter = &store_string,.data = uuidfile},
   {.name = "httpheaders",.set_plugin_parameter = &store_boolean,.data = &http_headers},
+  {.name = "ipv6only", .set_plugin_parameter = &set_plugin_boolean, .data = &jsoninfo_ipv6_only},
 };
 
 void
index 9f07db1..c08c140 100644 (file)
@@ -63,6 +63,10 @@ LoadPlugin "olsrd_txtinfo.so.0.1"
     # is allowed by default.  txtinfo will only use the first "accept"
     # parameter specified and will ignore the rest.
 
+    # Set this parameter to activate the IPV6_V6ONLY flag for the plugin
+    # to prevent it from receiving IPv4 messages
+    #PlParam     "ipv6only"   "false"
+
     # to allow a specific host:
     #PlParam      "accept" "172.29.44.23"
     # if you set it to 0.0.0.0, it will accept all connections
index bff2774..fe81ba8 100644 (file)
@@ -64,6 +64,7 @@ union olsr_ip_addr txtinfo_accept_ip;
 union olsr_ip_addr txtinfo_listen_ip;
 int ipc_port;
 int nompr;
+bool txtinfo_ipv6_only;
 
 static void my_init(void) __attribute__ ((constructor));
 static void my_fini(void) __attribute__ ((destructor));
@@ -79,6 +80,8 @@ my_init(void)
 
   /* defaults for parameters */
   ipc_port = 2006;
+  txtinfo_ipv6_only = false;
+
   if (olsr_cnf->ip_version == AF_INET) {
     txtinfo_accept_ip.v4.s_addr = htonl(INADDR_LOOPBACK);
     txtinfo_listen_ip.v4.s_addr = htonl(INADDR_ANY);
@@ -116,6 +119,7 @@ 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 = &txtinfo_accept_ip},
   {.name = "listen",.set_plugin_parameter = &set_plugin_ipaddress,.data = &txtinfo_listen_ip},
+  {.name = "ipv6only", .set_plugin_parameter = &set_plugin_boolean, .data = &txtinfo_ipv6_only},
 };
 
 void
index 0ca6b11..f76d46f 100644 (file)
@@ -199,7 +199,7 @@ plugin_ipc_init(void)
     }
 #endif /* (defined __FreeBSD__ || defined __FreeBSD_kernel__) && defined SO_NOSIGPIPE */
 #if defined linux
-    if (olsr_cnf->ip_version == AF_INET6) {
+    if (txtinfo_ipv6_only && olsr_cnf->ip_version == AF_INET6) {
       if (setsockopt(ipc_socket, IPPROTO_IPV6, IPV6_V6ONLY, (char *)&yes, sizeof(yes)) < 0) {
         perror("IPV6_V6ONLY failed");
         return 0;