Replace option sol_max_rt by inf_max_rt in reply response to information request
[project/odhcpd.git] / src / ndp.c
index e006c85..50529b5 100644 (file)
--- a/src/ndp.c
+++ b/src/ndp.c
@@ -32,9 +32,9 @@
 
 
 static void handle_solicit(void *addr, void *data, size_t len,
-               struct interface *iface);
+               struct interface *iface, void *dest);
 static void handle_rtnetlink(void *addr, void *data, size_t len,
-               struct interface *iface);
+               struct interface *iface, void *dest);
 static struct ndp_neighbor* find_neighbor(struct in6_addr *addr, bool strict);
 static void modify_neighbor(struct in6_addr *addr, struct interface *iface,
                bool add);
@@ -111,6 +111,10 @@ int init_ndp(void)
 
        // Open ICMPv6 socket
        ping_socket = socket(AF_INET6, SOCK_RAW | SOCK_CLOEXEC, IPPROTO_ICMPV6);
+       if (ping_socket < 0) {
+               syslog(LOG_ERR, "Unable to open raw socket: %s", strerror(errno));
+                       return -1;
+       }
 
        int val = 2;
        setsockopt(ping_socket, IPPROTO_RAW, IPV6_CHECKSUM, &val, sizeof(val));
@@ -219,7 +223,7 @@ static ssize_t ping6(struct in6_addr *addr,
 
 // Handle solicitations
 static void handle_solicit(void *addr, void *data, size_t len,
-               struct interface *iface)
+               struct interface *iface, _unused void *dest)
 {
        struct ip6_hdr *ip6 = data;
        struct nd_neighbor_solicit *req = (struct nd_neighbor_solicit*)&ip6[1];
@@ -431,7 +435,7 @@ static void modify_neighbor(struct in6_addr *addr,
 // Handler for neighbor cache entries from the kernel. This is our source
 // to learn and unlearn hosts on interfaces.
 static void handle_rtnetlink(_unused void *addr, void *data, size_t len,
-               _unused struct interface *iface)
+               _unused struct interface *iface, _unused void *dest)
 {
        for (struct nlmsghdr *nh = data; NLMSG_OK(nh, len);
                        nh = NLMSG_NEXT(nh, len)) {