]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
dcb: unblock mnl_socket_recvfrom if not message received
authorJunxin Chen <chenjunxin1@huawei.com>
Wed, 19 Oct 2022 01:20:08 +0000 (09:20 +0800)
committerStephen Hemminger <stephen@networkplumber.org>
Thu, 20 Oct 2022 22:55:44 +0000 (15:55 -0700)
Currently, the dcb command sinks to the kernel through the netlink
to obtain information. However, if the kernel fails to obtain infor-
mation or is not processed, the dcb command is suspended.

For example, if we don't implement dcbnl_ops->ieee_getpfc in the
kernel, the command "dcb pfc show dev eth1" will be stuck and subsequent
commands cannot be executed.

This patch adds the NLM_F_ACK flag to the netlink in mnlu_msg_prepare
to ensure that the kernel responds to user requests.

After the problem is solved, the execution result is as follows:
$ dcb pfc show dev eth1
Attribute not found: Success

Fixes: 67033d1c1c8a ("Add skeleton of a new tool, dcb")
Signed-off-by: Junxin Chen <chenjunxin1@huawei.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
dcb/dcb.c

index 8d75ab0a038b8f94bc5c0680f4b5a1f51db52878..391fd95455f404e484ca7934ff297d5145078cd2 100644 (file)
--- a/dcb/dcb.c
+++ b/dcb/dcb.c
@@ -156,7 +156,8 @@ static struct nlmsghdr *dcb_prepare(struct dcb *dcb, const char *dev,
        };
        struct nlmsghdr *nlh;
 
-       nlh = mnlu_msg_prepare(dcb->buf, nlmsg_type, NLM_F_REQUEST, &dcbm, sizeof(dcbm));
+       nlh = mnlu_msg_prepare(dcb->buf, nlmsg_type, NLM_F_REQUEST | NLM_F_ACK,
+                              &dcbm, sizeof(dcbm));
        mnl_attr_put_strz(nlh, DCB_ATTR_IFNAME, dev);
        return nlh;
 }