]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
VLAN: Avoid use of libnl cache
authorMichael Braun <michael-dev@fami-braun.de>
Wed, 24 Feb 2016 11:53:50 +0000 (12:53 +0100)
committerJouni Malinen <j@w1.fi>
Sun, 28 Feb 2016 18:05:17 +0000 (20:05 +0200)
Using rtnl_link_alloc_cache() is expensive as it fills in all configured
links. Using rtnl_link_get_kernel() is much more lightweight.

Signed-off-by: Michael Braun <michael-dev@fami-braun.de>
src/ap/vlan_util.c

index d4e0efb9b02420232d861ea753afb959c1b51529..313d89fe7eca6245f35fd38975386d8510e791f7 100644 (file)
@@ -33,7 +33,6 @@ int vlan_add(const char *if_name, int vid, const char *vlan_if_name)
 {
        int err, ret = -1;
        struct nl_sock *handle = NULL;
-       struct nl_cache *cache = NULL;
        struct rtnl_link *rlink = NULL;
        int if_idx = 0;
 
@@ -65,22 +64,19 @@ int vlan_add(const char *if_name, int vid, const char *vlan_if_name)
                goto vlan_add_error;
        }
 
-       err = rtnl_link_alloc_cache(handle, AF_UNSPEC, &cache);
+       err = rtnl_link_get_kernel(handle, 0, if_name, &rlink);
        if (err < 0) {
-               cache = NULL;
-               wpa_printf(MSG_ERROR, "VLAN: failed to alloc cache: %s",
-                          nl_geterror(err));
-               goto vlan_add_error;
-       }
-
-       if (!(if_idx = rtnl_link_name2i(cache, if_name))) {
                /* link does not exist */
                wpa_printf(MSG_ERROR, "VLAN: interface %s does not exist",
                           if_name);
                goto vlan_add_error;
        }
+       if_idx = rtnl_link_get_ifindex(rlink);
+       rtnl_link_put(rlink);
+       rlink = NULL;
 
-       if ((rlink = rtnl_link_get_by_name(cache, vlan_if_name))) {
+       err = rtnl_link_get_kernel(handle, 0, vlan_if_name, &rlink);
+       if (err >= 0) {
                /* link does exist */
                rtnl_link_put(rlink);
                rlink = NULL;
@@ -127,8 +123,6 @@ int vlan_add(const char *if_name, int vid, const char *vlan_if_name)
 vlan_add_error:
        if (rlink)
                rtnl_link_put(rlink);
-       if (cache)
-               nl_cache_free(cache);
        if (handle)
                nl_socket_free(handle);
        return ret;
@@ -139,7 +133,6 @@ int vlan_rem(const char *if_name)
 {
        int err, ret = -1;
        struct nl_sock *handle = NULL;
-       struct nl_cache *cache = NULL;
        struct rtnl_link *rlink = NULL;
 
        wpa_printf(MSG_DEBUG, "VLAN: vlan_rem(if_name=%s)", if_name);
@@ -157,15 +150,8 @@ int vlan_rem(const char *if_name)
                goto vlan_rem_error;
        }
 
-       err = rtnl_link_alloc_cache(handle, AF_UNSPEC, &cache);
+       err = rtnl_link_get_kernel(handle, 0, if_name, &rlink);
        if (err < 0) {
-               cache = NULL;
-               wpa_printf(MSG_ERROR, "VLAN: failed to alloc cache: %s",
-                          nl_geterror(err));
-               goto vlan_rem_error;
-       }
-
-       if (!(rlink = rtnl_link_get_by_name(cache, if_name))) {
                /* link does not exist */
                wpa_printf(MSG_ERROR, "VLAN: interface %s does not exists",
                           if_name);
@@ -184,8 +170,6 @@ int vlan_rem(const char *if_name)
 vlan_rem_error:
        if (rlink)
                rtnl_link_put(rlink);
-       if (cache)
-               nl_cache_free(cache);
        if (handle)
                nl_socket_free(handle);
        return ret;