From 9ba3489123c6de58f70fc05379644c2ccedbe870 Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Mon, 29 Dec 2014 22:01:31 +0100 Subject: move netlink socket initialization to its own function improves readability --- nldev.c | 58 +++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/nldev.c b/nldev.c index 3391ed1..72c9656 100644 --- a/nldev.c +++ b/nldev.c @@ -148,6 +148,38 @@ initsignals(void) signal(SIGPIPE, SIG_IGN); } +int +init_netlink_socket(void) +{ + struct sockaddr_nl nls; + int fd, slen; + + memset(&nls, 0, sizeof(nls)); + nls.nl_family = AF_NETLINK; + nls.nl_pid = getpid(); + nls.nl_groups = -1; + + fd = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); + if (fd < 0) + edie("socket"); + + slen = 128*1024*1024; + if (setsockopt(fd, SOL_SOCKET, SO_RCVBUFFORCE, &slen, + sizeof(slen)) < 0) { + edie("setsockopt"); + } + slen = 1; + if (setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &slen, + sizeof(slen)) < 0) { + edie("setsockopt"); + } + + if (bind(fd, (void *)&nls, sizeof(nls))) + edie("bind"); + + return fd; +} + void usage(void) { @@ -157,7 +189,7 @@ usage(void) int main(int argc, char *argv[]) { - struct sockaddr_nl nls, cnls; + struct sockaddr_nl cnls; struct pollfd fds; struct msghdr hdr; struct iovec iov; @@ -195,30 +227,9 @@ main(int argc, char *argv[]) usage(); } ARGEND; - memset(&nls, 0, sizeof(nls)); - nls.nl_family = AF_NETLINK; - nls.nl_pid = getpid(); - nls.nl_groups = -1; - fds.events = POLLIN; - fds.fd = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); + fds.fd = init_netlink_socket(); listfd = fds.fd; - if (fds.fd < 0) - edie("socket"); - - slen = 128*1024*1024; - if (setsockopt(fds.fd, SOL_SOCKET, SO_RCVBUFFORCE, &slen, - sizeof(slen)) < 0) { - edie("setsockopt"); - } - slen = 1; - if (setsockopt(fds.fd, SOL_SOCKET, SO_PASSCRED, &slen, - sizeof(slen)) < 0) { - edie("setsockopt"); - } - - if (bind(fds.fd, (void *)&nls, sizeof(nls))) - edie("bind"); if (dofork) { if (daemon(0, 0) < 0) @@ -285,6 +296,7 @@ main(int argc, char *argv[]) continue; } + slen = 0; for (i = 0; i < len; i += slen + 1) { key = buf + i; value = strchr(key, '='); -- cgit v1.2.3