]> git.decadent.org.uk Git - odhcp6c.git/blobdiff - src/ra.c
Revert "Fix parsing of Router Advertisement messsages"
[odhcp6c.git] / src / ra.c
index c8ccb888f8856172ff58f280625b5005b61ab356..de21710fbb8b55971c22ea89fbb8cf9b3fb2e9a4 100644 (file)
--- 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));
@@ -254,6 +264,10 @@ bool ra_process(void)
                entry.preferred = entry.valid;
                changed |= odhcp6c_update_entry(STATE_RA_ROUTE, &entry);
 
+               // Parse hoplimit
+               if (adv->nd_ra_curhoplimit)
+                       update_proc("conf", "hop_limit", adv->nd_ra_curhoplimit);
+
                // Parse ND parameters
                if (ntohl(adv->nd_ra_reachable) <= 3600000)
                        update_proc("neigh", "base_reachable_time_ms", ntohl(adv->nd_ra_reachable));