aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2014-12-29 22:01:31 +0100
committerNatanael Copa <ncopa@alpinelinux.org>2014-12-29 22:01:31 +0100
commit9ba3489123c6de58f70fc05379644c2ccedbe870 (patch)
tree215fb419176c809da56e012c68d532d1320315a4
parent3926fcc07fb8171017902702050d473e05948c26 (diff)
downloadnldev-9ba3489123c6de58f70fc05379644c2ccedbe870.tar.bz2
nldev-9ba3489123c6de58f70fc05379644c2ccedbe870.tar.xz
move netlink socket initialization to its own function
improves readability
-rw-r--r--nldev.c58
1 files 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, '=');