dcb: Fix error reporting when accessing "dcb app"
(cherry picked from commit 53542a53ebd1e0388f45328c7cfd70bfa453e31a)
This commit is contained in:
parent
f800c3fa0e
commit
9518cfd2fc
@ -0,0 +1,86 @@
|
|||||||
|
From 1b5c7414a42a29d559af85022afebc307a2b9d12 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Petr Machata <petrm@nvidia.com>
|
||||||
|
Date: Wed, 9 Feb 2022 15:41:40 +0100
|
||||||
|
Subject: [PATCH] dcb: Fix error reporting when accessing "dcb app"
|
||||||
|
|
||||||
|
Currently dcb decodes the response from "dcb app add" and "del" by
|
||||||
|
interpreting the returned attribute as u8. But the value stored there is
|
||||||
|
actually a negative errno value.
|
||||||
|
|
||||||
|
Additionally, "dcb app" currently shows two sets of messages, one in
|
||||||
|
dcb_set_attribute_attr_cb() where the issue is detected, and another as a
|
||||||
|
result of error return from that function.
|
||||||
|
|
||||||
|
The current state is as follows:
|
||||||
|
|
||||||
|
# dcb app add dev swp36 dscp-prio 20:2
|
||||||
|
Error when attempting to set attribute: Unknown error 239
|
||||||
|
Attribute write: No such file or directory
|
||||||
|
|
||||||
|
Fix the "unknown error" issue by correctly decoding the attribute as i8 and
|
||||||
|
negating it. Furthermore, set errno to that value, and let the top-level
|
||||||
|
"attribute write" error message show the correct message.
|
||||||
|
|
||||||
|
Initialize errno to 0 before the dcb_talk() dispatch, and make the error
|
||||||
|
print conditional on errno != 0. This way the few error messages that are
|
||||||
|
worth describing in the place where they are detected will not cause the
|
||||||
|
second error message to be printed.
|
||||||
|
|
||||||
|
The fixed reporting looks like this:
|
||||||
|
|
||||||
|
# dcb app add dev swp36 dscp-prio 20:2
|
||||||
|
Attribute write: File exists
|
||||||
|
|
||||||
|
Reported-by: Maksym Yaremchuk <maksymy@nvidia.com>
|
||||||
|
Signed-off-by: Petr Machata <petrm@nvidia.com>
|
||||||
|
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||||
|
|
||||||
|
Reference: https://github.com/iproute2/iproute2/commit/1b5c7414a42a29d559af85022afebc307a2b9d12
|
||||||
|
---
|
||||||
|
dcb/dcb.c | 12 ++++++++----
|
||||||
|
1 file changed, 8 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/dcb/dcb.c b/dcb/dcb.c
|
||||||
|
index b7c2df54..8d75ab0a 100644
|
||||||
|
--- a/dcb/dcb.c
|
||||||
|
+++ b/dcb/dcb.c
|
||||||
|
@@ -106,7 +106,7 @@ static int dcb_set_attribute_attr_cb(const struct nlattr *attr, void *data)
|
||||||
|
{
|
||||||
|
struct dcb_set_attribute_response *resp = data;
|
||||||
|
uint16_t len;
|
||||||
|
- uint8_t err;
|
||||||
|
+ int8_t err;
|
||||||
|
|
||||||
|
if (mnl_attr_get_type(attr) != resp->response_attr)
|
||||||
|
return MNL_CB_OK;
|
||||||
|
@@ -117,10 +117,12 @@ static int dcb_set_attribute_attr_cb(const struct nlattr *attr, void *data)
|
||||||
|
return MNL_CB_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* The attribute is formally u8, but actually an i8 containing a
|
||||||
|
+ * negative errno value.
|
||||||
|
+ */
|
||||||
|
err = mnl_attr_get_u8(attr);
|
||||||
|
if (err) {
|
||||||
|
- fprintf(stderr, "Error when attempting to set attribute: %s\n",
|
||||||
|
- strerror(err));
|
||||||
|
+ errno = -err;
|
||||||
|
return MNL_CB_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -242,9 +244,11 @@ static int __dcb_set_attribute(struct dcb *dcb, int command, const char *dev,
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
+ errno = 0;
|
||||||
|
ret = dcb_talk(dcb, nlh, dcb_set_attribute_cb, &resp);
|
||||||
|
if (ret) {
|
||||||
|
- perror("Attribute write");
|
||||||
|
+ if (errno)
|
||||||
|
+ perror("Attribute write");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
--
|
||||||
|
2.43.0.windows.1
|
||||||
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
Name: iproute
|
Name: iproute
|
||||||
Version: 5.15.0
|
Version: 5.15.0
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Release: 20
|
Release: 21
|
||||||
Summary: Linux network configuration utilities
|
Summary: Linux network configuration utilities
|
||||||
License: GPLv2+ and Public Domain
|
License: GPLv2+ and Public Domain
|
||||||
URL: https://kernel.org/pub/linux/utils/net/iproute2/
|
URL: https://kernel.org/pub/linux/utils/net/iproute2/
|
||||||
@ -75,6 +75,7 @@ Patch9000: feature-iproute-add-support-for-ipvlan-l2e-mode.patch
|
|||||||
Patch9001: bugfix-iproute2-cancel-some-test-cases.patch
|
Patch9001: bugfix-iproute2-cancel-some-test-cases.patch
|
||||||
Patch9002: feature-iproute2-supports-to-parse-UB-device-and-related-display-of-vf-address.patch
|
Patch9002: feature-iproute2-supports-to-parse-UB-device-and-related-display-of-vf-address.patch
|
||||||
Patch9003: sync-ipvlan_mode-enum-with-kernel-headers.patch
|
Patch9003: sync-ipvlan_mode-enum-with-kernel-headers.patch
|
||||||
|
Patch9004: backport-dcb-Fix-error-reporting-when-accessing-dcb-app.patch
|
||||||
|
|
||||||
BuildRequires: gcc bison elfutils-libelf-devel flex iptables-devel
|
BuildRequires: gcc bison elfutils-libelf-devel flex iptables-devel
|
||||||
BuildRequires: libmnl-devel libselinux-devel pkgconfig libbpf-devel sudo make
|
BuildRequires: libmnl-devel libselinux-devel pkgconfig libbpf-devel sudo make
|
||||||
@ -150,6 +151,12 @@ install -m 0644 lib/libnetlink.a %{buildroot}%{_libdir}/libnetlink.a
|
|||||||
%{_mandir}/*
|
%{_mandir}/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Oct 09 2024 liningjie <liningjie@xfusion.com> - 1:5.15.0-21
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:dcb: Fix error reporting when accessing "dcb app"
|
||||||
|
|
||||||
* Fri Jul 26 2024 caokeming <caokeming@huawei.com> - 1:5.15.0-20
|
* Fri Jul 26 2024 caokeming <caokeming@huawei.com> - 1:5.15.0-20
|
||||||
- Type:bugfix
|
- Type:bugfix
|
||||||
- ID:NA
|
- ID:NA
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user