summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--options.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/options.c b/options.c
index f686cf0..6d2a283 100644
--- a/options.c
+++ b/options.c
@@ -342,19 +342,31 @@ fw3_parse_network(void *ptr, const char *val, bool is_list)
struct fw3_device dev = { };
struct fw3_address *addr, *tmp;
LIST_HEAD(addr_list);
+ int n_addrs;
if (!fw3_parse_address(ptr, val, is_list))
{
if (!fw3_parse_device(&dev, val, false))
return false;
- fw3_ubus_address(&addr_list, dev.name);
+ n_addrs = fw3_ubus_address(&addr_list, dev.name);
+
list_for_each_entry(addr, &addr_list, list)
{
addr->invert = dev.invert;
addr->resolved = true;
}
+ /* add an empty address member with .set = false, .resolved = true
+ * to signal resolving failure to callers */
+ if (n_addrs == 0)
+ {
+ tmp = fw3_alloc(sizeof(*tmp));
+ tmp->resolved = true;
+
+ list_add_tail(&tmp->list, &addr_list);
+ }
+
if (is_list)
{
list_splice_tail(&addr_list, ptr);