mDNS: Implemented Host Filtering for ipv4 and ipv6, writing in the config file which...
authorAlessandro <enterprise.nx@gmail.com>
Sat, 14 Jul 2012 14:56:45 +0000 (16:56 +0200)
committerSaverio Proto <zioproto@gmail.com>
Mon, 13 Aug 2012 17:37:40 +0000 (19:37 +0200)
lib/mdns/src/Address.h
lib/mdns/src/NetworkInterfaces.c
lib/mdns/src/NetworkInterfaces.h
lib/mdns/src/RouterElection.c
lib/mdns/src/mdns.c
lib/mdns/src/mdns.h

index 0e83826..3e5a42b 100644 (file)
@@ -52,12 +52,4 @@ struct TBmfInterface;
 
 int IsMulticast(union olsr_ip_addr *ipAddress);
 
-struct FilteredHosts {
-
-       union olsr_ip_addr ipaddr;
-       struct list_entity list;
-
-};
-
-
 #endif /* _MDNS_ADDRESS_H */
index 011c451..ca141ec 100644 (file)
@@ -826,33 +826,6 @@ return 0;
 } /* Set TTL Check */
 
 int
-AddFilteredHost(const char *host, void *data __attribute__ ((unused)), set_plugin_parameter_addon addon __attribute__ ((unused)))
-{
-  struct FilteredHosts *hostToAdd;
-  
-assert(host!= NULL);
-
-  hostToAdd = olsr_malloc(sizeof(struct FilteredHosts), "text"); //TODO: what is "text", some debug ?
-  
-  
-if (olsr_cnf->ip_version == AF_INET) { //IPv4
-
-  inet_pton(olsr_cnf->ip_version,host,&hostToAdd->ipaddr.v4);
-
-  }
-  else { //IPv6
-
-  inet_pton(olsr_cnf->ip_version,host,&hostToAdd->ipaddr.v6);
-
-  }
-
-  listbackport_add_tail(&ListOfFilteredHosts,&(hostToAdd->list));
-  
-
-  return 0;
-}                               /* AddFilteredHost */
-
-int
 set_MDNS_TTL(const char *MDNS_TTL, void *data __attribute__ ((unused)), set_plugin_parameter_addon addon __attribute__ ((unused)))
 {
   assert(MDNS_TTL!= NULL);
index 4493c7b..32e26e7 100644 (file)
@@ -155,7 +155,6 @@ 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 AddFilteredHost(const char *host, void *data, set_plugin_parameter_addon addon);
 int set_TTL_Check(const char *TTL_Check, 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);
index c0caef8..e0f2441 100644 (file)
@@ -212,7 +212,7 @@ set_Network_ID(const char *Network_ID, void *data __attribute__ ((unused)), set_
   assert(Network_ID!= NULL);
   set_plugin_int(Network_ID, &temp, addon);
   NETWORK_ID = (uint8_t) temp;
-  return 1;
+  return 0;
 } /* Set Network ID */
 
 
index 498bb9a..75bbb1f 100644 (file)
 #include "Packet.h"             /* ENCAP_HDR_LEN, BMF_ENCAP_TYPE, BMF_ENCAP_LEN etc. */
 #include "list_backport.h"
 #include "RouterElection.h"
+#include "list_backport.h"
 
-#define OLSR_FOR_ALL_FILTEREDNODES_ENTRIES(n, iterator) list_for_each_element_safe(&ListOfFilteredHosts, n, list, iterator)
+#define OLSR_FOR_ALL_FILTEREDNODES_ENTRIES(n, iterator) listbackport_for_each_element_safe(&ListOfFilteredHosts, n, list, iterator)
 
 struct list_entity ListOfFilteredHosts;
+int FHListInit = 0;
 
 /* -------------------------------------------------------------------------
  * Function   : PacketReceivedFromOLSR
@@ -321,16 +323,66 @@ MainAddressOf(union olsr_ip_addr *ip)
   return result;
 }                               /* MainAddressOf */
 
+int
+AddFilteredHost(const char *FilteredHost, void *data __attribute__ ((unused)), 
+               set_plugin_parameter_addon addon __attribute__ ((unused))){
 
-static int
-isInFilteredList(union olsr_ip_addr *ip) {
+  int res = 0;
+  struct FilteredHost *tmp;
+  tmp = (struct FilteredHost *) malloc(sizeof(struct FilteredHost));
+  listbackport_init_node(&tmp->list);
 
-       //TODO: implement here check if IP is in filtered list
+  if(FHListInit == 0){
+    listbackport_init_head(&ListOfFilteredHosts);
+    FHListInit = 1;
+  }
 
-return 1;
+  if(olsr_cnf->ip_version == AF_INET){
+    res = inet_pton(AF_INET, FilteredHost, &tmp->host.v4);
+    if(res > 0){
+      listbackport_add_tail(&ListOfFilteredHosts, &tmp->list);
+    }
+    else
+      free(tmp);
+  }
+  else{
+    res = inet_pton(AF_INET6, FilteredHost, &tmp->host.v6);
+    if(res > 0)
+      listbackport_add_tail(&ListOfFilteredHosts, &tmp->list);
+    else
+      free(tmp);
+  }
 
+  return 0;
 }
 
+int
+isInFilteredList(union olsr_ip_addr *src){//TODO: implement here check if IP is in filtered list
+
+  struct FilteredHost *tmp, *iterator;
+  
+  if(FHListInit == 0){
+    listbackport_init_head(&ListOfFilteredHosts);
+    FHListInit = 1;
+  }
+
+
+  if(listbackport_is_empty(&ListOfFilteredHosts))
+    return 0;
+
+  OLSR_FOR_ALL_FILTEREDNODES_ENTRIES(tmp, iterator){
+    if(olsr_cnf->ip_version == AF_INET){
+      if(memcmp(&tmp->host.v4, &src->v4, sizeof(struct in_addr)) == 0)
+        return 1;
+    }
+    else{
+      if(memcmp(&tmp->host.v6, &src->v6, sizeof(struct in6_addr)) == 0)
+        return 1;
+    }
+  }
+
+  return 0;
+}
 
 /* -------------------------------------------------------------------------
  * Function   : BmfPacketCaptured
@@ -391,8 +443,7 @@ BmfPacketCaptured(
 
 
     if (isInFilteredList(&src)) {
-
-       //return;
+      return;
     }
 
   }                             //END IPV4
@@ -427,11 +478,10 @@ BmfPacketCaptured(
       return;
 
   
-/*    if (isInFilteredList(&src)) {
-    
-    return;
+    if (isInFilteredList(&src)) {
+      return;
     }
-*/
+
   }                             //END IPV6
   else
     return;                     //Is not IP packet
@@ -510,9 +560,6 @@ DoMDNS(int skfd, void *data __attribute__ ((unused)), unsigned int flags __attri
 int
 InitMDNS(struct interface *skipThisIntf)
 {
-   
-  listbackport_init_head(&ListOfFilteredHosts);
-
   //Tells OLSR to launch olsr_parser when the packets for this plugin arrive
   olsr_parser_add_function(&olsr_parser, PARSER_TYPE);
   //Creates captures sockets and register them to the OLSR scheduler
index 3547351..24bb2c3 100644 (file)
@@ -46,6 +46,7 @@
 #include "olsrd_plugin.h"             /* union set_plugin_parameter_addon */
 #include "duplicate_set.h"
 #include "parser.h"
+#include "list_backport.h"
 
 #define MESSAGE_TYPE 132
 #define PARSER_TYPE            MESSAGE_TYPE
 /* Forward declaration of OLSR interface type */
 struct interface;
 
-extern struct list_entity ListOfFilteredHosts;
+struct FilteredHost{
+  union olsr_ip_addr host;
+
+  struct list_entity list;
+};
 
 //extern int FanOutLimit;
 //extern int BroadcastRetransmitCount;
@@ -83,7 +88,9 @@ union olsr_ip_addr *MainAddressOf(union olsr_ip_addr *ip);
 //void CloseBmf(void);
 int InitMDNS(struct interface *skipThisIntf);
 void CloseMDNS(void);
-
+int AddFilteredHost(const char *FilteredHost, void *data __attribute__ ((unused)),
+                        set_plugin_parameter_addon addon __attribute__ ((unused)));
+int isInFilteredList(union olsr_ip_addr *src);
 void olsr_mdns_gen(unsigned char *packet, int len);
 
 /* Parser function to register with the scheduler */