uci_add_section(ctx, dest, "defaults", &ptr.s);
+ ptr.o = NULL;
+ ptr.option = "input";
+ ptr.value = fw3_flag_names[d->policy_input];
+ uci_set(ctx, &ptr);
+
+ ptr.o = NULL;
+ ptr.option = "output";
+ ptr.value = fw3_flag_names[d->policy_output];
+ uci_set(ctx, &ptr);
+
+ ptr.o = NULL;
+ ptr.option = "forward";
+ ptr.value = fw3_flag_names[d->policy_forward];
+ uci_set(ctx, &ptr);
+
sprintf(buf, "0x%x", d->flags[0]);
ptr.o = NULL;
ptr.option = "__flags_v4";
if (dev->invert)
p += sprintf(p, "!");
- p += sprintf(p, "%s", dev->name);
+ if (*dev->network)
+ p += sprintf(p, "%s@%s", dev->name, dev->network);
+ else
+ p += sprintf(p, "%s", dev->name);
ptr.value = buf;
uci_add_list(ctx, &ptr);
struct uci_ptr ptr = { .p = dest };
- if (!s->enabled || (s->external && *s->external))
+ if (!s->enabled || s->external)
return;
uci_add_section(ctx, dest, "ipset", &ptr.s);
uci_unload(s->uci, p);
}
+ fsync(fileno(sf));
fclose(sf);
}
}
struct fw3_zone *z = zone;
struct fw3_device *d = device;
- if (!d->network)
+ if (!*d->network)
return false;
switch (fork())
clearenv();
setenv("ACTION", add ? "add" : "remove", 1);
setenv("ZONE", z->name, 1);
- setenv("INTERFACE", d->network->name, 1);
+ setenv("INTERFACE", d->network, 1);
setenv("DEVICE", d->name, 1);
execl(FW3_HOTPLUG, FW3_HOTPLUG, "firewall", NULL);