ndisc.c (d263dfa7d2697a43f3299b9731cd568ee49cdd2c) ndisc.c (6b2e04bc240fe9be9e690059f710e9f95346d34d)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Neighbour Discovery for IPv6
4 * Linux INET6 implementation
5 *
6 * Authors:
7 * Pedro Roque <roque@di.fc.ul.pt>
8 * Mike Shaver <shaver@ingenia.com>

--- 1159 unchanged lines hidden (view full) ---

1168}
1169
1170static void ndisc_router_discovery(struct sk_buff *skb)
1171{
1172 struct ra_msg *ra_msg = (struct ra_msg *)skb_transport_header(skb);
1173 struct neighbour *neigh = NULL;
1174 struct inet6_dev *in6_dev;
1175 struct fib6_info *rt = NULL;
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Neighbour Discovery for IPv6
4 * Linux INET6 implementation
5 *
6 * Authors:
7 * Pedro Roque <roque@di.fc.ul.pt>
8 * Mike Shaver <shaver@ingenia.com>

--- 1159 unchanged lines hidden (view full) ---

1168}
1169
1170static void ndisc_router_discovery(struct sk_buff *skb)
1171{
1172 struct ra_msg *ra_msg = (struct ra_msg *)skb_transport_header(skb);
1173 struct neighbour *neigh = NULL;
1174 struct inet6_dev *in6_dev;
1175 struct fib6_info *rt = NULL;
1176 u32 defrtr_usr_metric;
1176 struct net *net;
1177 int lifetime;
1178 struct ndisc_options ndopts;
1179 int optlen;
1180 unsigned int pref = 0;
1181 __u32 old_if_flags;
1182 bool send_ifinfo_notify = false;
1183

--- 114 unchanged lines hidden (view full) ---

1298 if (!neigh) {
1299 ND_PRINTK(0, err,
1300 "RA: %s got default router without neighbour\n",
1301 __func__);
1302 fib6_info_release(rt);
1303 return;
1304 }
1305 }
1177 struct net *net;
1178 int lifetime;
1179 struct ndisc_options ndopts;
1180 int optlen;
1181 unsigned int pref = 0;
1182 __u32 old_if_flags;
1183 bool send_ifinfo_notify = false;
1184

--- 114 unchanged lines hidden (view full) ---

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 }
1306 if (rt && lifetime == 0) {
1307 /* Set default route metric as specified by user */
1308 defrtr_usr_metric = in6_dev->cnf.ra_defrtr_metric;
1309 /* delete the route if lifetime is 0 or if metric needs change */
1310 if (rt && (lifetime == 0 || rt->fib6_metric != defrtr_usr_metric)) {
1307 ip6_del_rt(net, rt, false);
1308 rt = NULL;
1309 }
1310
1311 ip6_del_rt(net, rt, false);
1312 rt = NULL;
1313 }
1314
1311 ND_PRINTK(3, info, "RA: rt: %p lifetime: %d, for dev: %s\n",
1312 rt, lifetime, skb->dev->name);
1315 ND_PRINTK(3, info, "RA: rt: %p lifetime: %d, metric: %d, for dev: %s\n",
1316 rt, lifetime, defrtr_usr_metric, skb->dev->name);
1313 if (!rt && lifetime) {
1314 ND_PRINTK(3, info, "RA: adding default router\n");
1315
1316 rt = rt6_add_dflt_router(net, &ipv6_hdr(skb)->saddr,
1317 if (!rt && lifetime) {
1318 ND_PRINTK(3, info, "RA: adding default router\n");
1319
1320 rt = rt6_add_dflt_router(net, &ipv6_hdr(skb)->saddr,
1317 skb->dev, pref);
1321 skb->dev, pref, defrtr_usr_metric);
1318 if (!rt) {
1319 ND_PRINTK(0, err,
1320 "RA: %s failed to add default route\n",
1321 __func__);
1322 return;
1323 }
1324
1325 neigh = ip6_neigh_lookup(&rt->fib6_nh->fib_nh_gw6,

--- 639 unchanged lines hidden ---
1322 if (!rt) {
1323 ND_PRINTK(0, err,
1324 "RA: %s failed to add default route\n",
1325 __func__);
1326 return;
1327 }
1328
1329 neigh = ip6_neigh_lookup(&rt->fib6_nh->fib_nh_gw6,

--- 639 unchanged lines hidden ---