"day",
};
-static const char *ipset_methods[] = {
+const char *fw3_ipset_method_names[__FW3_IPSET_METHOD_MAX] = {
+ "(bug)",
"bitmap",
"hash",
"list",
};
-static const char *ipset_types[] = {
+const char *fw3_ipset_type_names[__FW3_IPSET_TYPE_MAX] = {
+ "(bug)",
"ip",
"port",
"mac",
bool
fw3_parse_device(void *ptr, const char *val, bool is_list)
{
+ char *p;
struct fw3_device dev = { };
if (*val == '*')
while (isspace(*++val));
}
+ if ((p = strchr(val, '@')) != NULL)
+ {
+ *p++ = 0;
+ snprintf(dev.network, sizeof(dev.network), "%s", p);
+ }
+
if (*val)
snprintf(dev.name, sizeof(dev.name), "%s", val);
else
bool
fw3_parse_ipset_method(void *ptr, const char *val, bool is_list)
{
- return parse_enum(ptr, val, ipset_methods,
+ return parse_enum(ptr, val, &fw3_ipset_method_names[FW3_IPSET_METHOD_BITMAP],
FW3_IPSET_METHOD_BITMAP, FW3_IPSET_METHOD_LIST);
}
bool
fw3_parse_ipset_datatype(void *ptr, const char *val, bool is_list)
{
- struct fw3_ipset_datatype *type = ptr;
+ struct fw3_ipset_datatype type = { };
if (!strncmp(val, "dest_", 5))
{
val += 5;
- type->dest = true;
+ type.dest = true;
}
else if (!strncmp(val, "dst_", 4))
{
val += 4;
- type->dest = true;
+ type.dest = true;
}
else if (!strncmp(val, "src_", 4))
{
val += 4;
- type->dest = false;
+ type.dest = false;
}
- return parse_enum(&type->type, val, ipset_types,
- FW3_IPSET_TYPE_IP, FW3_IPSET_TYPE_SET);
+ if (parse_enum(&type.type, val, &fw3_ipset_type_names[FW3_IPSET_TYPE_IP],
+ FW3_IPSET_TYPE_IP, FW3_IPSET_TYPE_SET))
+ {
+ put_value(ptr, &type, sizeof(type), is_list);
+ return true;
+ }
+
+ return false;
}
bool
if (!ipset)
return;
- if (ipset->external && *ipset->external)
- name = ipset->external;
- else
- name = ipset->name;
+ name = ipset->external ? ipset->external : ipset->name;
fw3_pr(" -m set %s--match-set %s", invert ? "! " : "", name);