summaryrefslogtreecommitdiff
path: root/src/ra.c
diff options
context:
space:
mode:
authorHans Dedecker <dedeckeh@gmail.com>2013-12-01 18:55:11 +0100
committerHans Dedecker <dedeckeh@gmail.com>2013-12-01 18:55:11 +0100
commit1234ab04386fd63eafb19ecf245b730d6461e869 (patch)
tree974295070aa6c9917a098b6531b2ff9dab702815 /src/ra.c
parent657727622c2ba67f8c5a4795b40458892f420a9c (diff)
downloadodhcp6c-1234ab04386fd63eafb19ecf245b730d6461e869.tar.gz
Basic error checking when initializing ra
Diffstat (limited to 'src/ra.c')
-rw-r--r--src/ra.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/ra.c b/src/ra.c
index c8ccb88..64cc8d8 100644
--- a/src/ra.c
+++ b/src/ra.c
@@ -59,13 +59,23 @@ int ra_init(const char *ifname, const struct in6_addr *ifid)
{
const pid_t ourpid = getpid();
sock = socket(AF_INET6, SOCK_RAW | SOCK_CLOEXEC, IPPROTO_ICMPV6);
+ if (sock < 0)
+ return -1;
+
if_index = if_nametoindex(ifname);
+ if (!if_index)
+ return -1;
+
strncpy(if_name, ifname, sizeof(if_name) - 1);
lladdr = *ifid;
rtnl = socket(AF_NETLINK, SOCK_DGRAM | SOCK_CLOEXEC, NETLINK_ROUTE);
+ if (rtnl < 0)
+ return -1;
+
struct sockaddr_nl rtnl_kernel = { .nl_family = AF_NETLINK };
- connect(rtnl, (const struct sockaddr*)&rtnl_kernel, sizeof(rtnl_kernel));
+ if (connect(rtnl, (const struct sockaddr*)&rtnl_kernel, sizeof(rtnl_kernel)) < 0)
+ return -1;
int val = RTNLGRP_LINK;
setsockopt(rtnl, SOL_NETLINK, NETLINK_ADD_MEMBERSHIP, &val, sizeof(val));