Skip to content

Commit f2a762d

Browse files
greearbdavem330
authored andcommitted
ipv6: Add more debugging around accept-ra logic.
This is disabled by default, just like similar debug info already in this module. But, makes it easier to find out why RA is not being accepted when debugging strange behaviour. Signed-off-by: Ben Greear <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 4135ab8 commit f2a762d

File tree

1 file changed

+43
-8
lines changed

1 file changed

+43
-8
lines changed

net/ipv6/ndisc.c

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,6 +1070,9 @@ static void ndisc_router_discovery(struct sk_buff *skb)
10701070
optlen = (skb_tail_pointer(skb) - skb_transport_header(skb)) -
10711071
sizeof(struct ra_msg);
10721072

1073+
ND_PRINTK(2, info,
1074+
"RA: %s, dev: %s\n",
1075+
__func__, skb->dev->name);
10731076
if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL)) {
10741077
ND_PRINTK(2, warn, "RA: source address is not link-local\n");
10751078
return;
@@ -1102,13 +1105,21 @@ static void ndisc_router_discovery(struct sk_buff *skb)
11021105
return;
11031106
}
11041107

1105-
if (!ipv6_accept_ra(in6_dev))
1108+
if (!ipv6_accept_ra(in6_dev)) {
1109+
ND_PRINTK(2, info,
1110+
"RA: %s, did not accept ra for dev: %s\n",
1111+
__func__, skb->dev->name);
11061112
goto skip_linkparms;
1113+
}
11071114

11081115
#ifdef CONFIG_IPV6_NDISC_NODETYPE
11091116
/* skip link-specific parameters from interior routers */
1110-
if (skb->ndisc_nodetype == NDISC_NODETYPE_NODEFAULT)
1117+
if (skb->ndisc_nodetype == NDISC_NODETYPE_NODEFAULT) {
1118+
ND_PRINTK(2, info,
1119+
"RA: %s, nodetype is NODEFAULT, dev: %s\n",
1120+
__func__, skb->dev->name);
11111121
goto skip_linkparms;
1122+
}
11121123
#endif
11131124

11141125
if (in6_dev->if_flags & IF_RS_SENT) {
@@ -1130,11 +1141,20 @@ static void ndisc_router_discovery(struct sk_buff *skb)
11301141
(ra_msg->icmph.icmp6_addrconf_other ?
11311142
IF_RA_OTHERCONF : 0);
11321143

1133-
if (!in6_dev->cnf.accept_ra_defrtr)
1144+
if (!in6_dev->cnf.accept_ra_defrtr) {
1145+
ND_PRINTK(2, info,
1146+
"RA: %s, defrtr is false for dev: %s\n",
1147+
__func__, skb->dev->name);
11341148
goto skip_defrtr;
1149+
}
11351150

1136-
if (ipv6_chk_addr(dev_net(in6_dev->dev), &ipv6_hdr(skb)->saddr, NULL, 0))
1151+
if (ipv6_chk_addr(dev_net(in6_dev->dev), &ipv6_hdr(skb)->saddr,
1152+
NULL, 0)) {
1153+
ND_PRINTK(2, info,
1154+
"RA: %s, chk_addr failed for dev: %s\n",
1155+
__func__, skb->dev->name);
11371156
goto skip_defrtr;
1157+
}
11381158

11391159
lifetime = ntohs(ra_msg->icmph.icmp6_rt_lifetime);
11401160

@@ -1163,8 +1183,10 @@ static void ndisc_router_discovery(struct sk_buff *skb)
11631183
rt = NULL;
11641184
}
11651185

1186+
ND_PRINTK(3, info, "RA: rt: %p lifetime: %d, for dev: %s\n",
1187+
rt, lifetime, skb->dev->name);
11661188
if (rt == NULL && lifetime) {
1167-
ND_PRINTK(3, dbg, "RA: adding default router\n");
1189+
ND_PRINTK(3, info, "RA: adding default router\n");
11681190

11691191
rt = rt6_add_dflt_router(&ipv6_hdr(skb)->saddr, skb->dev, pref);
11701192
if (rt == NULL) {
@@ -1260,12 +1282,21 @@ static void ndisc_router_discovery(struct sk_buff *skb)
12601282
NEIGH_UPDATE_F_ISROUTER);
12611283
}
12621284

1263-
if (!ipv6_accept_ra(in6_dev))
1285+
if (!ipv6_accept_ra(in6_dev)) {
1286+
ND_PRINTK(2, info,
1287+
"RA: %s, accept_ra is false for dev: %s\n",
1288+
__func__, skb->dev->name);
12641289
goto out;
1290+
}
12651291

12661292
#ifdef CONFIG_IPV6_ROUTE_INFO
1267-
if (ipv6_chk_addr(dev_net(in6_dev->dev), &ipv6_hdr(skb)->saddr, NULL, 0))
1293+
if (ipv6_chk_addr(dev_net(in6_dev->dev), &ipv6_hdr(skb)->saddr,
1294+
NULL, 0)) {
1295+
ND_PRINTK(2, info,
1296+
"RA: %s, chk-addr (route info) is false for dev: %s\n",
1297+
__func__, skb->dev->name);
12681298
goto skip_routeinfo;
1299+
}
12691300

12701301
if (in6_dev->cnf.accept_ra_rtr_pref && ndopts.nd_opts_ri) {
12711302
struct nd_opt_hdr *p;
@@ -1293,8 +1324,12 @@ static void ndisc_router_discovery(struct sk_buff *skb)
12931324

12941325
#ifdef CONFIG_IPV6_NDISC_NODETYPE
12951326
/* skip link-specific ndopts from interior routers */
1296-
if (skb->ndisc_nodetype == NDISC_NODETYPE_NODEFAULT)
1327+
if (skb->ndisc_nodetype == NDISC_NODETYPE_NODEFAULT) {
1328+
ND_PRINTK(2, info,
1329+
"RA: %s, nodetype is NODEFAULT (interior routes), dev: %s\n",
1330+
__func__, skb->dev->name);
12971331
goto out;
1332+
}
12981333
#endif
12991334

13001335
if (in6_dev->cnf.accept_ra_pinfo && ndopts.nd_opts_pi) {

0 commit comments

Comments
 (0)