From d742158b2e74374317ddb193f3fec891cdac6a82 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: May 05 2021 22:17:24 +0000 Subject: import iproute-5.12.0-0.el8 --- diff --git a/.gitignore b/.gitignore index 581167a..8da3976 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/iproute2-5.9.0.tar.xz +SOURCES/iproute2-5.12.0.tar.xz diff --git a/.iproute.metadata b/.iproute.metadata index 3b76ec4..7ed2e23 100644 --- a/.iproute.metadata +++ b/.iproute.metadata @@ -1 +1 @@ -c9e0ca453307ce7c221ccffc10939f4136b4ad5d SOURCES/iproute2-5.9.0.tar.xz +4e18c1d72a29f41a5968ac8a9b266470f6ad89a7 SOURCES/iproute2-5.12.0.tar.xz diff --git a/SOURCES/0001-v5.9.0.patch b/SOURCES/0001-v5.9.0.patch deleted file mode 100644 index f0868bb..0000000 --- a/SOURCES/0001-v5.9.0.patch +++ /dev/null @@ -1,20 +0,0 @@ -From cb7ce51cc1abd7b98370b903ec96205ebfe48661 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Stephen Hemminger -Date: Thu, 15 Oct 2020 15:18:35 -0700 -Subject: [PATCH] v5.9.0 - ---- - include/version.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/include/version.h b/include/version.h -index 0088493d..89d05974 100644 ---- a/include/version.h -+++ b/include/version.h -@@ -1 +1 @@ --static const char version[] = "5.8.0"; -+static const char version[] = "5.9.0"; --- -2.29.2 - diff --git a/SOURCES/0002-Update-kernel-headers.patch b/SOURCES/0002-Update-kernel-headers.patch deleted file mode 100644 index 60a94f4..0000000 --- a/SOURCES/0002-Update-kernel-headers.patch +++ /dev/null @@ -1,308 +0,0 @@ -From 1b8a3c04bf8d115e2d427d41a437be03ecf34ce8 Mon Sep 17 00:00:00 2001 -Message-Id: <1b8a3c04bf8d115e2d427d41a437be03ecf34ce8.1611877215.git.aclaudi@redhat.com> -In-Reply-To: -References: -From: Andrea Claudi -Date: Fri, 29 Jan 2021 00:34:34 +0100 -Subject: [PATCH] Update kernel headers - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1885770 -Upstream Status: unknown commit 34be2d26 -Conflicts: on include/uapi/linux/bpf.h, due to missing commits: - - c8eb4b52c1b1 ("Update kernel headers") - - f481515c89fa ("Update kernel headers") - -commit 34be2d2619e29836605a7d1669d642f892fc725e -Author: David Ahern -Date: Wed Oct 7 00:01:26 2020 -0600 - - Update kernel headers - - Update kernel headers to commit: - 9faebeb2d800 ("Merge branch 'ethtool-allow-dumping-policies-to-user-space'") - - Signed-off-by: David Ahern ---- - include/uapi/linux/bpf.h | 64 +++++++++++++++++++++++++---- - include/uapi/linux/devlink.h | 5 +++ - include/uapi/linux/genetlink.h | 11 +++++ - include/uapi/linux/l2tp.h | 1 + - include/uapi/linux/netlink.h | 2 + - include/uapi/linux/tc_act/tc_mpls.h | 1 + - include/uapi/linux/tc_act/tc_vlan.h | 4 ++ - 7 files changed, 79 insertions(+), 9 deletions(-) - -diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h -index b21cc6af..36e5bc2d 100644 ---- a/include/uapi/linux/bpf.h -+++ b/include/uapi/linux/bpf.h -@@ -404,6 +404,9 @@ enum { - - /* Enable memory-mapping BPF map */ - BPF_F_MMAPABLE = (1U << 10), -+ -+/* Share perf_event among processes */ -+ BPF_F_PRESERVE_ELEMS = (1U << 11), - }; - - /* Flags for BPF_PROG_QUERY. */ -@@ -414,6 +417,11 @@ enum { - */ - #define BPF_F_QUERY_EFFECTIVE (1U << 0) - -+/* Flags for BPF_PROG_TEST_RUN */ -+ -+/* If set, run the test on the cpu specified by bpf_attr.test.cpu */ -+#define BPF_F_TEST_RUN_ON_CPU (1U << 0) -+ - /* type for BPF_ENABLE_STATS */ - enum bpf_stats_type { - /* enabled run_time_ns and run_cnt */ -@@ -556,6 +564,8 @@ union bpf_attr { - */ - __aligned_u64 ctx_in; - __aligned_u64 ctx_out; -+ __u32 flags; -+ __u32 cpu; - } test; - - struct { /* anonymous struct used by BPF_*_GET_*_ID */ -@@ -622,8 +632,13 @@ union bpf_attr { - }; - __u32 attach_type; /* attach type */ - __u32 flags; /* extra flags */ -- __aligned_u64 iter_info; /* extra bpf_iter_link_info */ -- __u32 iter_info_len; /* iter_info length */ -+ union { -+ __u32 target_btf_id; /* btf_id of target to attach to */ -+ struct { -+ __aligned_u64 iter_info; /* extra bpf_iter_link_info */ -+ __u32 iter_info_len; /* iter_info length */ -+ }; -+ }; - } link_create; - - struct { /* struct used by BPF_LINK_UPDATE command */ -@@ -2496,7 +2511,7 @@ union bpf_attr { - * result is from *reuse*\ **->socks**\ [] using the hash of the - * tuple. - * -- * long bpf_sk_release(struct bpf_sock *sock) -+ * long bpf_sk_release(void *sock) - * Description - * Release the reference held by *sock*. *sock* must be a - * non-**NULL** pointer that was returned from -@@ -2676,7 +2691,7 @@ union bpf_attr { - * result is from *reuse*\ **->socks**\ [] using the hash of the - * tuple. - * -- * long bpf_tcp_check_syncookie(struct bpf_sock *sk, void *iph, u32 iph_len, struct tcphdr *th, u32 th_len) -+ * long bpf_tcp_check_syncookie(void *sk, void *iph, u32 iph_len, struct tcphdr *th, u32 th_len) - * Description - * Check whether *iph* and *th* contain a valid SYN cookie ACK for - * the listening socket in *sk*. -@@ -2842,6 +2857,7 @@ union bpf_attr { - * 0 on success. - * - * **-ENOENT** if the bpf-local-storage cannot be found. -+ * **-EINVAL** if sk is not a fullsock (e.g. a request_sock). - * - * long bpf_send_signal(u32 sig) - * Description -@@ -2858,7 +2874,7 @@ union bpf_attr { - * - * **-EAGAIN** if bpf program can try again. - * -- * s64 bpf_tcp_gen_syncookie(struct bpf_sock *sk, void *iph, u32 iph_len, struct tcphdr *th, u32 th_len) -+ * s64 bpf_tcp_gen_syncookie(void *sk, void *iph, u32 iph_len, struct tcphdr *th, u32 th_len) - * Description - * Try to issue a SYN cookie for the packet with corresponding - * IP/TCP headers, *iph* and *th*, on the listening socket in *sk*. -@@ -3087,7 +3103,7 @@ union bpf_attr { - * Return - * The id is returned or 0 in case the id could not be retrieved. - * -- * long bpf_sk_assign(struct sk_buff *skb, struct bpf_sock *sk, u64 flags) -+ * long bpf_sk_assign(struct sk_buff *skb, void *sk, u64 flags) - * Description - * Helper is overloaded depending on BPF program type. This - * description applies to **BPF_PROG_TYPE_SCHED_CLS** and -@@ -3215,11 +3231,11 @@ union bpf_attr { - * - * **-EOVERFLOW** if an overflow happened: The same object will be tried again. - * -- * u64 bpf_sk_cgroup_id(struct bpf_sock *sk) -+ * u64 bpf_sk_cgroup_id(void *sk) - * Description - * Return the cgroup v2 id of the socket *sk*. - * -- * *sk* must be a non-**NULL** pointer to a full socket, e.g. one -+ * *sk* must be a non-**NULL** pointer to a socket, e.g. one - * returned from **bpf_sk_lookup_xxx**\ (), - * **bpf_sk_fullsock**\ (), etc. The format of returned id is - * same as in **bpf_skb_cgroup_id**\ (). -@@ -3229,7 +3245,7 @@ union bpf_attr { - * Return - * The id is returned or 0 in case the id could not be retrieved. - * -- * u64 bpf_sk_ancestor_cgroup_id(struct bpf_sock *sk, int ancestor_level) -+ * u64 bpf_sk_ancestor_cgroup_id(void *sk, int ancestor_level) - * Description - * Return id of cgroup v2 that is ancestor of cgroup associated - * with the *sk* at the *ancestor_level*. The root cgroup is at -@@ -4447,4 +4463,34 @@ struct bpf_sk_lookup { - __u32 local_port; /* Host byte order */ - }; - -+/* -+ * struct btf_ptr is used for typed pointer representation; the -+ * type id is used to render the pointer data as the appropriate type -+ * via the bpf_snprintf_btf() helper described above. A flags field - -+ * potentially to specify additional details about the BTF pointer -+ * (rather than its mode of display) - is included for future use. -+ * Display flags - BTF_F_* - are passed to bpf_snprintf_btf separately. -+ */ -+struct btf_ptr { -+ void *ptr; -+ __u32 type_id; -+ __u32 flags; /* BTF ptr flags; unused at present. */ -+}; -+ -+/* -+ * Flags to control bpf_snprintf_btf() behaviour. -+ * - BTF_F_COMPACT: no formatting around type information -+ * - BTF_F_NONAME: no struct/union member names/types -+ * - BTF_F_PTR_RAW: show raw (unobfuscated) pointer values; -+ * equivalent to %px. -+ * - BTF_F_ZERO: show zero-valued struct/union members; they -+ * are not displayed by default -+ */ -+enum { -+ BTF_F_COMPACT = (1ULL << 0), -+ BTF_F_NONAME = (1ULL << 1), -+ BTF_F_PTR_RAW = (1ULL << 2), -+ BTF_F_ZERO = (1ULL << 3), -+}; -+ - #endif /* __LINUX_BPF_H__ */ -diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h -index b7f23faa..e5586fa0 100644 ---- a/include/uapi/linux/devlink.h -+++ b/include/uapi/linux/devlink.h -@@ -13,6 +13,8 @@ - #ifndef _LINUX_DEVLINK_H_ - #define _LINUX_DEVLINK_H_ - -+#include -+ - #define DEVLINK_GENL_NAME "devlink" - #define DEVLINK_GENL_VERSION 0x1 - #define DEVLINK_GENL_MCGRP_CONFIG_NAME "config" -@@ -193,6 +195,9 @@ enum devlink_port_flavour { - * port that faces the PCI VF. - */ - DEVLINK_PORT_FLAVOUR_VIRTUAL, /* Any virtual port facing the user. */ -+ DEVLINK_PORT_FLAVOUR_UNUSED, /* Port which exists in the switch, but -+ * is not used in any way. -+ */ - }; - - enum devlink_param_cmode { -diff --git a/include/uapi/linux/genetlink.h b/include/uapi/linux/genetlink.h -index 7c6c390c..9fa720ee 100644 ---- a/include/uapi/linux/genetlink.h -+++ b/include/uapi/linux/genetlink.h -@@ -64,6 +64,8 @@ enum { - CTRL_ATTR_OPS, - CTRL_ATTR_MCAST_GROUPS, - CTRL_ATTR_POLICY, -+ CTRL_ATTR_OP_POLICY, -+ CTRL_ATTR_OP, - __CTRL_ATTR_MAX, - }; - -@@ -85,6 +87,15 @@ enum { - __CTRL_ATTR_MCAST_GRP_MAX, - }; - -+enum { -+ CTRL_ATTR_POLICY_UNSPEC, -+ CTRL_ATTR_POLICY_DO, -+ CTRL_ATTR_POLICY_DUMP, -+ -+ __CTRL_ATTR_POLICY_DUMP_MAX, -+ CTRL_ATTR_POLICY_DUMP_MAX = __CTRL_ATTR_POLICY_DUMP_MAX - 1 -+}; -+ - #define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1) - - -diff --git a/include/uapi/linux/l2tp.h b/include/uapi/linux/l2tp.h -index 131c3a26..abc0fc81 100644 ---- a/include/uapi/linux/l2tp.h -+++ b/include/uapi/linux/l2tp.h -@@ -144,6 +144,7 @@ enum { - L2TP_ATTR_RX_OOS_PACKETS, /* u64 */ - L2TP_ATTR_RX_ERRORS, /* u64 */ - L2TP_ATTR_STATS_PAD, -+ L2TP_ATTR_RX_COOKIE_DISCARDS, /* u64 */ - __L2TP_ATTR_STATS_MAX, - }; - -diff --git a/include/uapi/linux/netlink.h b/include/uapi/linux/netlink.h -index 695c88e3..f7749205 100644 ---- a/include/uapi/linux/netlink.h -+++ b/include/uapi/linux/netlink.h -@@ -327,6 +327,7 @@ enum netlink_attribute_type { - * the index, if limited inside the nesting (U32) - * @NL_POLICY_TYPE_ATTR_BITFIELD32_MASK: valid mask for the - * bitfield32 type (U32) -+ * @NL_POLICY_TYPE_ATTR_MASK: mask of valid bits for unsigned integers (U64) - * @NL_POLICY_TYPE_ATTR_PAD: pad attribute for 64-bit alignment - */ - enum netlink_policy_type_attr { -@@ -342,6 +343,7 @@ enum netlink_policy_type_attr { - NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE, - NL_POLICY_TYPE_ATTR_BITFIELD32_MASK, - NL_POLICY_TYPE_ATTR_PAD, -+ NL_POLICY_TYPE_ATTR_MASK, - - /* keep last */ - __NL_POLICY_TYPE_ATTR_MAX, -diff --git a/include/uapi/linux/tc_act/tc_mpls.h b/include/uapi/linux/tc_act/tc_mpls.h -index 9360e952..9e4e8f52 100644 ---- a/include/uapi/linux/tc_act/tc_mpls.h -+++ b/include/uapi/linux/tc_act/tc_mpls.h -@@ -10,6 +10,7 @@ - #define TCA_MPLS_ACT_PUSH 2 - #define TCA_MPLS_ACT_MODIFY 3 - #define TCA_MPLS_ACT_DEC_TTL 4 -+#define TCA_MPLS_ACT_MAC_PUSH 5 - - struct tc_mpls { - tc_gen; /* generic TC action fields. */ -diff --git a/include/uapi/linux/tc_act/tc_vlan.h b/include/uapi/linux/tc_act/tc_vlan.h -index 168995b5..5b306fe8 100644 ---- a/include/uapi/linux/tc_act/tc_vlan.h -+++ b/include/uapi/linux/tc_act/tc_vlan.h -@@ -16,6 +16,8 @@ - #define TCA_VLAN_ACT_POP 1 - #define TCA_VLAN_ACT_PUSH 2 - #define TCA_VLAN_ACT_MODIFY 3 -+#define TCA_VLAN_ACT_POP_ETH 4 -+#define TCA_VLAN_ACT_PUSH_ETH 5 - - struct tc_vlan { - tc_gen; -@@ -30,6 +32,8 @@ enum { - TCA_VLAN_PUSH_VLAN_PROTOCOL, - TCA_VLAN_PAD, - TCA_VLAN_PUSH_VLAN_PRIORITY, -+ TCA_VLAN_PUSH_ETH_DST, -+ TCA_VLAN_PUSH_ETH_SRC, - __TCA_VLAN_MAX, - }; - #define TCA_VLAN_MAX (__TCA_VLAN_MAX - 1) --- -2.29.2 - diff --git a/SOURCES/0003-m_vlan-add-pop_eth-and-push_eth-actions.patch b/SOURCES/0003-m_vlan-add-pop_eth-and-push_eth-actions.patch deleted file mode 100644 index fa1b401..0000000 --- a/SOURCES/0003-m_vlan-add-pop_eth-and-push_eth-actions.patch +++ /dev/null @@ -1,343 +0,0 @@ -From cac52dd831b6982f6b27b02c26243edbe0b7d747 Mon Sep 17 00:00:00 2001 -Message-Id: -In-Reply-To: -References: -From: Andrea Claudi -Date: Fri, 29 Jan 2021 00:35:03 +0100 -Subject: [PATCH] m_vlan: add pop_eth and push_eth actions - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1885770 -Upstream Status: unknown commit d61167dd - -commit d61167dd88b45832843b1458cd156f3b85c8ff16 -Author: Guillaume Nault -Date: Mon Oct 19 17:23:01 2020 +0200 - - m_vlan: add pop_eth and push_eth actions - - Add support for the new TCA_VLAN_ACT_POP_ETH and TCA_VLAN_ACT_PUSH_ETH - actions (kernel commit 19fbcb36a39e ("net/sched: act_vlan: - Add {POP,PUSH}_ETH actions"). These action let TC remove or add the - Ethernet at the head of a frame. - - Drop an Ethernet header: - # tc filter add dev ethX matchall action vlan pop_eth - - Push an Ethernet header (the original frame must have no MAC header): - # tc filter add dev ethX matchall action vlan \ - push_eth dst_mac 0a:00:00:00:00:02 src_mac 0a:00:00:00:00:01 - - Also add a test suite for m_vlan, which covers these new actions and - the pre-existing ones. - - Signed-off-by: Guillaume Nault - Signed-off-by: David Ahern ---- - man/man8/tc-vlan.8 | 39 +++++++++++++++++- - tc/m_vlan.c | 69 +++++++++++++++++++++++++++++++ - testsuite/tests/tc/vlan.t | 86 +++++++++++++++++++++++++++++++++++++++ - 3 files changed, 192 insertions(+), 2 deletions(-) - create mode 100755 testsuite/tests/tc/vlan.t - -diff --git a/man/man8/tc-vlan.8 b/man/man8/tc-vlan.8 -index f5ffc25f..5c2808b1 100644 ---- a/man/man8/tc-vlan.8 -+++ b/man/man8/tc-vlan.8 -@@ -5,8 +5,8 @@ vlan - vlan manipulation module - .SH SYNOPSIS - .in +8 - .ti -8 --.BR tc " ... " "action vlan" " { " pop " |" --.IR PUSH " | " MODIFY " } [ " CONTROL " ]" -+.BR tc " ... " "action vlan" " { " pop " | " pop_eth " |" -+.IR PUSH " | " MODIFY " | " PUSH_ETH " } [ " CONTROL " ]" - - .ti -8 - .IR PUSH " := " -@@ -24,6 +24,11 @@ vlan - vlan manipulation module - .IR VLANPRIO " ] " - .BI id " VLANID" - -+.ti -8 -+.IR PUSH_ETH " := " -+.B push_eth -+.BI dst_mac " LLADDR " src_mac " LLADDR " -+ - .ti -8 - .IR CONTROL " := { " - .BR reclassify " | " pipe " | " drop " | " continue " | " pass " | " goto " " chain " " CHAIN_INDEX " }" -@@ -43,6 +48,20 @@ modes require at least a - and allow to optionally choose the - .I VLANPROTO - to use. -+ -+The -+.B vlan -+action can also be used to add or remove the base Ethernet header. The -+.B pop_eth -+mode, which takes no argument, is used to remove the base Ethernet header. All -+existing VLANs must have been previously dropped. The opposite operation, -+adding a base Ethernet header, is done with the -+.B push_eth -+mode. In that case, the packet must have no MAC header (stacking MAC headers is -+not permitted). This mode is mostly useful when a previous action has -+encapsulated the whole original frame behind a network header and one needs -+to prepend an Ethernet header before forwarding the resulting packet. -+ - .SH OPTIONS - .TP - .B pop -@@ -58,6 +77,16 @@ Replace mode. Existing 802.1Q tag is replaced. Requires at least - .B id - option. - .TP -+.B pop_eth -+Ethernet header decapsulation mode. Only works on a plain Ethernet header: -+VLANs, if any, must be removed first. -+.TP -+.B push_eth -+Ethernet header encapsulation mode. The Ethertype is automatically set -+using the network header type. Chaining Ethernet headers is not allowed: the -+packet must have no MAC header when using this mode. Requires the -+.BR "dst_mac " and " src_mac " options. -+.TP - .BI id " VLANID" - Specify the VLAN ID to encapsulate into. - .I VLANID -@@ -73,6 +102,12 @@ Choose the VLAN protocol to use. At the time of writing, the kernel accepts only - .BI priority " VLANPRIO" - Choose the VLAN priority to use. Decimal number in range of 0-7. - .TP -+.BI dst_mac " LLADDR" -+Choose the destination MAC address to use. -+.TP -+.BI src_mac " LLADDR" -+Choose the source MAC address to use. -+.TP - .I CONTROL - How to continue after executing this action. - .RS -diff --git a/tc/m_vlan.c b/tc/m_vlan.c -index 1096ba0f..e6b21330 100644 ---- a/tc/m_vlan.c -+++ b/tc/m_vlan.c -@@ -23,6 +23,8 @@ static const char * const action_names[] = { - [TCA_VLAN_ACT_POP] = "pop", - [TCA_VLAN_ACT_PUSH] = "push", - [TCA_VLAN_ACT_MODIFY] = "modify", -+ [TCA_VLAN_ACT_POP_ETH] = "pop_eth", -+ [TCA_VLAN_ACT_PUSH_ETH] = "push_eth", - }; - - static void explain(void) -@@ -31,6 +33,8 @@ static void explain(void) - "Usage: vlan pop\n" - " vlan push [ protocol VLANPROTO ] id VLANID [ priority VLANPRIO ] [CONTROL]\n" - " vlan modify [ protocol VLANPROTO ] id VLANID [ priority VLANPRIO ] [CONTROL]\n" -+ " vlan pop_eth [CONTROL]\n" -+ " vlan push_eth dst_mac LLADDR src_mac LLADDR [CONTROL]\n" - " VLANPROTO is one of 802.1Q or 802.1AD\n" - " with default: 802.1Q\n" - " CONTROL := reclassify | pipe | drop | continue | pass |\n" -@@ -63,6 +67,10 @@ static int parse_vlan(struct action_util *a, int *argc_p, char ***argv_p, - char **argv = *argv_p; - struct rtattr *tail; - int action = 0; -+ char dst_mac[ETH_ALEN] = {}; -+ int dst_mac_set = 0; -+ char src_mac[ETH_ALEN] = {}; -+ int src_mac_set = 0; - __u16 id; - int id_set = 0; - __u16 proto; -@@ -95,6 +103,18 @@ static int parse_vlan(struct action_util *a, int *argc_p, char ***argv_p, - return -1; - } - action = TCA_VLAN_ACT_MODIFY; -+ } else if (matches(*argv, "pop_eth") == 0) { -+ if (action) { -+ unexpected(*argv); -+ return -1; -+ } -+ action = TCA_VLAN_ACT_POP_ETH; -+ } else if (matches(*argv, "push_eth") == 0) { -+ if (action) { -+ unexpected(*argv); -+ return -1; -+ } -+ action = TCA_VLAN_ACT_PUSH_ETH; - } else if (matches(*argv, "id") == 0) { - if (!has_push_attribs(action)) - invarg("only valid for push/modify", *argv); -@@ -119,6 +139,22 @@ static int parse_vlan(struct action_util *a, int *argc_p, char ***argv_p, - if (get_u8(&prio, *argv, 0) || (prio & ~0x7)) - invarg("prio is invalid", *argv); - prio_set = 1; -+ } else if (matches(*argv, "dst_mac") == 0) { -+ if (action != TCA_VLAN_ACT_PUSH_ETH) -+ invarg("only valid for push_eth", *argv); -+ -+ NEXT_ARG(); -+ if (ll_addr_a2n(dst_mac, sizeof(dst_mac), *argv) < 0) -+ invarg("dst_mac is invalid", *argv); -+ dst_mac_set = 1; -+ } else if (matches(*argv, "src_mac") == 0) { -+ if (action != TCA_VLAN_ACT_PUSH_ETH) -+ invarg("only valid for push_eth", *argv); -+ -+ NEXT_ARG(); -+ if (ll_addr_a2n(src_mac, sizeof(src_mac), *argv) < 0) -+ invarg("src_mac is invalid", *argv); -+ src_mac_set = 1; - } else if (matches(*argv, "help") == 0) { - usage(); - } else { -@@ -150,6 +186,20 @@ static int parse_vlan(struct action_util *a, int *argc_p, char ***argv_p, - return -1; - } - -+ if (action == TCA_VLAN_ACT_PUSH_ETH) { -+ if (!dst_mac_set) { -+ fprintf(stderr, "dst_mac needs to be set for %s\n", -+ action_names[action]); -+ explain(); -+ return -1; -+ } else if (!src_mac_set) { -+ fprintf(stderr, "src_mac needs to be set for %s\n", -+ action_names[action]); -+ explain(); -+ return -1; -+ } -+ } -+ - parm.v_action = action; - tail = addattr_nest(n, MAX_MSG, tca_id); - addattr_l(n, MAX_MSG, TCA_VLAN_PARMS, &parm, sizeof(parm)); -@@ -167,6 +217,12 @@ static int parse_vlan(struct action_util *a, int *argc_p, char ***argv_p, - } - if (prio_set) - addattr8(n, MAX_MSG, TCA_VLAN_PUSH_VLAN_PRIORITY, prio); -+ if (dst_mac_set) -+ addattr_l(n, MAX_MSG, TCA_VLAN_PUSH_ETH_DST, dst_mac, -+ sizeof(dst_mac)); -+ if (src_mac_set) -+ addattr_l(n, MAX_MSG, TCA_VLAN_PUSH_ETH_SRC, src_mac, -+ sizeof(src_mac)); - - addattr_nest_end(n, tail); - -@@ -216,6 +272,19 @@ static int print_vlan(struct action_util *au, FILE *f, struct rtattr *arg) - print_uint(PRINT_ANY, "priority", " priority %u", val); - } - break; -+ case TCA_VLAN_ACT_PUSH_ETH: -+ if (tb[TCA_VLAN_PUSH_ETH_DST] && -+ RTA_PAYLOAD(tb[TCA_VLAN_PUSH_ETH_DST]) == ETH_ALEN) { -+ ll_addr_n2a(RTA_DATA(tb[TCA_VLAN_PUSH_ETH_DST]), -+ ETH_ALEN, 0, b1, sizeof(b1)); -+ print_string(PRINT_ANY, "dst_mac", " dst_mac %s", b1); -+ } -+ if (tb[TCA_VLAN_PUSH_ETH_SRC && -+ RTA_PAYLOAD(tb[TCA_VLAN_PUSH_ETH_SRC]) == ETH_ALEN]) { -+ ll_addr_n2a(RTA_DATA(tb[TCA_VLAN_PUSH_ETH_SRC]), -+ ETH_ALEN, 0, b1, sizeof(b1)); -+ print_string(PRINT_ANY, "src_mac", " src_mac %s", b1); -+ } - } - print_action_control(f, " ", parm->action, ""); - -diff --git a/testsuite/tests/tc/vlan.t b/testsuite/tests/tc/vlan.t -new file mode 100755 -index 00000000..b86dc364 ---- /dev/null -+++ b/testsuite/tests/tc/vlan.t -@@ -0,0 +1,86 @@ -+#!/bin/sh -+ -+. lib/generic.sh -+ -+DEV="$(rand_dev)" -+ts_ip "$0" "Add $DEV dummy interface" link add dev $DEV up type dummy -+ts_tc "$0" "Add ingress qdisc" qdisc add dev $DEV ingress -+ -+reset_qdisc() -+{ -+ ts_tc "$0" "Remove ingress qdisc" qdisc del dev $DEV ingress -+ ts_tc "$0" "Add ingress qdisc" qdisc add dev $DEV ingress -+} -+ -+ts_tc "$0" "Add vlan action pop" \ -+ filter add dev $DEV ingress matchall action vlan pop -+ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress -+test_on "vlan" -+test_on "pop" -+test_on "pipe" -+ -+reset_qdisc -+ts_tc "$0" "Add vlan action push (default parameters)" \ -+ filter add dev $DEV ingress matchall action vlan push id 5 -+ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress -+test_on "vlan" -+test_on "push" -+test_on "id 5" -+test_on "protocol 802.1Q" -+test_on "priority 0" -+test_on "pipe" -+ -+reset_qdisc -+ts_tc "$0" "Add vlan action push (explicit parameters)" \ -+ filter add dev $DEV ingress matchall \ -+ action vlan push id 5 protocol 802.1ad priority 2 -+ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress -+test_on "vlan" -+test_on "push" -+test_on "id 5" -+test_on "protocol 802.1ad" -+test_on "priority 2" -+test_on "pipe" -+ -+reset_qdisc -+ts_tc "$0" "Add vlan action modify (default parameters)" \ -+ filter add dev $DEV ingress matchall action vlan modify id 5 -+ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress -+test_on "vlan" -+test_on "modify" -+test_on "id 5" -+test_on "protocol 802.1Q" -+test_on "priority 0" -+test_on "pipe" -+ -+reset_qdisc -+ts_tc "$0" "Add vlan action modify (explicit parameters)" \ -+ filter add dev $DEV ingress matchall \ -+ action vlan modify id 5 protocol 802.1ad priority 2 -+ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress -+test_on "vlan" -+test_on "modify" -+test_on "id 5" -+test_on "protocol 802.1ad" -+test_on "priority 2" -+test_on "pipe" -+ -+reset_qdisc -+ts_tc "$0" "Add vlan action pop_eth" \ -+ filter add dev $DEV ingress matchall action vlan pop_eth -+ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress -+test_on "vlan" -+test_on "pop_eth" -+test_on "pipe" -+ -+reset_qdisc -+ts_tc "$0" "Add vlan action push_eth" \ -+ filter add dev $DEV ingress matchall \ -+ action vlan push_eth dst_mac 02:00:00:00:00:02 \ -+ src_mac 02:00:00:00:00:01 -+ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress -+test_on "vlan" -+test_on "push_eth" -+test_on "dst_mac 02:00:00:00:00:02" -+test_on "src_mac 02:00:00:00:00:01" -+test_on "pipe" --- -2.29.2 - diff --git a/SOURCES/0004-m_mpls-add-mac_push-action.patch b/SOURCES/0004-m_mpls-add-mac_push-action.patch deleted file mode 100644 index 54c1c3c..0000000 --- a/SOURCES/0004-m_mpls-add-mac_push-action.patch +++ /dev/null @@ -1,342 +0,0 @@ -From 0afe12a4a9471ed1343693338ec6350dc66ba295 Mon Sep 17 00:00:00 2001 -Message-Id: <0afe12a4a9471ed1343693338ec6350dc66ba295.1611877215.git.aclaudi@redhat.com> -In-Reply-To: -References: -From: Andrea Claudi -Date: Fri, 29 Jan 2021 00:35:03 +0100 -Subject: [PATCH] m_mpls: add mac_push action - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1885770 -Upstream Status: unknown commit 02a261b5 - -commit 02a261b5ba1c8580ac2a35bc6c87faa2ec9f5c96 -Author: Guillaume Nault -Date: Mon Oct 19 17:23:08 2020 +0200 - - m_mpls: add mac_push action - - Add support for the new TCA_MPLS_ACT_MAC_PUSH action (kernel commit - a45294af9e96 ("net/sched: act_mpls: Add action to push MPLS LSE before - Ethernet header")). This action let TC push an MPLS header before the - MAC header of a frame. - - Example (encapsulate all outgoing frames with label 20, then add an - outer Ethernet header): - # tc filter add dev ethX matchall \ - action mpls mac_push label 20 ttl 64 \ - action vlan push_eth dst_mac 0a:00:00:00:00:02 \ - src_mac 0a:00:00:00:00:01 - - This patch also adds an alias for ETH_P_TEB, since it is useful when - decapsulating MPLS packets that contain an Ethernet frame. - - With MAC_PUSH, there's no previous Ethertype to modify. However, the - "protocol" option is still needed, because the kernel uses it to set - skb->protocol. So rename can_modify_ethtype() to can_set_ethtype(). - - Also add a test suite for m_mpls, which covers the new action and the - pre-existing ones. - - Signed-off-by: Guillaume Nault - Signed-off-by: David Ahern ---- - lib/ll_proto.c | 1 + - man/man8/tc-mpls.8 | 44 +++++++++++++++++++++++-- - man/man8/tc-vlan.8 | 5 ++- - tc/m_mpls.c | 43 ++++++++++++++++-------- - testsuite/tests/tc/mpls.t | 69 +++++++++++++++++++++++++++++++++++++++ - 5 files changed, 145 insertions(+), 17 deletions(-) - create mode 100755 testsuite/tests/tc/mpls.t - -diff --git a/lib/ll_proto.c b/lib/ll_proto.c -index 2a0c1cb3..78179311 100644 ---- a/lib/ll_proto.c -+++ b/lib/ll_proto.c -@@ -80,6 +80,7 @@ __PF(8021Q,802.1Q) - __PF(8021AD,802.1ad) - __PF(MPLS_UC,mpls_uc) - __PF(MPLS_MC,mpls_mc) -+__PF(TEB,teb) - - { 0x8100, "802.1Q" }, - { 0x88cc, "LLDP" }, -diff --git a/man/man8/tc-mpls.8 b/man/man8/tc-mpls.8 -index 84ef2ef1..9e563e98 100644 ---- a/man/man8/tc-mpls.8 -+++ b/man/man8/tc-mpls.8 -@@ -17,7 +17,7 @@ mpls - mpls manipulation module - - .ti -8 - .IR PUSH " := " --.BR push " [ " protocol -+.RB "{ " push " | " mac_push " } [ " protocol - .IR MPLS_PROTO " ]" - .RB " [ " tc - .IR MPLS_TC " ] " -@@ -64,7 +64,14 @@ requires no arguments and simply subtracts 1 from the MPLS header TTL field. - Decapsulation mode. Requires the protocol of the next header. - .TP - .B push --Encapsulation mode. Requires at least the -+Encapsulation mode. Adds the MPLS header between the MAC and the network -+headers. Requires at least the -+.B label -+option. -+.TP -+.B mac_push -+Encapsulation mode. Adds the MPLS header before the MAC header. Requires at -+least the - .B label - option. - .TP -@@ -152,5 +159,36 @@ ip packets and output to eth1: - .EE - .RE - -+Here is another example, where incoming Ethernet frames are encapsulated into -+MPLS with label 123 and TTL 64. Then, an outer Ethernet header is added and the -+resulting frame is finally sent on eth1: -+ -+.RS -+.EX -+#tc qdisc add dev eth0 ingress -+#tc filter add dev eth0 ingress matchall \\ -+ action mpls mac_push label 123 ttl 64 \\ -+ action vlan push_eth \\ -+ dst_mac 02:00:00:00:00:02 \\ -+ src_mac 02:00:00:00:00:01 \\ -+ action mirred egress redirect dev eth1 -+.EE -+.RE -+ -+The following example assumes that incoming MPLS packets with label 123 -+transport Ethernet frames. The outer Ethernet and the MPLS headers are -+stripped, then the inner Ethernet frame is sent on eth1: -+ -+.RS -+.EX -+#tc qdisc add dev eth0 ingress -+#tc filter add dev eth0 ingress protocol mpls_uc \\ -+ flower mpls_label 123 mpls_bos 1 \\ -+ action vlan pop_eth \\ -+ action mpls pop protocol teb \\ -+ action mirred egress redirect dev eth1 -+.EE -+.RE -+ - .SH SEE ALSO --.BR tc (8) -+.BR tc "(8), " tc-mirred "(8), " tc-vlan (8) -diff --git a/man/man8/tc-vlan.8 b/man/man8/tc-vlan.8 -index 5c2808b1..264053d3 100644 ---- a/man/man8/tc-vlan.8 -+++ b/man/man8/tc-vlan.8 -@@ -157,5 +157,8 @@ process then restarted for the plain packet: - .EE - .RE - -+For an example of the -+.BR pop_eth " and " push_eth " modes, see " tc-mpls (8). -+ - .SH SEE ALSO --.BR tc (8) -+.BR tc "(8), " tc-mpls (8) -diff --git a/tc/m_mpls.c b/tc/m_mpls.c -index 3d5d9b25..cb8019b1 100644 ---- a/tc/m_mpls.c -+++ b/tc/m_mpls.c -@@ -17,6 +17,7 @@ static const char * const action_names[] = { - [TCA_MPLS_ACT_PUSH] = "push", - [TCA_MPLS_ACT_MODIFY] = "modify", - [TCA_MPLS_ACT_DEC_TTL] = "dec_ttl", -+ [TCA_MPLS_ACT_MAC_PUSH] = "mac_push", - }; - - static void explain(void) -@@ -25,9 +26,11 @@ static void explain(void) - "Usage: mpls pop [ protocol MPLS_PROTO ]\n" - " mpls push [ protocol MPLS_PROTO ] [ label MPLS_LABEL ] [ tc MPLS_TC ]\n" - " [ ttl MPLS_TTL ] [ bos MPLS_BOS ] [CONTROL]\n" -+ " mpls mac_push [ protocol MPLS_PROTO ] [ label MPLS_LABEL ] [ tc MPLS_TC ]\n" -+ " [ ttl MPLS_TTL ] [ bos MPLS_BOS ] [CONTROL]\n" - " mpls modify [ label MPLS_LABEL ] [ tc MPLS_TC ] [ ttl MPLS_TTL ] [CONTROL]\n" -- " for pop MPLS_PROTO is next header of packet - e.g. ip or mpls_uc\n" -- " for push MPLS_PROTO is one of mpls_uc or mpls_mc\n" -+ " for pop, MPLS_PROTO is next header of packet - e.g. ip or mpls_uc\n" -+ " for push and mac_push, MPLS_PROTO is one of mpls_uc or mpls_mc\n" - " with default: mpls_uc\n" - " CONTROL := reclassify | pipe | drop | continue | pass |\n" - " goto chain \n"); -@@ -41,12 +44,14 @@ static void usage(void) - - static bool can_modify_mpls_fields(unsigned int action) - { -- return action == TCA_MPLS_ACT_PUSH || action == TCA_MPLS_ACT_MODIFY; -+ return action == TCA_MPLS_ACT_PUSH || action == TCA_MPLS_ACT_MAC_PUSH || -+ action == TCA_MPLS_ACT_MODIFY; - } - --static bool can_modify_ethtype(unsigned int action) -+static bool can_set_ethtype(unsigned int action) - { -- return action == TCA_MPLS_ACT_PUSH || action == TCA_MPLS_ACT_POP; -+ return action == TCA_MPLS_ACT_PUSH || action == TCA_MPLS_ACT_MAC_PUSH || -+ action == TCA_MPLS_ACT_POP; - } - - static bool is_valid_label(__u32 label) -@@ -94,6 +99,10 @@ static int parse_mpls(struct action_util *a, int *argc_p, char ***argv_p, - if (check_double_action(action, *argv)) - return -1; - action = TCA_MPLS_ACT_PUSH; -+ } else if (matches(*argv, "mac_push") == 0) { -+ if (check_double_action(action, *argv)) -+ return -1; -+ action = TCA_MPLS_ACT_MAC_PUSH; - } else if (matches(*argv, "modify") == 0) { - if (check_double_action(action, *argv)) - return -1; -@@ -104,31 +113,36 @@ static int parse_mpls(struct action_util *a, int *argc_p, char ***argv_p, - action = TCA_MPLS_ACT_DEC_TTL; - } else if (matches(*argv, "label") == 0) { - if (!can_modify_mpls_fields(action)) -- invarg("only valid for push/modify", *argv); -+ invarg("only valid for push, mac_push and modify", -+ *argv); - NEXT_ARG(); - if (get_u32(&label, *argv, 0) || !is_valid_label(label)) - invarg("label must be <=0xFFFFF", *argv); - } else if (matches(*argv, "tc") == 0) { - if (!can_modify_mpls_fields(action)) -- invarg("only valid for push/modify", *argv); -+ invarg("only valid for push, mac_push and modify", -+ *argv); - NEXT_ARG(); - if (get_u8(&tc, *argv, 0) || (tc & ~0x7)) - invarg("tc field is 3 bits max", *argv); - } else if (matches(*argv, "ttl") == 0) { - if (!can_modify_mpls_fields(action)) -- invarg("only valid for push/modify", *argv); -+ invarg("only valid for push, mac_push and modify", -+ *argv); - NEXT_ARG(); - if (get_u8(&ttl, *argv, 0) || !ttl) - invarg("ttl must be >0 and <=255", *argv); - } else if (matches(*argv, "bos") == 0) { - if (!can_modify_mpls_fields(action)) -- invarg("only valid for push/modify", *argv); -+ invarg("only valid for push, mac_push and modify", -+ *argv); - NEXT_ARG(); - if (get_u8(&bos, *argv, 0) || (bos & ~0x1)) - invarg("bos must be 0 or 1", *argv); - } else if (matches(*argv, "protocol") == 0) { -- if (!can_modify_ethtype(action)) -- invarg("only valid for push/pop", *argv); -+ if (!can_set_ethtype(action)) -+ invarg("only valid for push, mac_push and pop", -+ *argv); - NEXT_ARG(); - if (ll_proto_a2n(&proto, *argv)) - invarg("protocol is invalid", *argv); -@@ -159,10 +173,12 @@ static int parse_mpls(struct action_util *a, int *argc_p, char ***argv_p, - if (action == TCA_MPLS_ACT_PUSH && label == 0xffffffff) - missarg("label"); - -- if (action == TCA_MPLS_ACT_PUSH && proto && -+ if ((action == TCA_MPLS_ACT_PUSH || action == TCA_MPLS_ACT_MAC_PUSH) && -+ proto && - proto != htons(ETH_P_MPLS_UC) && proto != htons(ETH_P_MPLS_MC)) { - fprintf(stderr, -- "invalid push protocol \"0x%04x\" - use mpls_(uc|mc)\n", -+ "invalid %spush protocol \"0x%04x\" - use mpls_(uc|mc)\n", -+ action == TCA_MPLS_ACT_MAC_PUSH ? "mac_" : "", - ntohs(proto)); - return -1; - } -@@ -223,6 +239,7 @@ static int print_mpls(struct action_util *au, FILE *f, struct rtattr *arg) - } - break; - case TCA_MPLS_ACT_PUSH: -+ case TCA_MPLS_ACT_MAC_PUSH: - if (tb[TCA_MPLS_PROTO]) { - __u16 proto; - -diff --git a/testsuite/tests/tc/mpls.t b/testsuite/tests/tc/mpls.t -new file mode 100755 -index 00000000..cb25f361 ---- /dev/null -+++ b/testsuite/tests/tc/mpls.t -@@ -0,0 +1,69 @@ -+#!/bin/sh -+ -+. lib/generic.sh -+ -+DEV="$(rand_dev)" -+ts_ip "$0" "Add $DEV dummy interface" link add dev $DEV up type dummy -+ts_tc "$0" "Add ingress qdisc" qdisc add dev $DEV ingress -+ -+reset_qdisc() -+{ -+ ts_tc "$0" "Remove ingress qdisc" qdisc del dev $DEV ingress -+ ts_tc "$0" "Add ingress qdisc" qdisc add dev $DEV ingress -+} -+ -+ts_tc "$0" "Add mpls action pop" \ -+ filter add dev $DEV ingress protocol mpls_uc matchall \ -+ action mpls pop protocol ip -+ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress -+test_on "mpls" -+test_on "pop protocol ip pipe" -+ -+reset_qdisc -+ts_tc "$0" "Add mpls action push" \ -+ filter add dev $DEV ingress protocol ip matchall \ -+ action mpls push protocol mpls_uc label 20 tc 3 bos 1 ttl 64 -+ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress -+test_on "mpls" -+test_on "push" -+test_on "protocol mpls_uc" -+test_on "label 20" -+test_on "tc 3" -+test_on "bos 1" -+test_on "ttl 64" -+test_on "pipe" -+ -+reset_qdisc -+ts_tc "$0" "Add mpls action mac_push" \ -+ filter add dev $DEV ingress matchall \ -+ action mpls mac_push protocol mpls_uc label 20 tc 3 bos 1 ttl 64 -+ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress -+test_on "mpls" -+test_on "mac_push" -+test_on "protocol mpls_uc" -+test_on "label 20" -+test_on "tc 3" -+test_on "bos 1" -+test_on "ttl 64" -+test_on "pipe" -+ -+reset_qdisc -+ts_tc "$0" "Add mpls action modify" \ -+ filter add dev $DEV ingress protocol mpls_uc matchall \ -+ action mpls modify label 20 tc 3 ttl 64 -+ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress -+test_on "mpls" -+test_on "modify" -+test_on "label 20" -+test_on "tc 3" -+test_on "ttl 64" -+test_on "pipe" -+ -+reset_qdisc -+ts_tc "$0" "Add mpls action dec_ttl" \ -+ filter add dev $DEV ingress protocol mpls_uc matchall \ -+ action mpls dec_ttl -+ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress -+test_on "mpls" -+test_on "dec_ttl" -+test_on "pipe" --- -2.29.2 - diff --git a/SOURCES/0005-m_mpls-test-the-mac_push-action-after-modify.patch b/SOURCES/0005-m_mpls-test-the-mac_push-action-after-modify.patch deleted file mode 100644 index 197b3d6..0000000 --- a/SOURCES/0005-m_mpls-test-the-mac_push-action-after-modify.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 8c66f562e88887d2bf1c1064117496c4cb862b11 Mon Sep 17 00:00:00 2001 -Message-Id: <8c66f562e88887d2bf1c1064117496c4cb862b11.1611877215.git.aclaudi@redhat.com> -In-Reply-To: -References: -From: Andrea Claudi -Date: Fri, 29 Jan 2021 00:35:03 +0100 -Subject: [PATCH] m_mpls: test the 'mac_push' action after 'modify' - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1885770 -Upstream Status: unknown commit f1298d76 - -commit f1298d76606a581cf3ab9ec45a92b41e72a6b4f0 -Author: Guillaume Nault -Date: Thu Oct 22 11:11:44 2020 +0200 - - m_mpls: test the 'mac_push' action after 'modify' - - Commit 02a261b5ba1c ("m_mpls: add mac_push action") added a matches() - test for the "mac_push" string before the test for "modify". - This changes the previous behaviour as 'action m' used to match - "modify" while it now matches "mac_push". - - Revert to the original behaviour by moving the "mac_push" test after - "modify". - - Fixes: 02a261b5ba1c ("m_mpls: add mac_push action") - Signed-off-by: Guillaume Nault - Signed-off-by: David Ahern ---- - tc/m_mpls.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/tc/m_mpls.c b/tc/m_mpls.c -index cb8019b1..2c3752ba 100644 ---- a/tc/m_mpls.c -+++ b/tc/m_mpls.c -@@ -99,14 +99,14 @@ static int parse_mpls(struct action_util *a, int *argc_p, char ***argv_p, - if (check_double_action(action, *argv)) - return -1; - action = TCA_MPLS_ACT_PUSH; -- } else if (matches(*argv, "mac_push") == 0) { -- if (check_double_action(action, *argv)) -- return -1; -- action = TCA_MPLS_ACT_MAC_PUSH; - } else if (matches(*argv, "modify") == 0) { - if (check_double_action(action, *argv)) - return -1; - action = TCA_MPLS_ACT_MODIFY; -+ } else if (matches(*argv, "mac_push") == 0) { -+ if (check_double_action(action, *argv)) -+ return -1; -+ action = TCA_MPLS_ACT_MAC_PUSH; - } else if (matches(*argv, "dec_ttl") == 0) { - if (check_double_action(action, *argv)) - return -1; --- -2.29.2 - diff --git a/SOURCES/0006-tc-vlan-fix-help-and-error-message-strings.patch b/SOURCES/0006-tc-vlan-fix-help-and-error-message-strings.patch deleted file mode 100644 index a70ac17..0000000 --- a/SOURCES/0006-tc-vlan-fix-help-and-error-message-strings.patch +++ /dev/null @@ -1,52 +0,0 @@ -From cdb8197d0e7380b3679ded6bab398883aead92dc Mon Sep 17 00:00:00 2001 -Message-Id: -In-Reply-To: -References: -From: Andrea Claudi -Date: Fri, 29 Jan 2021 00:35:03 +0100 -Subject: [PATCH] tc-vlan: fix help and error message strings - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1885770 -Upstream Status: unknown commit 7c7a0fe0 - -commit 7c7a0fe0c81cdff258c4314c629d7a52ae331dc4 -Author: Guillaume Nault -Date: Mon Nov 2 11:59:46 2020 +0100 - - tc-vlan: fix help and error message strings - - * "vlan pop" can be followed by a CONTROL keyword. - - * Add missing space in error message. - - Signed-off-by: Guillaume Nault - Signed-off-by: Stephen Hemminger ---- - tc/m_vlan.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/tc/m_vlan.c b/tc/m_vlan.c -index e6b21330..57722b73 100644 ---- a/tc/m_vlan.c -+++ b/tc/m_vlan.c -@@ -30,7 +30,7 @@ static const char * const action_names[] = { - static void explain(void) - { - fprintf(stderr, -- "Usage: vlan pop\n" -+ "Usage: vlan pop [CONTROL]\n" - " vlan push [ protocol VLANPROTO ] id VLANID [ priority VLANPRIO ] [CONTROL]\n" - " vlan modify [ protocol VLANPROTO ] id VLANID [ priority VLANPRIO ] [CONTROL]\n" - " vlan pop_eth [CONTROL]\n" -@@ -244,7 +244,7 @@ static int print_vlan(struct action_util *au, FILE *f, struct rtattr *arg) - parse_rtattr_nested(tb, TCA_VLAN_MAX, arg); - - if (!tb[TCA_VLAN_PARMS]) { -- fprintf(stderr, "Missing vlanparameters\n"); -+ fprintf(stderr, "Missing vlan parameters\n"); - return -1; - } - parm = RTA_DATA(tb[TCA_VLAN_PARMS]); --- -2.29.2 - diff --git a/SOURCES/0007-tc-mpls-fix-manpage-example-and-help-message-string.patch b/SOURCES/0007-tc-mpls-fix-manpage-example-and-help-message-string.patch deleted file mode 100644 index a53a799..0000000 --- a/SOURCES/0007-tc-mpls-fix-manpage-example-and-help-message-string.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 8953735b551d5f3c18c9523ea24055f4a7f9b927 Mon Sep 17 00:00:00 2001 -Message-Id: <8953735b551d5f3c18c9523ea24055f4a7f9b927.1611877215.git.aclaudi@redhat.com> -In-Reply-To: -References: -From: Andrea Claudi -Date: Fri, 29 Jan 2021 00:35:03 +0100 -Subject: [PATCH] tc-mpls: fix manpage example and help message string - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1885770 -Upstream Status: unknown commit 8682f588 - -commit 8682f588bfed7862233a22626562696d662ca60c -Author: Guillaume Nault -Date: Mon Nov 2 12:24:25 2020 +0100 - - tc-mpls: fix manpage example and help message string - - Manpage: - * Remove the extra "and to ip packets" part from command description - to make it more understandable. - - * Redirect packets to eth1, instead of eth0, as told in the - description. - - Help string: - * "mpls pop" can be followed by a CONTROL keyword. - - * "mpls modify" can also set the MPLS_BOS field. - - Signed-off-by: Guillaume Nault - Signed-off-by: Stephen Hemminger ---- - man/man8/tc-mpls.8 | 6 +++--- - tc/m_mpls.c | 5 +++-- - 2 files changed, 6 insertions(+), 5 deletions(-) - -diff --git a/man/man8/tc-mpls.8 b/man/man8/tc-mpls.8 -index 9e563e98..7f8be221 100644 ---- a/man/man8/tc-mpls.8 -+++ b/man/man8/tc-mpls.8 -@@ -147,15 +147,15 @@ a label 123 and sends them out eth1: - .EE - .RE - --In this example, incoming MPLS unicast packets on eth0 are decapsulated and to --ip packets and output to eth1: -+In this example, incoming MPLS unicast packets on eth0 are decapsulated -+and redirected to eth1: - - .RS - .EX - #tc qdisc add dev eth0 handle ffff: ingress - #tc filter add dev eth0 protocol mpls_uc parent ffff: flower \\ - action mpls pop protocol ipv4 \\ -- action mirred egress redirect dev eth0 -+ action mirred egress redirect dev eth1 - .EE - .RE - -diff --git a/tc/m_mpls.c b/tc/m_mpls.c -index 2c3752ba..9fee22e3 100644 ---- a/tc/m_mpls.c -+++ b/tc/m_mpls.c -@@ -23,12 +23,13 @@ static const char * const action_names[] = { - static void explain(void) - { - fprintf(stderr, -- "Usage: mpls pop [ protocol MPLS_PROTO ]\n" -+ "Usage: mpls pop [ protocol MPLS_PROTO ] [CONTROL]\n" - " mpls push [ protocol MPLS_PROTO ] [ label MPLS_LABEL ] [ tc MPLS_TC ]\n" - " [ ttl MPLS_TTL ] [ bos MPLS_BOS ] [CONTROL]\n" - " mpls mac_push [ protocol MPLS_PROTO ] [ label MPLS_LABEL ] [ tc MPLS_TC ]\n" - " [ ttl MPLS_TTL ] [ bos MPLS_BOS ] [CONTROL]\n" -- " mpls modify [ label MPLS_LABEL ] [ tc MPLS_TC ] [ ttl MPLS_TTL ] [CONTROL]\n" -+ " mpls modify [ label MPLS_LABEL ] [ tc MPLS_TC ] [ ttl MPLS_TTL ]\n" -+ " [ bos MPLS_BOS ] [CONTROL]\n" - " for pop, MPLS_PROTO is next header of packet - e.g. ip or mpls_uc\n" - " for push and mac_push, MPLS_PROTO is one of mpls_uc or mpls_mc\n" - " with default: mpls_uc\n" --- -2.29.2 - diff --git a/SOURCES/0008-tc-flower-fix-json-output-with-mpls-lse.patch b/SOURCES/0008-tc-flower-fix-json-output-with-mpls-lse.patch deleted file mode 100644 index 3c57d58..0000000 --- a/SOURCES/0008-tc-flower-fix-json-output-with-mpls-lse.patch +++ /dev/null @@ -1,120 +0,0 @@ -From 52754e4b7d4b52e9852869d7e2f6af1b890677f1 Mon Sep 17 00:00:00 2001 -Message-Id: <52754e4b7d4b52e9852869d7e2f6af1b890677f1.1611877215.git.aclaudi@redhat.com> -In-Reply-To: -References: -From: Andrea Claudi -Date: Fri, 29 Jan 2021 00:35:04 +0100 -Subject: [PATCH] tc: flower: fix json output with mpls lse - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1885770 -Upstream Status: unknown commit 676a1a70 - -commit 676a1a708f8e99d6a4faa3de8a093f8f8c14b9da -Author: Guillaume Nault -Date: Tue Jan 12 11:30:53 2021 +0100 - - tc: flower: fix json output with mpls lse - - The json output of the TCA_FLOWER_KEY_MPLS_OPTS attribute was invalid. - - Example: - - $ tc filter add dev eth0 ingress protocol mpls_uc flower mpls \ - lse depth 1 label 100 \ - lse depth 2 label 200 - - $ tc -json filter show dev eth0 ingress - ...{"eth_type":"8847", - " mpls":[" lse":["depth":1,"label":100], - " lse":["depth":2,"label":200]]}... - - This is invalid as the arrays, introduced by "[", can't contain raw - string:value pairs. Those must be enclosed into "{}" to form valid json - ojects. Also, there are spurious whitespaces before the mpls and lse - strings because of the indentation used for normal output. - - Fix this by putting all LSE parameters (depth, label, tc, bos and ttl) - into the same json object. The "mpls" key now directly contains a list - of such objects. - - Also, handle strings differently for normal and json output, so that - json strings don't get spurious indentation whitespaces. - - Normal output isn't modified. - The json output now looks like: - - $ tc -json filter show dev eth0 ingress - ...{"eth_type":"8847", - "mpls":[{"depth":1,"label":100}, - {"depth":2,"label":200}]}... - - Fixes: eb09a15c12fb ("tc: flower: support multiple MPLS LSE match") - Signed-off-by: Guillaume Nault - Signed-off-by: Stephen Hemminger ---- - tc/f_flower.c | 16 +++++++++------- - 1 file changed, 9 insertions(+), 7 deletions(-) - -diff --git a/tc/f_flower.c b/tc/f_flower.c -index 00c919fd..27731078 100644 ---- a/tc/f_flower.c -+++ b/tc/f_flower.c -@@ -2476,7 +2476,7 @@ static void flower_print_u32(const char *name, struct rtattr *attr) - print_uint(PRINT_ANY, name, namefrm, rta_getattr_u32(attr)); - } - --static void flower_print_mpls_opt_lse(const char *name, struct rtattr *lse) -+static void flower_print_mpls_opt_lse(struct rtattr *lse) - { - struct rtattr *tb[TCA_FLOWER_KEY_MPLS_OPT_LSE_MAX + 1]; - struct rtattr *attr; -@@ -2493,7 +2493,8 @@ static void flower_print_mpls_opt_lse(const char *name, struct rtattr *lse) - RTA_PAYLOAD(lse)); - - print_nl(); -- open_json_array(PRINT_ANY, name); -+ print_string(PRINT_FP, NULL, " lse", NULL); -+ open_json_object(NULL); - attr = tb[TCA_FLOWER_KEY_MPLS_OPT_LSE_DEPTH]; - if (attr) - print_hhu(PRINT_ANY, "depth", " depth %u", -@@ -2511,10 +2512,10 @@ static void flower_print_mpls_opt_lse(const char *name, struct rtattr *lse) - attr = tb[TCA_FLOWER_KEY_MPLS_OPT_LSE_TTL]; - if (attr) - print_hhu(PRINT_ANY, "ttl", " ttl %u", rta_getattr_u8(attr)); -- close_json_array(PRINT_JSON, NULL); -+ close_json_object(); - } - --static void flower_print_mpls_opts(const char *name, struct rtattr *attr) -+static void flower_print_mpls_opts(struct rtattr *attr) - { - struct rtattr *lse; - int rem; -@@ -2523,11 +2524,12 @@ static void flower_print_mpls_opts(const char *name, struct rtattr *attr) - return; - - print_nl(); -- open_json_array(PRINT_ANY, name); -+ print_string(PRINT_FP, NULL, " mpls", NULL); -+ open_json_array(PRINT_JSON, "mpls"); - rem = RTA_PAYLOAD(attr); - lse = RTA_DATA(attr); - while (RTA_OK(lse, rem)) { -- flower_print_mpls_opt_lse(" lse", lse); -+ flower_print_mpls_opt_lse(lse); - lse = RTA_NEXT(lse, rem); - }; - if (rem) -@@ -2650,7 +2652,7 @@ static int flower_print_opt(struct filter_util *qu, FILE *f, - flower_print_ip_attr("ip_ttl", tb[TCA_FLOWER_KEY_IP_TTL], - tb[TCA_FLOWER_KEY_IP_TTL_MASK]); - -- flower_print_mpls_opts(" mpls", tb[TCA_FLOWER_KEY_MPLS_OPTS]); -+ flower_print_mpls_opts(tb[TCA_FLOWER_KEY_MPLS_OPTS]); - flower_print_u32("mpls_label", tb[TCA_FLOWER_KEY_MPLS_LABEL]); - flower_print_u8("mpls_tc", tb[TCA_FLOWER_KEY_MPLS_TC]); - flower_print_u8("mpls_bos", tb[TCA_FLOWER_KEY_MPLS_BOS]); --- -2.29.2 - diff --git a/SOURCES/0009-iproute-force-rtm_dst_len-to-32-128.patch b/SOURCES/0009-iproute-force-rtm_dst_len-to-32-128.patch deleted file mode 100644 index c5aee30..0000000 --- a/SOURCES/0009-iproute-force-rtm_dst_len-to-32-128.patch +++ /dev/null @@ -1,67 +0,0 @@ -From f2cb0f1570ca603c5d92d6a7d87596d07fdb01cd Mon Sep 17 00:00:00 2001 -Message-Id: -In-Reply-To: -References: -From: Andrea Claudi -Date: Tue, 9 Feb 2021 12:00:58 +0100 -Subject: [PATCH] iproute: force rtm_dst_len to 32/128 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1852038 -Upstream Status: unknown commit 5a37254b - -commit 5a37254b71249bfb73d44d6278d767a6b127a2f9 -Author: Luca Boccassi -Date: Sun Jan 24 17:36:58 2021 +0000 - - iproute: force rtm_dst_len to 32/128 - - Since NETLINK_GET_STRICT_CHK was enabled, the kernel rejects commands - that pass a prefix length, eg: - - ip route get `1.0.0.0/1 - Error: ipv4: Invalid values in header for route get request. - ip route get 0.0.0.0/0 - Error: ipv4: rtm_src_len and rtm_dst_len must be 32 for IPv4 - - Since there's no point in setting a rtm_dst_len that we know is going - to be rejected, just force it to the right value if it's passed on - the command line. Print a warning to stderr to notify users. - - Bug-Debian: https://bugs.debian.org/944730 - Reported-By: Clément 'wxcafé' Hertling - Signed-off-by: Luca Boccassi - Signed-off-by: Stephen Hemminger ---- - ip/iproute.c | 13 ++++++++++++- - 1 file changed, 12 insertions(+), 1 deletion(-) - -diff --git a/ip/iproute.c b/ip/iproute.c -index 05ec2c29..1f3c347e 100644 ---- a/ip/iproute.c -+++ b/ip/iproute.c -@@ -2067,7 +2067,18 @@ static int iproute_get(int argc, char **argv) - if (addr.bytelen) - addattr_l(&req.n, sizeof(req), - RTA_DST, &addr.data, addr.bytelen); -- req.r.rtm_dst_len = addr.bitlen; -+ if (req.r.rtm_family == AF_INET && addr.bitlen != 32) { -+ fprintf(stderr, -+ "Warning: /%u as prefix is invalid, only /32 (or none) is supported.\n", -+ addr.bitlen); -+ req.r.rtm_dst_len = 32; -+ } else if (req.r.rtm_family == AF_INET6 && addr.bitlen != 128) { -+ fprintf(stderr, -+ "Warning: /%u as prefix is invalid, only /128 (or none) is supported.\n", -+ addr.bitlen); -+ req.r.rtm_dst_len = 128; -+ } else -+ req.r.rtm_dst_len = addr.bitlen; - address_found = true; - } - argc--; argv++; --- -2.29.2 - diff --git a/SOURCES/0010-iplink_bareudp-cleanup-help-message-and-man-page.patch b/SOURCES/0010-iplink_bareudp-cleanup-help-message-and-man-page.patch deleted file mode 100644 index a0ca03e..0000000 --- a/SOURCES/0010-iplink_bareudp-cleanup-help-message-and-man-page.patch +++ /dev/null @@ -1,104 +0,0 @@ -From e5143d1e2787fca4ea365c4010e0da5bcbbbba36 Mon Sep 17 00:00:00 2001 -Message-Id: -In-Reply-To: -References: -From: Andrea Claudi -Date: Mon, 8 Mar 2021 12:52:23 +0100 -Subject: [PATCH] iplink_bareudp: cleanup help message and man page - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1912412 -Upstream Status: unknown commit 86d9660d - -commit 86d9660dc1805be4435497ff194f618535e8fc97 -Author: Guillaume Nault -Date: Mon Feb 1 18:44:07 2021 +0100 - - iplink_bareudp: cleanup help message and man page - - * Fix PROTO description in help message (mpls isn't a valid argument). - - * Remove SRCPORTMIN description from help message since it doesn't - appear in the syntax string. - - * Use same keywords in help message and in man page. - - * Use the "ethertype" option name (.B ethertype) rather than the - option value (.I ETHERTYPE) in the man page description of - [no]multiproto. - - Signed-off-by: Guillaume Nault - Signed-off-by: Stephen Hemminger ---- - ip/iplink_bareudp.c | 8 +++++--- - man/man8/ip-link.8.in | 15 +++++++++------ - 2 files changed, 14 insertions(+), 9 deletions(-) - -diff --git a/ip/iplink_bareudp.c b/ip/iplink_bareudp.c -index 860ec699..aa311106 100644 ---- a/ip/iplink_bareudp.c -+++ b/ip/iplink_bareudp.c -@@ -22,9 +22,11 @@ static void print_explain(FILE *f) - " [ srcportmin PORT ]\n" - " [ [no]multiproto ]\n" - "\n" -- "Where: PORT := 0-65535\n" -- " PROTO := NUMBER | ip | mpls\n" -- " SRCPORTMIN := 0-65535\n" -+ "Where: PORT := UDP_PORT\n" -+ " PROTO := ETHERTYPE\n" -+ "\n" -+ "Note: ETHERTYPE can be given as number or as protocol name (\"ipv4\", \"ipv6\",\n" -+ " \"mpls_uc\", etc.).\n" - ); - } - -diff --git a/man/man8/ip-link.8.in b/man/man8/ip-link.8.in -index f451ecf3..ce3c8636 100644 ---- a/man/man8/ip-link.8.in -+++ b/man/man8/ip-link.8.in -@@ -1304,9 +1304,9 @@ For a link of type - the following additional arguments are supported: - - .BI "ip link add " DEVICE --.BI type " bareudp " dstport " PORT " ethertype " ETHERTYPE" -+.BI type " bareudp " dstport " PORT " ethertype " PROTO" - [ --.BI srcportmin " SRCPORTMIN " -+.BI srcportmin " PORT " - ] [ - .RB [ no ] multiproto - ] -@@ -1317,11 +1317,14 @@ the following additional arguments are supported: - - specifies the destination port for the UDP tunnel. - - .sp --.BI ethertype " ETHERTYPE" -+.BI ethertype " PROTO" - - specifies the ethertype of the L3 protocol being tunnelled. -+.B ethertype -+can be given as plain Ethernet protocol number or using the protocol name -+("ipv4", "ipv6", "mpls_uc", etc.). - - .sp --.BI srcportmin " SRCPORTMIN" -+.BI srcportmin " PORT" - - selects the lowest value of the UDP tunnel source port range. - - .sp -@@ -1329,11 +1332,11 @@ the following additional arguments are supported: - - activates support for protocols similar to the one - .RB "specified by " ethertype . - When --.I ETHERTYPE -+.B ethertype - is "mpls_uc" (that is, unicast MPLS), this allows the tunnel to also handle - multicast MPLS. - When --.I ETHERTYPE -+.B ethertype - is "ipv4", this allows the tunnel to also handle IPv6. This option is disabled - by default. - --- -2.30.2 - diff --git a/SPECS/iproute.spec b/SPECS/iproute.spec index 6ef0b52..63d37bd 100644 --- a/SPECS/iproute.spec +++ b/SPECS/iproute.spec @@ -1,25 +1,11 @@ -%define rpmversion 5.9.0 -%define specrelease 4%{?dist} -%define pkg_release %{specrelease}%{?buildid} - Summary: Advanced IP routing and network device configuration tools Name: iproute -Version: %{rpmversion} -Release: %{pkg_release} +Version: 5.12.0 +Release: 0%{?dist}%{?buildid} Group: Applications/System URL: http://kernel.org/pub/linux/utils/net/%{name}2/ Source0: http://kernel.org/pub/linux/utils/net/%{name}2/%{name}2-%{version}.tar.xz Source1: rt_dsfield.deprecated -Patch0: 0001-v5.9.0.patch -Patch1: 0002-Update-kernel-headers.patch -Patch2: 0003-m_vlan-add-pop_eth-and-push_eth-actions.patch -Patch3: 0004-m_mpls-add-mac_push-action.patch -Patch4: 0005-m_mpls-test-the-mac_push-action-after-modify.patch -Patch5: 0006-tc-vlan-fix-help-and-error-message-strings.patch -Patch6: 0007-tc-mpls-fix-manpage-example-and-help-message-string.patch -Patch7: 0008-tc-flower-fix-json-output-with-mpls-lse.patch -Patch8: 0009-iproute-force-rtm_dst_len-to-32-128.patch -Patch9: 0010-iplink_bareudp-cleanup-help-message-and-man-page.patch License: GPLv2+ and Public Domain BuildRequires: bison BuildRequires: elfutils-libelf-devel @@ -50,7 +36,7 @@ Group: Applications/System License: GPLv2+ Obsoletes: %{name} < 4.5.0-3 Requires: %{name}%{?_isa} = %{version}-%{release} -Provides: tc +Provides: /sbin/tc %description tc The Traffic Control utility manages queueing disciplines, their classes and @@ -82,20 +68,12 @@ The libnetlink static library. %autosetup -p1 -n %{name}2-%{version} %build -export CFLAGS="%{optflags} -fno-exceptions" -export LDFLAGS="%{build_ldflags}" -export LIBDIR=/%{_libdir} -export IPT_LIB_DIR=/%{_lib}/xtables -./configure -make %{?_smp_mflags} +%configure +%make_build %install -export DESTDIR='%{buildroot}' export SBINDIR='%{_sbindir}' -export MANDIR='%{_mandir}' export LIBDIR='%{_libdir}' -export CONFDIR='%{_sysconfdir}/iproute2' -export DOCDIR='%{_docdir}' %make_install echo '.so man8/tc-cbq.8' > %{buildroot}%{_mandir}/man8/cbq.8 @@ -152,6 +130,9 @@ cat %{SOURCE1} >>%{buildroot}%{_sysconfdir}/iproute2/rt_dsfield %{_includedir}/iproute2/bpf_elf.h %changelog +* Thu Apr 29 2021 Andrea Claudi [5.12.0-0.el8] +- New version 5.12.0 [1939382] + * Fri Mar 12 2021 Andrea Claudi [5.9.0-4.el8] - iplink_bareudp: cleanup help message and man page (Andrea Claudi) [1912412]