Compare commits
4 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
962fa90165 | ||
|
|
cfee7312aa | ||
|
|
26727e741e | ||
|
|
beac68c348 |
37 changed files with 3434 additions and 126 deletions
13
.gitignore
vendored
13
.gitignore
vendored
|
|
@ -1,6 +1,7 @@
|
|||
/iproute2-6.8.0.tar.xz
|
||||
/iproute2-6.10.0.tar.xz
|
||||
/iproute2-6.12.0.tar.xz
|
||||
/iproute2-6.14.0.tar.xz
|
||||
/iproute2-6.16.0.tar.xz
|
||||
/iproute2-6.17.0.tar.xz
|
||||
/iproute2-4.18.0.tar.xz
|
||||
/iproute2-4.20.0.tar.xz
|
||||
/iproute2-5.0.0.tar.xz
|
||||
/iproute2-5.1.0.tar.xz
|
||||
/iproute2-5.2.0.tar.xz
|
||||
/iproute2-5.3.0.tar.xz
|
||||
/iproute2-5.4.0.tar.xz
|
||||
|
|
|
|||
43
0001-devlink-allow-full-range-of-resource-sizes.patch
Normal file
43
0001-devlink-allow-full-range-of-resource-sizes.patch
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
From 6304309e2ab98c9125c58f3bcc7e86abcf904f35 Mon Sep 17 00:00:00 2001
|
||||
From: Jakub Kicinski <jakub.kicinski@netronome.com>
|
||||
Date: Tue, 5 Nov 2019 13:17:07 -0800
|
||||
Subject: [PATCH] devlink: allow full range of resource sizes
|
||||
|
||||
Resource size is a 64 bit attribute at netlink level.
|
||||
Make the command line argument 64 bit as well.
|
||||
|
||||
Fixes: 8cd644095842 ("devlink: Add support for devlink resource abstraction")
|
||||
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
|
||||
Acked-by: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: David Ahern <dsahern@gmail.com>
|
||||
(cherry picked from commit c3f69bf923dea50e48564fd520fec6314ddbcf5f)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
devlink/devlink.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/devlink/devlink.c b/devlink/devlink.c
|
||||
index 056ac95ee726f..ebffa8c80ffef 100644
|
||||
--- a/devlink/devlink.c
|
||||
+++ b/devlink/devlink.c
|
||||
@@ -281,7 +281,7 @@ struct dl_opts {
|
||||
bool dpipe_counters_enable;
|
||||
bool eswitch_encap_mode;
|
||||
const char *resource_path;
|
||||
- uint32_t resource_size;
|
||||
+ uint64_t resource_size;
|
||||
uint32_t resource_id;
|
||||
bool resource_id_valid;
|
||||
const char *param_name;
|
||||
@@ -1334,7 +1334,7 @@ static int dl_argv_parse(struct dl *dl, uint64_t o_required,
|
||||
} else if (dl_argv_match(dl, "size") &&
|
||||
(o_all & DL_OPT_RESOURCE_SIZE)) {
|
||||
dl_arg_inc(dl);
|
||||
- err = dl_argv_uint32_t(dl, &opts->resource_size);
|
||||
+ err = dl_argv_uint64_t(dl, &opts->resource_size);
|
||||
if (err)
|
||||
return err;
|
||||
o_found |= DL_OPT_RESOURCE_SIZE;
|
||||
--
|
||||
2.27.0
|
||||
|
||||
35
0002-tc-fix-warning-in-tc-m_ct.c.patch
Normal file
35
0002-tc-fix-warning-in-tc-m_ct.c.patch
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
From fc3fd84e56052c7f29a052f4f903a86feab50fe5 Mon Sep 17 00:00:00 2001
|
||||
From: Brian Vazquez <brianvv@google.com>
|
||||
Date: Tue, 26 Nov 2019 21:19:34 -0800
|
||||
Subject: [PATCH] tc: fix warning in tc/m_ct.c
|
||||
|
||||
Warning was:
|
||||
m_ct.c:370:13: warning: variable 'nat' is used uninitialized whenever
|
||||
'if' condition is false
|
||||
|
||||
Cc: Paul Blakey <paulb@mellanox.com>
|
||||
Fixes: c8a494314c40 ("tc: Introduce tc ct action")
|
||||
Signed-off-by: Brian Vazquez <brianvv@google.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit cad1b0bc5f12be7c3b5a1a4c1b55646a0766c9a8)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
tc/m_ct.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tc/m_ct.c b/tc/m_ct.c
|
||||
index 8df2f61036014..45fa4a8c9ff49 100644
|
||||
--- a/tc/m_ct.c
|
||||
+++ b/tc/m_ct.c
|
||||
@@ -359,7 +359,7 @@ static void ct_print_nat(int ct_action, struct rtattr **tb)
|
||||
{
|
||||
size_t done = 0;
|
||||
char out[256] = "";
|
||||
- bool nat;
|
||||
+ bool nat = false;
|
||||
|
||||
if (!(ct_action & TCA_CT_ACT_NAT))
|
||||
return;
|
||||
--
|
||||
2.27.0
|
||||
|
||||
40
0003-tc-fix-warning-in-tc-q_pie.c.patch
Normal file
40
0003-tc-fix-warning-in-tc-q_pie.c.patch
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
From 4f058d48daf52e9a0bad4a7b2bf8e2a78ecd37a3 Mon Sep 17 00:00:00 2001
|
||||
From: Brian Vazquez <brianvv@google.com>
|
||||
Date: Wed, 4 Dec 2019 13:32:03 -0800
|
||||
Subject: [PATCH] tc: fix warning in tc/q_pie.c
|
||||
|
||||
Warning was:
|
||||
q_pie.c:202:22: error: implicit conversion from 'unsigned long' to
|
||||
'double'
|
||||
|
||||
Fixes: 492ec9558b30 ("tc: pie: change maximum integer value of tc_pie_xstats->prob")
|
||||
Cc: Leslie Monis <lesliemonis@gmail.com>
|
||||
Signed-off-by: Brian Vazquez <brianvv@google.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 908985c6709b6c0673501d61748c080889382d4f)
|
||||
|
||||
Conflicts:
|
||||
* tc/q_pie.c - Change applied manually, conflicts due to missing commit
|
||||
920700a425e51 ("tc: pie: add dq_rate_estimator option").
|
||||
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
tc/q_pie.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tc/q_pie.c b/tc/q_pie.c
|
||||
index 40982f9618783..52ba725614e30 100644
|
||||
--- a/tc/q_pie.c
|
||||
+++ b/tc/q_pie.c
|
||||
@@ -199,7 +199,7 @@ static int pie_print_xstats(struct qdisc_util *qu, FILE *f,
|
||||
st = RTA_DATA(xstats);
|
||||
/*prob is returned as a fracion of maximum integer value */
|
||||
fprintf(f, "prob %f delay %uus avg_dq_rate %u\n",
|
||||
- (double)st->prob / UINT64_MAX, st->delay,
|
||||
+ (double)st->prob / (double)UINT64_MAX, st->delay,
|
||||
st->avg_dq_rate);
|
||||
fprintf(f, "pkts_in %u overlimit %u dropped %u maxq %u ecn_mark %u\n",
|
||||
st->packets_in, st->overlimit, st->dropped, st->maxq,
|
||||
--
|
||||
2.27.0
|
||||
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
From 936a32a7b52175f8fed43651d15cb9b4740e821d Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Date: Mon, 16 Dec 2019 15:43:37 +0900
|
||||
Subject: [PATCH] json_print: Remove declaration without implementation
|
||||
|
||||
Fixes: 6377572f0aa8 ("ip: ip_print: add new API to print JSON or regular format output")
|
||||
Signed-off-by: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 15322f46c3427a7d065b41fc5b0e513755329295)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
include/json_print.h | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/include/json_print.h b/include/json_print.h
|
||||
index fe92d14ca451f..6695654f71947 100644
|
||||
--- a/include/json_print.h
|
||||
+++ b/include/json_print.h
|
||||
@@ -34,8 +34,6 @@ void delete_json_obj(void);
|
||||
|
||||
bool is_json_context(void);
|
||||
|
||||
-void fflush_fp(void);
|
||||
-
|
||||
void open_json_object(const char *str);
|
||||
void close_json_object(void);
|
||||
void open_json_array(enum output_type type, const char *delim);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
32
0005-testsuite-Fix-line-count-test.patch
Normal file
32
0005-testsuite-Fix-line-count-test.patch
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
From dda39d1122c5538247190287b3cc0a42196f9215 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Date: Mon, 16 Dec 2019 15:43:38 +0900
|
||||
Subject: [PATCH] testsuite: Fix line count test
|
||||
|
||||
a substring match is not enough, ex: 10 != 1
|
||||
|
||||
Fixes: 30383b074de1 ("tests: Add output testing")
|
||||
Signed-off-by: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit d88a6a98e86da9446487ecc4f1fea435323ef21d)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
testsuite/lib/generic.sh | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/testsuite/lib/generic.sh b/testsuite/lib/generic.sh
|
||||
index f92260fc40cf3..e909008aa49cb 100644
|
||||
--- a/testsuite/lib/generic.sh
|
||||
+++ b/testsuite/lib/generic.sh
|
||||
@@ -121,7 +121,7 @@ test_on_not()
|
||||
test_lines_count()
|
||||
{
|
||||
echo -n "test on lines count ($1): "
|
||||
- if cat "$STD_OUT" | wc -l | grep -q "$1"
|
||||
+ if [ $(cat "$STD_OUT" | wc -l) -eq "$1" ]
|
||||
then
|
||||
pr_success
|
||||
else
|
||||
--
|
||||
2.27.0
|
||||
|
||||
49
0006-bridge-Fix-typo-in-error-messages.patch
Normal file
49
0006-bridge-Fix-typo-in-error-messages.patch
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
From 07772a2b3ab7d3ca8cd9994bfd2d45d4ddedf33f Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Date: Mon, 16 Dec 2019 15:43:39 +0900
|
||||
Subject: [PATCH] bridge: Fix typo in error messages
|
||||
|
||||
Fixes: 9eff0e5cc447 ("bridge: Add vlan configuration support")
|
||||
Fixes: 7abf5de677e3 ("bridge: vlan: add support to display per-vlan statistics")
|
||||
Signed-off-by: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 43b0b6ec840c27bd9b8d014f338d0235cb2618a0)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
bridge/vlan.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/bridge/vlan.c b/bridge/vlan.c
|
||||
index 6d33b0a990a5e..6dc694b6565b7 100644
|
||||
--- a/bridge/vlan.c
|
||||
+++ b/bridge/vlan.c
|
||||
@@ -576,7 +576,7 @@ static int vlan_show(int argc, char **argv)
|
||||
(compress_vlans ?
|
||||
RTEXT_FILTER_BRVLAN_COMPRESSED :
|
||||
RTEXT_FILTER_BRVLAN)) < 0) {
|
||||
- perror("Cannont send dump request");
|
||||
+ perror("Cannot send dump request");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@@ -601,7 +601,7 @@ static int vlan_show(int argc, char **argv)
|
||||
|
||||
filt_mask = IFLA_STATS_FILTER_BIT(IFLA_STATS_LINK_XSTATS);
|
||||
if (rtnl_statsdump_req_filter(&rth, AF_UNSPEC, filt_mask) < 0) {
|
||||
- perror("Cannont send dump request");
|
||||
+ perror("Cannot send dump request");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@@ -615,7 +615,7 @@ static int vlan_show(int argc, char **argv)
|
||||
|
||||
filt_mask = IFLA_STATS_FILTER_BIT(IFLA_STATS_LINK_XSTATS_SLAVE);
|
||||
if (rtnl_statsdump_req_filter(&rth, AF_UNSPEC, filt_mask) < 0) {
|
||||
- perror("Cannont send slave dump request");
|
||||
+ perror("Cannot send slave dump request");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
||||
44
0007-bridge-Fix-src_vni-argument-in-man-page.patch
Normal file
44
0007-bridge-Fix-src_vni-argument-in-man-page.patch
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
From 038122146f45759893040d7ae648c99ac0058060 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Date: Mon, 16 Dec 2019 15:43:40 +0900
|
||||
Subject: [PATCH] bridge: Fix src_vni argument in man page
|
||||
|
||||
"SRC VNI" is only one argument and should appear as such. Moreover, this
|
||||
argument to the src_vni option is documented under three forms: "SRC_VNI",
|
||||
"SRC VNI" and "VNI" in different places. Consistenly use the simplest form,
|
||||
"VNI".
|
||||
|
||||
Fixes: c5b176e5ba1f ("bridge: fdb: add support for src_vni option")
|
||||
Signed-off-by: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit df1262155c4b3102e6d01ec082ad123377248019)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
man/man8/bridge.8 | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/man/man8/bridge.8 b/man/man8/bridge.8
|
||||
index bb4fb521f8e57..fafdee75e2b36 100644
|
||||
--- a/man/man8/bridge.8
|
||||
+++ b/man/man8/bridge.8
|
||||
@@ -71,7 +71,7 @@ bridge \- show / manipulate bridge addresses and devices
|
||||
.B dst
|
||||
.IR IPADDR " ] [ "
|
||||
.B src_vni
|
||||
-.IR SRC_VNI " ] ["
|
||||
+.IR VNI " ] ["
|
||||
.B vni
|
||||
.IR VNI " ] ["
|
||||
.B port
|
||||
@@ -487,7 +487,7 @@ the IP address of the destination
|
||||
VXLAN tunnel endpoint where the Ethernet MAC ADDRESS resides.
|
||||
|
||||
.TP
|
||||
-.BI src_vni " SRC VNI"
|
||||
+.BI src_vni " VNI"
|
||||
the src VNI Network Identifier (or VXLAN Segment ID)
|
||||
this entry belongs to. Used only when the vxlan device is in
|
||||
external or collect metadata mode. If omitted the value specified at
|
||||
--
|
||||
2.27.0
|
||||
|
||||
53
0008-bridge-Fix-BRIDGE_VLAN_TUNNEL-attribute-sizes.patch
Normal file
53
0008-bridge-Fix-BRIDGE_VLAN_TUNNEL-attribute-sizes.patch
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
From 7787d5f4124cf617eb0726ddf6f0b65af3153c11 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Date: Mon, 16 Dec 2019 15:43:41 +0900
|
||||
Subject: [PATCH] bridge: Fix BRIDGE_VLAN_TUNNEL attribute sizes
|
||||
|
||||
As per the kernel's vlan_tunnel_policy, IFLA_BRIDGE_VLAN_TUNNEL_VID and
|
||||
IFLA_BRIDGE_VLAN_TUNNEL_FLAGS have type NLA_U16.
|
||||
|
||||
Fixes: 8652eeb3ab12 ("bridge: vlan: support for per vlan tunnel info")
|
||||
Signed-off-by: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 1f53ba7297a8b8189fd6853c480de2f6bf9ac787)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
bridge/vlan.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/bridge/vlan.c b/bridge/vlan.c
|
||||
index 6dc694b6565b7..c0294aa6990cb 100644
|
||||
--- a/bridge/vlan.c
|
||||
+++ b/bridge/vlan.c
|
||||
@@ -71,8 +71,8 @@ static int add_tunnel_info(struct nlmsghdr *n, int reqsize,
|
||||
|
||||
tinfo = addattr_nest(n, reqsize, IFLA_BRIDGE_VLAN_TUNNEL_INFO);
|
||||
addattr32(n, reqsize, IFLA_BRIDGE_VLAN_TUNNEL_ID, tun_id);
|
||||
- addattr32(n, reqsize, IFLA_BRIDGE_VLAN_TUNNEL_VID, vid);
|
||||
- addattr32(n, reqsize, IFLA_BRIDGE_VLAN_TUNNEL_FLAGS, flags);
|
||||
+ addattr16(n, reqsize, IFLA_BRIDGE_VLAN_TUNNEL_VID, vid);
|
||||
+ addattr16(n, reqsize, IFLA_BRIDGE_VLAN_TUNNEL_FLAGS, flags);
|
||||
|
||||
addattr_nest_end(n, tinfo);
|
||||
|
||||
@@ -304,7 +304,7 @@ static void print_vlan_tunnel_info(FILE *fp, struct rtattr *tb, int ifindex)
|
||||
|
||||
if (ttb[IFLA_BRIDGE_VLAN_TUNNEL_VID])
|
||||
tunnel_vid =
|
||||
- rta_getattr_u32(ttb[IFLA_BRIDGE_VLAN_TUNNEL_VID]);
|
||||
+ rta_getattr_u16(ttb[IFLA_BRIDGE_VLAN_TUNNEL_VID]);
|
||||
else
|
||||
continue;
|
||||
|
||||
@@ -314,7 +314,7 @@ static void print_vlan_tunnel_info(FILE *fp, struct rtattr *tb, int ifindex)
|
||||
|
||||
if (ttb[IFLA_BRIDGE_VLAN_TUNNEL_FLAGS])
|
||||
tunnel_flags =
|
||||
- rta_getattr_u32(ttb[IFLA_BRIDGE_VLAN_TUNNEL_FLAGS]);
|
||||
+ rta_getattr_u16(ttb[IFLA_BRIDGE_VLAN_TUNNEL_FLAGS]);
|
||||
|
||||
if (!(tunnel_flags & BRIDGE_VLAN_INFO_RANGE_END)) {
|
||||
last_vid_start = tunnel_vid;
|
||||
--
|
||||
2.27.0
|
||||
|
||||
114
0009-bridge-Fix-vni-printing.patch
Normal file
114
0009-bridge-Fix-vni-printing.patch
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
From 198678f2115f2c0f50bea3754116779f5adf6a0b Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Date: Mon, 16 Dec 2019 15:43:42 +0900
|
||||
Subject: [PATCH] bridge: Fix vni printing
|
||||
|
||||
Since commit c7c1a1ef51ae ("bridge: colorize output and use JSON print
|
||||
library"), print_range() is used for vid (16bits) and vni. However, the
|
||||
latter are 32bits so they get truncated. They got truncated even before
|
||||
that commit though.
|
||||
|
||||
Fixes: 8652eeb3ab12 ("bridge: vlan: support for per vlan tunnel info")
|
||||
Signed-off-by: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit dfa13e2273b206419ec0199a11c92122f2e8ea33)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
bridge/vlan.c | 6 +++---
|
||||
testsuite/Makefile | 3 ++-
|
||||
testsuite/lib/generic.sh | 6 +++++-
|
||||
testsuite/tests/bridge/vlan/tunnelshow.t | 24 ++++++++++++++++++++++++
|
||||
4 files changed, 34 insertions(+), 5 deletions(-)
|
||||
create mode 100755 testsuite/tests/bridge/vlan/tunnelshow.t
|
||||
|
||||
diff --git a/bridge/vlan.c b/bridge/vlan.c
|
||||
index c0294aa6990cb..428eeee3c5aef 100644
|
||||
--- a/bridge/vlan.c
|
||||
+++ b/bridge/vlan.c
|
||||
@@ -266,15 +266,15 @@ static void close_vlan_port(void)
|
||||
close_json_object();
|
||||
}
|
||||
|
||||
-static void print_range(const char *name, __u16 start, __u16 id)
|
||||
+static void print_range(const char *name, __u32 start, __u32 id)
|
||||
{
|
||||
char end[64];
|
||||
|
||||
snprintf(end, sizeof(end), "%sEnd", name);
|
||||
|
||||
- print_hu(PRINT_ANY, name, "\t %hu", start);
|
||||
+ print_uint(PRINT_ANY, name, "\t %u", start);
|
||||
if (start != id)
|
||||
- print_hu(PRINT_ANY, end, "-%hu", id);
|
||||
+ print_uint(PRINT_ANY, end, "-%u", id);
|
||||
|
||||
}
|
||||
|
||||
diff --git a/testsuite/Makefile b/testsuite/Makefile
|
||||
index 4451f316910df..fb50f618a3beb 100644
|
||||
--- a/testsuite/Makefile
|
||||
+++ b/testsuite/Makefile
|
||||
@@ -82,7 +82,8 @@ endif
|
||||
TMP_OUT=`mktemp /tmp/tc_testsuite.XXXXXX`; \
|
||||
. $(KENVFN); \
|
||||
STD_ERR="$$TMP_ERR" STD_OUT="$$TMP_OUT" \
|
||||
- TC="$$i/tc/tc" IP="$$i/ip/ip" SS=$$i/misc/ss DEV="$(DEV)" IPVER="$@" SNAME="$$i" \
|
||||
+ TC="$$i/tc/tc" IP="$$i/ip/ip" SS=$$i/misc/ss BRIDGE="$$i/bridge/bridge" \
|
||||
+ DEV="$(DEV)" IPVER="$@" SNAME="$$i" \
|
||||
ERRF="$(RESULTS_DIR)/$@.$$o.err" $(PREFIX) tests/$@ > $(RESULTS_DIR)/$@.$$o.out; \
|
||||
if [ "$$?" = "127" ]; then \
|
||||
printf "\033[1;35mSKIPPED\033[0m\n"; \
|
||||
diff --git a/testsuite/lib/generic.sh b/testsuite/lib/generic.sh
|
||||
index e909008aa49cb..8b339ec175037 100644
|
||||
--- a/testsuite/lib/generic.sh
|
||||
+++ b/testsuite/lib/generic.sh
|
||||
@@ -1,4 +1,3 @@
|
||||
-
|
||||
export DEST="127.0.0.1"
|
||||
|
||||
ts_log()
|
||||
@@ -66,6 +65,11 @@ ts_ss()
|
||||
__ts_cmd "$SS" "$@"
|
||||
}
|
||||
|
||||
+ts_bridge()
|
||||
+{
|
||||
+ __ts_cmd "$BRIDGE" "$@"
|
||||
+}
|
||||
+
|
||||
ts_qdisc_available()
|
||||
{
|
||||
HELPOUT=`$TC qdisc add $1 help 2>&1`
|
||||
diff --git a/testsuite/tests/bridge/vlan/tunnelshow.t b/testsuite/tests/bridge/vlan/tunnelshow.t
|
||||
new file mode 100755
|
||||
index 0000000000000..1583abb92f472
|
||||
--- /dev/null
|
||||
+++ b/testsuite/tests/bridge/vlan/tunnelshow.t
|
||||
@@ -0,0 +1,24 @@
|
||||
+#!/bin/sh
|
||||
+
|
||||
+. lib/generic.sh
|
||||
+
|
||||
+ts_log "[Testing tunnelshow]"
|
||||
+
|
||||
+BR_DEV="$(rand_dev)"
|
||||
+VX_DEV="$(rand_dev)"
|
||||
+
|
||||
+ts_ip "$0" "Add $BR_DEV bridge interface" link add $BR_DEV type bridge
|
||||
+
|
||||
+ts_ip "$0" "Add $VX_DEV vxlan interface" \
|
||||
+ link add $VX_DEV type vxlan dstport 4789 external
|
||||
+ts_ip "$0" "Enslave $VX_DEV under $BR_DEV" \
|
||||
+ link set dev $VX_DEV master $BR_DEV
|
||||
+ts_ip "$0" "Set vlan_tunnel on $VX_DEV" \
|
||||
+ link set dev $VX_DEV type bridge_slave vlan_tunnel on
|
||||
+
|
||||
+ts_bridge "$0" "Add single vlan" vlan add dev $VX_DEV vid 1030
|
||||
+ts_bridge "$0" "Add tunnel with vni > 16k" \
|
||||
+ vlan add dev $VX_DEV vid 1030 tunnel_info id 65556
|
||||
+
|
||||
+ts_bridge "$0" "Show tunnel info" vlan tunnelshow dev $VX_DEV
|
||||
+test_on "1030\s+65556"
|
||||
--
|
||||
2.27.0
|
||||
|
||||
203
0010-bridge-Deduplicate-vlan-show-functions.patch
Normal file
203
0010-bridge-Deduplicate-vlan-show-functions.patch
Normal file
|
|
@ -0,0 +1,203 @@
|
|||
From 20fc76587210e8d03fe753bb039ac2c874fd0a4c Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Date: Mon, 16 Dec 2019 15:43:43 +0900
|
||||
Subject: [PATCH] bridge: Deduplicate vlan show functions
|
||||
|
||||
print_vlan() and print_vlan_tunnel() are almost identical copies, save for
|
||||
a missing newline in the latter which leads to broken output of "vlan
|
||||
tunnelshow" in normal mode.
|
||||
|
||||
Fixes: c7c1a1ef51ae ("bridge: colorize output and use JSON print library")
|
||||
Signed-off-by: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 955a20be027d2ff47b0c6fab3353c85cee614b90)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
bridge/vlan.c | 91 +++++++-----------------
|
||||
testsuite/tests/bridge/vlan/tunnelshow.t | 7 ++
|
||||
2 files changed, 34 insertions(+), 64 deletions(-)
|
||||
|
||||
diff --git a/bridge/vlan.c b/bridge/vlan.c
|
||||
index 428eeee3c5aef..19283bca7c986 100644
|
||||
--- a/bridge/vlan.c
|
||||
+++ b/bridge/vlan.c
|
||||
@@ -16,7 +16,11 @@
|
||||
#include "utils.h"
|
||||
|
||||
static unsigned int filter_index, filter_vlan;
|
||||
-static int show_vlan_tunnel_info = 0;
|
||||
+
|
||||
+enum vlan_show_subject {
|
||||
+ VLAN_SHOW_VLAN,
|
||||
+ VLAN_SHOW_TUNNELINFO,
|
||||
+};
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
@@ -278,7 +282,7 @@ static void print_range(const char *name, __u32 start, __u32 id)
|
||||
|
||||
}
|
||||
|
||||
-static void print_vlan_tunnel_info(FILE *fp, struct rtattr *tb, int ifindex)
|
||||
+static void print_vlan_tunnel_info(struct rtattr *tb, int ifindex)
|
||||
{
|
||||
struct rtattr *i, *list = tb;
|
||||
int rem = RTA_PAYLOAD(list);
|
||||
@@ -347,52 +351,9 @@ static void print_vlan_tunnel_info(FILE *fp, struct rtattr *tb, int ifindex)
|
||||
close_vlan_port();
|
||||
}
|
||||
|
||||
-static int print_vlan_tunnel(struct nlmsghdr *n, void *arg)
|
||||
-{
|
||||
- struct ifinfomsg *ifm = NLMSG_DATA(n);
|
||||
- struct rtattr *tb[IFLA_MAX+1];
|
||||
- int len = n->nlmsg_len;
|
||||
- FILE *fp = arg;
|
||||
-
|
||||
- if (n->nlmsg_type != RTM_NEWLINK) {
|
||||
- fprintf(stderr, "Not RTM_NEWLINK: %08x %08x %08x\n",
|
||||
- n->nlmsg_len, n->nlmsg_type, n->nlmsg_flags);
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- len -= NLMSG_LENGTH(sizeof(*ifm));
|
||||
- if (len < 0) {
|
||||
- fprintf(stderr, "BUG: wrong nlmsg len %d\n", len);
|
||||
- return -1;
|
||||
- }
|
||||
-
|
||||
- if (ifm->ifi_family != AF_BRIDGE)
|
||||
- return 0;
|
||||
-
|
||||
- if (filter_index && filter_index != ifm->ifi_index)
|
||||
- return 0;
|
||||
-
|
||||
- parse_rtattr(tb, IFLA_MAX, IFLA_RTA(ifm), len);
|
||||
-
|
||||
- /* if AF_SPEC isn't there, vlan table is not preset for this port */
|
||||
- if (!tb[IFLA_AF_SPEC]) {
|
||||
- if (!filter_vlan && !is_json_context()) {
|
||||
- color_fprintf(fp, COLOR_IFNAME, "%s",
|
||||
- ll_index_to_name(ifm->ifi_index));
|
||||
- fprintf(fp, "\tNone\n");
|
||||
- }
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- print_vlan_tunnel_info(fp, tb[IFLA_AF_SPEC], ifm->ifi_index);
|
||||
-
|
||||
- fflush(fp);
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
static int print_vlan(struct nlmsghdr *n, void *arg)
|
||||
{
|
||||
- FILE *fp = arg;
|
||||
+ enum vlan_show_subject *subject = arg;
|
||||
struct ifinfomsg *ifm = NLMSG_DATA(n);
|
||||
int len = n->nlmsg_len;
|
||||
struct rtattr *tb[IFLA_MAX+1];
|
||||
@@ -420,17 +381,24 @@ static int print_vlan(struct nlmsghdr *n, void *arg)
|
||||
/* if AF_SPEC isn't there, vlan table is not preset for this port */
|
||||
if (!tb[IFLA_AF_SPEC]) {
|
||||
if (!filter_vlan && !is_json_context()) {
|
||||
- color_fprintf(fp, COLOR_IFNAME, "%s",
|
||||
+ color_fprintf(stdout, COLOR_IFNAME, "%s",
|
||||
ll_index_to_name(ifm->ifi_index));
|
||||
- fprintf(fp, "\tNone\n");
|
||||
+ fprintf(stdout, "\tNone\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
- print_vlan_info(tb[IFLA_AF_SPEC], ifm->ifi_index);
|
||||
+ switch (*subject) {
|
||||
+ case VLAN_SHOW_VLAN:
|
||||
+ print_vlan_info(tb[IFLA_AF_SPEC], ifm->ifi_index);
|
||||
+ break;
|
||||
+ case VLAN_SHOW_TUNNELINFO:
|
||||
+ print_vlan_tunnel_info(tb[IFLA_AF_SPEC], ifm->ifi_index);
|
||||
+ break;
|
||||
+ }
|
||||
print_string(PRINT_FP, NULL, "%s", _SL_);
|
||||
|
||||
- fflush(fp);
|
||||
+ fflush(stdout);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -543,7 +511,7 @@ static int print_vlan_stats(struct nlmsghdr *n, void *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int vlan_show(int argc, char **argv)
|
||||
+static int vlan_show(int argc, char **argv, int subject)
|
||||
{
|
||||
char *filter_dev = NULL;
|
||||
int ret = 0;
|
||||
@@ -581,17 +549,13 @@ static int vlan_show(int argc, char **argv)
|
||||
}
|
||||
|
||||
if (!is_json_context()) {
|
||||
- if (show_vlan_tunnel_info)
|
||||
- printf("port\tvlan ids\ttunnel id\n");
|
||||
- else
|
||||
- printf("port\tvlan ids\n");
|
||||
+ printf("port\tvlan ids");
|
||||
+ if (subject == VLAN_SHOW_TUNNELINFO)
|
||||
+ printf("\ttunnel id");
|
||||
+ printf("\n");
|
||||
}
|
||||
|
||||
- if (show_vlan_tunnel_info)
|
||||
- ret = rtnl_dump_filter(&rth, print_vlan_tunnel,
|
||||
- stdout);
|
||||
- else
|
||||
- ret = rtnl_dump_filter(&rth, print_vlan, stdout);
|
||||
+ ret = rtnl_dump_filter(&rth, print_vlan, &subject);
|
||||
if (ret < 0) {
|
||||
fprintf(stderr, "Dump ternminated\n");
|
||||
exit(1);
|
||||
@@ -677,15 +641,14 @@ int do_vlan(int argc, char **argv)
|
||||
if (matches(*argv, "show") == 0 ||
|
||||
matches(*argv, "lst") == 0 ||
|
||||
matches(*argv, "list") == 0)
|
||||
- return vlan_show(argc-1, argv+1);
|
||||
+ return vlan_show(argc-1, argv+1, VLAN_SHOW_VLAN);
|
||||
if (matches(*argv, "tunnelshow") == 0) {
|
||||
- show_vlan_tunnel_info = 1;
|
||||
- return vlan_show(argc-1, argv+1);
|
||||
+ return vlan_show(argc-1, argv+1, VLAN_SHOW_TUNNELINFO);
|
||||
}
|
||||
if (matches(*argv, "help") == 0)
|
||||
usage();
|
||||
} else {
|
||||
- return vlan_show(0, NULL);
|
||||
+ return vlan_show(0, NULL, VLAN_SHOW_VLAN);
|
||||
}
|
||||
|
||||
fprintf(stderr, "Command \"%s\" is unknown, try \"bridge vlan help\".\n", *argv);
|
||||
diff --git a/testsuite/tests/bridge/vlan/tunnelshow.t b/testsuite/tests/bridge/vlan/tunnelshow.t
|
||||
index 1583abb92f472..b2141e7c5ea4c 100755
|
||||
--- a/testsuite/tests/bridge/vlan/tunnelshow.t
|
||||
+++ b/testsuite/tests/bridge/vlan/tunnelshow.t
|
||||
@@ -16,9 +16,16 @@ ts_ip "$0" "Enslave $VX_DEV under $BR_DEV" \
|
||||
ts_ip "$0" "Set vlan_tunnel on $VX_DEV" \
|
||||
link set dev $VX_DEV type bridge_slave vlan_tunnel on
|
||||
|
||||
+ts_bridge "$0" "Add single vlan" vlan add dev $VX_DEV vid 1000
|
||||
+ts_bridge "$0" "Add single tunnel" \
|
||||
+ vlan add dev $VX_DEV vid 1000 tunnel_info id 1000
|
||||
+ts_bridge "$0" "Add vlan range" vlan add dev $VX_DEV vid 1010-1020
|
||||
+ts_bridge "$0" "Add tunnel range" \
|
||||
+ vlan add dev $VX_DEV vid 1010-1020 tunnel_info id 1010-1020
|
||||
ts_bridge "$0" "Add single vlan" vlan add dev $VX_DEV vid 1030
|
||||
ts_bridge "$0" "Add tunnel with vni > 16k" \
|
||||
vlan add dev $VX_DEV vid 1030 tunnel_info id 65556
|
||||
|
||||
ts_bridge "$0" "Show tunnel info" vlan tunnelshow dev $VX_DEV
|
||||
test_on "1030\s+65556"
|
||||
+test_lines_count 5
|
||||
--
|
||||
2.27.0
|
||||
|
||||
115
0011-bridge-Fix-tunnelshow-json-output.patch
Normal file
115
0011-bridge-Fix-tunnelshow-json-output.patch
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
From 1eaf42ad3be39090c6735f4de37669f38d8ed8eb Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Date: Mon, 16 Dec 2019 15:43:44 +0900
|
||||
Subject: [PATCH] bridge: Fix tunnelshow json output
|
||||
|
||||
repeats for "vlan tunnelshow" what commit 0f36267485e3 ("bridge: fix vlan
|
||||
show formatting") did for "vlan show". This fixes problems in json output.
|
||||
|
||||
Note that the resulting json output format of "vlan tunnelshow" is not the
|
||||
same as the original, introduced in commit 8652eeb3ab12 ("bridge: vlan:
|
||||
support for per vlan tunnel info"). Changes similar to the ones done for
|
||||
"vlan show" in commit 0f36267485e3 ("bridge: fix vlan show formatting") are
|
||||
carried over to "vlan tunnelshow".
|
||||
|
||||
Fixes: c7c1a1ef51ae ("bridge: colorize output and use JSON print library")
|
||||
Fixes: 0f36267485e3 ("bridge: fix vlan show formatting")
|
||||
Signed-off-by: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 1a500c78aef0d4fd33c1700dbfcf435ea2c53847)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
bridge/vlan.c | 27 +++++++-----------------
|
||||
testsuite/tests/bridge/vlan/tunnelshow.t | 2 ++
|
||||
2 files changed, 10 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/bridge/vlan.c b/bridge/vlan.c
|
||||
index 19283bca7c986..205851e4f78ec 100644
|
||||
--- a/bridge/vlan.c
|
||||
+++ b/bridge/vlan.c
|
||||
@@ -256,12 +256,14 @@ static int filter_vlan_check(__u16 vid, __u16 flags)
|
||||
return 1;
|
||||
}
|
||||
|
||||
-static void open_vlan_port(int ifi_index, const char *fmt)
|
||||
+static void open_vlan_port(int ifi_index, const char *fmt,
|
||||
+ enum vlan_show_subject subject)
|
||||
{
|
||||
open_json_object(NULL);
|
||||
print_color_string(PRINT_ANY, COLOR_IFNAME, "ifname", fmt,
|
||||
ll_index_to_name(ifi_index));
|
||||
- open_json_array(PRINT_JSON, "vlans");
|
||||
+ open_json_array(PRINT_JSON,
|
||||
+ subject == VLAN_SHOW_VLAN ? "vlans": "tunnels");
|
||||
}
|
||||
|
||||
static void close_vlan_port(void)
|
||||
@@ -289,10 +291,8 @@ static void print_vlan_tunnel_info(struct rtattr *tb, int ifindex)
|
||||
__u16 last_vid_start = 0;
|
||||
__u32 last_tunid_start = 0;
|
||||
|
||||
- if (!filter_vlan)
|
||||
- open_vlan_port(ifindex, "%s");
|
||||
+ open_vlan_port(ifindex, "%s", VLAN_SHOW_TUNNELINFO);
|
||||
|
||||
- open_json_array(PRINT_JSON, "tunnel");
|
||||
for (i = RTA_DATA(list); RTA_OK(i, rem); i = RTA_NEXT(i, rem)) {
|
||||
struct rtattr *ttb[IFLA_BRIDGE_VLAN_TUNNEL_MAX+1];
|
||||
__u32 tunnel_id = 0;
|
||||
@@ -331,24 +331,13 @@ static void print_vlan_tunnel_info(struct rtattr *tb, int ifindex)
|
||||
else if (vcheck_ret == 0)
|
||||
continue;
|
||||
|
||||
- if (tunnel_flags & BRIDGE_VLAN_INFO_RANGE_BEGIN)
|
||||
- continue;
|
||||
-
|
||||
- if (filter_vlan)
|
||||
- open_vlan_port(ifindex, "%s");
|
||||
-
|
||||
open_json_object(NULL);
|
||||
print_range("vlan", last_vid_start, tunnel_vid);
|
||||
print_range("tunid", last_tunid_start, tunnel_id);
|
||||
close_json_object();
|
||||
-
|
||||
print_string(PRINT_FP, NULL, "%s", _SL_);
|
||||
- if (filter_vlan)
|
||||
- close_vlan_port();
|
||||
}
|
||||
-
|
||||
- if (!filter_vlan)
|
||||
- close_vlan_port();
|
||||
+ close_vlan_port();
|
||||
}
|
||||
|
||||
static int print_vlan(struct nlmsghdr *n, void *arg)
|
||||
@@ -467,7 +456,7 @@ static void print_vlan_stats_attr(struct rtattr *attr, int ifindex)
|
||||
|
||||
/* found vlan stats, first time print the interface name */
|
||||
if (!found_vlan) {
|
||||
- open_vlan_port(ifindex, "%-16s");
|
||||
+ open_vlan_port(ifindex, "%-16s", VLAN_SHOW_VLAN);
|
||||
found_vlan = true;
|
||||
} else {
|
||||
print_string(PRINT_FP, NULL, "%-16s", "");
|
||||
@@ -600,7 +589,7 @@ void print_vlan_info(struct rtattr *tb, int ifindex)
|
||||
int rem = RTA_PAYLOAD(list);
|
||||
__u16 last_vid_start = 0;
|
||||
|
||||
- open_vlan_port(ifindex, "%s");
|
||||
+ open_vlan_port(ifindex, "%s", VLAN_SHOW_VLAN);
|
||||
|
||||
for (i = RTA_DATA(list); RTA_OK(i, rem); i = RTA_NEXT(i, rem)) {
|
||||
struct bridge_vlan_info *vinfo;
|
||||
diff --git a/testsuite/tests/bridge/vlan/tunnelshow.t b/testsuite/tests/bridge/vlan/tunnelshow.t
|
||||
index b2141e7c5ea4c..fd41bfcb32a2b 100755
|
||||
--- a/testsuite/tests/bridge/vlan/tunnelshow.t
|
||||
+++ b/testsuite/tests/bridge/vlan/tunnelshow.t
|
||||
@@ -29,3 +29,5 @@ ts_bridge "$0" "Add tunnel with vni > 16k" \
|
||||
ts_bridge "$0" "Show tunnel info" vlan tunnelshow dev $VX_DEV
|
||||
test_on "1030\s+65556"
|
||||
test_lines_count 5
|
||||
+
|
||||
+ts_bridge "$0" "Dump tunnel info" -j vlan tunnelshow dev $VX_DEV
|
||||
--
|
||||
2.27.0
|
||||
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
From e3da5872ed0cb8180eff30a133e586868411fde3 Mon Sep 17 00:00:00 2001
|
||||
From: Aya Levin <ayal@mellanox.com>
|
||||
Date: Wed, 11 Dec 2019 17:45:34 +0200
|
||||
Subject: [PATCH] devlink: Print health reporter's dump time-stamp in a helper
|
||||
function
|
||||
|
||||
Add pr_out_dump_reporter prefix to the helper function's name and
|
||||
encapsulate the print in it.
|
||||
|
||||
Fixes: 2f1242efe9d0 ("devlink: Add devlink health show command")
|
||||
Signed-off-by: Aya Levin <ayal@mellanox.com>
|
||||
Acked-by: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit f678a2d08e9793fbd5996d206061b94aa3b8d88a)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
devlink/devlink.c | 26 ++++++++++----------------
|
||||
1 file changed, 10 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/devlink/devlink.c b/devlink/devlink.c
|
||||
index ebffa8c80ffef..592e774ea0324 100644
|
||||
--- a/devlink/devlink.c
|
||||
+++ b/devlink/devlink.c
|
||||
@@ -6618,8 +6618,11 @@ static const char *health_state_name(uint8_t state)
|
||||
}
|
||||
}
|
||||
|
||||
-static void format_logtime(uint64_t time_ms, char *ts_date, char *ts_time)
|
||||
+static void pr_out_dump_reporter_format_logtime(struct dl *dl, const struct nlattr *attr)
|
||||
{
|
||||
+ char dump_date[HEALTH_REPORTER_TIMESTAMP_FMT_LEN];
|
||||
+ char dump_time[HEALTH_REPORTER_TIMESTAMP_FMT_LEN];
|
||||
+ uint64_t time_ms = mnl_attr_get_u64(attr);
|
||||
struct sysinfo s_info;
|
||||
struct tm *info;
|
||||
time_t now, sec;
|
||||
@@ -6637,16 +6640,16 @@ static void format_logtime(uint64_t time_ms, char *ts_date, char *ts_time)
|
||||
sec = now - s_info.uptime + time_ms / 1000;
|
||||
info = localtime(&sec);
|
||||
out:
|
||||
- strftime(ts_date, HEALTH_REPORTER_TIMESTAMP_FMT_LEN, "%Y-%m-%d", info);
|
||||
- strftime(ts_time, HEALTH_REPORTER_TIMESTAMP_FMT_LEN, "%H:%M:%S", info);
|
||||
+ strftime(dump_date, HEALTH_REPORTER_TIMESTAMP_FMT_LEN, "%Y-%m-%d", info);
|
||||
+ strftime(dump_time, HEALTH_REPORTER_TIMESTAMP_FMT_LEN, "%H:%M:%S", info);
|
||||
+ pr_out_str(dl, "last_dump_date", dump_date);
|
||||
+ pr_out_str(dl, "last_dump_time", dump_time);
|
||||
}
|
||||
|
||||
static void pr_out_health(struct dl *dl, struct nlattr **tb_health)
|
||||
{
|
||||
struct nlattr *tb[DEVLINK_ATTR_MAX + 1] = {};
|
||||
enum devlink_health_reporter_state state;
|
||||
- const struct nlattr *attr;
|
||||
- uint64_t time_ms;
|
||||
int err;
|
||||
|
||||
err = mnl_attr_parse_nested(tb_health[DEVLINK_ATTR_HEALTH_REPORTER],
|
||||
@@ -6674,17 +6677,8 @@ static void pr_out_health(struct dl *dl, struct nlattr **tb_health)
|
||||
mnl_attr_get_u64(tb[DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT]));
|
||||
pr_out_u64(dl, "recover",
|
||||
mnl_attr_get_u64(tb[DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT]));
|
||||
- if (tb[DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS]) {
|
||||
- char dump_date[HEALTH_REPORTER_TIMESTAMP_FMT_LEN];
|
||||
- char dump_time[HEALTH_REPORTER_TIMESTAMP_FMT_LEN];
|
||||
-
|
||||
- attr = tb[DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS];
|
||||
- time_ms = mnl_attr_get_u64(attr);
|
||||
- format_logtime(time_ms, dump_date, dump_time);
|
||||
-
|
||||
- pr_out_str(dl, "last_dump_date", dump_date);
|
||||
- pr_out_str(dl, "last_dump_time", dump_time);
|
||||
- }
|
||||
+ if (tb[DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS])
|
||||
+ pr_out_dump_reporter_format_logtime(dl, tb[DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS]);
|
||||
if (tb[DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD])
|
||||
pr_out_u64(dl, "grace_period",
|
||||
mnl_attr_get_u64(tb[DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD]));
|
||||
--
|
||||
2.27.0
|
||||
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
From f4879d29863f0696de5673a4ca00b54523c831da Mon Sep 17 00:00:00 2001
|
||||
From: Aya Levin <ayal@mellanox.com>
|
||||
Date: Wed, 11 Dec 2019 17:45:35 +0200
|
||||
Subject: [PATCH] devlink: Add a new time-stamp format for health reporter's
|
||||
dump
|
||||
|
||||
Introduce a new attribute representing a new time-stamp format: current
|
||||
time in ns (to comply with y2038) instead of jiffies. If the new
|
||||
attribute was received, translate the time-stamp accordingly (ns).
|
||||
|
||||
Fixes: 2f1242efe9d0 ("devlink: Add devlink health show command")
|
||||
Signed-off-by: Aya Levin <ayal@mellanox.com>
|
||||
Acked-by: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 746b66b005782dc9621f4fc84d0a1859300a6d01)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
devlink/devlink.c | 23 ++++++++++++++++++++++-
|
||||
1 file changed, 22 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/devlink/devlink.c b/devlink/devlink.c
|
||||
index 592e774ea0324..4a01b0a8f6b88 100644
|
||||
--- a/devlink/devlink.c
|
||||
+++ b/devlink/devlink.c
|
||||
@@ -6646,6 +6646,25 @@ out:
|
||||
pr_out_str(dl, "last_dump_time", dump_time);
|
||||
}
|
||||
|
||||
+static void pr_out_dump_report_timestamp(struct dl *dl, const struct nlattr *attr)
|
||||
+{
|
||||
+ char dump_date[HEALTH_REPORTER_TIMESTAMP_FMT_LEN];
|
||||
+ char dump_time[HEALTH_REPORTER_TIMESTAMP_FMT_LEN];
|
||||
+ time_t tv_sec;
|
||||
+ struct tm *tm;
|
||||
+ uint64_t ts;
|
||||
+
|
||||
+ ts = mnl_attr_get_u64(attr);
|
||||
+ tv_sec = ts / 1000000000;
|
||||
+ tm = localtime(&tv_sec);
|
||||
+
|
||||
+ strftime(dump_date, HEALTH_REPORTER_TIMESTAMP_FMT_LEN, "%Y-%m-%d", tm);
|
||||
+ strftime(dump_time, HEALTH_REPORTER_TIMESTAMP_FMT_LEN, "%H:%M:%S", tm);
|
||||
+
|
||||
+ pr_out_str(dl, "last_dump_date", dump_date);
|
||||
+ pr_out_str(dl, "last_dump_time", dump_time);
|
||||
+}
|
||||
+
|
||||
static void pr_out_health(struct dl *dl, struct nlattr **tb_health)
|
||||
{
|
||||
struct nlattr *tb[DEVLINK_ATTR_MAX + 1] = {};
|
||||
@@ -6677,7 +6696,9 @@ static void pr_out_health(struct dl *dl, struct nlattr **tb_health)
|
||||
mnl_attr_get_u64(tb[DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT]));
|
||||
pr_out_u64(dl, "recover",
|
||||
mnl_attr_get_u64(tb[DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT]));
|
||||
- if (tb[DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS])
|
||||
+ if (tb[DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS])
|
||||
+ pr_out_dump_report_timestamp(dl, tb[DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS]);
|
||||
+ else if (tb[DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS])
|
||||
pr_out_dump_reporter_format_logtime(dl, tb[DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS]);
|
||||
if (tb[DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD])
|
||||
pr_out_u64(dl, "grace_period",
|
||||
--
|
||||
2.27.0
|
||||
|
||||
250
0014-devlink-Fix-fmsg-nesting-in-non-JSON-output.patch
Normal file
250
0014-devlink-Fix-fmsg-nesting-in-non-JSON-output.patch
Normal file
|
|
@ -0,0 +1,250 @@
|
|||
From 7f80e4520b72a6063e5db3f4507ad9f8f90a9176 Mon Sep 17 00:00:00 2001
|
||||
From: Aya Levin <ayal@mellanox.com>
|
||||
Date: Wed, 11 Dec 2019 17:45:36 +0200
|
||||
Subject: [PATCH] devlink: Fix fmsg nesting in non JSON output
|
||||
|
||||
When an object or an array opening follows a name (label), add a new
|
||||
line and indentation before printing the label. When name (label) is
|
||||
followed by a value, print both at the same line.
|
||||
|
||||
Prior to this patch nesting was not visible in a non JSON output:
|
||||
JSON:
|
||||
{
|
||||
"Common config": {
|
||||
"SQ": {
|
||||
"stride size": 64,
|
||||
"size": 1024
|
||||
},
|
||||
"CQ": {
|
||||
"stride size": 64,
|
||||
"size": 1024
|
||||
} },
|
||||
"SQs": [ {
|
||||
"channel ix": 0,
|
||||
"sqn": 10,
|
||||
"HW state": 1,
|
||||
"stopped": false,
|
||||
"cc": 0,
|
||||
"pc": 0,
|
||||
"CQ": {
|
||||
"cqn": 6,
|
||||
"HW status": 0
|
||||
}
|
||||
},{
|
||||
"channel ix": 0,
|
||||
"sqn": 14,
|
||||
"HW state": 1,
|
||||
"stopped": false,
|
||||
"cc": 0,
|
||||
"pc": 0,
|
||||
"CQ": {
|
||||
"cqn": 10,
|
||||
"HW status": 0
|
||||
}
|
||||
} ]
|
||||
}
|
||||
|
||||
Before this patch:
|
||||
Common Config: SQ: stride size: 64 size: 1024
|
||||
CQ: stride size: 64 size: 1024
|
||||
SQs:
|
||||
channel ix: 0 tc: 0 txq ix: 0 sqn: 10 HW state: 1 stopped: false cc: 0 pc: 0 CQ: cqn: 6 HW status: 0
|
||||
channel ix: 1 tc: 0 txq ix: 1 sqn: 14 HW state: 1 stopped: false cc: 0 pc: 0 CQ: cqn: 10 HW status: 0
|
||||
|
||||
With this patch:
|
||||
Common config:
|
||||
SQ:
|
||||
stride size: 64 size: 1024
|
||||
CQ:
|
||||
stride size: 64 size: 1024
|
||||
SQs:
|
||||
channel ix: 0 sqn: 10 HW state: 1 stopped: false cc: 0 pc: 0
|
||||
CQ:
|
||||
cqn: 6 HW status: 0
|
||||
channel ix: 1 sqn: 14 HW state: 1 stopped: false cc: 0 pc: 0
|
||||
CQ:
|
||||
cqn: 10 HW status: 0
|
||||
|
||||
Fixes: 7b8baf834d5e ("devlink: Add devlink health diagnose command")
|
||||
Signed-off-by: Aya Levin <ayal@mellanox.com>
|
||||
Acked-by: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit af646bf95381964187d1128999c3265073609fe3)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
devlink/devlink.c | 106 ++++++++++++++++++++++++++++++++++++++--------
|
||||
1 file changed, 88 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/devlink/devlink.c b/devlink/devlink.c
|
||||
index 4a01b0a8f6b88..9bbc223c12973 100644
|
||||
--- a/devlink/devlink.c
|
||||
+++ b/devlink/devlink.c
|
||||
@@ -6427,12 +6427,23 @@ static int fmsg_value_show(struct dl *dl, int type, struct nlattr *nl_data)
|
||||
return MNL_CB_OK;
|
||||
}
|
||||
|
||||
+static void pr_out_fmsg_name(struct dl *dl, char **name)
|
||||
+{
|
||||
+ if (!*name)
|
||||
+ return;
|
||||
+
|
||||
+ pr_out_name(dl, *name);
|
||||
+ free(*name);
|
||||
+ *name = NULL;
|
||||
+}
|
||||
+
|
||||
struct nest_entry {
|
||||
int attr_type;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
struct fmsg_cb_data {
|
||||
+ char *name;
|
||||
struct dl *dl;
|
||||
uint8_t value_type;
|
||||
struct list_head entry_list;
|
||||
@@ -6462,6 +6473,56 @@ static int cmd_fmsg_nest_queue(struct fmsg_cb_data *fmsg_data,
|
||||
return MNL_CB_OK;
|
||||
}
|
||||
|
||||
+static void pr_out_fmsg_group_start(struct dl *dl, char **name)
|
||||
+{
|
||||
+ __pr_out_newline();
|
||||
+ pr_out_fmsg_name(dl, name);
|
||||
+ __pr_out_newline();
|
||||
+ __pr_out_indent_inc();
|
||||
+}
|
||||
+
|
||||
+static void pr_out_fmsg_group_end(struct dl *dl)
|
||||
+{
|
||||
+ __pr_out_newline();
|
||||
+ __pr_out_indent_dec();
|
||||
+}
|
||||
+
|
||||
+static void pr_out_fmsg_start_object(struct dl *dl, char **name)
|
||||
+{
|
||||
+ if (dl->json_output) {
|
||||
+ pr_out_fmsg_name(dl, name);
|
||||
+ jsonw_start_object(dl->jw);
|
||||
+ } else {
|
||||
+ pr_out_fmsg_group_start(dl, name);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void pr_out_fmsg_end_object(struct dl *dl)
|
||||
+{
|
||||
+ if (dl->json_output)
|
||||
+ jsonw_end_object(dl->jw);
|
||||
+ else
|
||||
+ pr_out_fmsg_group_end(dl);
|
||||
+}
|
||||
+
|
||||
+static void pr_out_fmsg_start_array(struct dl *dl, char **name)
|
||||
+{
|
||||
+ if (dl->json_output) {
|
||||
+ pr_out_fmsg_name(dl, name);
|
||||
+ jsonw_start_array(dl->jw);
|
||||
+ } else {
|
||||
+ pr_out_fmsg_group_start(dl, name);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void pr_out_fmsg_end_array(struct dl *dl)
|
||||
+{
|
||||
+ if (dl->json_output)
|
||||
+ jsonw_end_array(dl->jw);
|
||||
+ else
|
||||
+ pr_out_fmsg_group_end(dl);
|
||||
+}
|
||||
+
|
||||
static int cmd_fmsg_nest(struct fmsg_cb_data *fmsg_data, uint8_t nest_value,
|
||||
bool start)
|
||||
{
|
||||
@@ -6476,26 +6537,17 @@ static int cmd_fmsg_nest(struct fmsg_cb_data *fmsg_data, uint8_t nest_value,
|
||||
switch (value) {
|
||||
case DEVLINK_ATTR_FMSG_OBJ_NEST_START:
|
||||
if (start)
|
||||
- pr_out_entry_start(dl);
|
||||
+ pr_out_fmsg_start_object(dl, &fmsg_data->name);
|
||||
else
|
||||
- pr_out_entry_end(dl);
|
||||
+ pr_out_fmsg_end_object(dl);
|
||||
break;
|
||||
case DEVLINK_ATTR_FMSG_PAIR_NEST_START:
|
||||
break;
|
||||
case DEVLINK_ATTR_FMSG_ARR_NEST_START:
|
||||
- if (dl->json_output) {
|
||||
- if (start)
|
||||
- jsonw_start_array(dl->jw);
|
||||
- else
|
||||
- jsonw_end_array(dl->jw);
|
||||
- } else {
|
||||
- if (start) {
|
||||
- __pr_out_newline();
|
||||
- __pr_out_indent_inc();
|
||||
- } else {
|
||||
- __pr_out_indent_dec();
|
||||
- }
|
||||
- }
|
||||
+ if (start)
|
||||
+ pr_out_fmsg_start_array(dl, &fmsg_data->name);
|
||||
+ else
|
||||
+ pr_out_fmsg_end_array(dl);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
@@ -6533,12 +6585,16 @@ static int cmd_fmsg_object_cb(const struct nlmsghdr *nlh, void *data)
|
||||
return err;
|
||||
break;
|
||||
case DEVLINK_ATTR_FMSG_OBJ_NAME:
|
||||
- pr_out_name(dl, mnl_attr_get_str(nla_object));
|
||||
+ free(fmsg_data->name);
|
||||
+ fmsg_data->name = strdup(mnl_attr_get_str(nla_object));
|
||||
+ if (!fmsg_data->name)
|
||||
+ return -ENOMEM;
|
||||
break;
|
||||
case DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE:
|
||||
fmsg_data->value_type = mnl_attr_get_u8(nla_object);
|
||||
break;
|
||||
case DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA:
|
||||
+ pr_out_fmsg_name(dl, &fmsg_data->name);
|
||||
err = fmsg_value_show(dl, fmsg_data->value_type,
|
||||
nla_object);
|
||||
if (err != MNL_CB_OK)
|
||||
@@ -6551,6 +6607,20 @@ static int cmd_fmsg_object_cb(const struct nlmsghdr *nlh, void *data)
|
||||
return MNL_CB_OK;
|
||||
}
|
||||
|
||||
+static void cmd_fmsg_init(struct dl *dl, struct fmsg_cb_data *data)
|
||||
+{
|
||||
+ /* FMSG is dynamic: opening of an object or array causes a
|
||||
+ * newline. JSON starts with an { or [, but plain text should
|
||||
+ * not start with a new line. Ensure this by setting
|
||||
+ * g_new_line_count to 1: avoiding newline before the first
|
||||
+ * print.
|
||||
+ */
|
||||
+ g_new_line_count = 1;
|
||||
+ data->name = NULL;
|
||||
+ data->dl = dl;
|
||||
+ INIT_LIST_HEAD(&data->entry_list);
|
||||
+}
|
||||
+
|
||||
static int cmd_health_object_common(struct dl *dl, uint8_t cmd, uint16_t flags)
|
||||
{
|
||||
struct fmsg_cb_data data;
|
||||
@@ -6564,9 +6634,9 @@ static int cmd_health_object_common(struct dl *dl, uint8_t cmd, uint16_t flags)
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
- data.dl = dl;
|
||||
- INIT_LIST_HEAD(&data.entry_list);
|
||||
+ cmd_fmsg_init(dl, &data);
|
||||
err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_fmsg_object_cb, &data);
|
||||
+ free(data.name);
|
||||
return err;
|
||||
}
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
||||
45
0015-ip-xfrm-if_id-ve-value-is-error.patch
Normal file
45
0015-ip-xfrm-if_id-ve-value-is-error.patch
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
From 0b3206b57515ed544a4151bd05bb5fb02651bb1b Mon Sep 17 00:00:00 2001
|
||||
From: Antony Antony <antony@phenome.org>
|
||||
Date: Thu, 19 Dec 2019 15:18:03 +0100
|
||||
Subject: [PATCH] ip: xfrm if_id -ve value is error
|
||||
|
||||
if_id is u32, error on -ve values instead of setting to 0
|
||||
|
||||
after :
|
||||
ip link add ipsec1 type xfrm dev lo if_id -10
|
||||
Error: argument "-10" is wrong: if_id value is invalid
|
||||
|
||||
before : note xfrm if_id 0
|
||||
ip link add ipsec1 type xfrm dev lo if_id -10
|
||||
ip -d link show dev ipsec1
|
||||
9: ipsec1@lo: <NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
|
||||
link/none 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 1500
|
||||
xfrm if_id 0 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
|
||||
|
||||
Fixes: 286446c1e8c ("ip: support for xfrm interfaces")
|
||||
Signed-off-by: Antony Antony <antony@phenome.org>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 2cf4d7af72e308fe40acef5788d1890b6b966035)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
ip/link_xfrm.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/ip/link_xfrm.c b/ip/link_xfrm.c
|
||||
index a28f308d56104..7dbfb13f88d68 100644
|
||||
--- a/ip/link_xfrm.c
|
||||
+++ b/ip/link_xfrm.c
|
||||
@@ -37,7 +37,9 @@ static int xfrm_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||
exit(nodev(*argv));
|
||||
} else if (!matches(*argv, "if_id")) {
|
||||
NEXT_ARG();
|
||||
- if (!get_u32(&if_id, *argv, 0))
|
||||
+ if (get_u32(&if_id, *argv, 0))
|
||||
+ invarg("if_id value is invalid", *argv);
|
||||
+ else
|
||||
addattr32(n, 1024, IFLA_XFRM_IF_ID, if_id);
|
||||
} else {
|
||||
xfrm_print_help(lu, argc, argv, stderr);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
43
0016-tc-fq_codel-fix-missing-statistic-in-JSON-output.patch
Normal file
43
0016-tc-fq_codel-fix-missing-statistic-in-JSON-output.patch
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
From dd3c87f75ca1ef88384ce3f0e301763569bba89f Mon Sep 17 00:00:00 2001
|
||||
From: Leslie Monis <lesliemonis@gmail.com>
|
||||
Date: Thu, 26 Dec 2019 00:34:18 +0530
|
||||
Subject: [PATCH] tc: fq_codel: fix missing statistic in JSON output
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Print JSON object even if tc_fq_codel_xstats->class_stats.drop_next
|
||||
is negative.
|
||||
|
||||
Cc: Toke Høiland-Jørgensen <toke@toke.dk>
|
||||
Fixes: 997f2dc19378 ("tc: Add JSON output of fq_codel stats")
|
||||
Signed-off-by: Leslie Monis <lesliemonis@gmail.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit e819d3a03dd19ed3dd0f50bd128f62f972e8240f)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
tc/q_fq_codel.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tc/q_fq_codel.c b/tc/q_fq_codel.c
|
||||
index 376ac50da1a5d..d002940da6b78 100644
|
||||
--- a/tc/q_fq_codel.c
|
||||
+++ b/tc/q_fq_codel.c
|
||||
@@ -275,12 +275,12 @@ static int fq_codel_print_xstats(struct qdisc_util *qu, FILE *f,
|
||||
sprint_time(st->class_stats.ldelay, b1));
|
||||
if (st->class_stats.dropping) {
|
||||
print_bool(PRINT_ANY, "dropping", " dropping", true);
|
||||
+ print_int(PRINT_JSON, "drop_next", NULL,
|
||||
+ st->class_stats.drop_next);
|
||||
if (st->class_stats.drop_next < 0)
|
||||
print_string(PRINT_FP, NULL, " drop_next -%s",
|
||||
sprint_time(-st->class_stats.drop_next, b1));
|
||||
else {
|
||||
- print_uint(PRINT_JSON, "drop_next", NULL,
|
||||
- st->class_stats.drop_next);
|
||||
print_string(PRINT_FP, NULL, " drop_next %s",
|
||||
sprint_time(st->class_stats.drop_next, b1));
|
||||
}
|
||||
--
|
||||
2.27.0
|
||||
|
||||
59
0017-ip-fix-link-type-and-vlan-oneline-output.patch
Normal file
59
0017-ip-fix-link-type-and-vlan-oneline-output.patch
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
From 0b58868630b873209f0aed7116470174acdfa3f4 Mon Sep 17 00:00:00 2001
|
||||
From: Vladis Dronov <vdronov@redhat.com>
|
||||
Date: Sun, 19 Jan 2020 02:12:51 +0100
|
||||
Subject: [PATCH] ip: fix link type and vlan oneline output
|
||||
|
||||
Move link type printing in print_linkinfo() so multiline output does not
|
||||
break link options line. Add oneline support for vlan's ingress and egress
|
||||
qos maps.
|
||||
|
||||
Before the fix:
|
||||
|
||||
5: veth90.4000@veth90: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
|
||||
link/ether 26:9a:05:af:db:00 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 0 maxmtu 65535
|
||||
vlan protocol 802.1Q id 4000 <REORDER_HDR> the option line is broken ^^^
|
||||
ingress-qos-map { 1:2 }
|
||||
egress-qos-map { 2:1 } addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
|
||||
|
||||
5: veth90.4000@veth90: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000\ link/ether 26:9a:05:af:db:00 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 0 maxmtu 65535 \ vlan protocol 802.1Q id 4000 <REORDER_HDR>
|
||||
ingress-qos-map { 1:2 } <<< a multiline output despite -oneline
|
||||
egress-qos-map { 2:1 } addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
|
||||
|
||||
After the fix:
|
||||
|
||||
5: veth90.4000@veth90: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
|
||||
link/ether 26:9a:05:af:db:00 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 0 maxmtu 65535 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
|
||||
vlan protocol 802.1Q id 4000 <REORDER_HDR>
|
||||
ingress-qos-map { 1:2 }
|
||||
egress-qos-map { 2:1 }
|
||||
|
||||
5: veth90.4000@veth90: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000\ link/ether 26:9a:05:af:db:00 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 0 maxmtu 65535 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 \ vlan protocol 802.1Q id 4000 <REORDER_HDR> \ ingress-qos-map { 1:2 } \ egress-qos-map { 2:1 }
|
||||
|
||||
Fixes: 5c302d518f10 ("vlan support")
|
||||
Link: https://bugzilla.kernel.org/show_bug.cgi?id=206241
|
||||
Reported-by: George Shuklin <george.shuklin@gmail.com>
|
||||
Signed-off-by: Vladis Dronov <vdronov@redhat.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 970db267a0fb5036b28b2d9d4f53cb4be267ffd5)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
ip/iplink_vlan.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/ip/iplink_vlan.c b/ip/iplink_vlan.c
|
||||
index 0dfb4a8d536ca..1e6817f5de3d2 100644
|
||||
--- a/ip/iplink_vlan.c
|
||||
+++ b/ip/iplink_vlan.c
|
||||
@@ -183,7 +183,8 @@ static void vlan_print_map(FILE *f,
|
||||
int rem;
|
||||
|
||||
open_json_array(PRINT_JSON, name_json);
|
||||
- print_string(PRINT_FP, NULL, "\n %s { ", name_fp);
|
||||
+ print_nl();
|
||||
+ print_string(PRINT_FP, NULL, " %s { ", name_fp);
|
||||
|
||||
rem = RTA_PAYLOAD(attr);
|
||||
for (i = RTA_DATA(attr); RTA_OK(i, rem); i = RTA_NEXT(i, rem)) {
|
||||
--
|
||||
2.27.0
|
||||
|
||||
101
0018-ip-xfrm-Fix-help-messages.patch
Normal file
101
0018-ip-xfrm-Fix-help-messages.patch
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
From f3f38b7d189675c37d04876b23ba6d38bbded5e1 Mon Sep 17 00:00:00 2001
|
||||
From: Andrea Claudi <aclaudi@redhat.com>
|
||||
Date: Wed, 29 Jan 2020 15:56:40 +0100
|
||||
Subject: [PATCH] ip-xfrm: Fix help messages
|
||||
|
||||
After commit 8589eb4efdf2a ("treewide: refactor help messages") help
|
||||
messages for xfrm state and policy are broken, printing many times the
|
||||
same protocol in UPSPEC section:
|
||||
|
||||
$ ip xfrm state help
|
||||
[...]
|
||||
UPSPEC := proto { { tcp | tcp | tcp | tcp } [ sport PORT ] [ dport PORT ] |
|
||||
{ icmp | icmp | icmp } [ type NUMBER ] [ code NUMBER ] |
|
||||
gre [ key { DOTTED-QUAD | NUMBER } ] | PROTO }
|
||||
|
||||
This happens because strxf_proto function is non-reentrant and gets called
|
||||
multiple times in the same fprintf instruction.
|
||||
|
||||
This commit fix the issue avoiding calls to strxf_proto() with a constant
|
||||
param, just hardcoding strings for protocol names.
|
||||
|
||||
Fixes: 8589eb4efdf2a ("treewide: refactor help messages")
|
||||
Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 38dd041bfe773e481ebf9c8250e49c665af2e215)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
ip/xfrm_policy.c | 21 +++------------------
|
||||
ip/xfrm_state.c | 24 +++---------------------
|
||||
2 files changed, 6 insertions(+), 39 deletions(-)
|
||||
|
||||
diff --git a/ip/xfrm_policy.c b/ip/xfrm_policy.c
|
||||
index 7c0233c182902..d3c706d3225f0 100644
|
||||
--- a/ip/xfrm_policy.c
|
||||
+++ b/ip/xfrm_policy.c
|
||||
@@ -66,24 +66,9 @@ static void usage(void)
|
||||
"Usage: ip xfrm policy count\n"
|
||||
"Usage: ip xfrm policy set [ hthresh4 LBITS RBITS ] [ hthresh6 LBITS RBITS ]\n"
|
||||
"SELECTOR := [ src ADDR[/PLEN] ] [ dst ADDR[/PLEN] ] [ dev DEV ] [ UPSPEC ]\n"
|
||||
- "UPSPEC := proto { { ");
|
||||
- fprintf(stderr, "%s | %s | %s | %s } ",
|
||||
- strxf_proto(IPPROTO_TCP),
|
||||
- strxf_proto(IPPROTO_UDP),
|
||||
- strxf_proto(IPPROTO_SCTP),
|
||||
- strxf_proto(IPPROTO_DCCP));
|
||||
- fprintf(stderr,
|
||||
- "[ sport PORT ] [ dport PORT ] |\n"
|
||||
- " { %s | %s | %s } ",
|
||||
- strxf_proto(IPPROTO_ICMP),
|
||||
- strxf_proto(IPPROTO_ICMPV6),
|
||||
- strxf_proto(IPPROTO_MH));
|
||||
- fprintf(stderr,
|
||||
- "[ type NUMBER ] [ code NUMBER ] |\n"
|
||||
- " %s",
|
||||
- strxf_proto(IPPROTO_GRE));
|
||||
- fprintf(stderr,
|
||||
- " [ key { DOTTED-QUAD | NUMBER } ] | PROTO }\n"
|
||||
+ "UPSPEC := proto { { tcp | udp | sctp | dccp } [ sport PORT ] [ dport PORT ] |\n"
|
||||
+ " { icmp | ipv6-icmp | mobility-header } [ type NUMBER ] [ code NUMBER ] |\n"
|
||||
+ " gre [ key { DOTTED-QUAD | NUMBER } ] | PROTO }\n"
|
||||
"DIR := in | out | fwd\n"
|
||||
"PTYPE := main | sub\n"
|
||||
"ACTION := allow | block\n"
|
||||
diff --git a/ip/xfrm_state.c b/ip/xfrm_state.c
|
||||
index b03ccc5807e90..7b413cd9b9a22 100644
|
||||
--- a/ip/xfrm_state.c
|
||||
+++ b/ip/xfrm_state.c
|
||||
@@ -106,27 +106,9 @@ static void usage(void)
|
||||
"EXTRA-FLAG-LIST := [ EXTRA-FLAG-LIST ] EXTRA-FLAG\n"
|
||||
"EXTRA-FLAG := dont-encap-dscp\n"
|
||||
"SELECTOR := [ src ADDR[/PLEN] ] [ dst ADDR[/PLEN] ] [ dev DEV ] [ UPSPEC ]\n"
|
||||
- "UPSPEC := proto { { ");
|
||||
- fprintf(stderr,
|
||||
- "%s | %s | %s | %s",
|
||||
- strxf_proto(IPPROTO_TCP),
|
||||
- strxf_proto(IPPROTO_UDP),
|
||||
- strxf_proto(IPPROTO_SCTP),
|
||||
- strxf_proto(IPPROTO_DCCP));
|
||||
- fprintf(stderr,
|
||||
- " } [ sport PORT ] [ dport PORT ] |\n"
|
||||
- " { ");
|
||||
- fprintf(stderr,
|
||||
- "%s | %s | %s",
|
||||
- strxf_proto(IPPROTO_ICMP),
|
||||
- strxf_proto(IPPROTO_ICMPV6),
|
||||
- strxf_proto(IPPROTO_MH));
|
||||
- fprintf(stderr,
|
||||
- " } [ type NUMBER ] [ code NUMBER ] |\n");
|
||||
- fprintf(stderr,
|
||||
- " %s", strxf_proto(IPPROTO_GRE));
|
||||
- fprintf(stderr,
|
||||
- " [ key { DOTTED-QUAD | NUMBER } ] | PROTO }\n"
|
||||
+ "UPSPEC := proto { { tcp | udp | sctp | dccp } [ sport PORT ] [ dport PORT ] |\n"
|
||||
+ " { icmp | ipv6-icmp | mobility-header } [ type NUMBER ] [ code NUMBER ] |\n"
|
||||
+ " gre [ key { DOTTED-QUAD | NUMBER } ] | PROTO }\n"
|
||||
"LIMIT-LIST := [ LIMIT-LIST ] limit LIMIT\n"
|
||||
"LIMIT := { time-soft | time-hard | time-use-soft | time-use-hard } SECONDS |\n"
|
||||
" { byte-soft | byte-hard } SIZE | { packet-soft | packet-hard } COUNT\n"
|
||||
--
|
||||
2.27.0
|
||||
|
||||
33
0019-ip-link-xstats-fix-TX-IGMP-reports-string.patch
Normal file
33
0019-ip-link-xstats-fix-TX-IGMP-reports-string.patch
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
From e7b786e573c31a2a2578cb6da37309828a469355 Mon Sep 17 00:00:00 2001
|
||||
From: Andrea Claudi <aclaudi@redhat.com>
|
||||
Date: Wed, 29 Jan 2020 15:31:11 +0100
|
||||
Subject: [PATCH] ip link: xstats: fix TX IGMP reports string
|
||||
|
||||
This restore the string format we have before jsonification, adding a
|
||||
missing space between v2 and v3 on TX IGMP reports string.
|
||||
|
||||
Fixes: a9bc23a79227a ("ip: bridge: add xstats json support")
|
||||
Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 5cdeb77cd6ec26f0a7103dfb21494a6a43903206)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
ip/iplink_bridge.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
|
||||
index 06f736d4dc710..868ea6e266ebe 100644
|
||||
--- a/ip/iplink_bridge.c
|
||||
+++ b/ip/iplink_bridge.c
|
||||
@@ -742,7 +742,7 @@ static void bridge_print_stats_attr(struct rtattr *attr, int ifindex)
|
||||
print_string(PRINT_FP, NULL, "%-16s ", "");
|
||||
print_u64(PRINT_ANY, "tx_v1", "TX: v1 %llu ",
|
||||
mstats->igmp_v1reports[BR_MCAST_DIR_TX]);
|
||||
- print_u64(PRINT_ANY, "tx_v2", "v2 %llu",
|
||||
+ print_u64(PRINT_ANY, "tx_v2", "v2 %llu ",
|
||||
mstats->igmp_v2reports[BR_MCAST_DIR_TX]);
|
||||
print_u64(PRINT_ANY, "tx_v3", "v3 %llu\n",
|
||||
mstats->igmp_v3reports[BR_MCAST_DIR_TX]);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
46
0020-devlink-fix-warning-from-unchecked-write.patch
Normal file
46
0020-devlink-fix-warning-from-unchecked-write.patch
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
From 245ea7ad77e299a2aee98c6d91678f4243e08f40 Mon Sep 17 00:00:00 2001
|
||||
From: Stephen Hemminger <stephen@networkplumber.org>
|
||||
Date: Sun, 2 Feb 2020 04:20:58 -0800
|
||||
Subject: [PATCH] devlink: fix warning from unchecked write
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Warning seen on Ubuntu
|
||||
|
||||
devlink.c: In function ‘cmd_dev_flash’:
|
||||
devlink.c:3071:3: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
|
||||
3071 | write(pipe_w, &err, sizeof(err));
|
||||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Fixes: 9b13cddfe268 ("devlink: implement flash status monitoring")
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 8f9f2b9cdfbd1c7988542d81db1db854d48f2b0d)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
devlink/devlink.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/devlink/devlink.c b/devlink/devlink.c
|
||||
index 9bbc223c12973..9d6a3cd14bc26 100644
|
||||
--- a/devlink/devlink.c
|
||||
+++ b/devlink/devlink.c
|
||||
@@ -3074,11 +3074,13 @@ static int cmd_dev_flash(struct dl *dl)
|
||||
/* In child, just execute the flash and pass returned
|
||||
* value through pipe once it is done.
|
||||
*/
|
||||
+ int cc;
|
||||
+
|
||||
close(pipe_r);
|
||||
err = _mnlg_socket_send(dl->nlg, nlh);
|
||||
- write(pipe_w, &err, sizeof(err));
|
||||
+ cc = write(pipe_w, &err, sizeof(err));
|
||||
close(pipe_w);
|
||||
- exit(0);
|
||||
+ exit(cc != sizeof(err));
|
||||
}
|
||||
close(pipe_w);
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
||||
61
0021-erspan-set-erspan_ver-to-1-by-default.patch
Normal file
61
0021-erspan-set-erspan_ver-to-1-by-default.patch
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
From a17b512a6a706906b559a5b9a1b52507a976862b Mon Sep 17 00:00:00 2001
|
||||
From: Xin Long <lucien.xin@gmail.com>
|
||||
Date: Tue, 18 Feb 2020 11:50:20 +0800
|
||||
Subject: [PATCH] erspan: set erspan_ver to 1 by default
|
||||
|
||||
Commit 289763626721 ("erspan: add erspan version II support")
|
||||
breaks the command:
|
||||
|
||||
# ip link add erspan1 type erspan key 1 seq erspan 123 \
|
||||
local 10.1.0.2 remote 10.1.0.1
|
||||
|
||||
as erspan_ver is set to 0 by default, then IFLA_GRE_ERSPAN_INDEX
|
||||
won't be set in gre_parse_opt().
|
||||
|
||||
# ip -d link show erspan1
|
||||
...
|
||||
erspan remote 10.1.0.1 local 10.1.0.2 ... erspan_index 0 erspan_ver 1
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
This patch is to change to set erspan_ver to 1 by default.
|
||||
|
||||
Fixes: 289763626721 ("erspan: add erspan version II support")
|
||||
Signed-off-by: Xin Long <lucien.xin@gmail.com>
|
||||
Acked-by: William Tu <u9012063@gmail.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 83c543af872e38654326671f6b504257d98c4489)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
ip/link_gre.c | 2 +-
|
||||
ip/link_gre6.c | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/ip/link_gre.c b/ip/link_gre.c
|
||||
index 15beb737217e8..e42f21ae4556c 100644
|
||||
--- a/ip/link_gre.c
|
||||
+++ b/ip/link_gre.c
|
||||
@@ -94,7 +94,7 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||
__u8 metadata = 0;
|
||||
__u32 fwmark = 0;
|
||||
__u32 erspan_idx = 0;
|
||||
- __u8 erspan_ver = 0;
|
||||
+ __u8 erspan_ver = 1;
|
||||
__u8 erspan_dir = 0;
|
||||
__u16 erspan_hwid = 0;
|
||||
|
||||
diff --git a/ip/link_gre6.c b/ip/link_gre6.c
|
||||
index 9d1741bff8a16..94a4ee700431c 100644
|
||||
--- a/ip/link_gre6.c
|
||||
+++ b/ip/link_gre6.c
|
||||
@@ -106,7 +106,7 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||
__u8 metadata = 0;
|
||||
__u32 fwmark = 0;
|
||||
__u32 erspan_idx = 0;
|
||||
- __u8 erspan_ver = 0;
|
||||
+ __u8 erspan_ver = 1;
|
||||
__u8 erspan_dir = 0;
|
||||
__u16 erspan_hwid = 0;
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
From 2e0e4bf6638fb7d24da17c4a09fc2a1df79579c5 Mon Sep 17 00:00:00 2001
|
||||
From: Xin Long <lucien.xin@gmail.com>
|
||||
Date: Mon, 24 Feb 2020 09:57:01 -0500
|
||||
Subject: [PATCH] xfrm: not try to delete ipcomp states when using deleteall
|
||||
|
||||
In kernel space, ipcomp(sub) states used by main states are not
|
||||
allowed to be deleted by users, they would be freed only when
|
||||
all main states are destroyed and no one uses them.
|
||||
|
||||
In user space, ip xfrm sta deleteall doesn't filter these ipcomp
|
||||
states out, and it causes errors:
|
||||
|
||||
# ip xfrm state add src 192.168.0.1 dst 192.168.0.2 spi 0x1000 \
|
||||
proto comp comp deflate mode tunnel sel src 192.168.0.1 dst \
|
||||
192.168.0.2 proto gre
|
||||
# ip xfrm sta deleteall
|
||||
Failed to send delete-all request
|
||||
: Operation not permitted
|
||||
|
||||
This patch is to fix it by filtering ipcomp states with a check
|
||||
xsinfo->id.proto == IPPROTO_IPIP.
|
||||
|
||||
Fixes: c7699875bee0 ("Import patch ipxfrm-20040707_2.diff")
|
||||
Signed-off-by: Xin Long <lucien.xin@gmail.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit f9d696cf414c2c475764aa3b29cf288350f1e21f)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
ip/xfrm_state.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/ip/xfrm_state.c b/ip/xfrm_state.c
|
||||
index 7b413cd9b9a22..d014444e9af4f 100644
|
||||
--- a/ip/xfrm_state.c
|
||||
+++ b/ip/xfrm_state.c
|
||||
@@ -1131,6 +1131,9 @@ static int xfrm_state_keep(struct nlmsghdr *n, void *arg)
|
||||
if (!xfrm_state_filter_match(xsinfo))
|
||||
return 0;
|
||||
|
||||
+ if (xsinfo->id.proto == IPPROTO_IPIP)
|
||||
+ return 0;
|
||||
+
|
||||
if (xb->offset > xb->size) {
|
||||
fprintf(stderr, "State buffer overflow\n");
|
||||
return -1;
|
||||
--
|
||||
2.27.0
|
||||
|
||||
41
0023-nexthop-fix-error-reporting-in-filter-dump.patch
Normal file
41
0023-nexthop-fix-error-reporting-in-filter-dump.patch
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
From 81bd99800256801a8cca965ff3689dbcd71a336f Mon Sep 17 00:00:00 2001
|
||||
From: Andrea Claudi <aclaudi@redhat.com>
|
||||
Date: Tue, 10 Mar 2020 13:15:17 +0100
|
||||
Subject: [PATCH] nexthop: fix error reporting in filter dump
|
||||
|
||||
nh_dump_filter is missing a return value check in two cases.
|
||||
Fix this simply adding an assignment to the proper variable.
|
||||
|
||||
Fixes: 63df8e8543b03 ("Add support for nexthop objects")
|
||||
Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
|
||||
Reviewed-by: David Ahern <dsahern@gmail.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit d9b868436a6fce8986560178c6d1a78072e21861)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
ip/ipnexthop.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/ip/ipnexthop.c b/ip/ipnexthop.c
|
||||
index 9f860c8cea251..99f89630ed189 100644
|
||||
--- a/ip/ipnexthop.c
|
||||
+++ b/ip/ipnexthop.c
|
||||
@@ -59,13 +59,13 @@ static int nh_dump_filter(struct nlmsghdr *nlh, int reqlen)
|
||||
}
|
||||
|
||||
if (filter.groups) {
|
||||
- addattr_l(nlh, reqlen, NHA_GROUPS, NULL, 0);
|
||||
+ err = addattr_l(nlh, reqlen, NHA_GROUPS, NULL, 0);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (filter.master) {
|
||||
- addattr32(nlh, reqlen, NHA_MASTER, filter.master);
|
||||
+ err = addattr32(nlh, reqlen, NHA_MASTER, filter.master);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
--
|
||||
2.27.0
|
||||
|
||||
121
0024-ip-link_gre-Do-not-send-ERSPAN-attributes-to-GRE-tun.patch
Normal file
121
0024-ip-link_gre-Do-not-send-ERSPAN-attributes-to-GRE-tun.patch
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
From 2ffe12bb7de9805d4ab2f0c0f9614d00f9f82dc2 Mon Sep 17 00:00:00 2001
|
||||
From: Petr Machata <petrm@mellanox.com>
|
||||
Date: Sat, 4 Apr 2020 01:55:34 +0300
|
||||
Subject: [PATCH] ip: link_gre: Do not send ERSPAN attributes to GRE tunnels
|
||||
|
||||
In the commit referenced below, ip link started sending ERSPAN-specific
|
||||
attributes even for GRE and gretap tunnels. Fix by more carefully
|
||||
distinguishing between the GRE/tap and ERSPAN modes. Do not show
|
||||
ERSPAN-related help in GRE/tap mode, likewise do not accept ERSPAN
|
||||
arguments, or send ERSPAN attributes.
|
||||
|
||||
Fixes: 83c543af872e ("erspan: set erspan_ver to 1 by default")
|
||||
Signed-off-by: Petr Machata <petrm@mellanox.com>
|
||||
Acked-by: William Tu <u9012063@gmail.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 20927e0525e0cca165cd1252ac18da07cb082c4d)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
ip/link_gre.c | 34 ++++++++++++++++++++++------------
|
||||
1 file changed, 22 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/ip/link_gre.c b/ip/link_gre.c
|
||||
index e42f21ae4556c..d616a970e9a28 100644
|
||||
--- a/ip/link_gre.c
|
||||
+++ b/ip/link_gre.c
|
||||
@@ -23,8 +23,15 @@
|
||||
#include "ip_common.h"
|
||||
#include "tunnel.h"
|
||||
|
||||
+static bool gre_is_erspan(struct link_util *lu)
|
||||
+{
|
||||
+ return !strcmp(lu->id, "erspan");
|
||||
+}
|
||||
+
|
||||
static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE *f)
|
||||
{
|
||||
+ bool is_erspan = gre_is_erspan(lu);
|
||||
+
|
||||
fprintf(f,
|
||||
"Usage: ... %-9s [ remote ADDR ]\n"
|
||||
" [ local ADDR ]\n"
|
||||
@@ -44,18 +51,20 @@ static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE *f)
|
||||
" [ encap-dport PORT ]\n"
|
||||
" [ [no]encap-csum ]\n"
|
||||
" [ [no]encap-csum6 ]\n"
|
||||
- " [ [no]encap-remcsum ]\n"
|
||||
- " [ erspan_ver version ]\n"
|
||||
- " [ erspan IDX ]\n"
|
||||
- " [ erspan_dir { ingress | egress } ]\n"
|
||||
- " [ erspan_hwid hwid ]\n"
|
||||
+ " [ [no]encap-remcsum ]\n", lu->id);
|
||||
+ if (is_erspan)
|
||||
+ fprintf(f,
|
||||
+ " [ erspan_ver version ]\n"
|
||||
+ " [ erspan IDX ]\n"
|
||||
+ " [ erspan_dir { ingress | egress } ]\n"
|
||||
+ " [ erspan_hwid hwid ]\n");
|
||||
+ fprintf(f,
|
||||
"\n"
|
||||
"Where: ADDR := { IP_ADDRESS | any }\n"
|
||||
" TOS := { NUMBER | inherit }\n"
|
||||
" TTL := { 1..255 | inherit }\n"
|
||||
" KEY := { DOTTED_QUAD | NUMBER }\n"
|
||||
- " MARK := { 0x0..0xffffffff }\n",
|
||||
- lu->id);
|
||||
+ " MARK := { 0x0..0xffffffff }\n");
|
||||
}
|
||||
|
||||
static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||
@@ -93,6 +102,7 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||
__u16 encapdport = 0;
|
||||
__u8 metadata = 0;
|
||||
__u32 fwmark = 0;
|
||||
+ bool is_erspan = gre_is_erspan(lu);
|
||||
__u32 erspan_idx = 0;
|
||||
__u8 erspan_ver = 1;
|
||||
__u8 erspan_dir = 0;
|
||||
@@ -334,19 +344,19 @@ get_failed:
|
||||
NEXT_ARG();
|
||||
if (get_u32(&fwmark, *argv, 0))
|
||||
invarg("invalid fwmark\n", *argv);
|
||||
- } else if (strcmp(*argv, "erspan") == 0) {
|
||||
+ } else if (is_erspan && strcmp(*argv, "erspan") == 0) {
|
||||
NEXT_ARG();
|
||||
if (get_u32(&erspan_idx, *argv, 0))
|
||||
invarg("invalid erspan index\n", *argv);
|
||||
if (erspan_idx & ~((1<<20) - 1) || erspan_idx == 0)
|
||||
invarg("erspan index must be > 0 and <= 20-bit\n", *argv);
|
||||
- } else if (strcmp(*argv, "erspan_ver") == 0) {
|
||||
+ } else if (is_erspan && strcmp(*argv, "erspan_ver") == 0) {
|
||||
NEXT_ARG();
|
||||
if (get_u8(&erspan_ver, *argv, 0))
|
||||
invarg("invalid erspan version\n", *argv);
|
||||
if (erspan_ver != 1 && erspan_ver != 2)
|
||||
invarg("erspan version must be 1 or 2\n", *argv);
|
||||
- } else if (strcmp(*argv, "erspan_dir") == 0) {
|
||||
+ } else if (is_erspan && strcmp(*argv, "erspan_dir") == 0) {
|
||||
NEXT_ARG();
|
||||
if (matches(*argv, "ingress") == 0)
|
||||
erspan_dir = 0;
|
||||
@@ -354,7 +364,7 @@ get_failed:
|
||||
erspan_dir = 1;
|
||||
else
|
||||
invarg("Invalid erspan direction.", *argv);
|
||||
- } else if (strcmp(*argv, "erspan_hwid") == 0) {
|
||||
+ } else if (is_erspan && strcmp(*argv, "erspan_hwid") == 0) {
|
||||
NEXT_ARG();
|
||||
if (get_u16(&erspan_hwid, *argv, 0))
|
||||
invarg("invalid erspan hwid\n", *argv);
|
||||
@@ -402,7 +412,7 @@ get_failed:
|
||||
addattr32(n, 1024, IFLA_GRE_LINK, link);
|
||||
addattr_l(n, 1024, IFLA_GRE_TTL, &ttl, 1);
|
||||
addattr32(n, 1024, IFLA_GRE_FWMARK, fwmark);
|
||||
- if (erspan_ver) {
|
||||
+ if (is_erspan) {
|
||||
addattr8(n, 1024, IFLA_GRE_ERSPAN_VER, erspan_ver);
|
||||
if (erspan_ver == 1 && erspan_idx != 0) {
|
||||
addattr32(n, 1024, IFLA_GRE_ERSPAN_INDEX, erspan_idx);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
33
0025-tc-fq_codel-fix-class-stat-deficit-is-signed-int.patch
Normal file
33
0025-tc-fq_codel-fix-class-stat-deficit-is-signed-int.patch
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
From 67a2a5552508a09f27f4e6206cb91e52fd07ded3 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Lee <ben@b1c1l1.com>
|
||||
Date: Tue, 14 Apr 2020 21:11:12 -0700
|
||||
Subject: [PATCH] tc: fq_codel: fix class stat deficit is signed int
|
||||
|
||||
The fq_codel class stat deficit is a signed int. This is a regression
|
||||
from when JSON output was added.
|
||||
|
||||
Fixes: 997f2dc19378 ("tc: Add JSON output of fq_codel stats")
|
||||
Signed-off-by: Benjamin Lee <ben@b1c1l1.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit f03ad792f3cdef5ade92392db6710441b35b47dd)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
tc/q_fq_codel.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tc/q_fq_codel.c b/tc/q_fq_codel.c
|
||||
index d002940da6b78..009eee42d4af9 100644
|
||||
--- a/tc/q_fq_codel.c
|
||||
+++ b/tc/q_fq_codel.c
|
||||
@@ -263,7 +263,7 @@ static int fq_codel_print_xstats(struct qdisc_util *qu, FILE *f,
|
||||
st->qdisc_stats.old_flows_len);
|
||||
}
|
||||
if (st->type == TCA_FQ_CODEL_XSTATS_CLASS) {
|
||||
- print_uint(PRINT_ANY, "deficit", " deficit %u",
|
||||
+ print_int(PRINT_ANY, "deficit", " deficit %d",
|
||||
st->class_stats.deficit);
|
||||
print_uint(PRINT_ANY, "count", " count %u",
|
||||
st->class_stats.count);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
46
0026-xfrm-also-check-for-ipv6-state-in-xfrm_state_keep.patch
Normal file
46
0026-xfrm-also-check-for-ipv6-state-in-xfrm_state_keep.patch
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
From 297a05e145a4e7ab14b5391b369825ce0acd0c01 Mon Sep 17 00:00:00 2001
|
||||
From: Xin Long <lucien.xin@gmail.com>
|
||||
Date: Mon, 27 Apr 2020 15:14:24 +0800
|
||||
Subject: [PATCH] xfrm: also check for ipv6 state in xfrm_state_keep
|
||||
|
||||
As commit f9d696cf414c ("xfrm: not try to delete ipcomp states when using
|
||||
deleteall") does, this patch is to fix the same issue for ip6 state where
|
||||
xsinfo->id.proto == IPPROTO_IPV6.
|
||||
|
||||
# ip xfrm state add src 2000::1 dst 2000::2 spi 0x1000 \
|
||||
proto comp comp deflate mode tunnel sel src 2000::1 dst \
|
||||
2000::2 proto gre
|
||||
# ip xfrm sta deleteall
|
||||
Failed to send delete-all request
|
||||
: Operation not permitted
|
||||
|
||||
Note that the xsinfo->proto in common states can never be IPPROTO_IPV6.
|
||||
|
||||
Fixes: f9d696cf414c ("xfrm: not try to delete ipcomp states when using deleteall")
|
||||
Reported-by: Xiumei Mu <xmu@redhat.com>
|
||||
Signed-off-by: Xin Long <lucien.xin@gmail.com>
|
||||
Acked-by: Andrea Claudi <aclaudi@redhat.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit d27fc6390ce32ecdba6324e22b1c341791c5c63f)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
ip/xfrm_state.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/ip/xfrm_state.c b/ip/xfrm_state.c
|
||||
index d014444e9af4f..44f08ceed24dd 100644
|
||||
--- a/ip/xfrm_state.c
|
||||
+++ b/ip/xfrm_state.c
|
||||
@@ -1131,7 +1131,8 @@ static int xfrm_state_keep(struct nlmsghdr *n, void *arg)
|
||||
if (!xfrm_state_filter_match(xsinfo))
|
||||
return 0;
|
||||
|
||||
- if (xsinfo->id.proto == IPPROTO_IPIP)
|
||||
+ if (xsinfo->id.proto == IPPROTO_IPIP ||
|
||||
+ xsinfo->id.proto == IPPROTO_IPV6)
|
||||
return 0;
|
||||
|
||||
if (xb->offset > xb->size) {
|
||||
--
|
||||
2.27.0
|
||||
|
||||
30
0027-bridge-Fix-typo.patch
Normal file
30
0027-bridge-Fix-typo.patch
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
From ac24381e460e944064f80999ad76f3e4e0528e08 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Date: Fri, 1 May 2020 17:47:16 +0900
|
||||
Subject: [PATCH] bridge: Fix typo
|
||||
|
||||
Fixes: 7abf5de677e3 ("bridge: vlan: add support to display per-vlan statistics")
|
||||
Signed-off-by: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 91b1b49ed3934eb423308130bb3365a0afebf5af)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
bridge/vlan.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/bridge/vlan.c b/bridge/vlan.c
|
||||
index 205851e4f78ec..24dffa1084014 100644
|
||||
--- a/bridge/vlan.c
|
||||
+++ b/bridge/vlan.c
|
||||
@@ -546,7 +546,7 @@ static int vlan_show(int argc, char **argv, int subject)
|
||||
|
||||
ret = rtnl_dump_filter(&rth, print_vlan, &subject);
|
||||
if (ret < 0) {
|
||||
- fprintf(stderr, "Dump ternminated\n");
|
||||
+ fprintf(stderr, "Dump terminated\n");
|
||||
exit(1);
|
||||
}
|
||||
} else {
|
||||
--
|
||||
2.27.0
|
||||
|
||||
210
0028-bridge-Fix-output-with-empty-vlan-lists.patch
Normal file
210
0028-bridge-Fix-output-with-empty-vlan-lists.patch
Normal file
|
|
@ -0,0 +1,210 @@
|
|||
From 966466bb7b2d54f37516ff4a171fa3e2241b7381 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Date: Fri, 1 May 2020 17:47:17 +0900
|
||||
Subject: [PATCH] bridge: Fix output with empty vlan lists
|
||||
|
||||
Consider this configuration:
|
||||
|
||||
ip link add br0 type bridge
|
||||
ip link add vx0 type vxlan dstport 4789 external
|
||||
ip link set dev vx0 master br0
|
||||
bridge vlan del vid 1 dev vx0
|
||||
ip link add vx1 type vxlan dstport 4790 external
|
||||
ip link set dev vx1 master br0
|
||||
|
||||
root@vsid:/src/iproute2# ./bridge/bridge vlan
|
||||
port vlan-id
|
||||
br0 1 PVID Egress Untagged
|
||||
|
||||
vx0 None
|
||||
vx1 1 PVID Egress Untagged
|
||||
|
||||
root@vsid:/src/iproute2#
|
||||
|
||||
Note the useless and inconsistent empty lines.
|
||||
|
||||
root@vsid:/src/iproute2# ./bridge/bridge vlan tunnelshow
|
||||
port vlan-id tunnel-id
|
||||
br0
|
||||
vx0 None
|
||||
vx1
|
||||
|
||||
What's the difference between "None" and ""?
|
||||
|
||||
root@vsid:/src/iproute2# ./bridge/bridge -j -p vlan tunnelshow
|
||||
[ {
|
||||
"ifname": "br0",
|
||||
"tunnels": [ ]
|
||||
},{
|
||||
"ifname": "vx1",
|
||||
"tunnels": [ ]
|
||||
} ]
|
||||
|
||||
Why does vx0 appear in normal output and not json output?
|
||||
Why output an empty list for br0 and vx1?
|
||||
|
||||
Fix these inconsistencies and avoid outputting entries with no values. This
|
||||
makes the behavior consistent with other iproute2 commands, for example
|
||||
`ip -6 addr`: if an interface doesn't have any ipv6 addresses, it is not
|
||||
part of the listing.
|
||||
|
||||
Fixes: 8652eeb3ab12 ("bridge: vlan: support for per vlan tunnel info")
|
||||
Signed-off-by: Benjamin Poirier <bpoirier@cumulusnetworks.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit b262a9becbcb9d0816b7953fd223dd9a7add8e12)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
bridge/vlan.c | 36 +++++++++++++-----------
|
||||
testsuite/tests/bridge/vlan/show.t | 30 ++++++++++++++++++++
|
||||
testsuite/tests/bridge/vlan/tunnelshow.t | 2 +-
|
||||
3 files changed, 50 insertions(+), 18 deletions(-)
|
||||
create mode 100755 testsuite/tests/bridge/vlan/show.t
|
||||
|
||||
diff --git a/bridge/vlan.c b/bridge/vlan.c
|
||||
index 24dffa1084014..c1e28ba082b9e 100644
|
||||
--- a/bridge/vlan.c
|
||||
+++ b/bridge/vlan.c
|
||||
@@ -290,8 +290,7 @@ static void print_vlan_tunnel_info(struct rtattr *tb, int ifindex)
|
||||
int rem = RTA_PAYLOAD(list);
|
||||
__u16 last_vid_start = 0;
|
||||
__u32 last_tunid_start = 0;
|
||||
-
|
||||
- open_vlan_port(ifindex, "%s", VLAN_SHOW_TUNNELINFO);
|
||||
+ bool opened = false;
|
||||
|
||||
for (i = RTA_DATA(list); RTA_OK(i, rem); i = RTA_NEXT(i, rem)) {
|
||||
struct rtattr *ttb[IFLA_BRIDGE_VLAN_TUNNEL_MAX+1];
|
||||
@@ -331,13 +330,20 @@ static void print_vlan_tunnel_info(struct rtattr *tb, int ifindex)
|
||||
else if (vcheck_ret == 0)
|
||||
continue;
|
||||
|
||||
+ if (!opened) {
|
||||
+ open_vlan_port(ifindex, "%s", VLAN_SHOW_TUNNELINFO);
|
||||
+ opened = true;
|
||||
+ }
|
||||
+
|
||||
open_json_object(NULL);
|
||||
print_range("vlan", last_vid_start, tunnel_vid);
|
||||
print_range("tunid", last_tunid_start, tunnel_id);
|
||||
close_json_object();
|
||||
print_string(PRINT_FP, NULL, "%s", _SL_);
|
||||
}
|
||||
- close_vlan_port();
|
||||
+
|
||||
+ if (opened)
|
||||
+ close_vlan_port();
|
||||
}
|
||||
|
||||
static int print_vlan(struct nlmsghdr *n, void *arg)
|
||||
@@ -366,16 +372,8 @@ static int print_vlan(struct nlmsghdr *n, void *arg)
|
||||
return 0;
|
||||
|
||||
parse_rtattr(tb, IFLA_MAX, IFLA_RTA(ifm), len);
|
||||
-
|
||||
- /* if AF_SPEC isn't there, vlan table is not preset for this port */
|
||||
- if (!tb[IFLA_AF_SPEC]) {
|
||||
- if (!filter_vlan && !is_json_context()) {
|
||||
- color_fprintf(stdout, COLOR_IFNAME, "%s",
|
||||
- ll_index_to_name(ifm->ifi_index));
|
||||
- fprintf(stdout, "\tNone\n");
|
||||
- }
|
||||
+ if (!tb[IFLA_AF_SPEC])
|
||||
return 0;
|
||||
- }
|
||||
|
||||
switch (*subject) {
|
||||
case VLAN_SHOW_VLAN:
|
||||
@@ -385,9 +383,7 @@ static int print_vlan(struct nlmsghdr *n, void *arg)
|
||||
print_vlan_tunnel_info(tb[IFLA_AF_SPEC], ifm->ifi_index);
|
||||
break;
|
||||
}
|
||||
- print_string(PRINT_FP, NULL, "%s", _SL_);
|
||||
|
||||
- fflush(stdout);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -588,8 +584,7 @@ void print_vlan_info(struct rtattr *tb, int ifindex)
|
||||
struct rtattr *i, *list = tb;
|
||||
int rem = RTA_PAYLOAD(list);
|
||||
__u16 last_vid_start = 0;
|
||||
-
|
||||
- open_vlan_port(ifindex, "%s", VLAN_SHOW_VLAN);
|
||||
+ bool opened = false;
|
||||
|
||||
for (i = RTA_DATA(list); RTA_OK(i, rem); i = RTA_NEXT(i, rem)) {
|
||||
struct bridge_vlan_info *vinfo;
|
||||
@@ -608,6 +603,11 @@ void print_vlan_info(struct rtattr *tb, int ifindex)
|
||||
else if (vcheck_ret == 0)
|
||||
continue;
|
||||
|
||||
+ if (!opened) {
|
||||
+ open_vlan_port(ifindex, "%s", VLAN_SHOW_VLAN);
|
||||
+ opened = true;
|
||||
+ }
|
||||
+
|
||||
open_json_object(NULL);
|
||||
print_range("vlan", last_vid_start, vinfo->vid);
|
||||
|
||||
@@ -615,7 +615,9 @@ void print_vlan_info(struct rtattr *tb, int ifindex)
|
||||
close_json_object();
|
||||
print_string(PRINT_FP, NULL, "%s", _SL_);
|
||||
}
|
||||
- close_vlan_port();
|
||||
+
|
||||
+ if (opened)
|
||||
+ close_vlan_port();
|
||||
}
|
||||
|
||||
int do_vlan(int argc, char **argv)
|
||||
diff --git a/testsuite/tests/bridge/vlan/show.t b/testsuite/tests/bridge/vlan/show.t
|
||||
new file mode 100755
|
||||
index 0000000000000..3def202226a47
|
||||
--- /dev/null
|
||||
+++ b/testsuite/tests/bridge/vlan/show.t
|
||||
@@ -0,0 +1,30 @@
|
||||
+#!/bin/sh
|
||||
+
|
||||
+. lib/generic.sh
|
||||
+
|
||||
+ts_log "[Testing vlan show]"
|
||||
+
|
||||
+BR_DEV="$(rand_dev)"
|
||||
+VX0_DEV="$(rand_dev)"
|
||||
+VX1_DEV="$(rand_dev)"
|
||||
+
|
||||
+ts_ip "$0" "Add $BR_DEV bridge interface" link add $BR_DEV type bridge
|
||||
+
|
||||
+ts_ip "$0" "Add $VX0_DEV vxlan interface" \
|
||||
+ link add $VX0_DEV type vxlan dstport 4789 external
|
||||
+ts_ip "$0" "Enslave $VX0_DEV under $BR_DEV" \
|
||||
+ link set dev $VX0_DEV master $BR_DEV
|
||||
+ts_bridge "$0" "Delete default vlan from $VX0_DEV" \
|
||||
+ vlan del dev $VX0_DEV vid 1
|
||||
+ts_ip "$0" "Add $VX1_DEV vxlan interface" \
|
||||
+ link add $VX1_DEV type vxlan dstport 4790 external
|
||||
+ts_ip "$0" "Enslave $VX1_DEV under $BR_DEV" \
|
||||
+ link set dev $VX1_DEV master $BR_DEV
|
||||
+
|
||||
+# Test that bridge ports without vlans do not appear in the output
|
||||
+ts_bridge "$0" "Show vlan" vlan
|
||||
+test_on_not "$VX0_DEV"
|
||||
+
|
||||
+# Test that bridge ports without tunnels do not appear in the output
|
||||
+ts_bridge "$0" "Show vlan tunnel info" vlan tunnelshow
|
||||
+test_lines_count 1 # header only
|
||||
diff --git a/testsuite/tests/bridge/vlan/tunnelshow.t b/testsuite/tests/bridge/vlan/tunnelshow.t
|
||||
index fd41bfcb32a2b..3e9c12a21a9cc 100755
|
||||
--- a/testsuite/tests/bridge/vlan/tunnelshow.t
|
||||
+++ b/testsuite/tests/bridge/vlan/tunnelshow.t
|
||||
@@ -28,6 +28,6 @@ ts_bridge "$0" "Add tunnel with vni > 16k" \
|
||||
|
||||
ts_bridge "$0" "Show tunnel info" vlan tunnelshow dev $VX_DEV
|
||||
test_on "1030\s+65556"
|
||||
-test_lines_count 5
|
||||
+test_lines_count 4
|
||||
|
||||
ts_bridge "$0" "Dump tunnel info" -j vlan tunnelshow dev $VX_DEV
|
||||
--
|
||||
2.27.0
|
||||
|
||||
60
0029-tc-action-fix-time-values-output-in-JSON-format.patch
Normal file
60
0029-tc-action-fix-time-values-output-in-JSON-format.patch
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
From 79f92b4d8920686c2ca32431bdb8096bc9921d32 Mon Sep 17 00:00:00 2001
|
||||
From: Roman Mashak <mrv@mojatatu.com>
|
||||
Date: Tue, 19 May 2020 20:59:44 -0400
|
||||
Subject: [PATCH] tc: action: fix time values output in JSON format
|
||||
|
||||
Report tcf_t values in seconds, not jiffies, in JSON format as it is now
|
||||
for stdout.
|
||||
|
||||
v2: use PRINT_ANY, drop the useless casts and fix the style (Stephen Hemminger)
|
||||
|
||||
Fixes: 2704bd625583 ("tc: jsonify actions core")
|
||||
Cc: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: Roman Mashak <mrv@mojatatu.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit db35e411ec17bf9da67f22f995fe1e8d5edcda98)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
tc/tc_util.c | 26 +++++++++++---------------
|
||||
1 file changed, 11 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/tc/tc_util.c b/tc/tc_util.c
|
||||
index 393721e33bf0e..18cde3ab86df1 100644
|
||||
--- a/tc/tc_util.c
|
||||
+++ b/tc/tc_util.c
|
||||
@@ -745,21 +745,17 @@ void print_tm(FILE *f, const struct tcf_t *tm)
|
||||
{
|
||||
int hz = get_user_hz();
|
||||
|
||||
- if (tm->install != 0) {
|
||||
- print_uint(PRINT_JSON, "installed", NULL, tm->install);
|
||||
- print_uint(PRINT_FP, NULL, " installed %u sec",
|
||||
- (unsigned int)(tm->install/hz));
|
||||
- }
|
||||
- if (tm->lastuse != 0) {
|
||||
- print_uint(PRINT_JSON, "last_used", NULL, tm->lastuse);
|
||||
- print_uint(PRINT_FP, NULL, " used %u sec",
|
||||
- (unsigned int)(tm->lastuse/hz));
|
||||
- }
|
||||
- if (tm->expires != 0) {
|
||||
- print_uint(PRINT_JSON, "expires", NULL, tm->expires);
|
||||
- print_uint(PRINT_FP, NULL, " expires %u sec",
|
||||
- (unsigned int)(tm->expires/hz));
|
||||
- }
|
||||
+ if (tm->install != 0)
|
||||
+ print_uint(PRINT_ANY, "installed", " installed %u sec",
|
||||
+ tm->install / hz);
|
||||
+
|
||||
+ if (tm->lastuse != 0)
|
||||
+ print_uint(PRINT_ANY, "last_used", " used %u sec",
|
||||
+ tm->lastuse / hz);
|
||||
+
|
||||
+ if (tm->expires != 0)
|
||||
+ print_uint(PRINT_ANY, "expires", " expires %u sec",
|
||||
+ tm->expires / hz);
|
||||
}
|
||||
|
||||
static void print_tcstats_basic_hw(struct rtattr **tbs, char *prefix)
|
||||
--
|
||||
2.27.0
|
||||
|
||||
337
0030-Revert-bpf-replace-snprintf-with-asprintf-when-deali.patch
Normal file
337
0030-Revert-bpf-replace-snprintf-with-asprintf-when-deali.patch
Normal file
|
|
@ -0,0 +1,337 @@
|
|||
From b15ad0affd67e135680c99edc2eb5f178ab2c310 Mon Sep 17 00:00:00 2001
|
||||
From: Andrea Claudi <aclaudi@redhat.com>
|
||||
Date: Tue, 26 May 2020 18:04:10 +0200
|
||||
Subject: [PATCH] Revert "bpf: replace snprintf with asprintf when dealing with
|
||||
long buffers"
|
||||
|
||||
This reverts commit c0325b06382cb4f7ebfaf80c29c8800d74666fd9.
|
||||
It introduces a segfault in bpf_make_custom_path() when custom pinning is used.
|
||||
|
||||
This happens because asprintf allocates exactly the space needed to hold a
|
||||
string in the buffer passed as its first argument, but if this buffer is later
|
||||
used in strcat() or similar we have a buffer overrun.
|
||||
|
||||
As the aim of commit c0325b06382c is simply to fix a compiler warning, it
|
||||
seems safe and reasonable to revert it.
|
||||
|
||||
Fixes: c0325b06382c ("bpf: replace snprintf with asprintf when dealing with long buffers")
|
||||
Reported-by: Jamal Hadi Salim <jhs@mojatatu.com>
|
||||
Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 358abfe004a30bf3ed353c7f5dbc6afaf4212ecf)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
lib/bpf.c | 155 ++++++++++++++----------------------------------------
|
||||
1 file changed, 39 insertions(+), 116 deletions(-)
|
||||
|
||||
diff --git a/lib/bpf.c b/lib/bpf.c
|
||||
index 10cf9bf44419a..23cb0d96a85ba 100644
|
||||
--- a/lib/bpf.c
|
||||
+++ b/lib/bpf.c
|
||||
@@ -406,21 +406,13 @@ static int bpf_derive_elf_map_from_fdinfo(int fd, struct bpf_elf_map *map,
|
||||
struct bpf_map_ext *ext)
|
||||
{
|
||||
unsigned int val, owner_type = 0, owner_jited = 0;
|
||||
- char *file = NULL;
|
||||
- char buff[4096];
|
||||
+ char file[PATH_MAX], buff[4096];
|
||||
FILE *fp;
|
||||
- int ret;
|
||||
|
||||
- ret = asprintf(&file, "/proc/%d/fdinfo/%d", getpid(), fd);
|
||||
- if (ret < 0) {
|
||||
- fprintf(stderr, "asprintf failed: %s\n", strerror(errno));
|
||||
- free(file);
|
||||
- return ret;
|
||||
- }
|
||||
+ snprintf(file, sizeof(file), "/proc/%d/fdinfo/%d", getpid(), fd);
|
||||
memset(map, 0, sizeof(*map));
|
||||
|
||||
fp = fopen(file, "r");
|
||||
- free(file);
|
||||
if (!fp) {
|
||||
fprintf(stderr, "No procfs support?!\n");
|
||||
return -EIO;
|
||||
@@ -608,9 +600,8 @@ int bpf_trace_pipe(void)
|
||||
0,
|
||||
};
|
||||
int fd_in, fd_out = STDERR_FILENO;
|
||||
- char *tpipe = NULL;
|
||||
+ char tpipe[PATH_MAX];
|
||||
const char *mnt;
|
||||
- int ret;
|
||||
|
||||
mnt = bpf_find_mntpt("tracefs", TRACEFS_MAGIC, tracefs_mnt,
|
||||
sizeof(tracefs_mnt), tracefs_known_mnts);
|
||||
@@ -619,15 +610,9 @@ int bpf_trace_pipe(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
- ret = asprintf(&tpipe, "%s/trace_pipe", mnt);
|
||||
- if (ret < 0) {
|
||||
- fprintf(stderr, "asprintf failed: %s\n", strerror(errno));
|
||||
- free(tpipe);
|
||||
- return ret;
|
||||
- }
|
||||
+ snprintf(tpipe, sizeof(tpipe), "%s/trace_pipe", mnt);
|
||||
|
||||
fd_in = open(tpipe, O_RDONLY);
|
||||
- free(tpipe);
|
||||
if (fd_in < 0)
|
||||
return -1;
|
||||
|
||||
@@ -648,50 +633,37 @@ int bpf_trace_pipe(void)
|
||||
|
||||
static int bpf_gen_global(const char *bpf_sub_dir)
|
||||
{
|
||||
- char *bpf_glo_dir = NULL;
|
||||
+ char bpf_glo_dir[PATH_MAX];
|
||||
int ret;
|
||||
|
||||
- ret = asprintf(&bpf_glo_dir, "%s/%s/", bpf_sub_dir, BPF_DIR_GLOBALS);
|
||||
- if (ret < 0) {
|
||||
- fprintf(stderr, "asprintf failed: %s\n", strerror(errno));
|
||||
- goto out;
|
||||
- }
|
||||
+ snprintf(bpf_glo_dir, sizeof(bpf_glo_dir), "%s/%s/",
|
||||
+ bpf_sub_dir, BPF_DIR_GLOBALS);
|
||||
|
||||
ret = mkdir(bpf_glo_dir, S_IRWXU);
|
||||
if (ret && errno != EEXIST) {
|
||||
fprintf(stderr, "mkdir %s failed: %s\n", bpf_glo_dir,
|
||||
strerror(errno));
|
||||
- goto out;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
- ret = 0;
|
||||
-out:
|
||||
- free(bpf_glo_dir);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int bpf_gen_master(const char *base, const char *name)
|
||||
{
|
||||
- char *bpf_sub_dir = NULL;
|
||||
+ char bpf_sub_dir[PATH_MAX + NAME_MAX + 1];
|
||||
int ret;
|
||||
|
||||
- ret = asprintf(&bpf_sub_dir, "%s%s/", base, name);
|
||||
- if (ret < 0) {
|
||||
- fprintf(stderr, "asprintf failed: %s\n", strerror(errno));
|
||||
- goto out;
|
||||
- }
|
||||
+ snprintf(bpf_sub_dir, sizeof(bpf_sub_dir), "%s%s/", base, name);
|
||||
|
||||
ret = mkdir(bpf_sub_dir, S_IRWXU);
|
||||
if (ret && errno != EEXIST) {
|
||||
fprintf(stderr, "mkdir %s failed: %s\n", bpf_sub_dir,
|
||||
strerror(errno));
|
||||
- goto out;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
- ret = bpf_gen_global(bpf_sub_dir);
|
||||
-out:
|
||||
- free(bpf_sub_dir);
|
||||
- return ret;
|
||||
+ return bpf_gen_global(bpf_sub_dir);
|
||||
}
|
||||
|
||||
static int bpf_slave_via_bind_mnt(const char *full_name,
|
||||
@@ -720,22 +692,13 @@ static int bpf_slave_via_bind_mnt(const char *full_name,
|
||||
static int bpf_gen_slave(const char *base, const char *name,
|
||||
const char *link)
|
||||
{
|
||||
- char *bpf_lnk_dir = NULL;
|
||||
- char *bpf_sub_dir = NULL;
|
||||
+ char bpf_lnk_dir[PATH_MAX + NAME_MAX + 1];
|
||||
+ char bpf_sub_dir[PATH_MAX + NAME_MAX];
|
||||
struct stat sb = {};
|
||||
int ret;
|
||||
|
||||
- ret = asprintf(&bpf_lnk_dir, "%s%s/", base, link);
|
||||
- if (ret < 0) {
|
||||
- fprintf(stderr, "asprintf failed: %s\n", strerror(errno));
|
||||
- goto out;
|
||||
- }
|
||||
-
|
||||
- ret = asprintf(&bpf_sub_dir, "%s%s", base, name);
|
||||
- if (ret < 0) {
|
||||
- fprintf(stderr, "asprintf failed: %s\n", strerror(errno));
|
||||
- goto out;
|
||||
- }
|
||||
+ snprintf(bpf_lnk_dir, sizeof(bpf_lnk_dir), "%s%s/", base, link);
|
||||
+ snprintf(bpf_sub_dir, sizeof(bpf_sub_dir), "%s%s", base, name);
|
||||
|
||||
ret = symlink(bpf_lnk_dir, bpf_sub_dir);
|
||||
if (ret) {
|
||||
@@ -743,30 +706,25 @@ static int bpf_gen_slave(const char *base, const char *name,
|
||||
if (errno != EPERM) {
|
||||
fprintf(stderr, "symlink %s failed: %s\n",
|
||||
bpf_sub_dir, strerror(errno));
|
||||
- goto out;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
- ret = bpf_slave_via_bind_mnt(bpf_sub_dir, bpf_lnk_dir);
|
||||
- goto out;
|
||||
+ return bpf_slave_via_bind_mnt(bpf_sub_dir,
|
||||
+ bpf_lnk_dir);
|
||||
}
|
||||
|
||||
ret = lstat(bpf_sub_dir, &sb);
|
||||
if (ret) {
|
||||
fprintf(stderr, "lstat %s failed: %s\n",
|
||||
bpf_sub_dir, strerror(errno));
|
||||
- goto out;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
- if ((sb.st_mode & S_IFMT) != S_IFLNK) {
|
||||
- ret = bpf_gen_global(bpf_sub_dir);
|
||||
- goto out;
|
||||
- }
|
||||
+ if ((sb.st_mode & S_IFMT) != S_IFLNK)
|
||||
+ return bpf_gen_global(bpf_sub_dir);
|
||||
}
|
||||
|
||||
-out:
|
||||
- free(bpf_lnk_dir);
|
||||
- free(bpf_sub_dir);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int bpf_gen_hierarchy(const char *base)
|
||||
@@ -784,7 +742,7 @@ static int bpf_gen_hierarchy(const char *base)
|
||||
static const char *bpf_get_work_dir(enum bpf_prog_type type)
|
||||
{
|
||||
static char bpf_tmp[PATH_MAX] = BPF_DIR_MNT;
|
||||
- static char *bpf_wrk_dir;
|
||||
+ static char bpf_wrk_dir[PATH_MAX];
|
||||
static const char *mnt;
|
||||
static bool bpf_mnt_cached;
|
||||
const char *mnt_env = getenv(BPF_ENV_MNT);
|
||||
@@ -823,12 +781,7 @@ static const char *bpf_get_work_dir(enum bpf_prog_type type)
|
||||
}
|
||||
}
|
||||
|
||||
- ret = asprintf(&bpf_wrk_dir, "%s/", mnt);
|
||||
- if (ret < 0) {
|
||||
- fprintf(stderr, "asprintf failed: %s\n", strerror(errno));
|
||||
- free(bpf_wrk_dir);
|
||||
- goto out;
|
||||
- }
|
||||
+ snprintf(bpf_wrk_dir, sizeof(bpf_wrk_dir), "%s/", mnt);
|
||||
|
||||
ret = bpf_gen_hierarchy(bpf_wrk_dir);
|
||||
if (ret) {
|
||||
@@ -1485,48 +1438,31 @@ static int bpf_probe_pinned(const char *name, const struct bpf_elf_ctx *ctx,
|
||||
|
||||
static int bpf_make_obj_path(const struct bpf_elf_ctx *ctx)
|
||||
{
|
||||
- char *tmp = NULL;
|
||||
+ char tmp[PATH_MAX];
|
||||
int ret;
|
||||
|
||||
- ret = asprintf(&tmp, "%s/%s", bpf_get_work_dir(ctx->type), ctx->obj_uid);
|
||||
- if (ret < 0) {
|
||||
- fprintf(stderr, "asprintf failed: %s\n", strerror(errno));
|
||||
- goto out;
|
||||
- }
|
||||
+ snprintf(tmp, sizeof(tmp), "%s/%s", bpf_get_work_dir(ctx->type),
|
||||
+ ctx->obj_uid);
|
||||
|
||||
ret = mkdir(tmp, S_IRWXU);
|
||||
if (ret && errno != EEXIST) {
|
||||
fprintf(stderr, "mkdir %s failed: %s\n", tmp, strerror(errno));
|
||||
- goto out;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
- ret = 0;
|
||||
-out:
|
||||
- free(tmp);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int bpf_make_custom_path(const struct bpf_elf_ctx *ctx,
|
||||
const char *todo)
|
||||
{
|
||||
- char *tmp = NULL;
|
||||
- char *rem = NULL;
|
||||
- char *sub;
|
||||
+ char tmp[PATH_MAX], rem[PATH_MAX], *sub;
|
||||
int ret;
|
||||
|
||||
- ret = asprintf(&tmp, "%s/../", bpf_get_work_dir(ctx->type));
|
||||
- if (ret < 0) {
|
||||
- fprintf(stderr, "asprintf failed: %s\n", strerror(errno));
|
||||
- goto out;
|
||||
- }
|
||||
-
|
||||
- ret = asprintf(&rem, "%s/", todo);
|
||||
- if (ret < 0) {
|
||||
- fprintf(stderr, "asprintf failed: %s\n", strerror(errno));
|
||||
- goto out;
|
||||
- }
|
||||
-
|
||||
+ snprintf(tmp, sizeof(tmp), "%s/../", bpf_get_work_dir(ctx->type));
|
||||
+ snprintf(rem, sizeof(rem), "%s/", todo);
|
||||
sub = strtok(rem, "/");
|
||||
+
|
||||
while (sub) {
|
||||
if (strlen(tmp) + strlen(sub) + 2 > PATH_MAX)
|
||||
return -EINVAL;
|
||||
@@ -1538,17 +1474,13 @@ static int bpf_make_custom_path(const struct bpf_elf_ctx *ctx,
|
||||
if (ret && errno != EEXIST) {
|
||||
fprintf(stderr, "mkdir %s failed: %s\n", tmp,
|
||||
strerror(errno));
|
||||
- goto out;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
sub = strtok(NULL, "/");
|
||||
}
|
||||
|
||||
- ret = 0;
|
||||
-out:
|
||||
- free(rem);
|
||||
- free(tmp);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int bpf_place_pinned(int fd, const char *name,
|
||||
@@ -2655,23 +2587,14 @@ struct bpf_jited_aux {
|
||||
|
||||
static int bpf_derive_prog_from_fdinfo(int fd, struct bpf_prog_data *prog)
|
||||
{
|
||||
- char *file = NULL;
|
||||
- char buff[4096];
|
||||
+ char file[PATH_MAX], buff[4096];
|
||||
unsigned int val;
|
||||
FILE *fp;
|
||||
- int ret;
|
||||
-
|
||||
- ret = asprintf(&file, "/proc/%d/fdinfo/%d", getpid(), fd);
|
||||
- if (ret < 0) {
|
||||
- fprintf(stderr, "asprintf failed: %s\n", strerror(errno));
|
||||
- free(file);
|
||||
- return ret;
|
||||
- }
|
||||
|
||||
+ snprintf(file, sizeof(file), "/proc/%d/fdinfo/%d", getpid(), fd);
|
||||
memset(prog, 0, sizeof(*prog));
|
||||
|
||||
fp = fopen(file, "r");
|
||||
- free(file);
|
||||
if (!fp) {
|
||||
fprintf(stderr, "No procfs support?!\n");
|
||||
return -EIO;
|
||||
--
|
||||
2.27.0
|
||||
|
||||
49
0031-bpf-Fixes-a-snprintf-truncation-warning.patch
Normal file
49
0031-bpf-Fixes-a-snprintf-truncation-warning.patch
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
From 69986423a0df3a5613697b37a2f1fb6c6fd100c0 Mon Sep 17 00:00:00 2001
|
||||
From: Andrea Claudi <aclaudi@redhat.com>
|
||||
Date: Tue, 26 May 2020 18:04:11 +0200
|
||||
Subject: [PATCH] bpf: Fixes a snprintf truncation warning
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
gcc v9.3.1 reports:
|
||||
|
||||
bpf.c: In function ‘bpf_get_work_dir’:
|
||||
bpf.c:784:49: warning: ‘snprintf’ output may be truncated before the last format character [-Wformat-truncation=]
|
||||
784 | snprintf(bpf_wrk_dir, sizeof(bpf_wrk_dir), "%s/", mnt);
|
||||
| ^
|
||||
bpf.c:784:2: note: ‘snprintf’ output between 2 and 4097 bytes into a destination of size 4096
|
||||
784 | snprintf(bpf_wrk_dir, sizeof(bpf_wrk_dir), "%s/", mnt);
|
||||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Fix this simply checking snprintf return code and properly handling the error.
|
||||
|
||||
Fixes: e42256699cac ("bpf: make tc's bpf loader generic and move into lib")
|
||||
Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 354efaec3895f004382414f2df17e7d820e695f6)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
lib/bpf.c | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/bpf.c b/lib/bpf.c
|
||||
index 23cb0d96a85ba..c7d45077c14e5 100644
|
||||
--- a/lib/bpf.c
|
||||
+++ b/lib/bpf.c
|
||||
@@ -781,7 +781,11 @@ static const char *bpf_get_work_dir(enum bpf_prog_type type)
|
||||
}
|
||||
}
|
||||
|
||||
- snprintf(bpf_wrk_dir, sizeof(bpf_wrk_dir), "%s/", mnt);
|
||||
+ ret = snprintf(bpf_wrk_dir, sizeof(bpf_wrk_dir), "%s/", mnt);
|
||||
+ if (ret < 0 || ret >= sizeof(bpf_wrk_dir)) {
|
||||
+ mnt = NULL;
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
ret = bpf_gen_hierarchy(bpf_wrk_dir);
|
||||
if (ret) {
|
||||
--
|
||||
2.27.0
|
||||
|
||||
41
0032-ss-fix-end-of-line-printing-in-misc-ss.c.patch
Normal file
41
0032-ss-fix-end-of-line-printing-in-misc-ss.c.patch
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
From f2b6f619af8ebc693c7b0c0abc52b6943800ffe9 Mon Sep 17 00:00:00 2001
|
||||
From: Brian Vazquez <brianvv@google.com>
|
||||
Date: Wed, 4 Dec 2019 13:32:28 -0800
|
||||
Subject: [PATCH] ss: fix end-of-line printing in misc/ss.c
|
||||
|
||||
The previous change to ss to show header broke the printing of
|
||||
end-of-line for the last entry.
|
||||
|
||||
Tested:
|
||||
|
||||
diff <(./ss.old -nltp) <(misc/ss -nltp)
|
||||
38c38
|
||||
< LISTEN 0 128 [::1]:35417 [::]:* users:(("foo",pid=65254,fd=116))
|
||||
\ No newline at end of file
|
||||
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
(cherry picked from commit 9eee92a41ae630b2c9e92ae2875ca56801c96b73)
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
misc/ss.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/misc/ss.c b/misc/ss.c
|
||||
index 794c1895c078e..bd55977ef8592 100644
|
||||
--- a/misc/ss.c
|
||||
+++ b/misc/ss.c
|
||||
@@ -1289,6 +1289,11 @@ static void render(void)
|
||||
|
||||
token = buf_token_next(token);
|
||||
}
|
||||
+ /* Deal with final end-of-line when the last non-empty field printed
|
||||
+ * is not the last field.
|
||||
+ */
|
||||
+ if (line_started)
|
||||
+ printf("\n");
|
||||
|
||||
buf_free_all();
|
||||
current_field = columns;
|
||||
--
|
||||
2.27.0
|
||||
|
||||
16
README.etc
16
README.etc
|
|
@ -1,16 +0,0 @@
|
|||
You are looking for your iproute2 config in /etc/iproute2 and it's gone?
|
||||
|
||||
Here's an explanation on what's going on:
|
||||
|
||||
From v6.5.0, iproute2 supports stateless configuration pattern. This
|
||||
means that iproute2 now read its config from /etc/iproute2/FOO, and,
|
||||
if it does not exist, fall back to /usr/share/iproute2/FOO.
|
||||
|
||||
You can find iproute2 default configuration in /usr/share/iproute2,
|
||||
while you can store your user-modified config files in /etc/iproute2.
|
||||
|
||||
/usr/share/iproute2 files are not supposed to be manually modified.
|
||||
|
||||
If a previous update broke your user config for iproute2, you may
|
||||
have one or more ".rpmsave" files in /etc/iproute2. You can restore
|
||||
your config simply dropping the ".rpmsave" suffix from the file name.
|
||||
949
iproute.spec
949
iproute.spec
File diff suppressed because it is too large
Load diff
|
|
@ -1,17 +0,0 @@
|
|||
|
||||
# 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
|
||||
7
sources
7
sources
|
|
@ -1,6 +1 @@
|
|||
SHA512 (iproute2-6.8.0.tar.xz) = 54e50340a73c8810d69bfd54704b469149731634a97d94da08b5a305592a812131a441e5b646e32b480d61840e2ade29387e54b934effeee8ded4f06e557a5c0
|
||||
SHA512 (iproute2-6.10.0.tar.xz) = 706479aa37a25fcf30c525c6abd85e0861e484d046e0636a28dbc52b958d45c9dba70b912f530dedd4b0b496e4b98969e23501bbbb41d3de50810bae014fcb41
|
||||
SHA512 (iproute2-6.12.0.tar.xz) = dbd6afb8162a6086e4be9045b8dc53aa563bd4b7abaf43ee13cd7d493730ff0b90e6985f68c6f42d64f4af6a692d0589e0cefd2f24045ec1c10418cfb73940b2
|
||||
SHA512 (iproute2-6.14.0.tar.xz) = e79049bdca0e0381f0a93a40e4d597ce59fb509dabc6e8b04a510ff9953f091c67577d6faa62967bd197bf62ab6e56d928558270a1390621431acb237b77fa46
|
||||
SHA512 (iproute2-6.16.0.tar.xz) = 88930ea1a3a901594a69dc04e533bfd1de0f5b79f176dedb45f11f01035bd680edccc8e04e56d0922ee430580581c646473a3baa941254739878f7ab946f17df
|
||||
SHA512 (iproute2-6.17.0.tar.xz) = 3d83d49233c1d984f15d285a46e2ec0eeb820c7cb84cfc84866921f37e8a57d31bc3953be07e8c79ed6079f326a25c3a85f591b0d67f9f689c0c70ccdb0fef77
|
||||
SHA512 (iproute2-5.4.0.tar.xz) = 26d1230e10d9ba4466edd3fe95cb6f595df691eeb27b87ae845ceb9da09fe11c2e0daa8d67187121320413f9ee7131fd426182055eb285be7c4de558d9e47051
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue