This recipe includes the patches required in iproute2 to add PRP ip link support as well as allow use of VLAN for supervision frames.
Signed-off-by: Murali Karicheri <[email protected]> --- ...upport-for-creating-PRP-device-simil.patch | 109 ++++++++++++++++++ ...dd-support-for-vlan-tagged-supervisi.patch | 108 +++++++++++++++++ .../iproute2/iproute2_5.5.0.bbappend | 8 ++ 3 files changed, 225 insertions(+) create mode 100644 meta-arago-distro/recipes-connectivity/iproute2/iproute2/0013-iplink-hsr-add-support-for-creating-PRP-device-simil.patch create mode 100644 meta-arago-distro/recipes-connectivity/iproute2/iproute2/0014-iplink-hsr-prp-add-support-for-vlan-tagged-supervisi.patch create mode 100644 meta-arago-distro/recipes-connectivity/iproute2/iproute2_5.5.0.bbappend diff --git a/meta-arago-distro/recipes-connectivity/iproute2/iproute2/0013-iplink-hsr-add-support-for-creating-PRP-device-simil.patch b/meta-arago-distro/recipes-connectivity/iproute2/iproute2/0013-iplink-hsr-add-support-for-creating-PRP-device-simil.patch new file mode 100644 index 000000000000..dfeaeb01b485 --- /dev/null +++ b/meta-arago-distro/recipes-connectivity/iproute2/iproute2/0013-iplink-hsr-add-support-for-creating-PRP-device-simil.patch @@ -0,0 +1,109 @@ +From e3aa94814e9467af5829a04c335a615c0082a362 Mon Sep 17 00:00:00 2001 +From: Murali Karicheri <[email protected]> +Date: Fri, 5 Jun 2020 11:02:05 -0400 +Subject: [PATCH 1/2] iplink: hsr: add support for creating PRP device similar + to HSR + +This patch enhances the iplink command to add a proto parameters to +create PRP device/interface similar to HSR. Both protocols are +quite similar and requires a pair of Ethernet interfaces. So re-use +the existing HSR iplink command to create PRP device/interface as +well. Use proto parameter to differentiate the two protocols. + +Signed-off-by: Murali Karicheri <[email protected]> +--- + include/uapi/linux/if_link.h | 12 +++++++++++- + ip/iplink_hsr.c | 19 +++++++++++++++++-- + 2 files changed, 28 insertions(+), 3 deletions(-) + +diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h +index 1c49f436424d..de08704c5862 100644 +--- a/include/uapi/linux/if_link.h ++++ b/include/uapi/linux/if_link.h +@@ -881,7 +881,14 @@ enum { + #define IFLA_IPOIB_MAX (__IFLA_IPOIB_MAX - 1) + + +-/* HSR section */ ++/* HSR/PRP section, both uses same interface */ ++ ++/* Different redundancy protocols for hsr device */ ++enum { ++ HSR_PROTOCOL_HSR, ++ HSR_PROTOCOL_PRP, ++ HSR_PROTOCOL_MAX, ++}; + + enum { + IFLA_HSR_UNSPEC, +@@ -891,6 +898,9 @@ enum { + IFLA_HSR_SUPERVISION_ADDR, /* Supervision frame multicast addr */ + IFLA_HSR_SEQ_NR, + IFLA_HSR_VERSION, /* HSR version */ ++ IFLA_HSR_PROTOCOL, /* Indicate different protocol than ++ * HSR. For example PRP. ++ */ + __IFLA_HSR_MAX, + }; + +diff --git a/ip/iplink_hsr.c b/ip/iplink_hsr.c +index 7d9167d4e6a3..6ea138a23cbc 100644 +--- a/ip/iplink_hsr.c ++++ b/ip/iplink_hsr.c +@@ -25,7 +25,7 @@ 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]\n" ++ "\t[ supervision ADDR-BYTE ] [version VERSION] [proto PROTOCOL]\n" + "\n" + "NAME\n" + " name of new hsr device (e.g. hsr0)\n" +@@ -35,7 +35,9 @@ static void print_usage(FILE *f) + " 0-255; the last byte of the multicast address used for HSR supervision\n" + " frames (default = 0)\n" + "VERSION\n" +- " 0,1; the protocol version to be used. (default = 0)\n"); ++ " 0,1; the protocol version to be used. (default = 0)\n" ++ "PROTOCOL\n" ++ " 0 - HSR, 1 - PRP. (default = 0 - HSR)\n"); + } + + static void usage(void) +@@ -49,6 +51,7 @@ static int hsr_parse_opt(struct link_util *lu, int argc, char **argv, + int ifindex; + unsigned char multicast_spec; + unsigned char protocol_version; ++ unsigned char protocol = HSR_PROTOCOL_HSR; + + while (argc > 0) { + if (matches(*argv, "supervision") == 0) { +@@ -64,6 +67,13 @@ static int hsr_parse_opt(struct link_util *lu, int argc, char **argv, + invarg("version is invalid", *argv); + addattr_l(n, 1024, IFLA_HSR_VERSION, + &protocol_version, 1); ++ } else if (matches(*argv, "proto") == 0) { ++ NEXT_ARG(); ++ if (!(get_u8(&protocol, *argv, 0) == HSR_PROTOCOL_HSR || ++ get_u8(&protocol, *argv, 0) == HSR_PROTOCOL_PRP)) ++ invarg("protocol is invalid", *argv); ++ addattr_l(n, 1024, IFLA_HSR_PROTOCOL, ++ &protocol, 1); + } else if (matches(*argv, "slave1") == 0) { + NEXT_ARG(); + ifindex = ll_name_to_index(*argv); +@@ -140,6 +150,11 @@ static void hsr_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) + RTA_PAYLOAD(tb[IFLA_HSR_SUPERVISION_ADDR]), + ARPHRD_VOID, + b1, sizeof(b1))); ++ if (tb[IFLA_HSR_PROTOCOL]) ++ print_int(PRINT_ANY, ++ "proto", ++ "proto %d ", ++ rta_getattr_u8(tb[IFLA_HSR_PROTOCOL])); + } + + static void hsr_print_help(struct link_util *lu, int argc, char **argv, +-- +2.17.1 + diff --git a/meta-arago-distro/recipes-connectivity/iproute2/iproute2/0014-iplink-hsr-prp-add-support-for-vlan-tagged-supervisi.patch b/meta-arago-distro/recipes-connectivity/iproute2/iproute2/0014-iplink-hsr-prp-add-support-for-vlan-tagged-supervisi.patch new file mode 100644 index 000000000000..fa0eecccdf59 --- /dev/null +++ b/meta-arago-distro/recipes-connectivity/iproute2/iproute2/0014-iplink-hsr-prp-add-support-for-vlan-tagged-supervisi.patch @@ -0,0 +1,108 @@ +From 6e48ed61da3b03da415a87bfbd3651fde8742647 Mon Sep 17 00:00:00 2001 +From: Murali Karicheri <[email protected]> +Date: Fri, 5 Jun 2020 12:07:43 -0400 +Subject: [PATCH 2/2] iplink: hsr/prp: add support for vlan tagged supervision + frames + +This patch adds support to configure vlan tag information +(vid, pcp and dei) at the hsr/prp lre device. This tag values +will be used by the lre device to generate a VLAN tagged +Supervision frames. This is done by adding 3 additional attributes +to the hsr/prp link type and passing this to Linux HSR/PRP +device through the ip link command. + +Signed-off-by: Murali Karicheri <[email protected]> +--- + include/uapi/linux/if_link.h | 3 +++ + ip/iplink_hsr.c | 40 +++++++++++++++++++++++++++++++++++- + 2 files changed, 42 insertions(+), 1 deletion(-) + +diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h +index de08704c5862..94a381769e5a 100644 +--- a/include/uapi/linux/if_link.h ++++ b/include/uapi/linux/if_link.h +@@ -901,6 +901,9 @@ enum { + IFLA_HSR_PROTOCOL, /* Indicate different protocol than + * HSR. For example PRP. + */ ++ IFLA_HSR_SV_VID, /* Supervision frames VLAN ID */ ++ IFLA_HSR_SV_DEI, /* Supervision frames VLAN DEI */ ++ IFLA_HSR_SV_PCP, /* Supervision frames VLAN PCP */ + __IFLA_HSR_MAX, + }; + +diff --git a/ip/iplink_hsr.c b/ip/iplink_hsr.c +index 6ea138a23cbc..f38c752c0065 100644 +--- a/ip/iplink_hsr.c ++++ b/ip/iplink_hsr.c +@@ -26,6 +26,7 @@ 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[ sv_vid SV-VID ] [ sv_pcp SV-PCP ] [ sv_dei SV-DEI ]\n" + "\n" + "NAME\n" + " name of new hsr device (e.g. hsr0)\n" +@@ -37,7 +38,15 @@ static void print_usage(FILE *f) + "VERSION\n" + " 0,1; the protocol version to be used. (default = 0)\n" + "PROTOCOL\n" +- " 0 - HSR, 1 - PRP. (default = 0 - HSR)\n"); ++ " 0 - HSR, 1 - PRP. (default = 0 - HSR)\n" ++ "SV-VID\n" ++ " 0-4094; VLAN ID to be used in the VLAN tag of SV frames (default 0)\n" ++ "SV-PCP\n" ++ " 0-7; PCP value to be used in the VLAN tag of SV frames (default 0)\n" ++ "SV-DEI\n" ++ " 0-1; DEI value to be used in the VLAN tag of SV frames (default 0)\n" ++ " Use VLAN tag if one of sv_vid, sv_pcp or sv_dei is specified. Default value\n" ++ " used for unspecified ones\n"); + } + + static void usage(void) +@@ -52,6 +61,9 @@ static int hsr_parse_opt(struct link_util *lu, int argc, char **argv, + unsigned char multicast_spec; + unsigned char protocol_version; + unsigned char protocol = HSR_PROTOCOL_HSR; ++ unsigned short sv_vid; ++ unsigned char sv_dei; ++ unsigned char sv_pcp; + + while (argc > 0) { + if (matches(*argv, "supervision") == 0) { +@@ -86,6 +98,32 @@ 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 (matches(*argv, "sv_vid") == 0) { ++ NEXT_ARG(); ++ if (get_u16(&sv_vid, *argv, 0)) ++ invarg("SV-VID is invalid", *argv); ++ /* exclude reserved 4095 */ ++ if (sv_vid >= 4095) ++ invarg("SV-VID is invalid", *argv); ++ addattr_l(n, 1024, IFLA_HSR_SV_VID, ++ &sv_vid, sizeof(sv_vid)); ++ } else if (matches(*argv, "sv_pcp") == 0) { ++ NEXT_ARG(); ++ if (get_u8(&sv_pcp, *argv, 0)) ++ invarg("SV-PCP is invalid", *argv); ++ if (sv_pcp > 7) ++ invarg("SV-PCP is invalid", *argv); ++ addattr_l(n, 1024, IFLA_HSR_SV_PCP, ++ &sv_pcp, sizeof(sv_pcp)); ++ } else if (matches(*argv, "sv_dei") == 0) { ++ NEXT_ARG(); ++ if (get_u8(&sv_dei, *argv, 0)) ++ invarg("SV-DEI is invalid", *argv); ++ if (sv_dei > 1) ++ invarg("SV-DEI is invalid", *argv); ++ addattr_l(n, 1024, IFLA_HSR_SV_DEI, ++ &sv_dei, sizeof(sv_dei)); ++ + } else if (matches(*argv, "help") == 0) { + usage(); + return -1; +-- +2.17.1 + diff --git a/meta-arago-distro/recipes-connectivity/iproute2/iproute2_5.5.0.bbappend b/meta-arago-distro/recipes-connectivity/iproute2/iproute2_5.5.0.bbappend new file mode 100644 index 000000000000..d6effcd7ca81 --- /dev/null +++ b/meta-arago-distro/recipes-connectivity/iproute2/iproute2_5.5.0.bbappend @@ -0,0 +1,8 @@ +PR_append = ".arago6" + +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +SRC_URI_append = " \ + file://0013-iplink-hsr-add-support-for-creating-PRP-device-simil.patch \ + file://0014-iplink-hsr-prp-add-support-for-vlan-tagged-supervisi.patch \ +" -- 2.17.1 _______________________________________________ meta-arago mailing list [email protected] http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago
