summaryrefslogtreecommitdiffhomepage
path: root/src/ndp.c
diff options
context:
space:
mode:
authorHans Dedecker <dedeckeh@gmail.com>2017-03-09 15:49:03 +0100
committerHans Dedecker <dedeckeh@gmail.com>2017-03-13 16:08:30 +0100
commit24d21c7c26d07e93fb329ac62da5e974cf44213b (patch)
treeda363f3ff9290ee6e314bd16745cdd5ad153f09e /src/ndp.c
parent9eac2a8963415e6a74c2fc13a3c8d05cd0f81d4d (diff)
ndp: add syslog debug tracing
Add extra LOG_DEBUG syslog tracing for trouble shooting Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
Diffstat (limited to 'src/ndp.c')
-rw-r--r--src/ndp.c41
1 files changed, 32 insertions, 9 deletions
diff --git a/src/ndp.c b/src/ndp.c
index 5866588..93b70fc 100644
--- a/src/ndp.c
+++ b/src/ndp.c
@@ -264,13 +264,16 @@ static void ping6(struct in6_addr *addr,
struct sockaddr_in6 dest = { .sin6_family = AF_INET6, .sin6_addr = *addr, .sin6_scope_id = iface->ifindex, };
struct icmp6_hdr echo = { .icmp6_type = ICMP6_ECHO_REQUEST };
struct iovec iov = { .iov_base = &echo, .iov_len = sizeof(echo) };
+ char ipbuf[INET6_ADDRSTRLEN];
+
+ inet_ntop(AF_INET6, addr, ipbuf, sizeof(ipbuf));
+ syslog(LOG_NOTICE, "Pinging for %s%%%s", ipbuf, iface->ifname);
odhcpd_setup_route(addr, 128, iface, NULL, 128, true);
odhcpd_send(ping_socket, &dest, &iov, 1, iface);
odhcpd_setup_route(addr, 128, iface, NULL, 128, false);
}
-
// Handle solicitations
static void handle_solicit(void *addr, void *data, size_t len,
struct interface *iface, _unused void *dest)
@@ -278,6 +281,8 @@ static void handle_solicit(void *addr, void *data, size_t len,
struct ip6_hdr *ip6 = data;
struct nd_neighbor_solicit *req = (struct nd_neighbor_solicit*)&ip6[1];
struct sockaddr_ll *ll = addr;
+ char ipbuf[INET6_ADDRSTRLEN];
+ uint8_t mac[6];
// Solicitation is for duplicate address detection
bool ns_is_dad = IN6_IS_ADDR_UNSPECIFIED(&ip6->ip6_src);
@@ -296,11 +301,9 @@ static void handle_solicit(void *addr, void *data, size_t len,
IN6_IS_ADDR_MULTICAST(&req->nd_ns_target))
return; // Invalid target
- char ipbuf[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6, &req->nd_ns_target, ipbuf, sizeof(ipbuf));
- syslog(LOG_DEBUG, "Got a NS for %s", ipbuf);
+ syslog(LOG_DEBUG, "Got a NS for %s%%%s", ipbuf, iface->ifname);
- uint8_t mac[6];
odhcpd_get_mac(iface, mac);
if (!memcmp(ll->sll_addr, mac, sizeof(mac)))
return; // Looped back
@@ -315,10 +318,11 @@ static void handle_solicit(void *addr, void *data, size_t len,
// Use rtnetlink to modify kernel routes
static void setup_route(struct in6_addr *addr, struct interface *iface, bool add)
{
- char namebuf[INET6_ADDRSTRLEN];
- inet_ntop(AF_INET6, addr, namebuf, sizeof(namebuf));
- syslog(LOG_NOTICE, "%s about %s on %s",
- (add) ? "Learned" : "Forgot", namebuf, iface->ifname);
+ char ipbuf[INET6_ADDRSTRLEN];
+
+ inet_ntop(AF_INET6, addr, ipbuf, sizeof(ipbuf));
+ syslog(LOG_NOTICE, "%s about %s%%%s",
+ (add) ? "Learned" : "Forgot", ipbuf, iface->ifname);
if (iface->learn_routes)
odhcpd_setup_route(addr, 128, iface, NULL, 1024, add);
@@ -381,12 +385,22 @@ static void check_addr_updates(struct interface *iface)
void setup_addr_for_relaying(struct in6_addr *addr, struct interface *iface, bool add)
{
struct interface *c;
+ char ipbuf[INET6_ADDRSTRLEN];
+
+ inet_ntop(AF_INET6, addr, ipbuf, sizeof(ipbuf));
list_for_each_entry(c, &interfaces, head) {
if (iface == c || (c->ndp != RELAYD_RELAY && !add))
continue;
- odhcpd_setup_proxy_neigh(addr, c, c->ndp == RELAYD_RELAY ? add : false);
+ add = (c->ndp == RELAYD_RELAY ? add : false);
+
+ if (odhcpd_setup_proxy_neigh(addr, c, add))
+ syslog(LOG_DEBUG, "Failed to %s proxy neighbour entry %s%%%s",
+ add ? "add" : "delete", ipbuf, iface->ifname);
+ else
+ syslog(LOG_DEBUG, "%s proxy neighbour entry %s%%%s",
+ add ? "Added" : "Deleted", ipbuf, iface->ifname);
}
}
@@ -421,6 +435,7 @@ static int cb_rtnl_valid(struct nl_msg *msg, _unused void *arg)
struct in6_addr *addr = NULL;
struct interface *iface = NULL;
bool add = false;
+ char ipbuf[INET6_ADDRSTRLEN];
switch (hdr->nlmsg_type) {
case RTM_NEWROUTE:
@@ -461,6 +476,10 @@ static int cb_rtnl_valid(struct nl_msg *msg, _unused void *arg)
IN6_IS_ADDR_MULTICAST(addr))
return NL_SKIP;
+ inet_ntop(AF_INET6, addr, ipbuf, sizeof(ipbuf));
+ syslog(LOG_DEBUG, "Netlink %s %s%%%s", true ? "newaddr" : "deladdr",
+ ipbuf, iface->ifname);
+
check_addr_updates(iface);
if (iface->ndp != RELAYD_RELAY)
@@ -497,6 +516,10 @@ static int cb_rtnl_valid(struct nl_msg *msg, _unused void *arg)
IN6_IS_ADDR_MULTICAST(addr))
return NL_SKIP;
+ inet_ntop(AF_INET6, addr, ipbuf, sizeof(ipbuf));
+ syslog(LOG_DEBUG, "Netlink %s %s%%%s", true ? "newneigh" : "delneigh",
+ ipbuf, iface->ifname);
+
if (ndm->ndm_flags & NTF_PROXY) {
/* Dump and flush proxy entries */
if (hdr->nlmsg_type == RTM_NEWNEIGH) {