]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ip/batadv: allow to specify RA when creating link
authorNicolas Escande <nico.escande@gmail.com>
Fri, 4 Mar 2022 10:33:54 +0000 (11:33 +0100)
committerDavid Ahern <dsahern@kernel.org>
Fri, 11 Mar 2022 16:20:55 +0000 (09:20 -0700)
This patch adds the possibility to specify batadv specific options when
creating a new batman link. The only option available on link creation
is IFLA_BATADV_ALGO_NAME which specifies the routing algorithm.
Note there is no batadv specific attr to be handled on link dump.

Signed-off-by: Nicolas Escande <nico.escande@gmail.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
ip/Makefile
ip/iplink_batadv.c [new file with mode: 0644]

index 2a7a51c313c6e4fb207bb97b590a5f765cc3b2ee..11a361cef5de95d045b5d8b525918a9502548532 100644 (file)
@@ -12,7 +12,7 @@ IPOBJ=ip.o ipaddress.o ipaddrlabel.o iproute.o iprule.o ipnetns.o \
     iplink_geneve.o iplink_vrf.o iproute_lwtunnel.o ipmacsec.o ipila.o \
     ipvrf.o iplink_xstats.o ipseg6.o iplink_netdevsim.o iplink_rmnet.o \
     ipnexthop.o ipmptcp.o iplink_bareudp.o iplink_wwan.o ipioam6.o \
-    iplink_amt.o
+    iplink_amt.o iplink_batadv.o
 
 RTMONOBJ=rtmon.o
 
diff --git a/ip/iplink_batadv.c b/ip/iplink_batadv.c
new file mode 100644 (file)
index 0000000..45bd923
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * iplink_batadv.c     Batman-adv support
+ *
+ * Authors:     Nicolas Escande <nico.escande@gmail.com>
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <linux/batman_adv.h>
+
+#include "rt_names.h"
+#include "utils.h"
+#include "ip_common.h"
+
+static void print_explain(FILE *f)
+{
+       fprintf(f,
+               "Usage: ... batadv [ ra ROUTING_ALG ]\n"
+               "\n"
+               "Where: ROUTING_ALG := { BATMAN_IV | BATMAN_V }\n"
+       );
+}
+
+static void explain(void)
+{
+       print_explain(stderr);
+}
+
+static int batadv_parse_opt(struct link_util *lu, int argc, char **argv,
+                           struct nlmsghdr *n)
+{
+       while (argc > 0) {
+               if (matches(*argv, "ra") == 0) {
+                       NEXT_ARG();
+                       addattrstrz(n, 1024, IFLA_BATADV_ALGO_NAME, *argv);
+               } else if (matches(*argv, "help") == 0) {
+                       explain();
+                       return -1;
+               } else {
+                       fprintf(stderr,
+                               "batadv: unknown command \"%s\"?\n",
+                               *argv);
+                       explain();
+                       return -1;
+               }
+               argc--, argv++;
+       }
+
+       return 0;
+}
+
+static void batadv_print_help(struct link_util *lu, int argc, char **argv,
+                             FILE *f)
+{
+       print_explain(f);
+}
+
+struct link_util batadv_link_util = {
+       .id             = "batadv",
+       .maxattr        = IFLA_BATADV_MAX,
+       .parse_opt      = batadv_parse_opt,
+       .print_help     = batadv_print_help,
+};