X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftcpconns.c;h=da916950e301c5a705fdfe5c18c80b48b336d4a3;hb=610204218564e01513607a0f077c33145f2b41f7;hp=6bc3384210ce5a614b4f39b7fb3d05b965165865;hpb=12f249b209d7fa31e3a9d53315e47a2342463e0f;p=collectd.git diff --git a/src/tcpconns.c b/src/tcpconns.c index 6bc33842..da916950 100644 --- a/src/tcpconns.c +++ b/src/tcpconns.c @@ -485,10 +485,6 @@ static int conn_read_netlink (void) { #if HAVE_STRUCT_LINUX_INET_DIAG_REQ int fd; - struct sockaddr_nl nladdr; - struct nlreq req; - struct msghdr msg; - struct iovec iov; struct inet_diag_msg *r; char buf[8192]; @@ -503,34 +499,38 @@ static int conn_read_netlink (void) return (-1); } - memset(&nladdr, 0, sizeof(nladdr)); - nladdr.nl_family = AF_NETLINK; - - memset(&req, 0, sizeof(req)); - req.nlh.nlmsg_len = sizeof(req); - req.nlh.nlmsg_type = TCPDIAG_GETSOCK; - /* NLM_F_ROOT: return the complete table instead of a single entry. - * NLM_F_MATCH: return all entries matching criteria (not implemented) - * NLM_F_REQUEST: must be set on all request messages */ - req.nlh.nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST; - req.nlh.nlmsg_pid = 0; - /* The sequence_number is used to track our messages. Since netlink is not - * reliable, we don't want to end up with a corrupt or incomplete old - * message in case the system is/was out of memory. */ - req.nlh.nlmsg_seq = ++sequence_number; - req.r.idiag_family = AF_INET; - req.r.idiag_states = 0xfff; - req.r.idiag_ext = 0; - - memset(&iov, 0, sizeof(iov)); - iov.iov_base = &req; - iov.iov_len = sizeof(req); - - memset(&msg, 0, sizeof(msg)); - msg.msg_name = (void*)&nladdr; - msg.msg_namelen = sizeof(nladdr); - msg.msg_iov = &iov; - msg.msg_iovlen = 1; + struct sockaddr_nl nladdr = { + .nl_family = AF_NETLINK + }; + + struct nlreq req = { + .nlh.nlmsg_len = sizeof(req), + .nlh.nlmsg_type = TCPDIAG_GETSOCK, + /* NLM_F_ROOT: return the complete table instead of a single entry. + * NLM_F_MATCH: return all entries matching criteria (not implemented) + * NLM_F_REQUEST: must be set on all request messages */ + .nlh.nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST, + .nlh.nlmsg_pid = 0, + /* The sequence_number is used to track our messages. Since netlink is not + * reliable, we don't want to end up with a corrupt or incomplete old + * message in case the system is/was out of memory. */ + .nlh.nlmsg_seq = ++sequence_number, + .r.idiag_family = AF_INET, + .r.idiag_states = 0xfff, + .r.idiag_ext = 0 + }; + + struct iovec iov = { + .iov_base = &req, + .iov_len = sizeof(req) + }; + + struct msghdr msg = { + .msg_name = (void*)&nladdr, + .msg_namelen = sizeof(nladdr), + .msg_iov = &iov, + .msg_iovlen = 1 + }; if (sendmsg (fd, &msg, 0) < 0) {