interface: allow overriding speed/cap/if_index for named interfaces
authorSteven Noonan <steven@uplinklabs.net>
Tue, 24 Sep 2019 05:53:40 +0000 (22:53 -0700)
committerStefan Metzmacher <metze@samba.org>
Tue, 28 Jan 2020 12:26:51 +0000 (13:26 +0100)
Signed-off-by: Steven Noonan <steven@uplinklabs.net>
source3/lib/interface.c

index af81695abab9cb915126d5119f45ad632c2d35fc..55fa85349769443aa25d5fca09e78ebf54135f06 100644 (file)
@@ -449,17 +449,6 @@ static void interpret_interface(char *token)
        bool cap_set = false;
        bool if_index_set = false;
 
-       /* first check if it is an interface name */
-       for (i=0;i<total_probed;i++) {
-               if (gen_fnmatch(token, probed_ifaces[i].name) == 0) {
-                       add_interface(&probed_ifaces[i]);
-                       added = true;
-               }
-       }
-       if (added) {
-               return;
-       }
-
        /*
         * extract speed / capability information if present
         */
@@ -478,6 +467,26 @@ static void interpret_interface(char *token)
                }
        }
 
+       /* first check if it is an interface name */
+       for (i=0;i<total_probed;i++) {
+               if (gen_fnmatch(token, probed_ifaces[i].name) == 0) {
+                       if (speed_set) {
+                               probed_ifaces[i].linkspeed = speed;
+                       }
+                       if (cap_set) {
+                               probed_ifaces[i].capability = cap;
+                       }
+                       if (if_index_set) {
+                               probed_ifaces[i].if_index = if_index;
+                       }
+                       add_interface(&probed_ifaces[i]);
+                       added = true;
+               }
+       }
+       if (added) {
+               return;
+       }
+
        p = strchr_m(token,'/');
        if (p == NULL) {
                if (!interpret_string_addr(&ss, token, 0)) {