]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ip link: hsr: Add support for passing information about INTERLINK device
authorLukasz Majewski <lukma@denx.de>
Mon, 29 Apr 2024 09:23:09 +0000 (11:23 +0200)
committerDavid Ahern <dsahern@kernel.org>
Fri, 3 May 2024 15:19:30 +0000 (15:19 +0000)
The HSR capable device can operate in two modes of operations -
Doubly Attached Node for HSR (DANH) and RedBOX (HSR-SAN).

The latter one allows connection of non-HSR aware device(s) to HSR
network.
This node is called SAN (Singly Attached Network) and is connected via
INTERLINK network device.

This patch adds support for passing information about the INTERLINK
device, so the Linux driver can properly setup it.

Signed-off-by: Lukasz Majewski <lukma@denx.de>
Signed-off-by: David Ahern <dsahern@kernel.org>
ip/iplink.c
ip/iplink_hsr.c
man/man8/ip-link.8.in

index 96f294a23752e39036cd20ce59318aded17e48bb..5b484a9cf961a48c4456624a3d4603153342e449 100644 (file)
@@ -40,8 +40,8 @@ void iplink_types_usage(void)
        /* Remember to add new entry here if new type is added. */
        fprintf(stderr,
                "TYPE := { amt | bareudp | bond | bond_slave | bridge | bridge_slave |\n"
-               "          dsa | dummy | erspan | geneve | gre | gretap | gtp | ifb |\n"
-               "          ip6erspan | ip6gre | ip6gretap | ip6tnl |\n"
+               "          dsa | dummy | erspan | geneve | gre | gretap | gtp | hsr |\n"
+               "          ifb | ip6erspan | ip6gre | ip6gretap | ip6tnl |\n"
                "          ipip | ipoib | ipvlan | ipvtap |\n"
                "          macsec | macvlan | macvtap | netdevsim |\n"
                "          netkit | nlmon | pfcp | rmnet | sit | team | team_slave |\n"
index 76f24a6ac3ede9223b718beb07c59d925b7884a9..42adb43009b7e1d5ed80b6e17b3944cb85bb97c8 100644 (file)
@@ -21,12 +21,15 @@ static void print_usage(FILE *f)
 {
        fprintf(f,
                "Usage:\tip link add name NAME type hsr slave1 SLAVE1-IF slave2 SLAVE2-IF\n"
-               "\t[ supervision ADDR-BYTE ] [version VERSION] [proto PROTOCOL]\n"
+               "\t[ interlink INTERLINK-IF ] [ supervision ADDR-BYTE ] [ version VERSION ]\n"
+               "\t[ proto PROTOCOL ]\n"
                "\n"
                "NAME\n"
                "       name of new hsr device (e.g. hsr0)\n"
                "SLAVE1-IF, SLAVE2-IF\n"
                "       the two slave devices bound to the HSR device\n"
+               "INTERLINK-IF\n"
+               "       the interlink device bound to the HSR network to connect SAN device(s)\n"
                "ADDR-BYTE\n"
                "       0-255; the last byte of the multicast address used for HSR supervision\n"
                "       frames (default = 0)\n"
@@ -82,6 +85,12 @@ static int hsr_parse_opt(struct link_util *lu, int argc, char **argv,
                        if (ifindex == 0)
                                invarg("No such interface", *argv);
                        addattr_l(n, 1024, IFLA_HSR_SLAVE2, &ifindex, 4);
+               } else if (strcmp(*argv, "interlink") == 0) {
+                       NEXT_ARG();
+                       ifindex = ll_name_to_index(*argv);
+                       if (ifindex == 0)
+                               invarg("No such interface", *argv);
+                       addattr_l(n, 1024, IFLA_HSR_INTERLINK, &ifindex, 4);
                } else if (matches(*argv, "help") == 0) {
                        usage();
                        return -1;
@@ -109,6 +118,9 @@ static void hsr_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
        if (tb[IFLA_HSR_SLAVE2] &&
            RTA_PAYLOAD(tb[IFLA_HSR_SLAVE2]) < sizeof(__u32))
                return;
+       if (tb[IFLA_HSR_INTERLINK] &&
+           RTA_PAYLOAD(tb[IFLA_HSR_INTERLINK]) < sizeof(__u32))
+               return;
        if (tb[IFLA_HSR_SEQ_NR] &&
            RTA_PAYLOAD(tb[IFLA_HSR_SEQ_NR]) < sizeof(__u16))
                return;
@@ -132,6 +144,10 @@ static void hsr_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
        else
                print_null(PRINT_ANY, "slave2", "slave2 %s ", "<none>");
 
+       if (tb[IFLA_HSR_INTERLINK])
+               print_color_string(PRINT_ANY, COLOR_IFNAME, "interlink", "interlink %s ",
+                                  ll_index_to_name(rta_getattr_u32(tb[IFLA_HSR_INTERLINK])));
+
        if (tb[IFLA_HSR_SEQ_NR])
                print_int(PRINT_ANY,
                          "seq_nr",
index b981ac9125fa474bf8c2d2fea500574b9b9616fd..534bb718a2fe9bfca5d61f63378ece87ae588b95 100644 (file)
@@ -1626,6 +1626,8 @@ the following additional arguments are supported:
 
 .BI "ip link add link " DEVICE " name " NAME " type hsr"
 .BI slave1 " SLAVE1-IF " slave2 " SLAVE2-IF "
+.RB [ " interlink"
+.IR INTERLINK-IF " ] "
 .RB [ " supervision"
 .IR ADDR-BYTE " ] ["
 .BR version " { " 0 " | " 1 " } ["
@@ -1642,6 +1644,9 @@ the following additional arguments are supported:
 .BI slave2 " SLAVE2-IF "
 - Specifies the physical device used for the second of the two ring ports.
 
+.BI interlink " INTERLINK-IF"
+- The interlink device bound to the HSR network to connect SAN device(s).
+
 .BI supervision " ADDR-BYTE"
 - The last byte of the multicast address used for HSR supervision frames.
 Default option is "0", possible values 0-255.