]> git.proxmox.com Git - mirror_iproute2.git/blobdiff - bridge/bridge.c
vdpa: add .gitignore
[mirror_iproute2.git] / bridge / bridge.c
index 6658cb8fd801d68a6f4990f7c9544fef860dda9e..f7bfe0b569d33db08c1157e572b9d52aa5b95ebe 100644 (file)
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * Get/set/delete bridge with netlink
  *
 #include <string.h>
 #include <errno.h>
 
-#include "SNAPSHOT.h"
+#include "version.h"
 #include "utils.h"
 #include "br_common.h"
 #include "namespace.h"
+#include "color.h"
 
 struct rtnl_handle rth = { .fd = -1 };
 int preferred_family = AF_UNSPEC;
 int oneline;
 int show_stats;
 int show_details;
+static int color;
 int compress_vlans;
-int json_output;
+int json;
 int timestamp;
-char *batch_file;
+static const char *batch_file;
 int force;
-const char *_SL_;
 
 static void usage(void) __attribute__((noreturn));
 
@@ -38,7 +40,7 @@ static void usage(void)
 "where OBJECT := { link | fdb | mdb | vlan | monitor }\n"
 "      OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] |\n"
 "                   -o[neline] | -t[imestamp] | -n[etns] name |\n"
-"                   -c[ompressvlans] -j{son} }\n");
+"                   -c[ompressvlans] -color -p[retty] -j[son] }\n");
        exit(-1);
 }
 
@@ -75,45 +77,23 @@ static int do_cmd(const char *argv0, int argc, char **argv)
        return -1;
 }
 
-static int batch(const char *name)
+static int br_batch_cmd(int argc, char *argv[], void *data)
 {
-       char *line = NULL;
-       size_t len = 0;
-       int ret = EXIT_SUCCESS;
+       return do_cmd(argv[0], argc, argv);
+}
 
-       if (name && strcmp(name, "-") != 0) {
-               if (freopen(name, "r", stdin) == NULL) {
-                       fprintf(stderr,
-                               "Cannot open file \"%s\" for reading: %s\n",
-                               name, strerror(errno));
-                       return EXIT_FAILURE;
-               }
-       }
+static int batch(const char *name)
+{
+       int ret;
 
        if (rtnl_open(&rth, 0) < 0) {
                fprintf(stderr, "Cannot open rtnetlink\n");
                return EXIT_FAILURE;
        }
 
-       cmdlineno = 0;
-       while (getcmdline(&line, &len, stdin) != -1) {
-               char *largv[100];
-               int largc;
-
-               largc = makeargs(line, largv, 100);
-               if (largc == 0)
-                       continue;       /* blank line */
-
-               if (do_cmd(largv[0], largc, largv)) {
-                       fprintf(stderr, "Command failed %s:%d\n",
-                               name, cmdlineno);
-                       ret = EXIT_FAILURE;
-                       if (!force)
-                               break;
-               }
-       }
-       if (line)
-               free(line);
+       rtnl_set_strict_dump(&rth);
+
+       ret = do_batch(name, force, br_batch_cmd, NULL);
 
        rtnl_close(&rth);
        return ret;
@@ -137,7 +117,7 @@ main(int argc, char **argv)
                if (matches(opt, "-help") == 0) {
                        usage();
                } else if (matches(opt, "-Version") == 0) {
-                       printf("bridge utility, 0.0\n");
+                       printf("bridge utility, %s\n", version);
                        exit(0);
                } else if (matches(opt, "-stats") == 0 ||
                           matches(opt, "-statistics") == 0) {
@@ -171,10 +151,13 @@ main(int argc, char **argv)
                                exit(-1);
                } else if (matches(opt, "-compressvlans") == 0) {
                        ++compress_vlans;
+               } else if (matches_color(opt, &color)) {
                } else if (matches(opt, "-force") == 0) {
                        ++force;
                } else if (matches(opt, "-json") == 0) {
-                       ++json_output;
+                       ++json;
+               } else if (matches(opt, "-pretty") == 0) {
+                       ++pretty;
                } else if (matches(opt, "-batch") == 0) {
                        argc--;
                        argv++;
@@ -192,12 +175,16 @@ main(int argc, char **argv)
 
        _SL_ = oneline ? "\\" : "\n";
 
+       check_enable_color(color, json);
+
        if (batch_file)
                return batch(batch_file);
 
        if (rtnl_open(&rth, 0) < 0)
                exit(1);
 
+       rtnl_set_strict_dump(&rth);
+
        if (argc > 1)
                return do_cmd(argv[1], argc-1, argv+1);