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 <l...@intel.com>

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-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to