This patch adds to the mdns plugin the new feature to tune the TTL of OLSR mdns
authorSaverio Proto <zioproto@gmail.com>
Fri, 5 Jun 2009 10:09:23 +0000 (12:09 +0200)
committerSaverio Proto <zioproto@gmail.com>
Fri, 5 Jun 2009 10:09:23 +0000 (12:09 +0200)
messages from the configuration file. There is new PlParam in the Plugin
configuration block.

(patch includes change to the README for documentation)

lib/mdns/README
lib/mdns/src/NetworkInterfaces.c
lib/mdns/src/NetworkInterfaces.h
lib/mdns/src/mdns.c
lib/mdns/src/olsrd_plugin.c

index 7b4eb90..9418f3d 100644 (file)
@@ -46,6 +46,7 @@ LoadPlugin "olsrd_mdns.so.1.0.0"
 {
 PlParam     "NonOlsrIf"  "eth0"
 PlParam     "NonOlsrIf"  "eth1"
+PlParam     "MDNS_TTL"  "5"
 }
 
 Where eth0 and eth1 are the names of the interfaces where you want to capture traffic (and decapsulate incoming traffic).
@@ -53,7 +54,8 @@ Where eth0 and eth1 are the names of the interfaces where you want to capture tr
 Note that this interfaces must not talk OLSR and also the subnets on this interfaces must be announced with an appropriate HNA entry.
 This version of the plugin will not chech this stuff to be properly configured!
 
-
+MDNS_TTL is the time to live given to the MDNS OLSR messages. It makes no sense to announce your services to hosts that are too many hops away, because they will experience a very bad unicast connection.
+With this TTL setting we can tune how far we announce our services and we make the protocol scale much better
 
 === References ===
 
index 20b9317..2fb83a6 100644 (file)
@@ -57,6 +57,8 @@ Written by Saverio Proto <zioproto@gmail.com> and Claudio Pisa <clauz@ninux.org>
 #include "mdns.h"               /* PLUGIN_NAME, MainAddressOf() */
 #include "Address.h"            /* IsMulticast() */
 
+int my_MDNS_TTL = 0;
+
 /* List of network interface objects used by BMF plugin */
 struct TBmfInterface *BmfInterfaces = NULL;
 struct TBmfInterface *LastBmfInterface = NULL;
@@ -489,7 +491,6 @@ CloseBmfNetworkInterfaces(void)
 #define MAX_NON_OLSR_IFS 32
 static char NonOlsrIfNames[MAX_NON_OLSR_IFS][IFNAMSIZ];
 static int nNonOlsrIfs = 0;
-
 /* -------------------------------------------------------------------------
  * Function   : AddNonOlsrBmfIf
  * Description: Add an non-OLSR enabled network interface to the list of BMF-enabled
@@ -521,6 +522,14 @@ AddNonOlsrBmfIf(const char *ifName, void *data __attribute__ ((unused)), set_plu
   return 0;
 }                               /* AddNonOlsrBmfIf */
 
+
+int
+set_MDNS_TTL(const char *MDNS_TTL, void *data __attribute__ ((unused)), set_plugin_parameter_addon addon __attribute__ ((unused)))
+{
+  assert(MDNS_TTL!= NULL);
+  my_MDNS_TTL = atoi(MDNS_TTL);
+  return 0;
+}                               /* set_MDNS_TTL */
 /* -------------------------------------------------------------------------
  * Function   : IsNonOlsrBmfIf
  * Description: Checks if a network interface is OLSR-enabled
index 0365a93..2d1f433 100644 (file)
@@ -86,6 +86,8 @@ struct TBmfInterface {
 
 extern struct TBmfInterface *BmfInterfaces;
 
+extern int my_MDNS_TTL;
+
 extern int HighestSkfd;
 extern fd_set InputSet;
 
@@ -126,6 +128,7 @@ int CreateBmfNetworkInterfaces(struct interface *skipThisIntf);
 void AddInterface(struct interface *newIntf);
 void CloseBmfNetworkInterfaces(void);
 int AddNonOlsrBmfIf(const char *ifName, void *data, set_plugin_parameter_addon addon);
+int set_MDNS_TTL(const char *MDNS_TTL, void *data, set_plugin_parameter_addon addon);
 int IsNonOlsrBmfIf(const char *ifName);
 void CheckAndUpdateLocalBroadcast(unsigned char *ipPacket, union olsr_ip_addr *broadAddr);
 void AddMulticastRoute(void);
index 64823bd..2c352c8 100644 (file)
@@ -57,6 +57,7 @@ Written by Saverio Proto <zioproto@gmail.com> and Claudio Pisa <clauz@ninux.org>
 #include "Address.h"            /* IsMulticast() */
 #include "Packet.h"             /* ENCAP_HDR_LEN, BMF_ENCAP_TYPE, BMF_ENCAP_LEN etc. */
 
+int my_DNS_TTL=0;
 
 /* -------------------------------------------------------------------------
  * Function   : PacketReceivedFromOLSR
@@ -178,7 +179,9 @@ olsr_mdns_gen(unsigned char *packet, int len)
     message->v4.olsr_msgtype = MESSAGE_TYPE;
     message->v4.olsr_vtime = reltime_to_me(MDNS_VALID_TIME * MSEC_PER_SEC);
     memcpy(&message->v4.originator, &olsr_cnf->router_id, olsr_cnf->ipsize);
-    message->v4.ttl = MAX_TTL;
+    //message->v4.ttl = MAX_TTL;
+    if (my_MDNS_TTL) message->v4.ttl = my_MDNS_TTL;
+    else message->v4.ttl = MAX_TTL;
     message->v4.hopcnt = 0;
     message->v4.seqno = htons(get_msg_seqno());
 
@@ -191,7 +194,9 @@ olsr_mdns_gen(unsigned char *packet, int len)
     message->v6.olsr_msgtype = MESSAGE_TYPE;
     message->v6.olsr_vtime = reltime_to_me(MDNS_VALID_TIME * MSEC_PER_SEC);
     memcpy(&message->v6.originator, &olsr_cnf->router_id, olsr_cnf->ipsize);
-    message->v6.ttl = MAX_TTL;
+    //message->v6.ttl = MAX_TTL;
+    if (my_MDNS_TTL) message->v6.ttl = my_MDNS_TTL;
+    else message->v6.ttl = MAX_TTL;
     message->v6.hopcnt = 0;
     message->v6.seqno = htons(get_msg_seqno());
 
index 18e455f..9fee650 100644 (file)
@@ -107,6 +107,7 @@ olsr_plugin_exit(void)
 
 static const struct olsrd_plugin_parameters plugin_parameters[] = {
   {.name = "NonOlsrIf",.set_plugin_parameter = &AddNonOlsrBmfIf,.data = NULL},
+  {.name = "MDNS_TTL", .set_plugin_parameter = &set_MDNS_TTL, .data = NULL },
   //{ .name = "DoLocalBroadcast", .set_plugin_parameter = &DoLocalBroadcast, .data = NULL },
   //{ .name = "BmfInterface", .set_plugin_parameter = &SetBmfInterfaceName, .data = NULL },
   //{ .name = "BmfInterfaceIp", .set_plugin_parameter = &SetBmfInterfaceIp, .data = NULL },