Re: [PATCH v2 net-next 1/1] Allow user to set metric on default route learned via Router Advertisement.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Praveen,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on 139711f033f636cc78b6aaf7363252241b9698ef]

url:    https://github.com/0day-ci/linux/commits/Praveen-Chaudhary/Allow-user-to-set-metric-on-default-route-learned-via-Router-Advertisement/20210115-160758
base:    139711f033f636cc78b6aaf7363252241b9698ef
config: nds32-randconfig-r015-20210115 (attached as .config)
compiler: nds32le-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/35f232fe80f8b50430aee1c6e534cba119c88de8
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Praveen-Chaudhary/Allow-user-to-set-metric-on-default-route-learned-via-Router-Advertisement/20210115-160758
        git checkout 35f232fe80f8b50430aee1c6e534cba119c88de8
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=nds32 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All errors (new ones prefixed by >>):

   net/ipv6/ndisc.c: In function 'ndisc_router_discovery':
>> net/ipv6/ndisc.c:1308:35: error: 'struct ipv6_devconf' has no member named 'accept_ra_defrtr_metric'; did you mean 'accept_ra_defrtr'?
    1308 |  defrtr_usr_metric = in6_dev->cnf.accept_ra_defrtr_metric;
         |                                   ^~~~~~~~~~~~~~~~~~~~~~~
         |                                   accept_ra_defrtr

Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for FRAME_POINTER
   Depends on DEBUG_KERNEL && (M68K || UML || SUPERH) || ARCH_WANT_FRAME_POINTERS
   Selected by
   - LATENCYTOP && DEBUG_KERNEL && STACKTRACE_SUPPORT && PROC_FS && !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM && !ARC && !X86


vim +1308 net/ipv6/ndisc.c

  1241	
  1242		if (in6_dev->if_flags & IF_RS_SENT) {
  1243			/*
  1244			 *	flag that an RA was received after an RS was sent
  1245			 *	out on this interface.
  1246			 */
  1247			in6_dev->if_flags |= IF_RA_RCVD;
  1248		}
  1249	
  1250		/*
  1251		 * Remember the managed/otherconf flags from most recently
  1252		 * received RA message (RFC 2462) -- yoshfuji
  1253		 */
  1254		old_if_flags = in6_dev->if_flags;
  1255		in6_dev->if_flags = (in6_dev->if_flags & ~(IF_RA_MANAGED |
  1256					IF_RA_OTHERCONF)) |
  1257					(ra_msg->icmph.icmp6_addrconf_managed ?
  1258						IF_RA_MANAGED : 0) |
  1259					(ra_msg->icmph.icmp6_addrconf_other ?
  1260						IF_RA_OTHERCONF : 0);
  1261	
  1262		if (old_if_flags != in6_dev->if_flags)
  1263			send_ifinfo_notify = true;
  1264	
  1265		if (!in6_dev->cnf.accept_ra_defrtr) {
  1266			ND_PRINTK(2, info,
  1267				  "RA: %s, defrtr is false for dev: %s\n",
  1268				  __func__, skb->dev->name);
  1269			goto skip_defrtr;
  1270		}
  1271	
  1272		/* Do not accept RA with source-addr found on local machine unless
  1273		 * accept_ra_from_local is set to true.
  1274		 */
  1275		net = dev_net(in6_dev->dev);
  1276		if (!in6_dev->cnf.accept_ra_from_local &&
  1277		    ipv6_chk_addr(net, &ipv6_hdr(skb)->saddr, in6_dev->dev, 0)) {
  1278			ND_PRINTK(2, info,
  1279				  "RA from local address detected on dev: %s: default router ignored\n",
  1280				  skb->dev->name);
  1281			goto skip_defrtr;
  1282		}
  1283	
  1284		lifetime = ntohs(ra_msg->icmph.icmp6_rt_lifetime);
  1285	
  1286	#ifdef CONFIG_IPV6_ROUTER_PREF
  1287		pref = ra_msg->icmph.icmp6_router_pref;
  1288		/* 10b is handled as if it were 00b (medium) */
  1289		if (pref == ICMPV6_ROUTER_PREF_INVALID ||
  1290		    !in6_dev->cnf.accept_ra_rtr_pref)
  1291			pref = ICMPV6_ROUTER_PREF_MEDIUM;
  1292	#endif
  1293		/* routes added from RAs do not use nexthop objects */
  1294		rt = rt6_get_dflt_router(net, &ipv6_hdr(skb)->saddr, skb->dev);
  1295		if (rt) {
  1296			neigh = ip6_neigh_lookup(&rt->fib6_nh->fib_nh_gw6,
  1297						 rt->fib6_nh->fib_nh_dev, NULL,
  1298						  &ipv6_hdr(skb)->saddr);
  1299			if (!neigh) {
  1300				ND_PRINTK(0, err,
  1301					  "RA: %s got default router without neighbour\n",
  1302					  __func__);
  1303				fib6_info_release(rt);
  1304				return;
  1305			}
  1306		}
  1307		/* Set default route metric if specified by user */
> 1308		defrtr_usr_metric = in6_dev->cnf.accept_ra_defrtr_metric;
  1309		if (defrtr_usr_metric == 0)
  1310			defrtr_usr_metric = IP6_RT_PRIO_USER;
  1311		/* delete the route if lifetime is 0 or if metric needs change */
  1312		if (rt && ((lifetime == 0) || (rt->fib6_metric != defrtr_usr_metric)))  {
  1313			ip6_del_rt(net, rt, false);
  1314			rt = NULL;
  1315		}
  1316	
  1317		ND_PRINTK(3, info, "RA: rt: %p  lifetime: %d, metric: %d, for dev: %s\n",
  1318			  rt, lifetime, defrtr_usr_metric, skb->dev->name);
  1319		if (!rt && lifetime) {
  1320			ND_PRINTK(3, info, "RA: adding default router\n");
  1321	
  1322			rt = rt6_add_dflt_router(net, &ipv6_hdr(skb)->saddr,
  1323						 skb->dev, pref, defrtr_usr_metric);
  1324			if (!rt) {
  1325				ND_PRINTK(0, err,
  1326					  "RA: %s failed to add default route\n",
  1327					  __func__);
  1328				return;
  1329			}
  1330	
  1331			neigh = ip6_neigh_lookup(&rt->fib6_nh->fib_nh_gw6,
  1332						 rt->fib6_nh->fib_nh_dev, NULL,
  1333						  &ipv6_hdr(skb)->saddr);
  1334			if (!neigh) {
  1335				ND_PRINTK(0, err,
  1336					  "RA: %s got default router without neighbour\n",
  1337					  __func__);
  1338				fib6_info_release(rt);
  1339				return;
  1340			}
  1341			neigh->flags |= NTF_ROUTER;
  1342		} else if (rt) {
  1343			rt->fib6_flags = (rt->fib6_flags & ~RTF_PREF_MASK) | RTF_PREF(pref);
  1344		}
  1345	
  1346		if (rt)
  1347			fib6_set_expires(rt, jiffies + (HZ * lifetime));
  1348		if (in6_dev->cnf.accept_ra_min_hop_limit < 256 &&
  1349		    ra_msg->icmph.icmp6_hop_limit) {
  1350			if (in6_dev->cnf.accept_ra_min_hop_limit <= ra_msg->icmph.icmp6_hop_limit) {
  1351				in6_dev->cnf.hop_limit = ra_msg->icmph.icmp6_hop_limit;
  1352				fib6_metric_set(rt, RTAX_HOPLIMIT,
  1353						ra_msg->icmph.icmp6_hop_limit);
  1354			} else {
  1355				ND_PRINTK(2, warn, "RA: Got route advertisement with lower hop_limit than minimum\n");
  1356			}
  1357		}
  1358	
  1359	skip_defrtr:
  1360	
  1361		/*
  1362		 *	Update Reachable Time and Retrans Timer
  1363		 */
  1364	
  1365		if (in6_dev->nd_parms) {
  1366			unsigned long rtime = ntohl(ra_msg->retrans_timer);
  1367	
  1368			if (rtime && rtime/1000 < MAX_SCHEDULE_TIMEOUT/HZ) {
  1369				rtime = (rtime*HZ)/1000;
  1370				if (rtime < HZ/100)
  1371					rtime = HZ/100;
  1372				NEIGH_VAR_SET(in6_dev->nd_parms, RETRANS_TIME, rtime);
  1373				in6_dev->tstamp = jiffies;
  1374				send_ifinfo_notify = true;
  1375			}
  1376	
  1377			rtime = ntohl(ra_msg->reachable_time);
  1378			if (rtime && rtime/1000 < MAX_SCHEDULE_TIMEOUT/(3*HZ)) {
  1379				rtime = (rtime*HZ)/1000;
  1380	
  1381				if (rtime < HZ/10)
  1382					rtime = HZ/10;
  1383	
  1384				if (rtime != NEIGH_VAR(in6_dev->nd_parms, BASE_REACHABLE_TIME)) {
  1385					NEIGH_VAR_SET(in6_dev->nd_parms,
  1386						      BASE_REACHABLE_TIME, rtime);
  1387					NEIGH_VAR_SET(in6_dev->nd_parms,
  1388						      GC_STALETIME, 3 * rtime);
  1389					in6_dev->nd_parms->reachable_time = neigh_rand_reach_time(rtime);
  1390					in6_dev->tstamp = jiffies;
  1391					send_ifinfo_notify = true;
  1392				}
  1393			}
  1394		}
  1395	
  1396		/*
  1397		 *	Send a notify if RA changed managed/otherconf flags or timer settings
  1398		 */
  1399		if (send_ifinfo_notify)
  1400			inet6_ifinfo_notify(RTM_NEWLINK, in6_dev);
  1401	
  1402	skip_linkparms:
  1403	
  1404		/*
  1405		 *	Process options.
  1406		 */
  1407	
  1408		if (!neigh)
  1409			neigh = __neigh_lookup(&nd_tbl, &ipv6_hdr(skb)->saddr,
  1410					       skb->dev, 1);
  1411		if (neigh) {
  1412			u8 *lladdr = NULL;
  1413			if (ndopts.nd_opts_src_lladdr) {
  1414				lladdr = ndisc_opt_addr_data(ndopts.nd_opts_src_lladdr,
  1415							     skb->dev);
  1416				if (!lladdr) {
  1417					ND_PRINTK(2, warn,
  1418						  "RA: invalid link-layer address length\n");
  1419					goto out;
  1420				}
  1421			}
  1422			ndisc_update(skb->dev, neigh, lladdr, NUD_STALE,
  1423				     NEIGH_UPDATE_F_WEAK_OVERRIDE|
  1424				     NEIGH_UPDATE_F_OVERRIDE|
  1425				     NEIGH_UPDATE_F_OVERRIDE_ISROUTER|
  1426				     NEIGH_UPDATE_F_ISROUTER,
  1427				     NDISC_ROUTER_ADVERTISEMENT, &ndopts);
  1428		}
  1429	
  1430		if (!ipv6_accept_ra(in6_dev)) {
  1431			ND_PRINTK(2, info,
  1432				  "RA: %s, accept_ra is false for dev: %s\n",
  1433				  __func__, skb->dev->name);
  1434			goto out;
  1435		}
  1436	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux