Many protocol handlers support "zone" option independently and they pass
it in the "data". Then it's read e.g. by a firewall[34].
Add support for "zone" directly to the netifd so:
1. It works for all protocols
2. Handlers don't have to duplicate code
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
IFACE_ATTR_IFNAME, /* Backward compatibility */
IFACE_ATTR_PROTO,
IFACE_ATTR_AUTO,
IFACE_ATTR_IFNAME, /* Backward compatibility */
IFACE_ATTR_PROTO,
IFACE_ATTR_AUTO,
IFACE_ATTR_JAIL,
IFACE_ATTR_JAIL_DEVICE,
IFACE_ATTR_JAIL_IFNAME,
IFACE_ATTR_JAIL,
IFACE_ATTR_JAIL_DEVICE,
IFACE_ATTR_JAIL_IFNAME,
[IFACE_ATTR_PROTO] = { .name = "proto", .type = BLOBMSG_TYPE_STRING },
[IFACE_ATTR_IFNAME] = { .name = "ifname", .type = BLOBMSG_TYPE_STRING },
[IFACE_ATTR_AUTO] = { .name = "auto", .type = BLOBMSG_TYPE_BOOL },
[IFACE_ATTR_PROTO] = { .name = "proto", .type = BLOBMSG_TYPE_STRING },
[IFACE_ATTR_IFNAME] = { .name = "ifname", .type = BLOBMSG_TYPE_STRING },
[IFACE_ATTR_AUTO] = { .name = "auto", .type = BLOBMSG_TYPE_BOOL },
+ [IFACE_ATTR_ZONE] = { .name = "zone", .type = BLOBMSG_TYPE_STRING },
[IFACE_ATTR_JAIL] = { .name = "jail", .type = BLOBMSG_TYPE_STRING },
[IFACE_ATTR_JAIL_DEVICE] = { .name = "jail_device", .type = BLOBMSG_TYPE_STRING },
[IFACE_ATTR_JAIL_IFNAME] = { .name = "jail_ifname", .type = BLOBMSG_TYPE_STRING },
[IFACE_ATTR_JAIL] = { .name = "jail", .type = BLOBMSG_TYPE_STRING },
[IFACE_ATTR_JAIL_DEVICE] = { .name = "jail_device", .type = BLOBMSG_TYPE_STRING },
[IFACE_ATTR_JAIL_IFNAME] = { .name = "jail_ifname", .type = BLOBMSG_TYPE_STRING },
blobmsg_parse(iface_attrs, IFACE_ATTR_MAX, tb,
blob_data(config), blob_len(config));
blobmsg_parse(iface_attrs, IFACE_ATTR_MAX, tb,
blob_data(config), blob_len(config));
+ iface->zone = NULL;
+ if ((cur = tb[IFACE_ATTR_ZONE]))
+ iface->zone = strdup(blobmsg_get_string(cur));
+
if ((cur = tb[IFACE_ATTR_PROTO]))
proto_name = blobmsg_data(cur);
if ((cur = tb[IFACE_ATTR_PROTO]))
proto_name = blobmsg_data(cur);
const char *name;
const char *device;
const char *name;
const char *device;
char *jail;
char *jail_device;
char *host_device;
char *jail;
char *jail_device;
char *host_device;
}
a = blobmsg_open_table(&b, "data");
}
a = blobmsg_open_table(&b, "data");
+
+ if (iface->zone)
+ blobmsg_add_string(&b, "zone", iface->zone);
avl_for_each_element(&iface->data, data, node)
blobmsg_add_blob(&b, data->data);
avl_for_each_element(&iface->data, data, node)
blobmsg_add_blob(&b, data->data);