]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
devlink: add ifname_map_add/del() helpers
authorJiri Pirko <jiri@nvidia.com>
Mon, 5 Dec 2022 12:21:55 +0000 (13:21 +0100)
committerDavid Ahern <dsahern@kernel.org>
Thu, 8 Dec 2022 17:46:59 +0000 (10:46 -0700)
Add couple of helpers to alloc/free of map object alongside with list
addition/removal.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
devlink/devlink.c

index e62215f84f18f6f8115db66e3e59377b5e7e05bb..e6cf8b0d91b29035229089b510c0ce053ab8a265 100644 (file)
@@ -778,16 +778,35 @@ static int function_attr_cb(const struct nlattr *attr, void *data)
        return MNL_CB_OK;
 }
 
+static int ifname_map_add(struct dl *dl, const char *ifname,
+                         const char *bus_name, const char *dev_name,
+                         uint32_t port_index)
+{
+       struct ifname_map *ifname_map;
+
+       ifname_map = ifname_map_alloc(bus_name, dev_name, port_index, ifname);
+       if (!ifname_map)
+               return -ENOMEM;
+       list_add(&ifname_map->list, &dl->ifname_map_list);
+       return 0;
+}
+
+static void ifname_map_del(struct ifname_map *ifname_map)
+{
+       list_del(&ifname_map->list);
+       ifname_map_free(ifname_map);
+}
+
 static int ifname_map_cb(const struct nlmsghdr *nlh, void *data)
 {
        struct nlattr *tb[DEVLINK_ATTR_MAX + 1] = {};
        struct genlmsghdr *genl = mnl_nlmsg_get_payload(nlh);
        struct dl *dl = data;
-       struct ifname_map *ifname_map;
        const char *bus_name;
        const char *dev_name;
        uint32_t port_index;
        const char *port_ifname;
+       int err;
 
        mnl_attr_parse(nlh, sizeof(*genl), attr_cb, tb);
        if (!tb[DEVLINK_ATTR_BUS_NAME] || !tb[DEVLINK_ATTR_DEV_NAME] ||
@@ -801,11 +820,9 @@ static int ifname_map_cb(const struct nlmsghdr *nlh, void *data)
        dev_name = mnl_attr_get_str(tb[DEVLINK_ATTR_DEV_NAME]);
        port_index = mnl_attr_get_u32(tb[DEVLINK_ATTR_PORT_INDEX]);
        port_ifname = mnl_attr_get_str(tb[DEVLINK_ATTR_PORT_NETDEV_NAME]);
-       ifname_map = ifname_map_alloc(bus_name, dev_name,
-                                     port_index, port_ifname);
-       if (!ifname_map)
+       err = ifname_map_add(dl, port_ifname, bus_name, dev_name, port_index);
+       if (err)
                return MNL_CB_ERROR;
-       list_add(&ifname_map->list, &dl->ifname_map_list);
 
        return MNL_CB_OK;
 }
@@ -816,8 +833,7 @@ static void ifname_map_fini(struct dl *dl)
 
        list_for_each_entry_safe(ifname_map, tmp,
                                 &dl->ifname_map_list, list) {
-               list_del(&ifname_map->list);
-               ifname_map_free(ifname_map);
+               ifname_map_del(ifname_map);
        }
 }