net: ipv6: Add network interface to various debug prints

Useful when figuring out where the device is sending the
network packet.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This commit is contained in:
Jukka Rissanen 2020-02-14 21:19:07 +02:00
commit 2d992baa42
2 changed files with 83 additions and 52 deletions

View file

@ -235,7 +235,7 @@ void nbr_print(void)
continue; continue;
} }
NET_DBG("[%d] %p %d/%d/%d/%d/%d pending %p iface %p idx %d " NET_DBG("[%d] %p %d/%d/%d/%d/%d pending %p iface %p/%d "
"ll %s addr %s", "ll %s addr %s",
i, nbr, nbr->ref, net_ipv6_nbr_data(nbr)->ns_count, i, nbr, nbr->ref, net_ipv6_nbr_data(nbr)->ns_count,
net_ipv6_nbr_data(nbr)->is_router, net_ipv6_nbr_data(nbr)->is_router,
@ -431,8 +431,8 @@ static struct net_nbr *nbr_new(struct net_if *iface,
nbr_init(nbr, iface, addr, is_router, state); nbr_init(nbr, iface, addr, is_router, state);
NET_DBG("nbr %p iface %p state %d IPv6 %s", NET_DBG("nbr %p iface %p/%d state %d IPv6 %s",
nbr, iface, state, nbr, iface, net_if_get_by_iface(iface), state,
log_strdup(net_sprint_ipv6_addr(addr))); log_strdup(net_sprint_ipv6_addr(addr)));
return nbr; return nbr;
@ -466,33 +466,39 @@ static void dbg_update_neighbor_lladdr_raw(u8_t *new_lladdr,
dbg_update_neighbor_lladdr(&lladdr, old_lladdr, addr); dbg_update_neighbor_lladdr(&lladdr, old_lladdr, addr);
} }
#define dbg_addr(action, pkt_str, src, dst) \ #define dbg_addr(action, pkt_str, src, dst, pkt) \
do { \ do { \
NET_DBG("%s %s from %s to %s", action, pkt_str, \ NET_DBG("%s %s from %s to %s iface %p/%d", \
action, pkt_str, \
log_strdup(net_sprint_ipv6_addr(src)), \ log_strdup(net_sprint_ipv6_addr(src)), \
log_strdup(net_sprint_ipv6_addr(dst))); \ log_strdup(net_sprint_ipv6_addr(dst)), \
net_pkt_iface(pkt), \
net_if_get_by_iface(net_pkt_iface(pkt))); \
} while (0) } while (0)
#define dbg_addr_recv(pkt_str, src, dst) \ #define dbg_addr_recv(pkt_str, src, dst, pkt) \
dbg_addr("Received", pkt_str, src, dst) dbg_addr("Received", pkt_str, src, dst, pkt)
#define dbg_addr_sent(pkt_str, src, dst) \ #define dbg_addr_sent(pkt_str, src, dst, pkt) \
dbg_addr("Sent", pkt_str, src, dst) dbg_addr("Sent", pkt_str, src, dst, pkt)
#define dbg_addr_with_tgt(action, pkt_str, src, dst, target) \ #define dbg_addr_with_tgt(action, pkt_str, src, dst, target, pkt) \
do { \ do { \
NET_DBG("%s %s from %s to %s, target %s", action, \ NET_DBG("%s %s from %s to %s, target %s iface %p/%d", \
action, \
pkt_str, \ pkt_str, \
log_strdup(net_sprint_ipv6_addr(src)), \ log_strdup(net_sprint_ipv6_addr(src)), \
log_strdup(net_sprint_ipv6_addr(dst)), \ log_strdup(net_sprint_ipv6_addr(dst)), \
log_strdup(net_sprint_ipv6_addr(target))); \ log_strdup(net_sprint_ipv6_addr(target)), \
net_pkt_iface(pkt), \
net_if_get_by_iface(net_pkt_iface(pkt))); \
} while (0) } while (0)
#define dbg_addr_recv_tgt(pkt_str, src, dst, tgt) \ #define dbg_addr_recv_tgt(pkt_str, src, dst, tgt, pkt) \
dbg_addr_with_tgt("Received", pkt_str, src, dst, tgt) dbg_addr_with_tgt("Received", pkt_str, src, dst, tgt, pkt)
#define dbg_addr_sent_tgt(pkt_str, src, dst, tgt) \ #define dbg_addr_sent_tgt(pkt_str, src, dst, tgt, pkt) \
dbg_addr_with_tgt("Sent", pkt_str, src, dst, tgt) dbg_addr_with_tgt("Sent", pkt_str, src, dst, tgt, pkt)
static void ipv6_nd_remove_old_stale_nbr(void) static void ipv6_nd_remove_old_stale_nbr(void)
{ {
@ -624,11 +630,11 @@ struct net_nbr *net_ipv6_nbr_add(struct net_if *iface,
} }
} }
NET_DBG("[%d] nbr %p state %d router %d IPv6 %s ll %s iface %p", NET_DBG("[%d] nbr %p state %d router %d IPv6 %s ll %s iface %p/%d",
nbr->idx, nbr, state, is_router, nbr->idx, nbr, state, is_router,
log_strdup(net_sprint_ipv6_addr(addr)), log_strdup(net_sprint_ipv6_addr(addr)),
log_strdup(net_sprint_ll_addr(lladdr->addr, lladdr->len)), log_strdup(net_sprint_ll_addr(lladdr->addr, lladdr->len)),
nbr->iface); nbr->iface, net_if_get_by_iface(nbr->iface));
#if defined(CONFIG_NET_MGMT_EVENT_INFO) #if defined(CONFIG_NET_MGMT_EVENT_INFO)
info.idx = nbr->idx; info.idx = nbr->idx;
@ -722,9 +728,11 @@ static struct in6_addr *check_route(struct net_if *iface,
if (route) { if (route) {
nexthop = net_route_get_nexthop(route); nexthop = net_route_get_nexthop(route);
NET_DBG("Route %p nexthop %s", route, NET_DBG("Route %p nexthop %s iface %p/%d",
route,
nexthop ? log_strdup(net_sprint_ipv6_addr(nexthop)) : nexthop ? log_strdup(net_sprint_ipv6_addr(nexthop)) :
"<unknown>"); "<unknown>",
iface, net_if_get_by_iface(iface));
if (!nexthop) { if (!nexthop) {
net_route_del(route); net_route_del(route);
@ -883,8 +891,9 @@ ignore_frag_error:
try_send: try_send:
nbr = nbr_lookup(&net_neighbor.table, iface, nexthop); nbr = nbr_lookup(&net_neighbor.table, iface, nexthop);
NET_DBG("Neighbor lookup %p (%d) iface %p addr %s state %s", nbr, NET_DBG("Neighbor lookup %p (%d) iface %p/%d addr %s state %s", nbr,
nbr ? nbr->idx : NET_NBR_LLADDR_UNKNOWN, iface, nbr ? nbr->idx : NET_NBR_LLADDR_UNKNOWN,
iface, net_if_get_by_iface(iface),
log_strdup(net_sprint_ipv6_addr(nexthop)), log_strdup(net_sprint_ipv6_addr(nexthop)),
nbr ? net_ipv6_nbr_state2str(net_ipv6_nbr_data(nbr)->state) : nbr ? net_ipv6_nbr_state2str(net_ipv6_nbr_data(nbr)->state) :
"-"); "-");
@ -923,17 +932,22 @@ try_send:
/* In case of an error, the NS send function will unref /* In case of an error, the NS send function will unref
* the pkt. * the pkt.
*/ */
NET_DBG("Cannot send NS (%d)", ret); NET_DBG("Cannot send NS (%d) iface %p/%d",
ret, net_pkt_iface(pkt),
net_if_get_by_iface(net_pkt_iface(pkt)));
} }
NET_DBG("pkt %p (buffer %p) will be sent later", pkt, pkt->buffer); NET_DBG("pkt %p (buffer %p) will be sent later to iface %p/%d",
pkt, pkt->buffer, net_pkt_iface(pkt),
net_if_get_by_iface(net_pkt_iface(pkt)));
return NET_CONTINUE; return NET_CONTINUE;
#else #else
ARG_UNUSED(ret); ARG_UNUSED(ret);
NET_DBG("pkt %p (buffer %p) cannot be sent, dropping it.", NET_DBG("pkt %p (buffer %p) cannot be sent to iface %p/%d, "
pkt, pkt->buffer); "dropping it.", pkt, pkt->buffer,
net_pkt_iface(pkt), net_if_get_by_iface(net_pkt_iface(pkt)));
return NET_DROP; return NET_DROP;
#endif /* CONFIG_NET_IPV6_ND */ #endif /* CONFIG_NET_IPV6_ND */
@ -1074,7 +1088,8 @@ int net_ipv6_send_na(struct net_if *iface, const struct in6_addr *src,
net_pkt_cursor_init(pkt); net_pkt_cursor_init(pkt);
net_ipv6_finalize(pkt, IPPROTO_ICMPV6); net_ipv6_finalize(pkt, IPPROTO_ICMPV6);
dbg_addr_sent_tgt("Neighbor Advertisement", src, dst, &na_hdr->tgt); dbg_addr_sent_tgt("Neighbor Advertisement", src, dst, &na_hdr->tgt,
pkt);
if (net_send_data(pkt) < 0) { if (net_send_data(pkt) < 0) {
net_stats_update_ipv6_nd_drop(iface); net_stats_update_ipv6_nd_drop(iface);
@ -1104,14 +1119,16 @@ static void ns_routing_info(struct net_pkt *pkt,
net_sprint_ipv6_addr(nexthop)); net_sprint_ipv6_addr(nexthop));
if (net_ipv6_addr_cmp(nexthop, tgt)) { if (net_ipv6_addr_cmp(nexthop, tgt)) {
NET_DBG("Routing to %s iface %p", NET_DBG("Routing to %s iface %p/%d",
log_strdup(out), log_strdup(out),
net_pkt_iface(pkt)); net_pkt_iface(pkt),
net_if_get_by_iface(net_pkt_iface(pkt)));
} else { } else {
NET_DBG("Routing to %s via %s iface %p", NET_DBG("Routing to %s via %s iface %p/%d",
log_strdup(net_sprint_ipv6_addr(tgt)), log_strdup(net_sprint_ipv6_addr(tgt)),
log_strdup(out), log_strdup(out),
net_pkt_iface(pkt)); net_pkt_iface(pkt),
net_if_get_by_iface(net_pkt_iface(pkt)));
} }
} }
} }
@ -1144,7 +1161,7 @@ static enum net_verdict handle_ns_input(struct net_pkt *pkt,
} }
dbg_addr_recv_tgt("Neighbor Solicitation", dbg_addr_recv_tgt("Neighbor Solicitation",
&ip_hdr->src, &ip_hdr->dst, &ns_hdr->tgt); &ip_hdr->src, &ip_hdr->dst, &ns_hdr->tgt, pkt);
net_stats_update_ipv6_nd_recv(net_pkt_iface(pkt)); net_stats_update_ipv6_nd_recv(net_pkt_iface(pkt));
@ -1234,11 +1251,13 @@ static enum net_verdict handle_ns_input(struct net_pkt *pkt,
net_pkt_iface(pkt), &ip_hdr->src); net_pkt_iface(pkt), &ip_hdr->src);
if (!na_src) { if (!na_src) {
NET_DBG("DROP: No interface address " NET_DBG("DROP: No interface address "
"for dst %s iface %p", "for dst %s iface %p/%d",
log_strdup( log_strdup(
net_sprint_ipv6_addr( net_sprint_ipv6_addr(
&ip_hdr->src)), &ip_hdr->src)),
net_pkt_iface(pkt)); net_pkt_iface(pkt),
net_if_get_by_iface(
net_pkt_iface(pkt)));
goto drop; goto drop;
} }
@ -1274,10 +1293,11 @@ nexthop_found:
} }
if (ifaddr->addr_state == NET_ADDR_TENTATIVE) { if (ifaddr->addr_state == NET_ADDR_TENTATIVE) {
NET_DBG("DROP: DAD failed for %s iface %p", NET_DBG("DROP: DAD failed for %s iface %p/%d",
log_strdup(net_sprint_ipv6_addr( log_strdup(net_sprint_ipv6_addr(
&ifaddr->address.in6_addr)), &ifaddr->address.in6_addr)),
net_pkt_iface(pkt)); net_pkt_iface(pkt),
net_if_get_by_iface(net_pkt_iface(pkt)));
dad_failed(net_pkt_iface(pkt), dad_failed(net_pkt_iface(pkt),
&ifaddr->address.in6_addr); &ifaddr->address.in6_addr);
@ -1515,8 +1535,8 @@ static inline bool handle_na_neighbor(struct net_pkt *pkt,
nbr = nbr_lookup(&net_neighbor.table, net_pkt_iface(pkt), &na_hdr->tgt); nbr = nbr_lookup(&net_neighbor.table, net_pkt_iface(pkt), &na_hdr->tgt);
NET_DBG("Neighbor lookup %p iface %p addr %s", nbr, NET_DBG("Neighbor lookup %p iface %p/%d addr %s", nbr,
net_pkt_iface(pkt), net_pkt_iface(pkt), net_if_get_by_iface(net_pkt_iface(pkt)),
log_strdup(net_sprint_ipv6_addr(&na_hdr->tgt))); log_strdup(net_sprint_ipv6_addr(&na_hdr->tgt)));
if (!nbr) { if (!nbr) {
@ -1699,7 +1719,7 @@ static enum net_verdict handle_na_input(struct net_pkt *pkt,
} }
dbg_addr_recv_tgt("Neighbor Advertisement", dbg_addr_recv_tgt("Neighbor Advertisement",
&ip_hdr->src, &ip_hdr->dst, &na_hdr->tgt); &ip_hdr->src, &ip_hdr->dst, &na_hdr->tgt, pkt);
net_stats_update_ipv6_nd_recv(net_pkt_iface(pkt)); net_stats_update_ipv6_nd_recv(net_pkt_iface(pkt));
@ -1759,8 +1779,9 @@ static enum net_verdict handle_na_input(struct net_pkt *pkt,
ifaddr = net_if_ipv6_addr_lookup_by_iface(net_pkt_iface(pkt), ifaddr = net_if_ipv6_addr_lookup_by_iface(net_pkt_iface(pkt),
&na_hdr->tgt); &na_hdr->tgt);
if (ifaddr) { if (ifaddr) {
NET_DBG("Interface %p already has address %s", NET_DBG("Interface %p/%d already has address %s",
net_pkt_iface(pkt), net_pkt_iface(pkt),
net_if_get_by_iface(net_pkt_iface(pkt)),
log_strdup(net_sprint_ipv6_addr(&na_hdr->tgt))); log_strdup(net_sprint_ipv6_addr(&na_hdr->tgt)));
#if defined(CONFIG_NET_IPV6_DAD) #if defined(CONFIG_NET_IPV6_DAD)
@ -1896,7 +1917,8 @@ int net_ipv6_send_ns(struct net_if *iface,
} }
} }
dbg_addr_sent_tgt("Neighbor Solicitation", src, dst, &ns_hdr->tgt); dbg_addr_sent_tgt("Neighbor Solicitation", src, dst, &ns_hdr->tgt,
pkt);
if (net_send_data(pkt) < 0) { if (net_send_data(pkt) < 0) {
NET_DBG("Cannot send NS %p (pending %p)", pkt, pending); NET_DBG("Cannot send NS %p (pending %p)", pkt, pending);
@ -1971,7 +1993,7 @@ int net_ipv6_send_rs(struct net_if *iface)
net_pkt_cursor_init(pkt); net_pkt_cursor_init(pkt);
net_ipv6_finalize(pkt, IPPROTO_ICMPV6); net_ipv6_finalize(pkt, IPPROTO_ICMPV6);
dbg_addr_sent("Router Solicitation", src, &dst); dbg_addr_sent("Router Solicitation", src, &dst, pkt);
if (net_send_data(pkt) < 0) { if (net_send_data(pkt) < 0) {
net_stats_update_ipv6_nd_drop(iface); net_stats_update_ipv6_nd_drop(iface);
@ -2031,18 +2053,21 @@ static inline void handle_prefix_onlink(struct net_pkt *pkt,
prefix_info->prefix_len, prefix_info->prefix_len,
prefix_info->valid_lifetime); prefix_info->valid_lifetime);
if (prefix) { if (prefix) {
NET_DBG("Interface %p add prefix %s/%d lifetime %u", NET_DBG("Interface %p/%d add prefix %s/%d lifetime %u",
net_pkt_iface(pkt), net_pkt_iface(pkt),
net_if_get_by_iface(net_pkt_iface(pkt)),
log_strdup(net_sprint_ipv6_addr( log_strdup(net_sprint_ipv6_addr(
&prefix_info->prefix)), &prefix_info->prefix)),
prefix_info->prefix_len, prefix_info->prefix_len,
prefix_info->valid_lifetime); prefix_info->valid_lifetime);
} else { } else {
NET_ERR("Prefix %s/%d could not be added to iface %p", NET_ERR("Prefix %s/%d could not be added to "
"iface %p/%d",
log_strdup(net_sprint_ipv6_addr( log_strdup(net_sprint_ipv6_addr(
&prefix_info->prefix)), &prefix_info->prefix)),
prefix_info->prefix_len, prefix_info->prefix_len,
net_pkt_iface(pkt)); net_pkt_iface(pkt),
net_if_get_by_iface(net_pkt_iface(pkt)));
return; return;
} }
@ -2050,8 +2075,9 @@ static inline void handle_prefix_onlink(struct net_pkt *pkt,
switch (prefix_info->valid_lifetime) { switch (prefix_info->valid_lifetime) {
case 0: case 0:
NET_DBG("Interface %p delete prefix %s/%d", NET_DBG("Interface %p/%d delete prefix %s/%d",
net_pkt_iface(pkt), net_pkt_iface(pkt),
net_if_get_by_iface(net_pkt_iface(pkt)),
log_strdup(net_sprint_ipv6_addr(&prefix_info->prefix)), log_strdup(net_sprint_ipv6_addr(&prefix_info->prefix)),
prefix_info->prefix_len); prefix_info->prefix_len);
@ -2061,8 +2087,9 @@ static inline void handle_prefix_onlink(struct net_pkt *pkt,
break; break;
case NET_IPV6_ND_INFINITE_LIFETIME: case NET_IPV6_ND_INFINITE_LIFETIME:
NET_DBG("Interface %p prefix %s/%d infinite", NET_DBG("Interface %p/%d prefix %s/%d infinite",
net_pkt_iface(pkt), net_pkt_iface(pkt),
net_if_get_by_iface(net_pkt_iface(pkt)),
log_strdup(net_sprint_ipv6_addr(&prefix->prefix)), log_strdup(net_sprint_ipv6_addr(&prefix->prefix)),
prefix->len); prefix->len);
@ -2070,8 +2097,9 @@ static inline void handle_prefix_onlink(struct net_pkt *pkt,
break; break;
default: default:
NET_DBG("Interface %p update prefix %s/%u lifetime %u", NET_DBG("Interface %p/%d update prefix %s/%u lifetime %u",
net_pkt_iface(pkt), net_pkt_iface(pkt),
net_if_get_by_iface(net_pkt_iface(pkt)),
log_strdup(net_sprint_ipv6_addr(&prefix_info->prefix)), log_strdup(net_sprint_ipv6_addr(&prefix_info->prefix)),
prefix_info->prefix_len, prefix_info->valid_lifetime); prefix_info->prefix_len, prefix_info->valid_lifetime);
@ -2258,7 +2286,7 @@ static enum net_verdict handle_ra_input(struct net_pkt *pkt,
goto drop; goto drop;
} }
dbg_addr_recv("Router Advertisement", &ip_hdr->src, &ip_hdr->dst); dbg_addr_recv("Router Advertisement", &ip_hdr->src, &ip_hdr->dst, pkt);
net_stats_update_ipv6_nd_recv(net_pkt_iface(pkt)); net_stats_update_ipv6_nd_recv(net_pkt_iface(pkt));

View file

@ -115,8 +115,11 @@ static sys_slist_t timestamp_callbacks;
#if CONFIG_NET_IF_LOG_LEVEL >= LOG_LEVEL_DBG #if CONFIG_NET_IF_LOG_LEVEL >= LOG_LEVEL_DBG
#define debug_check_packet(pkt) \ #define debug_check_packet(pkt) \
do { \ do { \
NET_DBG("Processing (pkt %p, prio %d) network packet", \ NET_DBG("Processing (pkt %p, prio %d) network packet " \
pkt, net_pkt_priority(pkt)); \ "iface %p/%d", \
pkt, net_pkt_priority(pkt), \
net_pkt_iface(pkt), \
net_if_get_by_iface(net_pkt_iface(pkt))); \
\ \
NET_ASSERT(pkt->frags); \ NET_ASSERT(pkt->frags); \
} while (0) } while (0)