*/
#include "options.h"
+#include "ubus.h"
static bool
}
-const char *fw3_flag_names[FW3_DEFAULT_DROP_INVALID + 1] = {
+const char *fw3_flag_names[__FW3_FLAG_MAX] = {
"filter",
"nat",
"mangle",
"restore",
};
+static const char *reflection_sources[] = {
+ "internal",
+ "external",
+};
+
bool
fw3_parse_bool(void *ptr, const char *val)
bool
fw3_parse_target(void *ptr, const char *val)
{
- return parse_enum(ptr, val, &fw3_flag_names[FW3_TARGET_ACCEPT],
- FW3_TARGET_ACCEPT, FW3_TARGET_SNAT);
+ return parse_enum(ptr, val, &fw3_flag_names[FW3_FLAG_ACCEPT],
+ FW3_FLAG_ACCEPT, FW3_FLAG_SNAT);
}
bool
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)
{
FW3_INC_TYPE_SCRIPT, FW3_INC_TYPE_RESTORE);
}
+bool
+fw3_parse_reflection_source(void *ptr, const char *val)
+{
+ return parse_enum(ptr, val, reflection_sources,
+ FW3_REFLECTION_INTERNAL, FW3_REFLECTION_EXTERNAL);
+}
+
void
fw3_parse_options(void *s, const struct fw3_option *opts,