struct mlxsw_sp_rt6 {
        struct list_head list;
-       struct rt6_info *rt;
+       struct fib6_info *rt;
 };
 
 struct mlxsw_sp_lpm_tree {
 
        for (i = 0; i < nh_grp->count; i++) {
                struct mlxsw_sp_nexthop *nh = &nh_grp->nexthops[i];
-               struct rt6_info *rt = mlxsw_sp_rt6->rt;
+               struct fib6_info *rt = mlxsw_sp_rt6->rt;
 
                if (nh->rif && nh->rif->dev == rt->fib6_nh.nh_dev &&
                    ipv6_addr_equal((const struct in6_addr *) &nh->gw_addr,
        fib6_entry = container_of(fib_entry, struct mlxsw_sp_fib6_entry,
                                  common);
        list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) {
-               struct rt6_info *rt = mlxsw_sp_rt6->rt;
+               struct fib6_info *rt = mlxsw_sp_rt6->rt;
 
                rt->fib6_nh.nh_flags &= ~RTNH_F_OFFLOAD;
        }
        mlxsw_sp_fib_node_put(mlxsw_sp, fib_node);
 }
 
-static bool mlxsw_sp_fib6_rt_should_ignore(const struct rt6_info *rt)
+static bool mlxsw_sp_fib6_rt_should_ignore(const struct fib6_info *rt)
 {
        /* Packets with link-local destination IP arriving to the router
         * are trapped to the CPU, so no need to program specific routes
        return false;
 }
 
-static struct mlxsw_sp_rt6 *mlxsw_sp_rt6_create(struct rt6_info *rt)
+static struct mlxsw_sp_rt6 *mlxsw_sp_rt6_create(struct fib6_info *rt)
 {
        struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
 
         * memory.
         */
        mlxsw_sp_rt6->rt = rt;
-       rt6_hold(rt);
+       fib6_info_hold(rt);
 
        return mlxsw_sp_rt6;
 }
 
 #if IS_ENABLED(CONFIG_IPV6)
-static void mlxsw_sp_rt6_release(struct rt6_info *rt)
+static void mlxsw_sp_rt6_release(struct fib6_info *rt)
 {
-       rt6_release(rt);
+       fib6_info_release(rt);
 }
 #else
-static void mlxsw_sp_rt6_release(struct rt6_info *rt)
+static void mlxsw_sp_rt6_release(struct fib6_info *rt)
 {
 }
 #endif
        kfree(mlxsw_sp_rt6);
 }
 
-static bool mlxsw_sp_fib6_rt_can_mp(const struct rt6_info *rt)
+static bool mlxsw_sp_fib6_rt_can_mp(const struct fib6_info *rt)
 {
        /* RTF_CACHE routes are ignored */
        return (rt->rt6i_flags & (RTF_GATEWAY | RTF_ADDRCONF)) == RTF_GATEWAY;
 }
 
-static struct rt6_info *
+static struct fib6_info *
 mlxsw_sp_fib6_entry_rt(const struct mlxsw_sp_fib6_entry *fib6_entry)
 {
        return list_first_entry(&fib6_entry->rt6_list, struct mlxsw_sp_rt6,
 
 static struct mlxsw_sp_fib6_entry *
 mlxsw_sp_fib6_node_mp_entry_find(const struct mlxsw_sp_fib_node *fib_node,
-                                const struct rt6_info *nrt, bool replace)
+                                const struct fib6_info *nrt, bool replace)
 {
        struct mlxsw_sp_fib6_entry *fib6_entry;
 
                return NULL;
 
        list_for_each_entry(fib6_entry, &fib_node->entry_list, common.list) {
-               struct rt6_info *rt = mlxsw_sp_fib6_entry_rt(fib6_entry);
+               struct fib6_info *rt = mlxsw_sp_fib6_entry_rt(fib6_entry);
 
                /* RT6_TABLE_LOCAL and RT6_TABLE_MAIN share the same
                 * virtual router.
 
 static struct mlxsw_sp_rt6 *
 mlxsw_sp_fib6_entry_rt_find(const struct mlxsw_sp_fib6_entry *fib6_entry,
-                           const struct rt6_info *rt)
+                           const struct fib6_info *rt)
 {
        struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
 
 }
 
 static bool mlxsw_sp_nexthop6_ipip_type(const struct mlxsw_sp *mlxsw_sp,
-                                       const struct rt6_info *rt,
+                                       const struct fib6_info *rt,
                                        enum mlxsw_sp_ipip_type *ret)
 {
        return rt->fib6_nh.nh_dev &&
 static int mlxsw_sp_nexthop6_type_init(struct mlxsw_sp *mlxsw_sp,
                                       struct mlxsw_sp_nexthop_group *nh_grp,
                                       struct mlxsw_sp_nexthop *nh,
-                                      const struct rt6_info *rt)
+                                      const struct fib6_info *rt)
 {
        const struct mlxsw_sp_ipip_ops *ipip_ops;
        struct mlxsw_sp_ipip_entry *ipip_entry;
 static int mlxsw_sp_nexthop6_init(struct mlxsw_sp *mlxsw_sp,
                                  struct mlxsw_sp_nexthop_group *nh_grp,
                                  struct mlxsw_sp_nexthop *nh,
-                                 const struct rt6_info *rt)
+                                 const struct fib6_info *rt)
 {
        struct net_device *dev = rt->fib6_nh.nh_dev;
 
 }
 
 static bool mlxsw_sp_rt6_is_gateway(const struct mlxsw_sp *mlxsw_sp,
-                                   const struct rt6_info *rt)
+                                   const struct fib6_info *rt)
 {
        return rt->rt6i_flags & RTF_GATEWAY ||
               mlxsw_sp_nexthop6_ipip_type(mlxsw_sp, rt, NULL);
        nh_grp->gateway = mlxsw_sp_rt6_is_gateway(mlxsw_sp, mlxsw_sp_rt6->rt);
        nh_grp->count = fib6_entry->nrt6;
        for (i = 0; i < nh_grp->count; i++) {
-               struct rt6_info *rt = mlxsw_sp_rt6->rt;
+               struct fib6_info *rt = mlxsw_sp_rt6->rt;
 
                nh = &nh_grp->nexthops[i];
                err = mlxsw_sp_nexthop6_init(mlxsw_sp, nh_grp, nh, rt);
 static int
 mlxsw_sp_fib6_entry_nexthop_add(struct mlxsw_sp *mlxsw_sp,
                                struct mlxsw_sp_fib6_entry *fib6_entry,
-                               struct rt6_info *rt)
+                               struct fib6_info *rt)
 {
        struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
        int err;
 static void
 mlxsw_sp_fib6_entry_nexthop_del(struct mlxsw_sp *mlxsw_sp,
                                struct mlxsw_sp_fib6_entry *fib6_entry,
-                               struct rt6_info *rt)
+                               struct fib6_info *rt)
 {
        struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
 
 
 static void mlxsw_sp_fib6_entry_type_set(struct mlxsw_sp *mlxsw_sp,
                                         struct mlxsw_sp_fib_entry *fib_entry,
-                                        const struct rt6_info *rt)
+                                        const struct fib6_info *rt)
 {
        /* Packets hitting RTF_REJECT routes need to be discarded by the
         * stack. We can rely on their destination device not having a
 static struct mlxsw_sp_fib6_entry *
 mlxsw_sp_fib6_entry_create(struct mlxsw_sp *mlxsw_sp,
                           struct mlxsw_sp_fib_node *fib_node,
-                          struct rt6_info *rt)
+                          struct fib6_info *rt)
 {
        struct mlxsw_sp_fib6_entry *fib6_entry;
        struct mlxsw_sp_fib_entry *fib_entry;
 
 static struct mlxsw_sp_fib6_entry *
 mlxsw_sp_fib6_node_entry_find(const struct mlxsw_sp_fib_node *fib_node,
-                             const struct rt6_info *nrt, bool replace)
+                             const struct fib6_info *nrt, bool replace)
 {
        struct mlxsw_sp_fib6_entry *fib6_entry, *fallback = NULL;
 
        list_for_each_entry(fib6_entry, &fib_node->entry_list, common.list) {
-               struct rt6_info *rt = mlxsw_sp_fib6_entry_rt(fib6_entry);
+               struct fib6_info *rt = mlxsw_sp_fib6_entry_rt(fib6_entry);
 
                if (rt->rt6i_table->tb6_id > nrt->rt6i_table->tb6_id)
                        continue;
                               bool replace)
 {
        struct mlxsw_sp_fib_node *fib_node = new6_entry->common.fib_node;
-       struct rt6_info *nrt = mlxsw_sp_fib6_entry_rt(new6_entry);
+       struct fib6_info *nrt = mlxsw_sp_fib6_entry_rt(new6_entry);
        struct mlxsw_sp_fib6_entry *fib6_entry;
 
        fib6_entry = mlxsw_sp_fib6_node_entry_find(fib_node, nrt, replace);
                struct mlxsw_sp_fib6_entry *last;
 
                list_for_each_entry(last, &fib_node->entry_list, common.list) {
-                       struct rt6_info *rt = mlxsw_sp_fib6_entry_rt(last);
+                       struct fib6_info *rt = mlxsw_sp_fib6_entry_rt(last);
 
                        if (nrt->rt6i_table->tb6_id > rt->rt6i_table->tb6_id)
                                break;
 
 static struct mlxsw_sp_fib6_entry *
 mlxsw_sp_fib6_entry_lookup(struct mlxsw_sp *mlxsw_sp,
-                          const struct rt6_info *rt)
+                          const struct fib6_info *rt)
 {
        struct mlxsw_sp_fib6_entry *fib6_entry;
        struct mlxsw_sp_fib_node *fib_node;
                return NULL;
 
        list_for_each_entry(fib6_entry, &fib_node->entry_list, common.list) {
-               struct rt6_info *iter_rt = mlxsw_sp_fib6_entry_rt(fib6_entry);
+               struct fib6_info *iter_rt = mlxsw_sp_fib6_entry_rt(fib6_entry);
 
                if (rt->rt6i_table->tb6_id == iter_rt->rt6i_table->tb6_id &&
                    rt->rt6i_metric == iter_rt->rt6i_metric &&
 }
 
 static int mlxsw_sp_router_fib6_add(struct mlxsw_sp *mlxsw_sp,
-                                   struct rt6_info *rt, bool replace)
+                                   struct fib6_info *rt, bool replace)
 {
        struct mlxsw_sp_fib6_entry *fib6_entry;
        struct mlxsw_sp_fib_node *fib_node;
 }
 
 static void mlxsw_sp_router_fib6_del(struct mlxsw_sp *mlxsw_sp,
-                                    struct rt6_info *rt)
+                                    struct fib6_info *rt)
 {
        struct mlxsw_sp_fib6_entry *fib6_entry;
        struct mlxsw_sp_fib_node *fib_node;
                fen6_info = container_of(info, struct fib6_entry_notifier_info,
                                         info);
                fib_work->fen6_info = *fen6_info;
-               rt6_hold(fib_work->fen6_info.rt);
+               fib6_info_hold(fib_work->fen6_info.rt);
                break;
        }
 }
 
        struct delayed_work     dad_work;
 
        struct inet6_dev        *idev;
-       struct rt6_info         *rt;
+       struct fib6_info        *rt;
 
        struct hlist_node       addr_lst;
        struct list_head        if_list;
 struct ifacaddr6 {
        struct in6_addr         aca_addr;
        struct inet6_dev        *aca_idev;
-       struct rt6_info         *aca_rt;
+       struct fib6_info        *aca_rt;
        struct ifacaddr6        *aca_next;
        int                     aca_users;
        refcount_t              aca_refcnt;
 
 #ifdef CONFIG_IPV6_SUBTREES
        struct fib6_node __rcu  *subtree;
 #endif
-       struct rt6_info __rcu   *leaf;
+       struct fib6_info __rcu  *leaf;
 
        __u16                   fn_bit;         /* bit key */
        __u16                   fn_flags;
        int                     fn_sernum;
-       struct rt6_info __rcu   *rr_ptr;
+       struct fib6_info __rcu  *rr_ptr;
        struct rcu_head         rcu;
 };
 
 struct rt6_info {
        struct dst_entry                dst;
        struct rt6_info __rcu           *rt6_next;
-       struct rt6_info                 *from;
+       struct fib6_info                *from;
 
        /*
         * Tail elements of dst_entry (__refcnt etc.)
        return ((struct rt6_info *)dst)->rt6i_idev;
 }
 
-static inline void fib6_clean_expires(struct rt6_info *f6i)
+static inline void fib6_clean_expires(struct fib6_info *f6i)
 {
        f6i->rt6i_flags &= ~RTF_EXPIRES;
        f6i->expires = 0;
 }
 
-static inline void fib6_set_expires(struct rt6_info *f6i,
+static inline void fib6_set_expires(struct fib6_info *f6i,
                                    unsigned long expires)
 {
        f6i->expires = expires;
        f6i->rt6i_flags |= RTF_EXPIRES;
 }
 
-static inline bool fib6_check_expired(const struct rt6_info *f6i)
+static inline bool fib6_check_expired(const struct fib6_info *f6i)
 {
        if (f6i->rt6i_flags & RTF_EXPIRES)
                return time_after(jiffies, f6i->expires);
  * Return true if we can get cookie safely
  * Return false if not
  */
-static inline bool rt6_get_cookie_safe(const struct rt6_info *rt,
+static inline bool rt6_get_cookie_safe(const struct fib6_info *rt,
                                       u32 *cookie)
 {
        struct fib6_node *fn;
 
 void rt6_free_pcpu(struct rt6_info *non_pcpu_rt);
 
-struct rt6_info *fib6_info_alloc(gfp_t gfp_flags);
-void fib6_info_destroy(struct rt6_info *f6i);
+struct fib6_info *fib6_info_alloc(gfp_t gfp_flags);
+void fib6_info_destroy(struct fib6_info *f6i);
 
-static inline void fib6_info_hold(struct rt6_info *f6i)
+static inline void fib6_info_hold(struct fib6_info *f6i)
 {
        atomic_inc(&f6i->rt6i_ref);
 }
 
-static inline void fib6_info_release(struct rt6_info *f6i)
+static inline void fib6_info_release(struct fib6_info *f6i)
 {
        if (f6i && atomic_dec_and_test(&f6i->rt6i_ref))
                fib6_info_destroy(f6i);
 struct fib6_walker {
        struct list_head lh;
        struct fib6_node *root, *node;
-       struct rt6_info *leaf;
+       struct fib6_info *leaf;
        enum fib6_walk_state state;
        unsigned int skip;
        unsigned int count;
 
 struct fib6_entry_notifier_info {
        struct fib_notifier_info info; /* must be first */
-       struct rt6_info *rt;
+       struct fib6_info *rt;
 };
 
 /*
                              const struct in6_addr *saddr, int src_len,
                              bool exact_match);
 
-void fib6_clean_all(struct net *net, int (*func)(struct rt6_info *, void *arg),
+void fib6_clean_all(struct net *net, int (*func)(struct fib6_info *, void *arg),
                    void *arg);
 
-int fib6_add(struct fib6_node *root, struct rt6_info *rt,
+int fib6_add(struct fib6_node *root, struct fib6_info *rt,
             struct nl_info *info, struct netlink_ext_ack *extack);
-int fib6_del(struct rt6_info *rt, struct nl_info *info);
+int fib6_del(struct fib6_info *rt, struct nl_info *info);
 
-void inet6_rt_notify(int event, struct rt6_info *rt, struct nl_info *info,
+void inet6_rt_notify(int event, struct fib6_info *rt, struct nl_info *info,
                     unsigned int flags);
 
 void fib6_run_gc(unsigned long expires, struct net *net, bool force);
 unsigned int fib6_tables_seq_read(struct net *net);
 int fib6_tables_dump(struct net *net, struct notifier_block *nb);
 
-void fib6_update_sernum(struct net *net, struct rt6_info *rt);
-void fib6_update_sernum_upto_root(struct net *net, struct rt6_info *rt);
+void fib6_update_sernum(struct net *net, struct fib6_info *rt);
+void fib6_update_sernum_upto_root(struct net *net, struct fib6_info *rt);
 
-void fib6_metric_set(struct rt6_info *f6i, int metric, u32 val);
-static inline bool fib6_metric_locked(struct rt6_info *f6i, int metric)
+void fib6_metric_set(struct fib6_info *f6i, int metric, u32 val);
+static inline bool fib6_metric_locked(struct fib6_info *f6i, int metric)
 {
        return !!(f6i->fib6_metrics->metrics[RTAX_LOCK - 1] & (1 << metric));
 }
 
                (IPV6_ADDR_MULTICAST | IPV6_ADDR_LINKLOCAL | IPV6_ADDR_LOOPBACK);
 }
 
-static inline bool rt6_qualify_for_ecmp(const struct rt6_info *rt)
+static inline bool rt6_qualify_for_ecmp(const struct fib6_info *rt)
 {
        return (rt->rt6i_flags & (RTF_GATEWAY|RTF_ADDRCONF|RTF_DYNAMIC)) ==
               RTF_GATEWAY;
 
 int ip6_route_add(struct fib6_config *cfg, gfp_t gfp_flags,
                  struct netlink_ext_ack *extack);
-int ip6_ins_rt(struct net *net, struct rt6_info *rt);
-int ip6_del_rt(struct net *net, struct rt6_info *rt);
+int ip6_ins_rt(struct net *net, struct fib6_info *rt);
+int ip6_del_rt(struct net *net, struct fib6_info *rt);
 
-void rt6_flush_exceptions(struct rt6_info *rt);
-void rt6_age_exceptions(struct rt6_info *rt, struct fib6_gc_args *gc_args,
+void rt6_flush_exceptions(struct fib6_info *rt);
+void rt6_age_exceptions(struct fib6_info *rt, struct fib6_gc_args *gc_args,
                        unsigned long now);
 
-static inline int ip6_route_get_saddr(struct net *net, struct rt6_info *rt,
+static inline int ip6_route_get_saddr(struct net *net, struct fib6_info *rt,
                                      const struct in6_addr *daddr,
                                      unsigned int prefs,
                                      struct in6_addr *saddr)
 
 void fib6_force_start_gc(struct net *net);
 
-struct rt6_info *addrconf_dst_alloc(struct net *net, struct inet6_dev *idev,
-                                   const struct in6_addr *addr, bool anycast,
-                                   gfp_t gfp_flags);
+struct fib6_info *addrconf_dst_alloc(struct net *net, struct inet6_dev *idev,
+                                    const struct in6_addr *addr, bool anycast,
+                                    gfp_t gfp_flags);
 
 struct rt6_info *ip6_dst_alloc(struct net *net, struct net_device *dev,
                               int flags);
  *     support functions for ND
  *
  */
-struct rt6_info *rt6_get_dflt_router(struct net *net,
+struct fib6_info *rt6_get_dflt_router(struct net *net,
                                     const struct in6_addr *addr,
                                     struct net_device *dev);
-struct rt6_info *rt6_add_dflt_router(struct net *net,
+struct fib6_info *rt6_add_dflt_router(struct net *net,
                                     const struct in6_addr *gwaddr,
                                     struct net_device *dev, unsigned int pref);
 
        struct net *net;
 };
 
-int rt6_dump_route(struct rt6_info *rt, void *p_arg);
+int rt6_dump_route(struct fib6_info *rt, void *p_arg);
 void rt6_mtu_change(struct net_device *dev, unsigned int mtu);
 void rt6_remove_prefsrc(struct inet6_ifaddr *ifp);
 void rt6_clean_tohost(struct net *net, struct in6_addr *gateway);
 void rt6_sync_up(struct net_device *dev, unsigned int nh_flags);
 void rt6_disable_ip(struct net_device *dev, unsigned long event);
 void rt6_sync_down_dev(struct net_device *dev, unsigned long event);
-void rt6_multipath_rebalance(struct rt6_info *rt);
+void rt6_multipath_rebalance(struct fib6_info *rt);
 
 void rt6_uncached_list_add(struct rt6_info *rt);
 void rt6_uncached_list_del(struct rt6_info *rt);
                return daddr;
 }
 
-static inline bool rt6_duplicate_nexthop(struct rt6_info *a, struct rt6_info *b)
+static inline bool rt6_duplicate_nexthop(struct fib6_info *a, struct fib6_info *b)
 {
        return a->fib6_nh.nh_dev == b->fib6_nh.nh_dev &&
               a->rt6i_idev == b->rt6i_idev &&
 
 #endif
        struct xt_table         *ip6table_nat;
 #endif
-       struct rt6_info         *fib6_null_entry;
+       struct fib6_info        *fib6_null_entry;
        struct rt6_info         *ip6_null_entry;
        struct rt6_statistics   *rt6_stats;
        struct timer_list       ip6_fib_timer;
 
                                 unsigned long event);
 static int addrconf_ifdown(struct net_device *dev, int how);
 
-static struct rt6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
+static struct fib6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
                                                  int plen,
                                                  const struct net_device *dev,
                                                  u32 flags, u32 noflags);
        gfp_t gfp_flags = can_block ? GFP_KERNEL : GFP_ATOMIC;
        struct net *net = dev_net(idev->dev);
        struct inet6_ifaddr *ifa = NULL;
-       struct rt6_info *rt = NULL;
+       struct fib6_info *rt = NULL;
        int err = 0;
        int addr_type = ipv6_addr_type(addr);
 
 static void
 cleanup_prefix_route(struct inet6_ifaddr *ifp, unsigned long expires, bool del_rt)
 {
-       struct rt6_info *rt;
+       struct fib6_info *rt;
 
        rt = addrconf_get_prefix_route(&ifp->addr,
                                       ifp->prefix_len,
 }
 
 
-static struct rt6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
+static struct fib6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
                                                  int plen,
                                                  const struct net_device *dev,
                                                  u32 flags, u32 noflags)
 {
        struct fib6_node *fn;
-       struct rt6_info *rt = NULL;
+       struct fib6_info *rt = NULL;
        struct fib6_table *table;
        u32 tb_id = l3mdev_fib_table(dev) ? : RT6_TABLE_PREFIX;
 
         */
 
        if (pinfo->onlink) {
-               struct rt6_info *rt;
+               struct fib6_info *rt;
                unsigned long rt_expires;
 
                /* Avoid arithmetic overflow. Really, we could
         * case regenerate the host route.
         */
        if (!ifp->rt || !ifp->rt->rt6i_node) {
-               struct rt6_info *rt, *prev;
+               struct fib6_info *rt, *prev;
 
                rt = addrconf_dst_alloc(net, idev, &ifp->addr, false,
                                        GFP_ATOMIC);
        keep_addr = (!how && _keep_addr > 0 && !idev->cnf.disable_ipv6);
 
        list_for_each_entry_safe(ifa, tmp, &idev->addr_list, if_list) {
-               struct rt6_info *rt = NULL;
+               struct fib6_info *rt = NULL;
                bool keep;
 
                addrconf_del_dad_work(ifa);
                        addrconf_leave_anycast(ifp);
                addrconf_leave_solict(ifp->idev, &ifp->addr);
                if (!ipv6_addr_any(&ifp->peer_addr)) {
-                       struct rt6_info *rt;
+                       struct fib6_info *rt;
 
                        rt = addrconf_get_prefix_route(&ifp->peer_addr, 128,
                                                       ifp->idev->dev, 0, 0);
        list_for_each_entry(ifa, &idev->addr_list, if_list) {
                spin_lock(&ifa->lock);
                if (ifa->rt) {
-                       struct rt6_info *rt = ifa->rt;
+                       struct fib6_info *rt = ifa->rt;
                        int cpu;
 
                        rcu_read_lock();
 
        }
 }
 
-static struct ifacaddr6 *aca_alloc(struct rt6_info *rt,
+static struct ifacaddr6 *aca_alloc(struct fib6_info *rt,
                                   const struct in6_addr *addr)
 {
        struct inet6_dev *idev = rt->rt6i_idev;
 int __ipv6_dev_ac_inc(struct inet6_dev *idev, const struct in6_addr *addr)
 {
        struct ifacaddr6 *aca;
-       struct rt6_info *rt;
+       struct fib6_info *rt;
        struct net *net;
        int err;
 
 
 struct fib6_cleaner {
        struct fib6_walker w;
        struct net *net;
-       int (*func)(struct rt6_info *, void *arg);
+       int (*func)(struct fib6_info *, void *arg);
        int sernum;
        void *arg;
 };
 #define FWS_INIT FWS_L
 #endif
 
-static struct rt6_info *fib6_find_prefix(struct net *net,
+static struct fib6_info *fib6_find_prefix(struct net *net,
                                         struct fib6_table *table,
                                         struct fib6_node *fn);
 static struct fib6_node *fib6_repair_tree(struct net *net,
        FIB6_NO_SERNUM_CHANGE = 0,
 };
 
-void fib6_update_sernum(struct net *net, struct rt6_info *rt)
+void fib6_update_sernum(struct net *net, struct fib6_info *rt)
 {
        struct fib6_node *fn;
 
               addr[fn_bit >> 5];
 }
 
-struct rt6_info *fib6_info_alloc(gfp_t gfp_flags)
+struct fib6_info *fib6_info_alloc(gfp_t gfp_flags)
 {
-       struct rt6_info *f6i;
+       struct fib6_info *f6i;
 
        f6i = kzalloc(sizeof(*f6i), gfp_flags);
        if (!f6i)
        return f6i;
 }
 
-void fib6_info_destroy(struct rt6_info *f6i)
+void fib6_info_destroy(struct fib6_info *f6i)
 {
        struct rt6_exception_bucket *bucket;
        struct dst_metrics *m;
 
 static int call_fib6_entry_notifier(struct notifier_block *nb, struct net *net,
                                    enum fib_event_type event_type,
-                                   struct rt6_info *rt)
+                                   struct fib6_info *rt)
 {
        struct fib6_entry_notifier_info info = {
                .rt = rt,
 
 static int call_fib6_entry_notifiers(struct net *net,
                                     enum fib_event_type event_type,
-                                    struct rt6_info *rt,
+                                    struct fib6_info *rt,
                                     struct netlink_ext_ack *extack)
 {
        struct fib6_entry_notifier_info info = {
        struct notifier_block *nb;
 };
 
-static void fib6_rt_dump(struct rt6_info *rt, struct fib6_dump_arg *arg)
+static void fib6_rt_dump(struct fib6_info *rt, struct fib6_dump_arg *arg)
 {
        if (rt == arg->net->ipv6.fib6_null_entry)
                return;
 
 static int fib6_node_dump(struct fib6_walker *w)
 {
-       struct rt6_info *rt;
+       struct fib6_info *rt;
 
        for_each_fib6_walker_rt(w)
                fib6_rt_dump(rt, w->args);
 static int fib6_dump_node(struct fib6_walker *w)
 {
        int res;
-       struct rt6_info *rt;
+       struct fib6_info *rt;
 
        for_each_fib6_walker_rt(w) {
                res = rt6_dump_route(rt, w->args);
                 */
                if (rt->rt6i_nsiblings)
                        rt = list_last_entry(&rt->rt6i_siblings,
-                                            struct rt6_info,
+                                            struct fib6_info,
                                             rt6i_siblings);
        }
        w->leaf = NULL;
        return res;
 }
 
-void fib6_metric_set(struct rt6_info *f6i, int metric, u32 val)
+void fib6_metric_set(struct fib6_info *f6i, int metric, u32 val)
 {
        if (!f6i)
                return;
        fn = root;
 
        do {
-               struct rt6_info *leaf = rcu_dereference_protected(fn->leaf,
+               struct fib6_info *leaf = rcu_dereference_protected(fn->leaf,
                                            lockdep_is_held(&table->tb6_lock));
                key = (struct rt6key *)((u8 *)leaf + offset);
 
        return ln;
 }
 
-static void fib6_purge_rt(struct rt6_info *rt, struct fib6_node *fn,
+static void fib6_purge_rt(struct fib6_info *rt, struct fib6_node *fn,
                          struct net *net)
 {
        struct fib6_table *table = rt->rt6i_table;
                 * to still alive ones.
                 */
                while (fn) {
-                       struct rt6_info *leaf = rcu_dereference_protected(fn->leaf,
+                       struct fib6_info *leaf = rcu_dereference_protected(fn->leaf,
                                            lockdep_is_held(&table->tb6_lock));
-                       struct rt6_info *new_leaf;
+                       struct fib6_info *new_leaf;
                        if (!(fn->fn_flags & RTN_RTINFO) && leaf == rt) {
                                new_leaf = fib6_find_prefix(net, table, fn);
                                atomic_inc(&new_leaf->rt6i_ref);
  *     Insert routing information in a node.
  */
 
-static int fib6_add_rt2node(struct fib6_node *fn, struct rt6_info *rt,
+static int fib6_add_rt2node(struct fib6_node *fn, struct fib6_info *rt,
                            struct nl_info *info,
                            struct netlink_ext_ack *extack)
 {
-       struct rt6_info *leaf = rcu_dereference_protected(fn->leaf,
+       struct fib6_info *leaf = rcu_dereference_protected(fn->leaf,
                                    lockdep_is_held(&rt->rt6i_table->tb6_lock));
-       struct rt6_info *iter = NULL;
-       struct rt6_info __rcu **ins;
-       struct rt6_info __rcu **fallback_ins = NULL;
+       struct fib6_info *iter = NULL;
+       struct fib6_info __rcu **ins;
+       struct fib6_info __rcu **fallback_ins = NULL;
        int replace = (info->nlh &&
                       (info->nlh->nlmsg_flags & NLM_F_REPLACE));
        int add = (!info->nlh ||
        /* Link this route to others same route. */
        if (rt->rt6i_nsiblings) {
                unsigned int rt6i_nsiblings;
-               struct rt6_info *sibling, *temp_sibling;
+               struct fib6_info *sibling, *temp_sibling;
 
                /* Find the first route that have the same metric */
                sibling = leaf;
        return 0;
 }
 
-static void fib6_start_gc(struct net *net, struct rt6_info *rt)
+static void fib6_start_gc(struct net *net, struct fib6_info *rt)
 {
        if (!timer_pending(&net->ipv6.ip6_fib_timer) &&
            (rt->rt6i_flags & RTF_EXPIRES))
                          jiffies + net->ipv6.sysctl.ip6_rt_gc_interval);
 }
 
-static void __fib6_update_sernum_upto_root(struct rt6_info *rt,
+static void __fib6_update_sernum_upto_root(struct fib6_info *rt,
                                           int sernum)
 {
        struct fib6_node *fn = rcu_dereference_protected(rt->rt6i_node,
        }
 }
 
-void fib6_update_sernum_upto_root(struct net *net, struct rt6_info *rt)
+void fib6_update_sernum_upto_root(struct net *net, struct fib6_info *rt)
 {
        __fib6_update_sernum_upto_root(rt, fib6_new_sernum(net));
 }
  *     Need to own table->tb6_lock
  */
 
-int fib6_add(struct fib6_node *root, struct rt6_info *rt,
+int fib6_add(struct fib6_node *root, struct fib6_info *rt,
             struct nl_info *info, struct netlink_ext_ack *extack)
 {
        struct fib6_table *table = rt->rt6i_table;
 
        fn = fib6_add_1(info->nl_net, table, root,
                        &rt->rt6i_dst.addr, rt->rt6i_dst.plen,
-                       offsetof(struct rt6_info, rt6i_dst), allow_create,
+                       offsetof(struct fib6_info, rt6i_dst), allow_create,
                        replace_required, extack);
        if (IS_ERR(fn)) {
                err = PTR_ERR(fn);
 
                        sn = fib6_add_1(info->nl_net, table, sfn,
                                        &rt->rt6i_src.addr, rt->rt6i_src.plen,
-                                       offsetof(struct rt6_info, rt6i_src),
+                                       offsetof(struct fib6_info, rt6i_src),
                                        allow_create, replace_required, extack);
 
                        if (IS_ERR(sn)) {
                } else {
                        sn = fib6_add_1(info->nl_net, table, FIB6_SUBTREE(fn),
                                        &rt->rt6i_src.addr, rt->rt6i_src.plen,
-                                       offsetof(struct rt6_info, rt6i_src),
+                                       offsetof(struct fib6_info, rt6i_src),
                                        allow_create, replace_required, extack);
 
                        if (IS_ERR(sn)) {
                 * super-tree leaf node we have to find a new one for it.
                 */
                if (pn != fn) {
-                       struct rt6_info *pn_leaf =
+                       struct fib6_info *pn_leaf =
                                rcu_dereference_protected(pn->leaf,
                                    lockdep_is_held(&table->tb6_lock));
                        if (pn_leaf == rt) {
  */
 
 struct lookup_args {
-       int                     offset;         /* key offset on rt6_info       */
+       int                     offset;         /* key offset on fib6_info */
        const struct in6_addr   *addr;          /* search key                   */
 };
 
                struct fib6_node *subtree = FIB6_SUBTREE(fn);
 
                if (subtree || fn->fn_flags & RTN_RTINFO) {
-                       struct rt6_info *leaf = rcu_dereference(fn->leaf);
+                       struct fib6_info *leaf = rcu_dereference(fn->leaf);
                        struct rt6key *key;
 
                        if (!leaf)
        struct fib6_node *fn;
        struct lookup_args args[] = {
                {
-                       .offset = offsetof(struct rt6_info, rt6i_dst),
+                       .offset = offsetof(struct fib6_info, rt6i_dst),
                        .addr = daddr,
                },
 #ifdef CONFIG_IPV6_SUBTREES
                {
-                       .offset = offsetof(struct rt6_info, rt6i_src),
+                       .offset = offsetof(struct fib6_info, rt6i_src),
                        .addr = saddr,
                },
 #endif
        struct fib6_node *fn, *prev = NULL;
 
        for (fn = root; fn ; ) {
-               struct rt6_info *leaf = rcu_dereference(fn->leaf);
+               struct fib6_info *leaf = rcu_dereference(fn->leaf);
                struct rt6key *key;
 
                /* This node is being deleted */
        struct fib6_node *fn;
 
        fn = fib6_locate_1(root, daddr, dst_len,
-                          offsetof(struct rt6_info, rt6i_dst),
+                          offsetof(struct fib6_info, rt6i_dst),
                           exact_match);
 
 #ifdef CONFIG_IPV6_SUBTREES
 
                        if (subtree) {
                                fn = fib6_locate_1(subtree, saddr, src_len,
-                                          offsetof(struct rt6_info, rt6i_src),
+                                          offsetof(struct fib6_info, rt6i_src),
                                           exact_match);
                        }
                }
  *
  */
 
-static struct rt6_info *fib6_find_prefix(struct net *net,
+static struct fib6_info *fib6_find_prefix(struct net *net,
                                         struct fib6_table *table,
                                         struct fib6_node *fn)
 {
                                            lockdep_is_held(&table->tb6_lock));
                struct fib6_node *pn_l = rcu_dereference_protected(pn->left,
                                            lockdep_is_held(&table->tb6_lock));
-               struct rt6_info *fn_leaf = rcu_dereference_protected(fn->leaf,
+               struct fib6_info *fn_leaf = rcu_dereference_protected(fn->leaf,
                                            lockdep_is_held(&table->tb6_lock));
-               struct rt6_info *pn_leaf = rcu_dereference_protected(pn->leaf,
+               struct fib6_info *pn_leaf = rcu_dereference_protected(pn->leaf,
                                            lockdep_is_held(&table->tb6_lock));
-               struct rt6_info *new_fn_leaf;
+               struct fib6_info *new_fn_leaf;
 
                RT6_TRACE("fixing tree: plen=%d iter=%d\n", fn->fn_bit, iter);
                iter++;
 }
 
 static void fib6_del_route(struct fib6_table *table, struct fib6_node *fn,
-                          struct rt6_info __rcu **rtp, struct nl_info *info)
+                          struct fib6_info __rcu **rtp, struct nl_info *info)
 {
        struct fib6_walker *w;
-       struct rt6_info *rt = rcu_dereference_protected(*rtp,
+       struct fib6_info *rt = rcu_dereference_protected(*rtp,
                                    lockdep_is_held(&table->tb6_lock));
        struct net *net = info->nl_net;
 
 
        /* Remove this entry from other siblings */
        if (rt->rt6i_nsiblings) {
-               struct rt6_info *sibling, *next_sibling;
+               struct fib6_info *sibling, *next_sibling;
 
                list_for_each_entry_safe(sibling, next_sibling,
                                         &rt->rt6i_siblings, rt6i_siblings)
 }
 
 /* Need to own table->tb6_lock */
-int fib6_del(struct rt6_info *rt, struct nl_info *info)
+int fib6_del(struct fib6_info *rt, struct nl_info *info)
 {
        struct fib6_node *fn = rcu_dereference_protected(rt->rt6i_node,
                                    lockdep_is_held(&rt->rt6i_table->tb6_lock));
        struct fib6_table *table = rt->rt6i_table;
        struct net *net = info->nl_net;
-       struct rt6_info __rcu **rtp;
-       struct rt6_info __rcu **rtp_next;
+       struct fib6_info __rcu **rtp;
+       struct fib6_info __rcu **rtp_next;
 
        if (!fn || rt == net->ipv6.fib6_null_entry)
                return -ENOENT;
         */
 
        for (rtp = &fn->leaf; *rtp; rtp = rtp_next) {
-               struct rt6_info *cur = rcu_dereference_protected(*rtp,
+               struct fib6_info *cur = rcu_dereference_protected(*rtp,
                                        lockdep_is_held(&table->tb6_lock));
                if (rt == cur) {
                        fib6_del_route(table, fn, rtp, info);
 static int fib6_clean_node(struct fib6_walker *w)
 {
        int res;
-       struct rt6_info *rt;
+       struct fib6_info *rt;
        struct fib6_cleaner *c = container_of(w, struct fib6_cleaner, w);
        struct nl_info info = {
                .nl_net = c->net,
                        if (WARN_ON(!rt->rt6i_nsiblings))
                                continue;
                        rt = list_last_entry(&rt->rt6i_siblings,
-                                            struct rt6_info, rt6i_siblings);
+                                            struct fib6_info, rt6i_siblings);
                        continue;
                }
                WARN_ON(res != 0);
  */
 
 static void fib6_clean_tree(struct net *net, struct fib6_node *root,
-                           int (*func)(struct rt6_info *, void *arg),
+                           int (*func)(struct fib6_info *, void *arg),
                            int sernum, void *arg)
 {
        struct fib6_cleaner c;
 }
 
 static void __fib6_clean_all(struct net *net,
-                            int (*func)(struct rt6_info *, void *),
+                            int (*func)(struct fib6_info *, void *),
                             int sernum, void *arg)
 {
        struct fib6_table *table;
        rcu_read_unlock();
 }
 
-void fib6_clean_all(struct net *net, int (*func)(struct rt6_info *, void *),
+void fib6_clean_all(struct net *net, int (*func)(struct fib6_info *, void *),
                    void *arg)
 {
        __fib6_clean_all(net, func, FIB6_NO_SERNUM_CHANGE, arg);
  *     Garbage collection
  */
 
-static int fib6_age(struct rt6_info *rt, void *arg)
+static int fib6_age(struct fib6_info *rt, void *arg)
 {
        struct fib6_gc_args *gc_args = arg;
        unsigned long now = jiffies;
 
 static int ipv6_route_seq_show(struct seq_file *seq, void *v)
 {
-       struct rt6_info *rt = v;
+       struct fib6_info *rt = v;
        struct ipv6_route_iter *iter = seq->private;
        const struct net_device *dev;
 
 static void *ipv6_route_seq_next(struct seq_file *seq, void *v, loff_t *pos)
 {
        int r;
-       struct rt6_info *n;
+       struct fib6_info *n;
        struct net *net = seq_file_net(seq);
        struct ipv6_route_iter *iter = seq->private;
 
        if (!v)
                goto iter_table;
 
-       n = rcu_dereference_bh(((struct rt6_info *)v)->rt6_next);
+       n = rcu_dereference_bh(((struct fib6_info *)v)->rt6_next);
        if (n) {
                ++*pos;
                return n;
 
        struct ra_msg *ra_msg = (struct ra_msg *)skb_transport_header(skb);
        struct neighbour *neigh = NULL;
        struct inet6_dev *in6_dev;
-       struct rt6_info *rt = NULL;
+       struct fib6_info *rt = NULL;
        struct net *net;
        int lifetime;
        struct ndisc_options ndopts;
 
                                           struct sk_buff *skb, u32 mtu);
 static void            rt6_do_redirect(struct dst_entry *dst, struct sock *sk,
                                        struct sk_buff *skb);
-static int rt6_score_route(struct rt6_info *rt, int oif, int strict);
-static size_t rt6_nlmsg_size(struct rt6_info *rt);
+static int rt6_score_route(struct fib6_info *rt, int oif, int strict);
+static size_t rt6_nlmsg_size(struct fib6_info *rt);
 static int rt6_fill_node(struct net *net, struct sk_buff *skb,
-                        struct rt6_info *rt, struct dst_entry *dst,
+                        struct fib6_info *rt, struct dst_entry *dst,
                         struct in6_addr *dest, struct in6_addr *src,
                         int iif, int type, u32 portid, u32 seq,
                         unsigned int flags);
-static struct rt6_info *rt6_find_cached_rt(struct rt6_info *rt,
+static struct rt6_info *rt6_find_cached_rt(struct fib6_info *rt,
                                           struct in6_addr *daddr,
                                           struct in6_addr *saddr);
 
 #ifdef CONFIG_IPV6_ROUTE_INFO
-static struct rt6_info *rt6_add_route_info(struct net *net,
+static struct fib6_info *rt6_add_route_info(struct net *net,
                                           const struct in6_addr *prefix, int prefixlen,
                                           const struct in6_addr *gwaddr,
                                           struct net_device *dev,
                                           unsigned int pref);
-static struct rt6_info *rt6_get_route_info(struct net *net,
+static struct fib6_info *rt6_get_route_info(struct net *net,
                                           const struct in6_addr *prefix, int prefixlen,
                                           const struct in6_addr *gwaddr,
                                           struct net_device *dev);
        [RTAX_HOPLIMIT - 1] = 0,
 };
 
-static const struct rt6_info fib6_null_entry_template = {
+static const struct fib6_info fib6_null_entry_template = {
        .rt6i_flags     = (RTF_REJECT | RTF_NONEXTHOP),
        .rt6i_protocol  = RTPROT_KERNEL,
        .rt6i_metric    = ~(u32)0,
 static void ip6_dst_destroy(struct dst_entry *dst)
 {
        struct rt6_info *rt = (struct rt6_info *)dst;
-       struct rt6_info *from = rt->from;
+       struct fib6_info *from = rt->from;
        struct inet6_dev *idev;
 
        dst_destroy_metrics_generic(dst);
        return false;
 }
 
-static struct rt6_info *rt6_multipath_select(const struct net *net,
-                                            struct rt6_info *match,
+static struct fib6_info *rt6_multipath_select(const struct net *net,
+                                             struct fib6_info *match,
                                             struct flowi6 *fl6, int oif,
                                             const struct sk_buff *skb,
                                             int strict)
 {
-       struct rt6_info *sibling, *next_sibling;
+       struct fib6_info *sibling, *next_sibling;
 
        /* We might have already computed the hash for ICMPv6 errors. In such
         * case it will always be non-zero. Otherwise now is the time to do it.
  *     Route lookup. rcu_read_lock() should be held.
  */
 
-static inline struct rt6_info *rt6_device_match(struct net *net,
-                                                   struct rt6_info *rt,
+static inline struct fib6_info *rt6_device_match(struct net *net,
+                                                struct fib6_info *rt,
                                                    const struct in6_addr *saddr,
                                                    int oif,
                                                    int flags)
 {
-       struct rt6_info *local = NULL;
-       struct rt6_info *sprt;
+       struct fib6_info *local = NULL;
+       struct fib6_info *sprt;
 
        if (!oif && ipv6_addr_any(saddr) &&
            !(rt->fib6_nh.nh_flags & RTNH_F_DEAD))
        kfree(work);
 }
 
-static void rt6_probe(struct rt6_info *rt)
+static void rt6_probe(struct fib6_info *rt)
 {
        struct __rt6_probe_work *work;
        const struct in6_addr *nh_gw;
        rcu_read_unlock_bh();
 }
 #else
-static inline void rt6_probe(struct rt6_info *rt)
+static inline void rt6_probe(struct fib6_info *rt)
 {
 }
 #endif
 /*
  * Default Router Selection (RFC 2461 6.3.6)
  */
-static inline int rt6_check_dev(struct rt6_info *rt, int oif)
+static inline int rt6_check_dev(struct fib6_info *rt, int oif)
 {
        const struct net_device *dev = rt->fib6_nh.nh_dev;
 
        return 0;
 }
 
-static inline enum rt6_nud_state rt6_check_neigh(struct rt6_info *rt)
+static inline enum rt6_nud_state rt6_check_neigh(struct fib6_info *rt)
 {
        enum rt6_nud_state ret = RT6_NUD_FAIL_HARD;
        struct neighbour *neigh;
        return ret;
 }
 
-static int rt6_score_route(struct rt6_info *rt, int oif,
-                          int strict)
+static int rt6_score_route(struct fib6_info *rt, int oif, int strict)
 {
        int m;
 
        return m;
 }
 
-static struct rt6_info *find_match(struct rt6_info *rt, int oif, int strict,
-                                  int *mpri, struct rt6_info *match,
+static struct fib6_info *find_match(struct fib6_info *rt, int oif, int strict,
+                                  int *mpri, struct fib6_info *match,
                                   bool *do_rr)
 {
        int m;
        return match;
 }
 
-static struct rt6_info *find_rr_leaf(struct fib6_node *fn,
-                                    struct rt6_info *leaf,
-                                    struct rt6_info *rr_head,
+static struct fib6_info *find_rr_leaf(struct fib6_node *fn,
+                                    struct fib6_info *leaf,
+                                    struct fib6_info *rr_head,
                                     u32 metric, int oif, int strict,
                                     bool *do_rr)
 {
-       struct rt6_info *rt, *match, *cont;
+       struct fib6_info *rt, *match, *cont;
        int mpri = -1;
 
        match = NULL;
        return match;
 }
 
-static struct rt6_info *rt6_select(struct net *net, struct fib6_node *fn,
+static struct fib6_info *rt6_select(struct net *net, struct fib6_node *fn,
                                   int oif, int strict)
 {
-       struct rt6_info *leaf = rcu_dereference(fn->leaf);
-       struct rt6_info *match, *rt0;
+       struct fib6_info *leaf = rcu_dereference(fn->leaf);
+       struct fib6_info *match, *rt0;
        bool do_rr = false;
        int key_plen;
 
                             &do_rr);
 
        if (do_rr) {
-               struct rt6_info *next = rcu_dereference(rt0->rt6_next);
+               struct fib6_info *next = rcu_dereference(rt0->rt6_next);
 
                /* no entries matched; do round-robin */
                if (!next || next->rt6i_metric != rt0->rt6i_metric)
        return match ? match : net->ipv6.fib6_null_entry;
 }
 
-static bool rt6_is_gw_or_nonexthop(const struct rt6_info *rt)
+static bool rt6_is_gw_or_nonexthop(const struct fib6_info *rt)
 {
        return (rt->rt6i_flags & (RTF_NONEXTHOP | RTF_GATEWAY));
 }
        struct in6_addr prefix_buf, *prefix;
        unsigned int pref;
        unsigned long lifetime;
-       struct rt6_info *rt;
+       struct fib6_info *rt;
 
        if (len < sizeof(struct route_info)) {
                return -EINVAL;
  */
 
 /* called with rcu_lock held */
-static struct net_device *ip6_rt_get_dev_rcu(struct rt6_info *rt)
+static struct net_device *ip6_rt_get_dev_rcu(struct fib6_info *rt)
 {
        struct net_device *dev = rt->fib6_nh.nh_dev;
 
        return fib6_prop[fib6_type];
 }
 
-static unsigned short fib6_info_dst_flags(struct rt6_info *rt)
+static unsigned short fib6_info_dst_flags(struct fib6_info *rt)
 {
        unsigned short flags = 0;
 
        return flags;
 }
 
-static void ip6_rt_init_dst_reject(struct rt6_info *rt, struct rt6_info *ort)
+static void ip6_rt_init_dst_reject(struct rt6_info *rt, struct fib6_info *ort)
 {
        rt->dst.error = ip6_rt_type_to_error(ort->fib6_type);
 
        }
 }
 
-static void ip6_rt_init_dst(struct rt6_info *rt, struct rt6_info *ort)
+static void ip6_rt_init_dst(struct rt6_info *rt, struct fib6_info *ort)
 {
        rt->dst.flags |= fib6_info_dst_flags(ort);
 
        rt->dst.lastuse = jiffies;
 }
 
-static void rt6_set_from(struct rt6_info *rt, struct rt6_info *from)
+static void rt6_set_from(struct rt6_info *rt, struct fib6_info *from)
 {
        rt->rt6i_flags &= ~RTF_EXPIRES;
        fib6_info_hold(from);
        }
 }
 
-static void ip6_rt_copy_init(struct rt6_info *rt, struct rt6_info *ort)
+static void ip6_rt_copy_init(struct rt6_info *rt, struct fib6_info *ort)
 {
        ip6_rt_init_dst(rt, ort);
 
 }
 
 /* called with rcu_lock held */
-static struct rt6_info *ip6_create_rt_rcu(struct rt6_info *rt)
+static struct rt6_info *ip6_create_rt_rcu(struct fib6_info *rt)
 {
        unsigned short flags = fib6_info_dst_flags(rt);
        struct net_device *dev = rt->fib6_nh.nh_dev;
                                             const struct sk_buff *skb,
                                             int flags)
 {
-       struct rt6_info *f6i;
+       struct fib6_info *f6i;
        struct fib6_node *fn;
        struct rt6_info *rt;
 
  * Caller must hold dst before calling it.
  */
 
-static int __ip6_ins_rt(struct rt6_info *rt, struct nl_info *info,
+static int __ip6_ins_rt(struct fib6_info *rt, struct nl_info *info,
                        struct netlink_ext_ack *extack)
 {
        int err;
        return err;
 }
 
-int ip6_ins_rt(struct net *net, struct rt6_info *rt)
+int ip6_ins_rt(struct net *net, struct fib6_info *rt)
 {
        struct nl_info info = { .nl_net = net, };
 
        return __ip6_ins_rt(rt, &info, NULL);
 }
 
-static struct rt6_info *ip6_rt_cache_alloc(struct rt6_info *ort,
+static struct rt6_info *ip6_rt_cache_alloc(struct fib6_info *ort,
                                           const struct in6_addr *daddr,
                                           const struct in6_addr *saddr)
 {
        return rt;
 }
 
-static struct rt6_info *ip6_rt_pcpu_alloc(struct rt6_info *rt)
+static struct rt6_info *ip6_rt_pcpu_alloc(struct fib6_info *rt)
 {
        unsigned short flags = fib6_info_dst_flags(rt);
        struct net_device *dev;
 }
 
 /* It should be called with rcu_read_lock() acquired */
-static struct rt6_info *rt6_get_pcpu_route(struct rt6_info *rt)
+static struct rt6_info *rt6_get_pcpu_route(struct fib6_info *rt)
 {
        struct rt6_info *pcpu_rt, **p;
 
 }
 
 static struct rt6_info *rt6_make_pcpu_route(struct net *net,
-                                           struct rt6_info *rt)
+                                           struct fib6_info *rt)
 {
        struct rt6_info *pcpu_rt, *prev, **p;
 
        return NULL;
 }
 
-static unsigned int fib6_mtu(const struct rt6_info *rt)
+static unsigned int fib6_mtu(const struct fib6_info *rt)
 {
        unsigned int mtu;
 
 }
 
 static int rt6_insert_exception(struct rt6_info *nrt,
-                               struct rt6_info *ort)
+                               struct fib6_info *ort)
 {
        struct net *net = dev_net(nrt->dst.dev);
        struct rt6_exception_bucket *bucket;
        return err;
 }
 
-void rt6_flush_exceptions(struct rt6_info *rt)
+void rt6_flush_exceptions(struct fib6_info *rt)
 {
        struct rt6_exception_bucket *bucket;
        struct rt6_exception *rt6_ex;
 /* Find cached rt in the hash table inside passed in rt
  * Caller has to hold rcu_read_lock()
  */
-static struct rt6_info *rt6_find_cached_rt(struct rt6_info *rt,
+static struct rt6_info *rt6_find_cached_rt(struct fib6_info *rt,
                                           struct in6_addr *daddr,
                                           struct in6_addr *saddr)
 {
 static int rt6_remove_exception_rt(struct rt6_info *rt)
 {
        struct rt6_exception_bucket *bucket;
-       struct rt6_info *from = rt->from;
+       struct fib6_info *from = rt->from;
        struct in6_addr *src_key = NULL;
        struct rt6_exception *rt6_ex;
        int err;
 static void rt6_update_exception_stamp_rt(struct rt6_info *rt)
 {
        struct rt6_exception_bucket *bucket;
-       struct rt6_info *from = rt->from;
+       struct fib6_info *from = rt->from;
        struct in6_addr *src_key = NULL;
        struct rt6_exception *rt6_ex;
 
        rcu_read_unlock();
 }
 
-static void rt6_exceptions_remove_prefsrc(struct rt6_info *rt)
+static void rt6_exceptions_remove_prefsrc(struct fib6_info *rt)
 {
        struct rt6_exception_bucket *bucket;
        struct rt6_exception *rt6_ex;
 }
 
 static void rt6_exceptions_update_pmtu(struct inet6_dev *idev,
-                                      struct rt6_info *rt, int mtu)
+                                      struct fib6_info *rt, int mtu)
 {
        struct rt6_exception_bucket *bucket;
        struct rt6_exception *rt6_ex;
 
 #define RTF_CACHE_GATEWAY      (RTF_GATEWAY | RTF_CACHE)
 
-static void rt6_exceptions_clean_tohost(struct rt6_info *rt,
+static void rt6_exceptions_clean_tohost(struct fib6_info *rt,
                                        struct in6_addr *gateway)
 {
        struct rt6_exception_bucket *bucket;
        gc_args->more++;
 }
 
-void rt6_age_exceptions(struct rt6_info *rt,
+void rt6_age_exceptions(struct fib6_info *rt,
                        struct fib6_gc_args *gc_args,
                        unsigned long now)
 {
                               const struct sk_buff *skb, int flags)
 {
        struct fib6_node *fn, *saved_fn;
-       struct rt6_info *f6i;
+       struct fib6_info *f6i;
        struct rt6_info *rt;
        int strict = 0;
 
  *     Destination cache support functions
  */
 
-static bool fib6_check(struct rt6_info *f6i, u32 cookie)
+static bool fib6_check(struct fib6_info *f6i, u32 cookie)
 {
        u32 rt_cookie = 0;
 
 {
        struct ip6rd_flowi *rdfl = (struct ip6rd_flowi *)fl6;
        struct rt6_info *ret = NULL, *rt_cache;
-       struct rt6_info *rt;
+       struct fib6_info *rt;
        struct fib6_node *fn;
 
        /* Get the "current" route for this destination and
        return entries > rt_max_size;
 }
 
-static int ip6_convert_metrics(struct net *net, struct rt6_info *rt,
+static int ip6_convert_metrics(struct net *net, struct fib6_info *rt,
                               struct fib6_config *cfg)
 {
        int err = 0;
        return err;
 }
 
-static struct rt6_info *ip6_route_info_create(struct fib6_config *cfg,
+static struct fib6_info *ip6_route_info_create(struct fib6_config *cfg,
                                              gfp_t gfp_flags,
                                              struct netlink_ext_ack *extack)
 {
        struct net *net = cfg->fc_nlinfo.nl_net;
-       struct rt6_info *rt = NULL;
+       struct fib6_info *rt = NULL;
        struct net_device *dev = NULL;
        struct inet6_dev *idev = NULL;
        struct fib6_table *table;
 int ip6_route_add(struct fib6_config *cfg, gfp_t gfp_flags,
                  struct netlink_ext_ack *extack)
 {
-       struct rt6_info *rt;
+       struct fib6_info *rt;
        int err;
 
        rt = ip6_route_info_create(cfg, gfp_flags, extack);
        return err;
 }
 
-static int __ip6_del_rt(struct rt6_info *rt, struct nl_info *info)
+static int __ip6_del_rt(struct fib6_info *rt, struct nl_info *info)
 {
        struct net *net = info->nl_net;
        struct fib6_table *table;
        return err;
 }
 
-int ip6_del_rt(struct net *net, struct rt6_info *rt)
+int ip6_del_rt(struct net *net, struct fib6_info *rt)
 {
        struct nl_info info = { .nl_net = net };
 
        return __ip6_del_rt(rt, &info);
 }
 
-static int __ip6_del_rt_siblings(struct rt6_info *rt, struct fib6_config *cfg)
+static int __ip6_del_rt_siblings(struct fib6_info *rt, struct fib6_config *cfg)
 {
        struct nl_info *info = &cfg->fc_nlinfo;
        struct net *net = info->nl_net;
        spin_lock_bh(&table->tb6_lock);
 
        if (rt->rt6i_nsiblings && cfg->fc_delete_all_nh) {
-               struct rt6_info *sibling, *next_sibling;
+               struct fib6_info *sibling, *next_sibling;
 
                /* prefer to send a single notification with all hops */
                skb = nlmsg_new(rt6_nlmsg_size(rt), gfp_any());
 static int ip6_route_del(struct fib6_config *cfg,
                         struct netlink_ext_ack *extack)
 {
-       struct rt6_info *rt, *rt_cache;
+       struct rt6_info *rt_cache;
        struct fib6_table *table;
+       struct fib6_info *rt;
        struct fib6_node *fn;
        int err = -ESRCH;
 
 }
 
 #ifdef CONFIG_IPV6_ROUTE_INFO
-static struct rt6_info *rt6_get_route_info(struct net *net,
+static struct fib6_info *rt6_get_route_info(struct net *net,
                                           const struct in6_addr *prefix, int prefixlen,
                                           const struct in6_addr *gwaddr,
                                           struct net_device *dev)
        u32 tb_id = l3mdev_fib_table(dev) ? : RT6_TABLE_INFO;
        int ifindex = dev->ifindex;
        struct fib6_node *fn;
-       struct rt6_info *rt = NULL;
+       struct fib6_info *rt = NULL;
        struct fib6_table *table;
 
        table = fib6_get_table(net, tb_id);
                        continue;
                if (!ipv6_addr_equal(&rt->fib6_nh.nh_gw, gwaddr))
                        continue;
-               ip6_hold_safe(NULL, &rt, false);
+               fib6_info_hold(rt);
                break;
        }
 out:
        return rt;
 }
 
-static struct rt6_info *rt6_add_route_info(struct net *net,
+static struct fib6_info *rt6_add_route_info(struct net *net,
                                           const struct in6_addr *prefix, int prefixlen,
                                           const struct in6_addr *gwaddr,
                                           struct net_device *dev,
 }
 #endif
 
-struct rt6_info *rt6_get_dflt_router(struct net *net,
+struct fib6_info *rt6_get_dflt_router(struct net *net,
                                     const struct in6_addr *addr,
                                     struct net_device *dev)
 {
        u32 tb_id = l3mdev_fib_table(dev) ? : RT6_TABLE_DFLT;
-       struct rt6_info *rt;
+       struct fib6_info *rt;
        struct fib6_table *table;
 
        table = fib6_get_table(net, tb_id);
                        break;
        }
        if (rt)
-               ip6_hold_safe(NULL, &rt, false);
+               fib6_info_hold(rt);
        rcu_read_unlock();
        return rt;
 }
 
-struct rt6_info *rt6_add_dflt_router(struct net *net,
+struct fib6_info *rt6_add_dflt_router(struct net *net,
                                     const struct in6_addr *gwaddr,
                                     struct net_device *dev,
                                     unsigned int pref)
 static void __rt6_purge_dflt_routers(struct net *net,
                                     struct fib6_table *table)
 {
-       struct rt6_info *rt;
+       struct fib6_info *rt;
 
 restart:
        rcu_read_lock();
  *     Allocate a dst for local (unicast / anycast) address.
  */
 
-struct rt6_info *addrconf_dst_alloc(struct net *net,
+struct fib6_info *addrconf_dst_alloc(struct net *net,
                                    struct inet6_dev *idev,
                                    const struct in6_addr *addr,
                                    bool anycast, gfp_t gfp_flags)
 {
        u32 tb_id;
        struct net_device *dev = idev->dev;
-       struct rt6_info *rt;
+       struct fib6_info *rt;
 
        rt = fib6_info_alloc(gfp_flags);
        if (!rt)
        struct in6_addr *addr;
 };
 
-static int fib6_remove_prefsrc(struct rt6_info *rt, void *arg)
+static int fib6_remove_prefsrc(struct fib6_info *rt, void *arg)
 {
        struct net_device *dev = ((struct arg_dev_net_ip *)arg)->dev;
        struct net *net = ((struct arg_dev_net_ip *)arg)->net;
 #define RTF_RA_ROUTER          (RTF_ADDRCONF | RTF_DEFAULT | RTF_GATEWAY)
 
 /* Remove routers and update dst entries when gateway turn into host. */
-static int fib6_clean_tohost(struct rt6_info *rt, void *arg)
+static int fib6_clean_tohost(struct fib6_info *rt, void *arg)
 {
        struct in6_addr *gateway = (struct in6_addr *)arg;
 
        };
 };
 
-static struct rt6_info *rt6_multipath_first_sibling(const struct rt6_info *rt)
+static struct fib6_info *rt6_multipath_first_sibling(const struct fib6_info *rt)
 {
-       struct rt6_info *iter;
+       struct fib6_info *iter;
        struct fib6_node *fn;
 
        fn = rcu_dereference_protected(rt->rt6i_node,
        return NULL;
 }
 
-static bool rt6_is_dead(const struct rt6_info *rt)
+static bool rt6_is_dead(const struct fib6_info *rt)
 {
        if (rt->fib6_nh.nh_flags & RTNH_F_DEAD ||
            (rt->fib6_nh.nh_flags & RTNH_F_LINKDOWN &&
        return false;
 }
 
-static int rt6_multipath_total_weight(const struct rt6_info *rt)
+static int rt6_multipath_total_weight(const struct fib6_info *rt)
 {
-       struct rt6_info *iter;
+       struct fib6_info *iter;
        int total = 0;
 
        if (!rt6_is_dead(rt))
        return total;
 }
 
-static void rt6_upper_bound_set(struct rt6_info *rt, int *weight, int total)
+static void rt6_upper_bound_set(struct fib6_info *rt, int *weight, int total)
 {
        int upper_bound = -1;
 
        atomic_set(&rt->fib6_nh.nh_upper_bound, upper_bound);
 }
 
-static void rt6_multipath_upper_bound_set(struct rt6_info *rt, int total)
+static void rt6_multipath_upper_bound_set(struct fib6_info *rt, int total)
 {
-       struct rt6_info *iter;
+       struct fib6_info *iter;
        int weight = 0;
 
        rt6_upper_bound_set(rt, &weight, total);
                rt6_upper_bound_set(iter, &weight, total);
 }
 
-void rt6_multipath_rebalance(struct rt6_info *rt)
+void rt6_multipath_rebalance(struct fib6_info *rt)
 {
-       struct rt6_info *first;
+       struct fib6_info *first;
        int total;
 
        /* In case the entire multipath route was marked for flushing,
        rt6_multipath_upper_bound_set(first, total);
 }
 
-static int fib6_ifup(struct rt6_info *rt, void *p_arg)
+static int fib6_ifup(struct fib6_info *rt, void *p_arg)
 {
        const struct arg_netdev_event *arg = p_arg;
        struct net *net = dev_net(arg->dev);
        fib6_clean_all(dev_net(dev), fib6_ifup, &arg);
 }
 
-static bool rt6_multipath_uses_dev(const struct rt6_info *rt,
+static bool rt6_multipath_uses_dev(const struct fib6_info *rt,
                                   const struct net_device *dev)
 {
-       struct rt6_info *iter;
+       struct fib6_info *iter;
 
        if (rt->fib6_nh.nh_dev == dev)
                return true;
        return false;
 }
 
-static void rt6_multipath_flush(struct rt6_info *rt)
+static void rt6_multipath_flush(struct fib6_info *rt)
 {
-       struct rt6_info *iter;
+       struct fib6_info *iter;
 
        rt->should_flush = 1;
        list_for_each_entry(iter, &rt->rt6i_siblings, rt6i_siblings)
                iter->should_flush = 1;
 }
 
-static unsigned int rt6_multipath_dead_count(const struct rt6_info *rt,
+static unsigned int rt6_multipath_dead_count(const struct fib6_info *rt,
                                             const struct net_device *down_dev)
 {
-       struct rt6_info *iter;
+       struct fib6_info *iter;
        unsigned int dead = 0;
 
        if (rt->fib6_nh.nh_dev == down_dev ||
        return dead;
 }
 
-static void rt6_multipath_nh_flags_set(struct rt6_info *rt,
+static void rt6_multipath_nh_flags_set(struct fib6_info *rt,
                                       const struct net_device *dev,
                                       unsigned int nh_flags)
 {
-       struct rt6_info *iter;
+       struct fib6_info *iter;
 
        if (rt->fib6_nh.nh_dev == dev)
                rt->fib6_nh.nh_flags |= nh_flags;
 }
 
 /* called with write lock held for table with rt */
-static int fib6_ifdown(struct rt6_info *rt, void *p_arg)
+static int fib6_ifdown(struct fib6_info *rt, void *p_arg)
 {
        const struct arg_netdev_event *arg = p_arg;
        const struct net_device *dev = arg->dev;
        unsigned int mtu;
 };
 
-static int rt6_mtu_change_route(struct rt6_info *rt, void *p_arg)
+static int rt6_mtu_change_route(struct fib6_info *rt, void *p_arg)
 {
        struct rt6_mtu_change_arg *arg = (struct rt6_mtu_change_arg *) p_arg;
        struct inet6_dev *idev;
 }
 
 struct rt6_nh {
-       struct rt6_info *rt6_info;
+       struct fib6_info *fib6_info;
        struct fib6_config r_cfg;
        struct list_head next;
 };
 
 static int ip6_route_info_append(struct net *net,
                                 struct list_head *rt6_nh_list,
-                                struct rt6_info *rt, struct fib6_config *r_cfg)
+                                struct fib6_info *rt,
+                                struct fib6_config *r_cfg)
 {
        struct rt6_nh *nh;
        int err = -EEXIST;
 
        list_for_each_entry(nh, rt6_nh_list, next) {
-               /* check if rt6_info already exists */
-               if (rt6_duplicate_nexthop(nh->rt6_info, rt))
+               /* check if fib6_info already exists */
+               if (rt6_duplicate_nexthop(nh->fib6_info, rt))
                        return err;
        }
 
        nh = kzalloc(sizeof(*nh), GFP_KERNEL);
        if (!nh)
                return -ENOMEM;
-       nh->rt6_info = rt;
+       nh->fib6_info = rt;
        err = ip6_convert_metrics(net, rt, r_cfg);
        if (err) {
                kfree(nh);
        return 0;
 }
 
-static void ip6_route_mpath_notify(struct rt6_info *rt,
-                                  struct rt6_info *rt_last,
+static void ip6_route_mpath_notify(struct fib6_info *rt,
+                                  struct fib6_info *rt_last,
                                   struct nl_info *info,
                                   __u16 nlflags)
 {
         */
        if ((nlflags & NLM_F_APPEND) && rt_last && rt_last->rt6i_nsiblings) {
                rt = list_first_entry(&rt_last->rt6i_siblings,
-                                     struct rt6_info,
+                                     struct fib6_info,
                                      rt6i_siblings);
        }
 
 static int ip6_route_multipath_add(struct fib6_config *cfg,
                                   struct netlink_ext_ack *extack)
 {
-       struct rt6_info *rt_notif = NULL, *rt_last = NULL;
+       struct fib6_info *rt_notif = NULL, *rt_last = NULL;
        struct nl_info *info = &cfg->fc_nlinfo;
        struct fib6_config r_cfg;
        struct rtnexthop *rtnh;
-       struct rt6_info *rt;
+       struct fib6_info *rt;
        struct rt6_nh *err_nh;
        struct rt6_nh *nh, *nh_safe;
        __u16 nlflags;
        rtnh = (struct rtnexthop *)cfg->fc_mp;
 
        /* Parse a Multipath Entry and build a list (rt6_nh_list) of
-        * rt6_info structs per nexthop
+        * fib6_info structs per nexthop
         */
        while (rtnh_ok(rtnh, remaining)) {
                memcpy(&r_cfg, cfg, sizeof(*cfg));
 
        err_nh = NULL;
        list_for_each_entry(nh, &rt6_nh_list, next) {
-               rt_last = nh->rt6_info;
-               err = __ip6_ins_rt(nh->rt6_info, info, extack);
-               fib6_info_release(nh->rt6_info);
+               rt_last = nh->fib6_info;
+               err = __ip6_ins_rt(nh->fib6_info, info, extack);
+               fib6_info_release(nh->fib6_info);
 
                /* save reference to first route for notification */
                if (!rt_notif && !err)
-                       rt_notif = nh->rt6_info;
+                       rt_notif = nh->fib6_info;
 
-               /* nh->rt6_info is used or freed at this point, reset to NULL*/
-               nh->rt6_info = NULL;
+               /* nh->fib6_info is used or freed at this point, reset to NULL*/
+               nh->fib6_info = NULL;
                if (err) {
                        if (replace && nhn)
                                ip6_print_replace_route_err(&rt6_nh_list);
 
 cleanup:
        list_for_each_entry_safe(nh, nh_safe, &rt6_nh_list, next) {
-               if (nh->rt6_info)
-                       fib6_info_release(nh->rt6_info);
+               if (nh->fib6_info)
+                       fib6_info_release(nh->fib6_info);
                list_del(&nh->next);
                kfree(nh);
        }
                return ip6_route_add(&cfg, GFP_KERNEL, extack);
 }
 
-static size_t rt6_nlmsg_size(struct rt6_info *rt)
+static size_t rt6_nlmsg_size(struct fib6_info *rt)
 {
        int nexthop_len = 0;
 
               + nexthop_len;
 }
 
-static int rt6_nexthop_info(struct sk_buff *skb, struct rt6_info *rt,
+static int rt6_nexthop_info(struct sk_buff *skb, struct fib6_info *rt,
                            unsigned int *flags, bool skip_oif)
 {
        if (rt->fib6_nh.nh_flags & RTNH_F_DEAD)
 }
 
 /* add multipath next hop */
-static int rt6_add_nexthop(struct sk_buff *skb, struct rt6_info *rt)
+static int rt6_add_nexthop(struct sk_buff *skb, struct fib6_info *rt)
 {
        const struct net_device *dev = rt->fib6_nh.nh_dev;
        struct rtnexthop *rtnh;
 }
 
 static int rt6_fill_node(struct net *net, struct sk_buff *skb,
-                        struct rt6_info *rt, struct dst_entry *dst,
+                        struct fib6_info *rt, struct dst_entry *dst,
                         struct in6_addr *dest, struct in6_addr *src,
                         int iif, int type, u32 portid, u32 seq,
                         unsigned int flags)
         * each as a nexthop within RTA_MULTIPATH.
         */
        if (rt->rt6i_nsiblings) {
-               struct rt6_info *sibling, *next_sibling;
+               struct fib6_info *sibling, *next_sibling;
                struct nlattr *mp;
 
                mp = nla_nest_start(skb, RTA_MULTIPATH);
        return -EMSGSIZE;
 }
 
-int rt6_dump_route(struct rt6_info *rt, void *p_arg)
+int rt6_dump_route(struct fib6_info *rt, void *p_arg)
 {
        struct rt6_rtnl_dump_arg *arg = (struct rt6_rtnl_dump_arg *) p_arg;
        struct net *net = arg->net;
        return err;
 }
 
-void inet6_rt_notify(int event, struct rt6_info *rt, struct nl_info *info,
+void inet6_rt_notify(int event, struct fib6_info *rt, struct nl_info *info,
                     unsigned int nlm_flags)
 {
        struct sk_buff *skb;