From 6cf8398f5f487762586801c25539d8fe5bb33b39 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Fri, 23 Dec 2011 10:40:04 -0800 Subject: [PATCH 1/1] libnetlink: change rtnl_send() to take void * Avoid having to cast buffer being sent. --- genl/ctrl.c | 2 +- include/libnetlink.h | 4 ++-- ip/iplink.c | 2 +- lib/libnetlink.c | 9 +++------ misc/arpd.c | 2 +- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/genl/ctrl.c b/genl/ctrl.c index 30ea4d7..38a9761 100644 --- a/genl/ctrl.c +++ b/genl/ctrl.c @@ -350,7 +350,7 @@ static int ctrl_list(int cmd, int argc, char **argv) nlh->nlmsg_flags = NLM_F_ROOT|NLM_F_MATCH|NLM_F_REQUEST; nlh->nlmsg_seq = rth.dump = ++rth.seq; - if (rtnl_send(&rth, (const char *) nlh, nlh->nlmsg_len) < 0) { + if (rtnl_send(&rth, nlh, nlh->nlmsg_len) < 0) { perror("Failed to send dump request\n"); goto ctrl_done; } diff --git a/include/libnetlink.h b/include/libnetlink.h index 07bd707..057f41d 100644 --- a/include/libnetlink.h +++ b/include/libnetlink.h @@ -47,8 +47,8 @@ extern int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer, unsigned groups, struct nlmsghdr *answer, rtnl_filter_t junk, void *jarg); -extern int rtnl_send(struct rtnl_handle *rth, const char *buf, int); -extern int rtnl_send_check(struct rtnl_handle *rth, const char *buf, int); +extern int rtnl_send(struct rtnl_handle *rth, const void *buf, int); +extern int rtnl_send_check(struct rtnl_handle *rth, const void *buf, int); extern int addattr32(struct nlmsghdr *n, int maxlen, int type, __u32 data); extern int addattr_l(struct nlmsghdr *n, int maxlen, int type, const void *data, int alen); diff --git a/ip/iplink.c b/ip/iplink.c index ca1aaeb..d41605b 100644 --- a/ip/iplink.c +++ b/ip/iplink.c @@ -164,7 +164,7 @@ static int iplink_have_newlink(void) req.n.nlmsg_type = RTM_NEWLINK; req.i.ifi_family = AF_UNSPEC; - rtnl_send(&rth, (char *)&req.n, req.n.nlmsg_len); + rtnl_send(&rth, &req.n, req.n.nlmsg_len); rtnl_listen(&rth, accept_msg, NULL); } return have_rtnl_newlink; diff --git a/lib/libnetlink.c b/lib/libnetlink.c index 0fc2cde..7c29985 100644 --- a/lib/libnetlink.c +++ b/lib/libnetlink.c @@ -107,12 +107,12 @@ int rtnl_wilddump_request(struct rtnl_handle *rth, int family, int type) return send(rth->fd, (void*)&req, sizeof(req), 0); } -int rtnl_send(struct rtnl_handle *rth, const char *buf, int len) +int rtnl_send(struct rtnl_handle *rth, const void *buf, int len) { return send(rth->fd, buf, len, 0); } -int rtnl_send_check(struct rtnl_handle *rth, const char *buf, int len) +int rtnl_send_check(struct rtnl_handle *rth, const void *buf, int len) { struct nlmsghdr *h; int status; @@ -148,7 +148,7 @@ int rtnl_send_check(struct rtnl_handle *rth, const char *buf, int len) int rtnl_dump_request(struct rtnl_handle *rth, int type, void *req, int len) { struct nlmsghdr nlh; - struct sockaddr_nl nladdr; + struct sockaddr_nl nladdr = { .nl_family = AF_NETLINK }; struct iovec iov[2] = { { .iov_base = &nlh, .iov_len = sizeof(nlh) }, { .iov_base = req, .iov_len = len } @@ -160,9 +160,6 @@ int rtnl_dump_request(struct rtnl_handle *rth, int type, void *req, int len) .msg_iovlen = 2, }; - memset(&nladdr, 0, sizeof(nladdr)); - nladdr.nl_family = AF_NETLINK; - nlh.nlmsg_len = NLMSG_LENGTH(len); nlh.nlmsg_type = type; nlh.nlmsg_flags = NLM_F_ROOT|NLM_F_MATCH|NLM_F_REQUEST; diff --git a/misc/arpd.c b/misc/arpd.c index 124d3fb..4f0021b 100644 --- a/misc/arpd.c +++ b/misc/arpd.c @@ -281,7 +281,7 @@ int respond_to_kernel(int ifindex, __u32 addr, char *lla, int llalen) addattr_l(&req.n, sizeof(req), NDA_DST, &addr, 4); addattr_l(&req.n, sizeof(req), NDA_LLADDR, lla, llalen); - return rtnl_send(&rth, (char*)&req, req.n.nlmsg_len) <= 0; + return rtnl_send(&rth, &req, req.n.nlmsg_len) <= 0; } void prepare_neg_entry(__u8 *ndata, __u32 stamp) -- 2.39.2