From: Junxin Chen Date: Wed, 19 Oct 2022 01:20:08 +0000 (+0800) Subject: dcb: unblock mnl_socket_recvfrom if not message received X-Git-Tag: v6.1.0~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=84c036972659ae9a98aac3cef983cc7dd8e14c53;p=thirdparty%2Fiproute2.git dcb: unblock mnl_socket_recvfrom if not message received 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 Signed-off-by: Stephen Hemminger --- diff --git a/dcb/dcb.c b/dcb/dcb.c index 8d75ab0a0..391fd9545 100644 --- 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; }