]> git.proxmox.com Git - mirror_iproute2.git/blobdiff - bridge/fdb.c
bridge: fdb: Fix for missing keywords in non-JSON output
[mirror_iproute2.git] / bridge / fdb.c
index b4f6e8b3a01b9d85b2fe5a934e62e84d67f3469f..6487fac579c20de7da73df026c9d97d63364d488 100644 (file)
@@ -36,7 +36,7 @@ static void usage(void)
 {
        fprintf(stderr,
                "Usage: bridge fdb { add | append | del | replace } ADDR dev DEV\n"
-               "              [ self ] [ master ] [ use ] [ router ]\n"
+               "              [ self ] [ master ] [ use ] [ router ] [ extern_learn ]\n"
                "              [ local | static | dynamic ] [ dst IPADDR ] [ vlan VID ]\n"
                "              [ port PORT] [ vni VNI ] [ via DEV ]\n"
                "       bridge fdb [ show [ br BRDEV ] [ brport DEV ] [ vlan VID ] [ state STATE ] ]\n");
@@ -182,7 +182,7 @@ int print_fdb(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
                if (!is_json_context())
                        fprintf(fp, "dev ");
                print_color_string(PRINT_ANY, COLOR_IFNAME,
-                                  "ifname", "%s ",
+                                  "ifname", "dev %s ",
                                   ll_index_to_name(r->ndm_ifindex));
        }
 
@@ -199,7 +199,7 @@ int print_fdb(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
 
                print_color_string(PRINT_ANY,
                                   ifa_family_color(family),
-                                   "dst", "%s ", dst);
+                                   "dst", "dst %s ", dst);
        }
 
        if (vid)
@@ -246,7 +246,7 @@ int print_fdb(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
 
 
        if (tb[NDA_MASTER])
-               print_string(PRINT_ANY, "master", "%s ",
+               print_string(PRINT_ANY, "master", "master %s ",
                             ll_index_to_name(rta_getattr_u32(tb[NDA_MASTER])));
 
        print_string(PRINT_ANY, "state", "%s\n",
@@ -311,11 +311,8 @@ static int fdb_show(int argc, char **argv)
        /*we'll keep around filter_dev for older kernels */
        if (filter_dev) {
                filter_index = ll_name_to_index(filter_dev);
-               if (filter_index == 0) {
-                       fprintf(stderr, "Cannot find device \"%s\"\n",
-                               filter_dev);
-                       return -1;
-               }
+               if (!filter_index)
+                       return nodev(filter_dev);
                req.ifm.ifi_index = filter_index;
        }
 
@@ -391,8 +388,8 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv)
                } else if (strcmp(*argv, "via") == 0) {
                        NEXT_ARG();
                        via = ll_name_to_index(*argv);
-                       if (via == 0)
-                               invarg("invalid device\n", *argv);
+                       if (!via)
+                               exit(nodev(*argv));
                } else if (strcmp(*argv, "self") == 0) {
                        req.ndm.ndm_flags |= NTF_SELF;
                } else if (matches(*argv, "master") == 0) {
@@ -415,6 +412,8 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv)
                        vid = atoi(*argv);
                } else if (matches(*argv, "use") == 0) {
                        req.ndm.ndm_flags |= NTF_USE;
+               } else if (matches(*argv, "extern_learn") == 0) {
+                       req.ndm.ndm_flags |= NTF_EXT_LEARNED;
                } else {
                        if (strcmp(*argv, "to") == 0)
                                NEXT_ARG();
@@ -467,10 +466,8 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv)
                addattr32(&req.n, sizeof(req), NDA_IFINDEX, via);
 
        req.ndm.ndm_ifindex = ll_name_to_index(d);
-       if (req.ndm.ndm_ifindex == 0) {
-               fprintf(stderr, "Cannot find device \"%s\"\n", d);
-               return -1;
-       }
+       if (!req.ndm.ndm_ifindex)
+               return nodev(d);
 
        if (rtnl_talk(&rth, &req.n, NULL) < 0)
                return -1;