Implement support for "network" datatype and use it for masq_src / masq_dest
[project/firewall3.git] / options.c
index 5c529b30f2b512d1de903836a13f670779bec420..98ef9de195bac6882f21ba1a43979ddc88f6a928 100644 (file)
--- a/options.c
+++ b/options.c
@@ -17,6 +17,7 @@
  */
 
 #include "options.h"
+#include "ubus.h"
 
 
 static bool
@@ -288,6 +289,38 @@ fw3_parse_address(void *ptr, const char *val)
        return true;
 }
 
+bool
+fw3_parse_network(void *ptr, const char *val)
+{
+       struct fw3_device dev;
+       struct fw3_address *tmp, *addr = ptr;
+       struct list_head *list;
+
+       if (!fw3_parse_address(addr, val))
+       {
+               memset(&dev, 0, sizeof(dev));
+
+               if (!fw3_parse_device(&dev, val))
+                       return false;
+
+               list = fw3_ubus_address(dev.name);
+
+               if (list)
+               {
+                       list_for_each_entry(tmp, list, list)
+                       {
+                               *addr = *tmp;
+                               addr->invert = dev.invert;
+                               break;
+                       }
+
+                       fw3_ubus_address_free(list);
+               }
+       }
+
+       return true;
+}
+
 bool
 fw3_parse_mac(void *ptr, const char *val)
 {