commit dbbe06c1a4b8d182ff844acaa639f4598b34810a Author: CentOS Sources Date: Sat Mar 13 08:11:26 2021 +0000 import iproute-5.9.0-4.el8 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..581167a --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/iproute2-5.9.0.tar.xz diff --git a/.iproute.metadata b/.iproute.metadata new file mode 100644 index 0000000..3b76ec4 --- /dev/null +++ b/.iproute.metadata @@ -0,0 +1 @@ +c9e0ca453307ce7c221ccffc10939f4136b4ad5d SOURCES/iproute2-5.9.0.tar.xz diff --git a/SOURCES/0001-v5.9.0.patch b/SOURCES/0001-v5.9.0.patch new file mode 100644 index 0000000..f0868bb --- /dev/null +++ b/SOURCES/0001-v5.9.0.patch @@ -0,0 +1,20 @@ +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 new file mode 100644 index 0000000..60a94f4 --- /dev/null +++ b/SOURCES/0002-Update-kernel-headers.patch @@ -0,0 +1,308 @@ +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 new file mode 100644 index 0000000..fa1b401 --- /dev/null +++ b/SOURCES/0003-m_vlan-add-pop_eth-and-push_eth-actions.patch @@ -0,0 +1,343 @@ +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 new file mode 100644 index 0000000..54c1c3c --- /dev/null +++ b/SOURCES/0004-m_mpls-add-mac_push-action.patch @@ -0,0 +1,342 @@ +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 new file mode 100644 index 0000000..197b3d6 --- /dev/null +++ b/SOURCES/0005-m_mpls-test-the-mac_push-action-after-modify.patch @@ -0,0 +1,58 @@ +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 new file mode 100644 index 0000000..a70ac17 --- /dev/null +++ b/SOURCES/0006-tc-vlan-fix-help-and-error-message-strings.patch @@ -0,0 +1,52 @@ +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 new file mode 100644 index 0000000..a53a799 --- /dev/null +++ b/SOURCES/0007-tc-mpls-fix-manpage-example-and-help-message-string.patch @@ -0,0 +1,82 @@ +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 new file mode 100644 index 0000000..3c57d58 --- /dev/null +++ b/SOURCES/0008-tc-flower-fix-json-output-with-mpls-lse.patch @@ -0,0 +1,120 @@ +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 new file mode 100644 index 0000000..c5aee30 --- /dev/null +++ b/SOURCES/0009-iproute-force-rtm_dst_len-to-32-128.patch @@ -0,0 +1,67 @@ +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 new file mode 100644 index 0000000..a0ca03e --- /dev/null +++ b/SOURCES/0010-iplink_bareudp-cleanup-help-message-and-man-page.patch @@ -0,0 +1,104 @@ +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/SOURCES/rt_dsfield.deprecated b/SOURCES/rt_dsfield.deprecated new file mode 100644 index 0000000..c8eec63 --- /dev/null +++ b/SOURCES/rt_dsfield.deprecated @@ -0,0 +1,17 @@ + +# Deprecated values dropped upstream +# Kept in RHEL for backwards-compatibility +0x00 default +0x10 lowdelay +0x08 throughput +0x04 reliability +# This value overlap with ECT, do not use it! +0x02 mincost +# These values seems do not want to die, Cisco likes them by a strange reason. +0x20 priority +0x40 immediate +0x60 flash +0x80 flash-override +0xa0 critical +0xc0 internet +0xe0 network diff --git a/SPECS/iproute.spec b/SPECS/iproute.spec new file mode 100644 index 0000000..6ef0b52 --- /dev/null +++ b/SPECS/iproute.spec @@ -0,0 +1,1077 @@ +%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} +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 +BuildRequires: flex +BuildRequires: iptables-devel >= 1.4.5 +BuildRequires: libdb-devel +BuildRequires: libmnl-devel +BuildRequires: libselinux-devel +BuildRequires: pkgconfig +%if ! 0%{?_module_build} +%if 0%{?fedora} +BuildRequires: linux-atm-libs-devel +%endif +%endif +# For the UsrMove transition period +Conflicts: filesystem < 3 +Provides: /sbin/ip +Obsoletes: %{name} < 4.5.0-3 + +%description +The iproute package contains networking utilities (ip and rtmon, for example) +which are designed to use the advanced networking capabilities of the Linux +kernel. + +%package tc +Summary: Linux Traffic Control utility +Group: Applications/System +License: GPLv2+ +Obsoletes: %{name} < 4.5.0-3 +Requires: %{name}%{?_isa} = %{version}-%{release} +Provides: tc + +%description tc +The Traffic Control utility manages queueing disciplines, their classes and +attached filters and actions. It is the standard tool to configure QoS in +Linux. + +%if ! 0%{?_module_build} +%package doc +Summary: Documentation for iproute2 utilities with examples +Group: Applications/System +License: GPLv2+ +Requires: %{name} = %{version}-%{release} + +%description doc +The iproute documentation contains howtos and examples of settings. +%endif + +%package devel +Summary: iproute development files +Group: Development/Libraries +License: GPLv2+ +Requires: %{name} = %{version}-%{release} +Provides: iproute-static = %{version}-%{release} + +%description devel +The libnetlink static library. + +%prep +%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} + +%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 + +# libnetlink +install -D -m644 include/libnetlink.h %{buildroot}%{_includedir}/libnetlink.h +install -D -m644 lib/libnetlink.a %{buildroot}%{_libdir}/libnetlink.a + +# drop these files, iproute-doc package extracts files directly from _builddir +rm -rf '%{buildroot}%{_docdir}' + +# Append deprecated values to rt_dsfield for compatibility reasons +cat %{SOURCE1} >>%{buildroot}%{_sysconfdir}/iproute2/rt_dsfield + +%files +%dir %{_sysconfdir}/iproute2 +%{!?_licensedir:%global license %%doc} +%license COPYING +%doc README README.devel +%{_mandir}/man7/* +%exclude %{_mandir}/man7/tc-* +%{_mandir}/man8/* +%exclude %{_mandir}/man8/tc* +%exclude %{_mandir}/man8/cbq* +%attr(644,root,root) %config(noreplace) %{_sysconfdir}/iproute2/* +%{_sbindir}/* +%exclude %{_sbindir}/tc +%{_datadir}/bash-completion/completions/devlink + +%files tc +%{!?_licensedir:%global license %%doc} +%license COPYING +%{_mandir}/man7/tc-* +%{_mandir}/man8/tc* +%{_mandir}/man8/cbq* +%dir %{_libdir}/tc/ +%{_libdir}/tc/* +%{_sbindir}/tc +%{_datadir}/bash-completion/completions/tc + +%if ! 0%{?_module_build} +%files doc +%{!?_licensedir:%global license %%doc} +%license COPYING +%doc examples +%endif + +%files devel +%{!?_licensedir:%global license %%doc} +%license COPYING +%{_mandir}/man3/* +%{_libdir}/libnetlink.a +%{_includedir}/libnetlink.h +%{_includedir}/iproute2/bpf_elf.h + +%changelog +* Fri Mar 12 2021 Andrea Claudi [5.9.0-4.el8] +- iplink_bareudp: cleanup help message and man page (Andrea Claudi) [1912412] + +* Tue Feb 09 2021 Andrea Claudi [5.9.0-3.el8] +- iproute: force rtm_dst_len to 32/128 (Andrea Claudi) [1852038] + +* Thu Jan 28 2021 Andrea Claudi [5.9.0-2.el8] +- tc: flower: fix json output with mpls lse (Andrea Claudi) [1885770] +- tc-mpls: fix manpage example and help message string (Andrea Claudi) [1885770] +- tc-vlan: fix help and error message strings (Andrea Claudi) [1885770] +- m_mpls: test the 'mac_push' action after 'modify' (Andrea Claudi) [1885770] +- m_mpls: add mac_push action (Andrea Claudi) [1885770] +- m_vlan: add pop_eth and push_eth actions (Andrea Claudi) [1885770] +- Update kernel headers (Andrea Claudi) [1885770] + +* Tue Nov 17 2020 Andrea Claudi [5.9.0-1.el8] +- Rebase iproute to v5.9.0 [1896011] + +* Mon Jun 29 2020 Andrea Claudi [5.3.0-5.el8] +- man: tc-ct.8: Add manual page for ct tc action (Andrea Claudi) [1844637] +- tc: flower: Add matching on conntrack info (Andrea Claudi) [1844637] +- tc: Introduce tc ct action (Andrea Claudi) [1844637] +- tc: add NLA_F_NESTED flag to all actions options nested block (Andrea Claudi) [1844637] +- Import tc_act/tc_ct.h uapi file (Andrea Claudi) [1844637] +- ss: allow dumping kTLS info (Andrea Claudi) [1812207] +- devlink: Add health error recovery status monitoring (Andrea Claudi) [1821039] + +* Fri Jun 05 2020 Andrea Claudi [5.3.0-4.el8] +- tc: f_flower: add options support for erspan (Andrea Claudi) [1830485] +- tc: f_flower: add options support for vxlan (Andrea Claudi) [1830485] +- tc: m_tunnel_key: add options support for erpsan (Andrea Claudi) [1830485] +- tc: m_tunnel_key: add options support for vxlan (Andrea Claudi) [1830485] +- iproute_lwtunnel: add options support for erspan metadata (Andrea Claudi) [1830485] +- iproute_lwtunnel: add options support for vxlan metadata (Andrea Claudi) [1830485] +- iproute_lwtunnel: add options support for geneve metadata (Andrea Claudi) [1830485] +- Update kernel headers (Andrea Claudi) [1830485] +- man: ip.8: add reference to mptcp man-page (Andrea Claudi) [1812207] +- man: mptcp man page (Andrea Claudi) [1812207] +- ss: allow dumping MPTCP subflow information (Andrea Claudi) [1812207] +- Update kernel headers (Andrea Claudi) [1812207] +- Update kernel headers (Andrea Claudi) [1812207] +- add support for mptcp netlink interface (Andrea Claudi) [1812207] +- Update kernel headers and import mptcp.h (Andrea Claudi) [1812207] +- ip: xfrm: add espintcp encapsulation (Andrea Claudi) [1844045] +- Update kernel headers and import udp.h (Andrea Claudi) [1844045] + +* Thu Apr 30 2020 Andrea Claudi [5.3.0-3.el8] +- xfrm: also check for ipv6 state in xfrm_state_keep (Andrea Claudi) [1828033] +- man: bridge.8: fix bridge link show description (Andrea Claudi) [1817571] +- ip: fix ip route show json output for multipath nexthops (Andrea Claudi) [1738633] +- ip link: xstats: fix TX IGMP reports string (Andrea Claudi) [1796041] +- nstat: print useful error messages in abort() cases (Andrea Claudi) [1824896] + +* Thu Apr 23 2020 Andrea Claudi [5.3.0-2.el8] +- man: ip.8: Add missing vrf subcommand description (Andrea Claudi) [1780010] +- xfrm: not try to delete ipcomp states when using deleteall (Andrea Claudi) [1808634] +- ip-xfrm: Fix help messages (Andrea Claudi) [1796045] +- man: rdma.8: Add missing resource subcommand description (Andrea Claudi) [1786576] +- man: rdma-statistic: Add filter description (Andrea Claudi) [1786565] +- tc: implement support for action flags (Andrea Claudi) [1770671] +- Update kernel headers (Andrea Claudi) [1770671] +- Update kernel headers (Andrea Claudi) [1770671] + +* Tue Oct 15 2019 Andrea Claudi [5.3.0-1.el8] +- New version 5.3.0 [1752857] + +* Thu Jul 04 2019 Andrea Claudi [4.18.0-15.el8] +- netns: make netns_{save,restore} static (Andrea Claudi) [1719759] +- ip vrf: use hook to change VRF in the child (Andrea Claudi) [1719759] +- netns: switch netns in the child when executing commands (Andrea Claudi) [1719759] +- m_mirred: don't bail if the control action is missing (Andrea Claudi) [1711760] +- tc: introduce support for chain templates (Andrea Claudi) [1710291] +- ip: reset netns after each command in batch mode (Andrea Claudi) [1671016] + +* Thu Jun 20 2019 Andrea Claudi [4.18.0-14.el8] +- ss: Review ssfilter (Andrea Claudi) [1698401] + +* Fri Jun 14 2019 Andrea Claudi [4.18.0-13.el8] +- ip-xfrm: Respect family in deleteall and list commands (Andrea Claudi) [1656717] +- Update kernel headers (Andrea Claudi) [1716361] +- uapi: update bpf header (Andrea Claudi) [1716361] +- uapi: update headers to 4.20-rc1 (Andrea Claudi) [1716361] +- bpf: add btf func and func_proto kind support (Andrea Claudi) [1716361] +- lib/bpf: fix build warning if no elf (Andrea Claudi) [1716361] +- bpf: initialise map symbol before retrieving and comparing its type (Andrea Claudi) [1716361] +- Include bsd/string.h only in include/utils.h (Andrea Claudi) [1716361] +- Use libbsd for strlcpy if available (Andrea Claudi) [1716361] +- bpf: check map symbol type properly with newer llvm compiler (Andrea Claudi) [1716361] +- bpf: implement btf handling and map annotation (Andrea Claudi) [1716361] +- bpf: implement bpf to bpf calls support (Andrea Claudi) [1716361] +- bpf: remove strict dependency on af_alg (Andrea Claudi) [1716361] +- bpf: move bpf_elf_map fixup notification under verbose (Andrea Claudi) [1716361] +- iplink: add support for reporting multiple XDP programs (Andrea Claudi) [1716361] +- rdma: Document IB device renaming option (Andrea Claudi) [1663228] +- rdma: Add an option to rename IB device interface (Andrea Claudi) [1663228] +- rdma: Introduce command execution helper with required device name (Andrea Claudi) [1663228] +- rdma: Update kernel include file to support IB device renaming (Andrea Claudi) [1663228] +- libnetlink: Convert GETADDR dumps to use rtnl_addrdump_req (Andrea Claudi) [1716772] + +* Wed May 29 2019 Andrea Claudi [4.18.0-12.el8] +- devlink: Add param command support (Andrea Claudi) [1663199] +- rdma: Fix representation of PortInfo CapabilityMask (Andrea Claudi) [1664694] +- uapi: update ib_verbs (Andrea Claudi) [1664694] +- tc: flower: Add support for QinQ (Andrea Claudi) [1615928] +- ip rule: Add ipproto and port range to filter list (Andrea Claudi) [1678111] + +* Thu Jan 31 2019 Phil Sutter [4.18.0-11.el8] +- tc: m_tunnel_key: Add tunnel option support to act_tunnel_key (Phil Sutter) [1654761] +- tc: f_flower: add geneve option match support to flower (Phil Sutter) [1654761] +- l2tp: Fix printing of cookie and peer_cookie values (Phil Sutter) [1643805] + +* Tue Dec 18 2018 Phil Sutter [4.18.0-10.el8] +- iplink: fix incorrect any address handling for ip tunnels (Phil Sutter) [1626304] + +* Tue Dec 11 2018 Phil Sutter [4.18.0-9.el8] +- man: rdma: Add reference to rdma-resource.8 (Phil Sutter) [1610334] + +* Thu Nov 29 2018 Phil Sutter [4.18.0-8.el8] +- Bump release to run fresh CI tests. + +* Mon Nov 26 2018 Phil Sutter [4.18.0-7.el8] +- ip-route: Fix nexthop encap parsing (Phil Sutter) [1625358] +- man: ip-route.8: Document nexthop limit (Phil Sutter) [1625358] + +* Thu Oct 25 2018 Phil Sutter [4.18.0-6.el8] +- Update kernel headers (Phil Sutter) [1637440] +- tc_util: Add support for showing TCA_STATS_BASIC_HW statistics (Phil Sutter) [1637440] +- tc: Remove pointless assignments in batch() (Phil Sutter) [1602555] +- tipc: Drop unused variable 'genl' (Phil Sutter) [1602555] +- ip-route: Fix parse_encap_seg6() srh parsing (Phil Sutter) [1602555] +- rdma: Don't pass garbage to rd_check_is_filtered() (Phil Sutter) [1602555] +- ip-route: Fix for memleak in error path (Phil Sutter) [1602555] +- rdma: Fix for ineffective check in add_filter() (Phil Sutter) [1602555] +- devlink: Fix error reporting in cmd_resource_set() (Phil Sutter) [1602555] +- libnetlink: fix use-after-free of message buf (Phil Sutter) [1602555] +- libnetlink: don't return error on success (Phil Sutter) [1602555] +- libnetlink: fix leak and using unused memory on error (Phil Sutter) [1602555] +- tc: htb: Print default value in hex (Phil Sutter) [1641053] + +* Thu Oct 18 2018 Phil Sutter [4.18.0-5.el8] +- utils: fix get_rtnl_link_stats_rta stats parsing (Phil Sutter) [1626306] +- uapi: add snmp header file (Phil Sutter) [1626306] +- macsec: fix off-by-one when parsing attributes (Phil Sutter) [1628428] +- json: make 0xhex handle u64 (Phil Sutter) [1628428] + +* Thu Oct 18 2018 Phil Sutter [4.18.0-4.el8] +- iplink_vxlan: take into account preferred_family creating vxlan device (Phil Sutter) [1626321] +- ip-addrlabel: Fix printing of label value (Phil Sutter) [1639412] +- bridge: fdb: Fix for missing keywords in non-JSON output (Phil Sutter) [1636532] + +* Wed Sep 19 2018 Phil Sutter [4.18.0-3.el8] +- lib: introduce print_nl (Phil Sutter) [1625500] + +* Wed Sep 19 2018 Phil Sutter [4.18.0-2.el8] +- bridge/mdb: fix missing new line when show bridge mdb (Phil Sutter) [1625500] +- ip-route: Fix segfault with many nexthops (Phil Sutter) [1625358] +- Update kernel headers (Phil Sutter) [1615915] +- tc/flower: Add match on encapsulating tos/ttl (Phil Sutter) [1615915] +- tc/act_tunnel_key: Enable setup of tos and ttl (Phil Sutter) [1615915] +- iprule: Fix destination prefix output (Phil Sutter) [1623503] +- ip: Add missing -M flag to help text (Phil Sutter) [1612704] +- man: ss.8: Describe --events option (Phil Sutter) [1612704] +- rtmon: List options in help text (Phil Sutter) [1612704] +- man: rtacct.8: Fix nstat options (Phil Sutter) [1612704] +- man: ifstat.8: Document --json and --pretty options (Phil Sutter) [1612704] +- genl: Fix help text (Phil Sutter) [1612704] +- man: devlink.8: Document -verbose option (Phil Sutter) [1612704] +- devlink: trivial: Make help text consistent (Phil Sutter) [1612704] +- bridge: trivial: Make help text consistent (Phil Sutter) [1612704] +- man: bridge.8: Document -oneline option (Phil Sutter) [1612704] + +* Tue Aug 14 2018 Phil Sutter - 4.18.0-1 +- New version 4.18.0 + +* Thu Aug 09 2018 Phil Sutter [4.17.0-1.el8] +- rdma: print driver resource attributes (Phil Sutter) [1610334] +- rdma: update rdma_netlink.h to get new driver attributes (Phil Sutter) [1610334] +- rdma: Print net device name and index for RDMA device (Phil Sutter) [1610334] +- devlink: CTRL_ATTR_FAMILY_ID is a u16 (Phil Sutter) [1589317] +- tc: Do not use addattr_nest_compat on mqprio and netem (Phil Sutter) [1589317] +- ipaddress: Fix and make consistent label match handling (Phil Sutter) [1589317] +- rt_dsfield: Ship deprecated values for compatibility (Phil Sutter) [1595683] +- New version 4.17.0 including upstream-suggested fixes (Phil Sutter) [1589317] + +* Fri Feb 09 2018 Phil Sutter - 4.15.0-1 +- New version 4.15.0 + +* Fri Feb 9 2018 Florian Weimer - 4.14.1-6 +- Use LDFLAGS defaults from redhat-rpm-config + +* Wed Feb 07 2018 Fedora Release Engineering - 4.14.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Mon Dec 11 2017 Phil Sutter - 4.14.1-4 +- Add missing patch files. + +* Mon Dec 11 2017 Phil Sutter - 4.14.1-3 +- Add upstream suggested backports. +- Make use of %%autosetup macro. + +* Wed Nov 15 2017 Phil Sutter - 4.14.1-2 +- Drop unused build dependencies + +* Wed Nov 15 2017 Phil Sutter - 4.14.1-1 +- New version 4.14.1 + +* Tue Sep 19 2017 Phil Sutter - 4.13.0-1 +- New version 4.13.0 + +* Wed Aug 02 2017 Fedora Release Engineering - 4.12.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 4.12.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Jul 21 2017 Phil Sutter - 4.12.0-1 +- New version 4.12.0 + +* Tue May 23 2017 Phil Sutter - 4.11.0-1 +- Add virtual capability to tc subpackage so it's easier found +- New version 4.11.0 + +* Thu May 11 2017 Karsten Hopp - 4.10.0-3 +- don't build docs for module builds to limit dependencies + +* Fri Mar 17 2017 Phil Sutter - 4.10.0-2 +- Add two fixes to 4.10.0 release from upstream. + +* Tue Mar 14 2017 Phil Sutter - 4.10.0-1 +- Ship new header iproute2/bpf_elf.h +- Document content of remaining docs fixup patch in spec file +- Drop patches already applied upstream +- New version 4.10.0 + +* Fri Feb 10 2017 Fedora Release Engineering - 4.9.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Feb 2 2017 Thomas Woerner - 4.9.0-3 +- Release bump for iptables-1.6.1 (libxtables.so.12) + +* Sat Jan 28 2017 Phil Sutter - 4.9.0-2 +- Fix for failing 'make install' + +* Sat Jan 28 2017 Phil Sutter - 4.9.0-1 +- New version 4.9.0 + +* Fri Jan 13 2017 Phil Sutter - 4.8.0-2 +- Fix segfault in xt action + +* Wed Nov 30 2016 Phil Sutter - 4.8.0-1 +- New version 4.8.0 + +* Wed Aug 10 2016 Phil Sutter - 4.7.0-1 +- New version 4.7.0 + +* Wed May 04 2016 Phil Sutter - 4.6.0-1 +- New version 4.6.0 + +* Wed Apr 13 2016 Thomas Woerner - 4.5.0-4 +- Rebuild for new iptables-1.6.0 with libxtables so bump + +* Fri Apr 08 2016 Phil Sutter - 4.5.0-3 +- Fix upgrade path by adding correct Requires/Obsoletes statements to spec file +- Move README.iproute2+tc into tc subpackage + +* Fri Mar 18 2016 Phil Sutter - 4.5.0-2 +- Split tc into it's own subpackage + +* Fri Mar 18 2016 Phil Sutter - 4.5.0-1 +- New version 4.5.0 + +* Thu Feb 04 2016 Fedora Release Engineering - 4.4.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Tue Jan 19 2016 Phil Sutter - 4.4.0-1 +- New version 4.4.0 + +* Sun Oct 04 2015 Phil Sutter - 4.2.0-4 +- Simplify RPM install stage by using package's install target + +* Sun Oct 04 2015 Phil Sutter - 4.2.0-3 +- Add missing build dependency to libmnl-devel +- Ship tipc utility + +* Thu Sep 24 2015 Phil Sutter - 4.2.0-2 +- Add missing build dependency to libselinux-devel + +* Wed Sep 02 2015 Pavel Šimerda - 4.2.0-1 +- new version 4.2.0 + +* Tue Jul 07 2015 Pavel Šimerda - 4.1.1-1 +- new version 4.1.1 + +* Wed Jun 17 2015 Fedora Release Engineering - 4.0.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed May 13 2015 Pavel Šimerda - 4.0.0-3 +- remove patch rejected by upstream + +* Mon May 11 2015 Pavel Šimerda - 4.0.0-2 +- Remove patch rejected by upstream + +* Tue Apr 14 2015 Pavel Šimerda - 4.0.0-1 +- new version 4.0.0 + +* Fri Mar 13 2015 Pavel Šimerda - 3.19.0-1 +- new version 3.19.0 + +* Sat Oct 04 2014 Lubomir Rintel - 3.16.0-3 +- Backport fix for ip link add name regression that broke libvirt + +* Sat Aug 16 2014 Fedora Release Engineering - 3.16.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Tue Aug 05 2014 Petr Šabata - 3.16.0-1 +- 3.16 bump + +* Sat Jul 12 2014 Tom Callaway - 3.15.0-2 +- fix license handling + +* Thu Jun 12 2014 Petr Šabata - 3.15.0-1 +- 3.15.0 bump + +* Sat Jun 07 2014 Fedora Release Engineering - 3.14.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue May 06 2014 Petr Šabata - 3.14.0-2 +- Fix incorrect references in ss(8), #1092653 + +* Tue Apr 15 2014 Petr Šabata - 3.14.0-1 +- 3.14 bump +- Drop out iplink_have_newlink() fix in favor of upstream's approach + +* Tue Nov 26 2013 Petr Šabata - 3.12.0-2 +- Drop libnl from dependencies (#1034454) + +* Mon Nov 25 2013 Petr Šabata - 3.12.0-1 +- 3.12.0 bump + +* Thu Nov 21 2013 Petr Šabata - 3.11.0-2 +- Fix the rtt time parsing again + +* Tue Oct 22 2013 Petr Šabata - 3.11.0-1 +- 3.11 bump + +* Tue Oct 01 2013 Petr Pisar - 3.10.0-8 +- Close file with bridge monitor file (bug #1011822) + +* Tue Sep 24 2013 Petr Pisar - 3.10.0-7 +- Add tc -OK option +- Document "bridge mdb" and "bridge monitor mdb" + +* Fri Aug 30 2013 Petr Šabata - 3.10.0-6 +- Fix lnstat -i properly this time + +* Thu Aug 29 2013 Petr Šabata - 3.10.0-5 +- Fix an 'ip link' hang (#996537) + +* Tue Aug 13 2013 Petr Šabata - 3.10.0-4 +- lnstat -i: Run indefinitely if the --count isn't specified (#977845) +- Switch to unversioned %%docdir + +* Sat Aug 03 2013 Fedora Release Engineering - 3.10.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Wed Jul 17 2013 Petr Šabata - 3.10.0-2 +- Fix the XFRM patch + +* Wed Jul 17 2013 Petr Šabata - 3.10.0-1 +- 3.10.0 bump +- Drop the SHAREDIR patch and revert to upstream ways (#966445) +- Fix an XFRM regression with FORTIFY_SOURCE + +* Tue Apr 30 2013 Petr Šabata - 3.9.0-1 +- 3.9.0 bump + +* Thu Apr 25 2013 Petr Šabata - 3.8.0-4 +- ATM is available in Fedora only + +* Tue Mar 12 2013 Petr Šabata - 3.8.0-3 +- Mention the "up" argument in documentation and help outputs (#907468) + +* Mon Mar 04 2013 Petr Šabata - 3.8.0-2 +- Bump for 1.4.18 rebuild + +* Tue Feb 26 2013 Petr Šabata - 3.8.0-1 +- 3.8.0 bump + +* Fri Feb 08 2013 Petr Šabata - 3.7.0-2 +- Don't propogate mounts out of ip (#882047) + +* Wed Dec 12 2012 Petr Šabata - 3.7.0-1 +- 3.7.0 bump + +* Mon Nov 19 2012 Petr Šabata - 3.6.0-3 +- Include section 7 manpages (#876857) +- Fix ancient bogus dates in the changelog (correction based upon commits) +- Explicitly require some TeX fonts no longer present in the base distribution + +* Thu Oct 04 2012 Petr Šabata - 3.6.0-2 +- List all interfaces by default + +* Wed Oct 03 2012 Petr Šabata - 3.6.0-1 +- 3.6.0 bump + +* Thu Aug 30 2012 Petr Šabata - 3.5.1-2 +- Remove the explicit iptables dependency (#852840) + +* Tue Aug 14 2012 Petr Šabata - 3.5.1-1 +- 3.5.1 bugfix release bump +- Rename 'br' to 'bridge' + +* Mon Aug 06 2012 Petr Šabata - 3.5.0-2 +- Install the new bridge utility + +* Thu Aug 02 2012 Petr Šabata - 3.5.0-1 +- 3.5.0 bump +- Move to db5. + +* Thu Jul 19 2012 Fedora Release Engineering - 3.4.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue May 22 2012 Petr Šabata - 3.4.0-1 +- 3.4.0 bump +- Drop the print route patch (included upstream) + +* Mon Apr 30 2012 Petr Šabata - 3.3.0-2 +- Let's install rtmon too... (#814819) + +* Thu Mar 22 2012 Petr Šabata - 3.3.0-1 +- 3.3.0 bump +- Update source URL + +* Mon Feb 27 2012 Petr Šabata - 3.2.0-3 +- Address dangerous /tmp files security issue (CVE-2012-1088, #797881, #797878) + +* Fri Jan 27 2012 Petr Šabata - 3.2.0-2 +- Simplify the spec a bit thanks to the UsrMove feature + +* Fri Jan 06 2012 Petr Šabata - 3.2.0-1 +- 3.2.0 bump +- Removing a useless, now conflicting patch (initcwnd already decumented) + +* Thu Nov 24 2011 Petr Šabata - 3.1.0-1 +- 3.1.0 bump +- Point URL and Source to the new location on kernel.org +- Remove now obsolete defattr +- Dropping various patches now included upstream +- Dropping iproute2-2.6.25-segfault.patch; I fail to understand the reason for + this hack + +* Tue Nov 15 2011 Petr Šabata - 2.6.39-6 +- ss -ul should display UDP CLOSED sockets (#691100) + +* Thu Oct 06 2011 Petr Sabata - 2.6.39-5 +- Fix ss, lnstat and arpd usage and manpages + +* Wed Sep 07 2011 Petr Sabata - 2.6.39-4 +- lnstat should dump (-d) to stdout instead of stderr (#736332) + +* Tue Jul 26 2011 Petr Sabata - 2.6.39-3 +- Rebuild for xtables7 + +* Tue Jul 12 2011 Petr Sabata - 2.6.39-2 +- Rebuild for xtables6 + +* Thu Jun 30 2011 Petr Sabata - 2.6.39-1 +- 2.6.39 bump + +* Wed Apr 27 2011 Petr Sabata - 2.6.38.1-4 +- Link [cr]tstat to lnstat + +* Wed Apr 27 2011 Petr Sabata - 2.6.38.1-3 +- Install ctstat, rtstat and routef manpage symlinks +- Install m_xt & m_ipt tc modules +- Creating devel and virtual static subpackages with libnetlink + +* Thu Apr 21 2011 Petr Sabata - 2.6.38.1-2 +- General cleanup +- Use global instead of define +- Buildroot removal +- Correcting URL and Source links +- Install genl, ifstat, routef, routel and rtpr (rhbz#697319) + +* Fri Mar 18 2011 Petr Sabata - 2.6.38.1-1 +- 2.6.38.1 bump + +* Wed Mar 16 2011 Petr Sabata - 2.6.38-1 +- 2.6.38 bump + +* Wed Feb 09 2011 Fedora Release Engineering - 2.6.37-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Mon Jan 31 2011 Petr Sabata - 2.6.37-2 +- man-pages.patch update, ip(8) TYPE whitespace + +* Mon Jan 10 2011 Petr Sabata - 2.6.37-1 +- 2.6.37 upstream release +- ss(8) improvements patch removed (included upstream) + +* Wed Dec 08 2010 Petr Sabata - 2.6.35-10 +- fix a typo in ss(8) improvements patch, rhbz#661267 + +* Tue Nov 30 2010 Petr Sabata - 2.6.35-9 +- ss(8) improvements patch by jpopelka; should be included in 2.6.36 + +* Tue Nov 09 2010 Petr Sabata - 2.6.35-8 +- rhbz#641599, use the versioned path, man-pages.patch update, prep update + +* Tue Oct 12 2010 Petr Sabata - 2.6.35-7 +- Do not segfault if peer name is omitted when creating a peer veth link, rhbz#642322 + +* Mon Oct 11 2010 Petr Sabata - 2.6.35-6 +- Man-pages update, rhbz#641599 + +* Wed Sep 29 2010 jkeating - 2.6.35-5 +- Rebuilt for gcc bug 634757 + +* Tue Sep 21 2010 Petr Sabata - 2.6.35-4 +- Modified man-pages.patch to fix cbq manpage, rhbz#635877 + +* Tue Sep 21 2010 Petr Sabata - 2.6.35-3 +- Don't print routes with negative metric fix, rhbz#628739 + +* Wed Aug 18 2010 Petr Sabata - 2.6.35-2 +- 'ip route get' fix, iproute2-2.6.35-print-route.patch +- rhbz#622782 + +* Thu Aug 05 2010 Petr Sabata - 2.6.35-1 +- 2.6.35 version bump +- iproute2-tc-priority.patch removed (included in upstream now) + +* Thu Jul 08 2010 Petr Sabata - 2.6.34-5 +- Licensing guidelines compliance fix + +* Wed Jul 07 2010 Petr Sabata - 2.6.34-4 +- Requires: iptables >= 1.4.5, BuildRequires: iptables-devel >= 1.4.5 + +* Thu Jul 01 2010 Petr Sabata - 2.6.34-3 +- Build now runs ./configure to regenerate Makefile for ipt/xt detection + +* Mon Jun 21 2010 Petr Sabata - 2.6.34-2 +- iproute-tc-priority.patch, rhbz#586112 + +* Mon Jun 21 2010 Petr Sabata - 2.6.34-1 +- 2.6.34 version bump + +* Tue Apr 20 2010 Marcela Mašláňová - 2.6.33-2 +- 578729 6rd tunnel correctly 3979ef91de9ed17d21672aaaefd6c228485135a2 +- change BR texlive to tex according to guidelines + +* Thu Feb 25 2010 Marcela Mašláňová - 2.6.33-1 +- update + +* Tue Jan 26 2010 Marcela Mašláňová - 2.6.32-2 +- add macvlan aka VESA support d63a9b2b1e4e3eab0d0577d0a0f412d50be1e0a7 +- kernel headers 2.6.33 ab322673298bd0b8927cdd9d11f3d36af5941b93 + are needed for macvlan features and probably for other added later. +- fix number of release which contains 2.6.32 kernel headers and features + but it was released as 2.6.31 + +* Mon Jan 4 2010 Marcela Mašláňová - 2.6.31-1 +- update to 2.6.31 + +* Fri Nov 27 2009 Marcela Mašláňová - 2.6.29-5.1.20091106gita7a9ddbb +- 539232 patch cbq initscript + +* Fri Nov 27 2009 Marcela Mašláňová - 2.6.29-5.0.20091106gita7a9ddbb +- snapshot with kernel headers for 2.6.32 + +* Fri Oct 9 2009 Marcela Mašláňová - 2.6.29-5.0.20091009gitdaf49fd6 +- new official version isn't available but it's needed -> switch to git snapshots + +* Thu Sep 24 2009 Marcela Mašláňová - 2.6.29-5 +- create missing man pages + +* Fri Jul 24 2009 Fedora Release Engineering - 2.6.29-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Thu Apr 23 2009 Marcela Mašláňová - 2.6.29-3 +- new iptables (xtables) bring problems to tc, when ipt is used. + rhbz#497344 still broken. tc_modules.patch brings correct paths to + xtables, but that doesn't fix whole issue. +- 497355 ip should allow creation of an IPsec SA with 'proto any' + and specified sport and dport as selectors + +* Tue Apr 14 2009 Marcela Mašláňová - 2.6.29-2 +- c3651bf4763d7247e3edd4e20526a85de459041b ip6tunnel: Fix no default + display of ip4ip6 tunnels +- e48f73d6a5e90d2f883e15ccedf4f53d26bb6e74 missing arpd directory + +* Wed Mar 25 2009 Marcela Mašláňová - 2.6.29-1 +- update to 2.6.29 +- remove DDR patch which became part of sourc +- add patch with correct headers 1957a322c9932e1a1d2ca1fd37ce4b335ceb7113 + +* Wed Feb 25 2009 Fedora Release Engineering - 2.6.28-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Wed Feb 4 2009 Marcela Mašláňová - 2.6.28-2 +- 483484 install distribution files into /usr/share and also fixed + install paths in spec +- add the latest change from git which add DRR support + c86f34942a0ce9f8203c0c38f9fe9604f96be706 + +* Mon Jan 19 2009 Marcela Mašláňová - 2.6.28-1 +- previous two patches were included into 2.6.28 release. +- update + +* Mon Jan 12 2009 Marcela Mašláňová - 2.6.27-2 +- 475130 - Negative preferred lifetimes of IPv6 prefixes/addresses + displayed incorrectly +- 472878 - “ip maddr show” in IB interface causes a stack corruption +- both patches will be probably in iproute v2.6.28 + +* Thu Dec 4 2008 Marcela Maslanova - 2.6.27-1 +- aead support was included into upstream version +- patch for moving libs is now deprecated +- update to 2.6.27 + +* Tue Aug 12 2008 Marcela Maslanova - 2.6.26-1 +- update to 2.6.26 +- clean patches + +* Tue Jul 22 2008 Marcela Maslanova - 2.6.25-5 +- fix iproute2-2.6.25-segfault.patch + +* Thu Jul 10 2008 Tom "spot" Callaway - 2.6.25-4 +- rebuild for new db4-4.7 + +* Thu Jul 3 2008 Marcela Maslanova - 2.6.25-3 +- 449933 instead of failing strncpy use copying byte after byte + +* Wed May 14 2008 Marcela Maslanova - 2.6.25-2 +- allow replay setting, solve also 444724 + +* Mon Apr 21 2008 Marcela Maslanova - 2.6.25-1 +- update +- remove patch for backward compatibility +- add patch for AEAD compatibility + +* Thu Feb 21 2008 Marcela Maslanova - 2.6.23-4 +- add creating ps file again. Fix was done in texlive + +* Wed Feb 6 2008 Marcela Maslanova - 2.6.23-3 +- rebuild without tetex files. It isn't working in rawhide yet. Added + new source for ps files. +- #431179 backward compatibility for previous iproute versions + +* Mon Jan 21 2008 Marcela Maslanova - 2.6.23-2 +- rebuild with fix tetex and linuxdoc-tools -> manual pdf +- clean unnecessary patches +- add into spec *.so objects, new BR linux-atm-libs-devel + +* Wed Oct 31 2007 Marcela Maslanova - 2.6.23-1 +- new version from upstrem 2.3.23 + +* Tue Oct 23 2007 Marcela Maslanova - 2.6.22-5 +- move files from /usr/lib/tc to /usr/share/tc +- remove listing files twice + +* Fri Aug 31 2007 Marcela Maslanova - 2.6.22-3 +- package review #225903 + +* Mon Aug 27 2007 Jeremy Katz - 2.6.22-2 +- rebuild for new db4 + +* Wed Jul 11 2007 Radek Vokál - 2.6.22-1 +- upgrade to 2.6.22 + +* Mon Mar 19 2007 Radek Vokál - 2.6.20-2 +- fix broken tc-pfifo man page (#232891) + +* Thu Mar 15 2007 Radek Vokál - 2.6.20-1 +- upgrade to 2.6.20 + +* Fri Dec 15 2006 Radek Vokál - 2.6.19-1 +- upgrade to 2.6.19 + +* Mon Dec 11 2006 Radek Vokál - 2.6.18-5 +- fix snapshot version + +* Fri Dec 1 2006 Radek Vokál - 2.6.18-4 +- spec file cleanup +- one more rebuilt against db4 + +* Thu Nov 16 2006 Radek Vokál - 2.6.18-3 +- fix defective manpage for tc-pfifo (#215399) + +* Mon Nov 13 2006 Radek Vokál - 2.6.18-2 +- rebuilt against new db4 + +* Tue Oct 3 2006 Radek Vokal - 2.6.18-1 +- upgrade to upstream 2.6.18 +- initcwnd patch merged +- bug fix for xfrm monitor +- alignment fixes for cris +- documentation corrections + +* Mon Oct 2 2006 Radek Vokal - 2.6.16-7 +- fix ip.8 man page, add initcwnd option + +* Sun Oct 01 2006 Jesse Keating - 2.6.16-6 +- rebuilt for unwind info generation, broken in gcc-4.1.1-21 + +* Tue Sep 19 2006 Radek Vokal - 2.6.16-5 +- fix crash when resolving ip address + +* Mon Aug 21 2006 Radek Vokál - 2.6.16-4 +- add LOWER_UP and DORMANT flags (#202199) +- use dist tag + +* Wed Jul 12 2006 Jesse Keating - 2.6.16-3.1 +- rebuild + +* Mon Jun 26 2006 Radek Vokál - 2.6.16-3 +- improve handling of initcwnd value (#179719) + +* Sun May 28 2006 Radek Vokál - 2.6.16-2 +- fix BuildRequires: flex (#193403) + +* Sun Mar 26 2006 Radek Vokál - 2.6.16-1 +- upgrade to 2.6.16-060323 +- don't hardcode /usr/lib in tc (#186607) + +* Wed Feb 22 2006 Radek Vokál - 2.6.15-2 +- own /usr/lib/tc (#181953) +- obsoletes shapecfg (#182284) + +* Fri Feb 10 2006 Jesse Keating - 2.6.15-1.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 2.6.15-1.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Tue Jan 17 2006 Radek Vokal 2.6.15-1 +- upgrade to 2.6.15-060110 + +* Mon Dec 12 2005 Radek Vokal 2.6.14-11 +- rebuilt + +* Fri Dec 09 2005 Radek Vokal 2.6.14-10 +- remove backup of config files (#175302) + +* Fri Nov 11 2005 Radek Vokal 2.6.14-9 +- use tc manpages and cbq.init from source tarball (#172851) + +* Thu Nov 10 2005 Radek Vokal 2.6.14-8 +- new upstream source + +* Mon Oct 31 2005 Radek Vokal 2.6.14-7 +- add warning to ip tunnel add command (#128107) + +* Fri Oct 07 2005 Bill Nottingham 2.6.14-6 +- update from upstream (appears to fix #170111) + +* Fri Oct 07 2005 Radek Vokal 2.6.14-5 +- update from upstream +- fixed host_len size for memcpy (#168903) + +* Fri Sep 23 2005 Radek Vokal 2.6.14-4 +- add RPM_OPT_FLAGS + +* Mon Sep 19 2005 Radek Vokal 2.6.14-3 +- forget to apply the patch :( + +* Mon Sep 19 2005 Radek Vokal 2.6.14-2 +- make ip help work again (#168449) + +* Wed Sep 14 2005 Radek Vokal 2.6.14-1 +- upgrade to ss050901 for 2.6.14 kernel headers + +* Fri Aug 26 2005 Radek Vokal 2.6.13-3 +- added /sbin/cbq script and sample configuration files (#166301) + +* Fri Aug 19 2005 Radek Vokal 2.6.13-2 +- upgrade to iproute2-050816 + +* Thu Aug 11 2005 Radek Vokal 2.6.13-1 +- update to snapshot for 2.6.13+ kernel + +* Tue May 24 2005 Radek Vokal 2.6.11-2 +- removed useless initvar patch (#150798) +- new upstream source + +* Tue Mar 15 2005 Radek Vokal 2.6.11-1 +- update to iproute-2.6.11 + +* Fri Mar 04 2005 Radek Vokal 2.6.10-2 +- gcc4 rebuilt + +* Wed Feb 16 2005 Radek Vokal 2.6.10-1 +- update to iproute-2.6.10 + +* Thu Dec 23 2004 Radek Vokal 2.6.9-6 +- added arpd into sbin + +* Mon Nov 29 2004 Radek Vokal 2.6.9-5 +- debug info removed from makefile and from spec (#140891) + +* Tue Nov 16 2004 Radek Vokal 2.6.9-4 +- source file updated from snapshot version +- endian patch adding + +* Sat Sep 18 2004 Joshua Blanton 2.6.9-3 +- added installation of netem module for tc + +* Mon Sep 06 2004 Radek Vokal 2.6.9-2 +- fixed possible buffer owerflow, path by Steve Grubb + +* Wed Sep 01 2004 Radek Vokal 2.6.9-1 +- updated to iproute-2.6.9, spec file change, patches cleared + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Wed May 26 2004 Phil Knirsch 2.4.7-16 +- Took tons of manpages from debian, much more complete (#123952). + +* Thu May 06 2004 Phil Knirsch 2.4.7-15 +- rebuilt + +* Thu May 06 2004 Phil Knirsch 2.4.7-13.2 +- Built security errata version for FC1. + +* Wed Apr 21 2004 Phil Knirsch 2.4.7-14 +- Fixed -f option for ss (#118355). +- Small description fix (#110997). +- Added initialization of some vars (#74961). +- Added patch to initialize "default" rule as well (#60693). + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Wed Nov 05 2003 Phil Knirsch 2.4.7-12 +- Security errata for netlink (CAN-2003-0856). + +* Thu Oct 23 2003 Phil Knirsch +- Updated to latest version. Used by other distros, so seems stable. ;-) +- Quite a few patches needed updating in that turn. +- Added ss (#107363) and several other new nifty tools. + +* Tue Jun 17 2003 Phil Knirsch +- rebuilt + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Thu Jan 16 2003 Phil Knirsch 2.4.7-7 +- Added htb3-tc patch from http://luxik.cdi.cz/~devik/qos/htb/ (#75486). + +* Fri Oct 11 2002 Bill Nottingham 2.4.7-6 +- remove flags patch at author's request + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Wed Jun 19 2002 Phil Knirsch 2.4.7-4 +- Don't forcibly strip binaries + +* Mon May 27 2002 Phil Knirsch 2.4.7-3 +- Fixed missing diffserv and atm support in config (#57278). +- Fixed inconsistent numeric base problem for command line (#65473). + +* Tue May 14 2002 Phil Knirsch 2.4.7-2 +- Added patch to fix crosscompiling by Adrian Linkins. + +* Fri Mar 15 2002 Phil Knirsch 2.4.7-1 +- Update to latest stable release 2.4.7-now-ss010824. +- Added simple man page for ip. + +* Wed Aug 8 2001 Bill Nottingham +- allow setting of allmulti & promisc flags (#48669) + +* Mon Jul 02 2001 Than Ngo +- fix build problem in beehive if kernel-sources is not installed + +* Fri May 25 2001 Helge Deller +- updated to iproute2-2.2.4-now-ss001007.tar.gz +- bzip2 source tar file +- "License" replaces "Copyright" +- added "BuildPrereq: tetex-latex tetex-dvips psutils" +- rebuilt for 7.2 + +* Tue May 1 2001 Bill Nottingham +- use the system headers - the included ones are broken +- ETH_P_ECHO went away + +* Sat Jan 6 2001 Jeff Johnson +- test for specific KERNEL_INCLUDE directories. + +* Thu Oct 12 2000 Than Ngo +- rebuild for 7.1 + +* Thu Oct 12 2000 Than Ngo +- add default configuration files for iproute (Bug #10549, #18887) + +* Tue Jul 25 2000 Jakub Jelinek +- fix include-glibc/ to cope with glibc 2.2 new resolver headers + +* Thu Jul 13 2000 Prospector +- automatic rebuild + +* Sun Jun 18 2000 Than Ngo +- rebuilt in the new build environment +- use RPM macros +- handle RPM_OPT_FLAGS + +* Sat Jun 03 2000 Than Ngo +- fix iproute to build with new glibc + +* Fri May 26 2000 Ngo Than +- update to 2.2.4-now-ss000305 +- add configuration files + +* Mon Sep 13 1999 Bill Nottingham +- strip binaries + +* Mon Aug 16 1999 Cristian Gafton +- first build