[PATCH netifd] interface: rename "ifname" attribute to "device"
Rafał Miłecki
zajec5 at gmail.com
Mon May 17 07:49:25 PDT 2021
From: Rafał Miłecki <rafal at milecki.pl>
Interfaces need to be assigned to devices. For that purpose a "device"
option should be more accurate than "ifname" one.
For backward compatibility add a temporary config translation.
Config example:
config device
option name 'lan'
option type 'bridge'
list ports 'lan1'
list ports 'lan2'
config interface 'home'
option device 'lan'
option proto 'static'
Signed-off-by: Rafał Miłecki <rafal at milecki.pl>
---
config.c | 21 +++++++++++++++++++++
interface.c | 22 +++++++++++-----------
interface.h | 2 +-
3 files changed, 33 insertions(+), 12 deletions(-)
diff --git a/config.c b/config.c
index 1f4560f..b461b20 100644
--- a/config.c
+++ b/config.c
@@ -148,6 +148,25 @@ config_parse_bridge_interface(struct uci_section *s, struct device_type *devtype
return 0;
}
+/**
+ * config_fixup_interface_device - translate deprecated "ifname" option
+ *
+ * Initially "interface" sections were using "ifname" for specifying device.
+ * That has been replaced by the "device" option. For backward compatibility
+ * translate it.
+ */
+static void config_fixup_interface_device(struct uci_section *s)
+{
+ const char *ifname;
+
+ if (uci_lookup_option(uci_ctx, s, "device"))
+ return;
+
+ ifname = uci_lookup_option_string(uci_ctx, s, "ifname");
+ if (ifname)
+ config_fixup_bridge_var(s, "device", ifname);
+}
+
static void
config_parse_interface(struct uci_section *s, bool alias)
{
@@ -161,6 +180,8 @@ config_parse_interface(struct uci_section *s, bool alias)
if (disabled && !strcmp(disabled, "1"))
return;
+ config_fixup_interface_device(s);
+
blob_buf_init(&b, 0);
if (!alias)
diff --git a/interface.c b/interface.c
index ccae915..95f3391 100644
--- a/interface.c
+++ b/interface.c
@@ -30,7 +30,7 @@ struct vlist_tree interfaces;
static LIST_HEAD(iface_all_users);
enum {
- IFACE_ATTR_IFNAME,
+ IFACE_ATTR_DEVICE,
IFACE_ATTR_PROTO,
IFACE_ATTR_AUTO,
IFACE_ATTR_JAIL,
@@ -55,8 +55,8 @@ enum {
};
static const struct blobmsg_policy iface_attrs[IFACE_ATTR_MAX] = {
+ [IFACE_ATTR_DEVICE] = { .name = "device", .type = BLOBMSG_TYPE_STRING },
[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_JAIL] = { .name = "jail", .type = BLOBMSG_TYPE_STRING },
[IFACE_ATTR_JAIL_IFNAME] = { .name = "jail_ifname", .type = BLOBMSG_TYPE_STRING },
@@ -629,9 +629,9 @@ interface_claim_device(struct interface *iface)
parent = vlist_find(&interfaces, iface->parent_ifname, parent, node);
iface->parent_iface.cb = interface_alias_cb;
interface_add_user(&iface->parent_iface, parent);
- } else if (iface->ifname &&
+ } else if (iface->device &&
!(iface->proto_handler->flags & PROTO_FLAG_NODEV)) {
- dev = device_get(iface->ifname, true);
+ dev = device_get(iface->device, true);
interface_set_device_config(iface, dev);
} else {
dev = iface->ext_dev.dev;
@@ -927,8 +927,8 @@ static bool __interface_add(struct interface *iface, struct blob_attr *config, b
if (!iface->parent_ifname)
return false;
} else {
- if ((cur = tb[IFACE_ATTR_IFNAME]))
- iface->ifname = blobmsg_data(cur);
+ if ((cur = tb[IFACE_ATTR_DEVICE]))
+ iface->device = blobmsg_data(cur);
}
if (iface->dynamic) {
@@ -1204,7 +1204,7 @@ interface_start_jail(const char *jail, const pid_t netns_pid)
* list, so we can mess with it :)
*/
if (iface->jail_ifname)
- iface->ifname = iface->jail_ifname;
+ iface->device = iface->jail_ifname;
interface_do_reload(iface);
interface_set_up(iface);
@@ -1245,9 +1245,9 @@ interface_stop_jail(const char *jail, const pid_t netns_pid)
if (!iface->jail || strcmp(iface->jail, jail))
continue;
- orig_ifname = iface->ifname;
+ orig_ifname = iface->device;
if (iface->jail_ifname)
- iface->ifname = iface->jail_ifname;
+ iface->device = iface->jail_ifname;
interface_do_reload(iface);
interface_set_down(iface);
@@ -1340,7 +1340,7 @@ interface_change_config(struct interface *if_old, struct interface *if_new)
if (!reload && interface_device_config_changed(if_old, if_new))
reload = true;
- if (FIELD_CHANGED_STR(ifname) ||
+ if (FIELD_CHANGED_STR(device) ||
if_old->proto_handler != if_new->proto_handler)
reload = true;
@@ -1379,7 +1379,7 @@ interface_change_config(struct interface *if_old, struct interface *if_new)
if_old->jail_ifname = if_new->jail_ifname;
- if_old->ifname = if_new->ifname;
+ if_old->device = if_new->device;
if_old->parent_ifname = if_new->parent_ifname;
if_old->dynamic = if_new->dynamic;
if_old->proto_handler = if_new->proto_handler;
diff --git a/interface.h b/interface.h
index 9c136b6..1767bf1 100644
--- a/interface.h
+++ b/interface.h
@@ -107,7 +107,7 @@ struct interface {
enum interface_event hotplug_ev;
const char *name;
- const char *ifname;
+ const char *device;
char *jail;
char *jail_ifname;
int netns_fd;
--
2.26.2
More information about the openwrt-devel
mailing list