On Tue, Jul 07, 2020 at 01:44:02PM -0400, Murali Karicheri wrote:
> This recipe includes the patches required in iproute2 to add
> PRP ip link support as well as allow use of VLAN for supervision
> frames.

What is the Upstream-status for both of these patches?


> 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

Reply via email to