#include <linux/types.h>
 #include <linux/sched.h>
 #include <linux/errno.h>
-#include <linux/timer.h>
 #include <linux/mm.h>
 #include <linux/kernel.h>
 #include <linux/fcntl.h>
 #include <linux/compat.h>
 #include <net/protocol.h>
 #include <linux/skbuff.h>
-#include <net/sock.h>
 #include <net/raw.h>
 #include <linux/notifier.h>
 #include <linux/if_arp.h>
 #include <net/ip6_checksum.h>
 #include <linux/netconf.h>
 
-struct mr6_table {
-       struct list_head        list;
-       possible_net_t          net;
-       u32                     id;
-       struct sock __rcu       *mroute6_sk;
-       struct timer_list       ipmr_expire_timer;
-       struct list_head        mfc6_unres_queue;
-       struct vif_device       vif6_table[MAXMIFS];
-       struct rhltable         mfc6_hash;
-       struct list_head        mfc6_cache_list;
-       int                     maxvif;
-       atomic_t                cache_resolve_queue_len;
-       bool                    mroute_do_assert;
-       bool                    mroute_do_pim;
-#ifdef CONFIG_IPV6_PIMSM_V2
-       int                     mroute_reg_vif_num;
-#endif
-};
-
 struct ip6mr_rule {
        struct fib_rule         common;
 };
 
 struct ip6mr_result {
-       struct mr6_table        *mrt;
+       struct mr_table *mrt;
 };
 
 /* Big lock, protecting vif table, mrt cache and mroute socket state.
 
 static DEFINE_RWLOCK(mrt_lock);
 
-/*
- *     Multicast router control variables
- */
-
-#define MIF_EXISTS(_mrt, _idx) ((_mrt)->vif6_table[_idx].dev != NULL)
+/* Multicast router control variables */
 
 /* Special spinlock for queue of unresolved entries */
 static DEFINE_SPINLOCK(mfc_unres_lock);
 
 static struct kmem_cache *mrt_cachep __read_mostly;
 
-static struct mr6_table *ip6mr_new_table(struct net *net, u32 id);
-static void ip6mr_free_table(struct mr6_table *mrt);
+static struct mr_table *ip6mr_new_table(struct net *net, u32 id);
+static void ip6mr_free_table(struct mr_table *mrt);
 
-static void ip6_mr_forward(struct net *net, struct mr6_table *mrt,
+static void ip6_mr_forward(struct net *net, struct mr_table *mrt,
                           struct sk_buff *skb, struct mfc6_cache *cache);
-static int ip6mr_cache_report(struct mr6_table *mrt, struct sk_buff *pkt,
+static int ip6mr_cache_report(struct mr_table *mrt, struct sk_buff *pkt,
                              mifi_t mifi, int assert);
-static int __ip6mr_fill_mroute(struct mr6_table *mrt, struct sk_buff *skb,
+static int __ip6mr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
                               struct mfc6_cache *c, struct rtmsg *rtm);
-static void mr6_netlink_event(struct mr6_table *mrt, struct mfc6_cache *mfc,
+static void mr6_netlink_event(struct mr_table *mrt, struct mfc6_cache *mfc,
                              int cmd);
-static void mrt6msg_netlink_event(struct mr6_table *mrt, struct sk_buff *pkt);
+static void mrt6msg_netlink_event(struct mr_table *mrt, struct sk_buff *pkt);
 static int ip6mr_rtm_dumproute(struct sk_buff *skb,
                               struct netlink_callback *cb);
-static void mroute_clean_tables(struct mr6_table *mrt, bool all);
+static void mroute_clean_tables(struct mr_table *mrt, bool all);
 static void ipmr_expire_process(struct timer_list *t);
 
 #ifdef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES
 #define ip6mr_for_each_table(mrt, net) \
        list_for_each_entry_rcu(mrt, &net->ipv6.mr6_tables, list)
 
-static struct mr6_table *ip6mr_get_table(struct net *net, u32 id)
+static struct mr_table *ip6mr_get_table(struct net *net, u32 id)
 {
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
 
        ip6mr_for_each_table(mrt, net) {
                if (mrt->id == id)
 }
 
 static int ip6mr_fib_lookup(struct net *net, struct flowi6 *flp6,
-                           struct mr6_table **mrt)
+                           struct mr_table **mrt)
 {
        int err;
        struct ip6mr_result res;
                             int flags, struct fib_lookup_arg *arg)
 {
        struct ip6mr_result *res = arg->result;
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
 
        switch (rule->action) {
        case FR_ACT_TO_TBL:
 static int __net_init ip6mr_rules_init(struct net *net)
 {
        struct fib_rules_ops *ops;
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
        int err;
 
        ops = fib_rules_register(&ip6mr_rules_ops_template, net);
 
 static void __net_exit ip6mr_rules_exit(struct net *net)
 {
-       struct mr6_table *mrt, *next;
+       struct mr_table *mrt, *next;
 
        rtnl_lock();
        list_for_each_entry_safe(mrt, next, &net->ipv6.mr6_tables, list) {
 #define ip6mr_for_each_table(mrt, net) \
        for (mrt = net->ipv6.mrt6; mrt; mrt = NULL)
 
-static struct mr6_table *ip6mr_get_table(struct net *net, u32 id)
+static struct mr_table *ip6mr_get_table(struct net *net, u32 id)
 {
        return net->ipv6.mrt6;
 }
 
 static int ip6mr_fib_lookup(struct net *net, struct flowi6 *flp6,
-                           struct mr6_table **mrt)
+                           struct mr_table **mrt)
 {
        *mrt = net->ipv6.mrt6;
        return 0;
        .automatic_shrinking = true,
 };
 
-static struct mr6_table *ip6mr_new_table(struct net *net, u32 id)
+static struct mr_table *ip6mr_new_table(struct net *net, u32 id)
 {
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
 
        mrt = ip6mr_get_table(net, id);
        if (mrt)
        mrt->id = id;
        write_pnet(&mrt->net, net);
 
-       rhltable_init(&mrt->mfc6_hash, &ip6mr_rht_params);
-       INIT_LIST_HEAD(&mrt->mfc6_cache_list);
-       INIT_LIST_HEAD(&mrt->mfc6_unres_queue);
+       rhltable_init(&mrt->mfc_hash, &ip6mr_rht_params);
+       INIT_LIST_HEAD(&mrt->mfc_cache_list);
+       INIT_LIST_HEAD(&mrt->mfc_unres_queue);
 
        timer_setup(&mrt->ipmr_expire_timer, ipmr_expire_process, 0);
 
        return mrt;
 }
 
-static void ip6mr_free_table(struct mr6_table *mrt)
+static void ip6mr_free_table(struct mr_table *mrt)
 {
        del_timer_sync(&mrt->ipmr_expire_timer);
        mroute_clean_tables(mrt, true);
-       rhltable_destroy(&mrt->mfc6_hash);
+       rhltable_destroy(&mrt->mfc_hash);
        kfree(mrt);
 }
 
 
 struct ipmr_mfc_iter {
        struct seq_net_private p;
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
        struct list_head *cache;
 };
 
 static struct mfc6_cache *ipmr_mfc_seq_idx(struct net *net,
                                           struct ipmr_mfc_iter *it, loff_t pos)
 {
-       struct mr6_table *mrt = it->mrt;
+       struct mr_table *mrt = it->mrt;
        struct mfc6_cache *mfc;
 
        rcu_read_lock();
-       it->cache = &mrt->mfc6_cache_list;
-       list_for_each_entry_rcu(mfc, &mrt->mfc6_cache_list, list)
+       it->cache = &mrt->mfc_cache_list;
+       list_for_each_entry_rcu(mfc, &mrt->mfc_cache_list, list)
                if (pos-- == 0)
                        return mfc;
        rcu_read_unlock();
 
        spin_lock_bh(&mfc_unres_lock);
-       it->cache = &mrt->mfc6_unres_queue;
+       it->cache = &mrt->mfc_unres_queue;
        list_for_each_entry(mfc, it->cache, list)
                if (pos-- == 0)
                        return mfc;
 
 struct ipmr_vif_iter {
        struct seq_net_private p;
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
        int ct;
 };
 
                                            struct ipmr_vif_iter *iter,
                                            loff_t pos)
 {
-       struct mr6_table *mrt = iter->mrt;
+       struct mr_table *mrt = iter->mrt;
 
        for (iter->ct = 0; iter->ct < mrt->maxvif; ++iter->ct) {
-               if (!MIF_EXISTS(mrt, iter->ct))
+               if (!VIF_EXISTS(mrt, iter->ct))
                        continue;
                if (pos-- == 0)
-                       return &mrt->vif6_table[iter->ct];
+                       return &mrt->vif_table[iter->ct];
        }
        return NULL;
 }
 {
        struct ipmr_vif_iter *iter = seq->private;
        struct net *net = seq_file_net(seq);
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
 
        mrt = ip6mr_get_table(net, RT6_TABLE_DFLT);
        if (!mrt)
 {
        struct ipmr_vif_iter *iter = seq->private;
        struct net *net = seq_file_net(seq);
-       struct mr6_table *mrt = iter->mrt;
+       struct mr_table *mrt = iter->mrt;
 
        ++*pos;
        if (v == SEQ_START_TOKEN)
                return ip6mr_vif_seq_idx(net, iter, 0);
 
        while (++iter->ct < mrt->maxvif) {
-               if (!MIF_EXISTS(mrt, iter->ct))
+               if (!VIF_EXISTS(mrt, iter->ct))
                        continue;
-               return &mrt->vif6_table[iter->ct];
+               return &mrt->vif_table[iter->ct];
        }
        return NULL;
 }
 static int ip6mr_vif_seq_show(struct seq_file *seq, void *v)
 {
        struct ipmr_vif_iter *iter = seq->private;
-       struct mr6_table *mrt = iter->mrt;
+       struct mr_table *mrt = iter->mrt;
 
        if (v == SEQ_START_TOKEN) {
                seq_puts(seq,
 
                seq_printf(seq,
                           "%2td %-10s %8ld %7ld  %8ld %7ld %05X\n",
-                          vif - mrt->vif6_table,
+                          vif - mrt->vif_table,
                           name, vif->bytes_in, vif->pkt_in,
                           vif->bytes_out, vif->pkt_out,
                           vif->flags);
 {
        struct ipmr_mfc_iter *it = seq->private;
        struct net *net = seq_file_net(seq);
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
 
        mrt = ip6mr_get_table(net, RT6_TABLE_DFLT);
        if (!mrt)
        struct mfc6_cache *mfc = v;
        struct ipmr_mfc_iter *it = seq->private;
        struct net *net = seq_file_net(seq);
-       struct mr6_table *mrt = it->mrt;
+       struct mr_table *mrt = it->mrt;
 
        ++*pos;
 
        if (mfc->list.next != it->cache)
                return list_entry(mfc->list.next, struct mfc6_cache, list);
 
-       if (it->cache == &mrt->mfc6_unres_queue)
+       if (it->cache == &mrt->mfc_unres_queue)
                goto end_of_list;
 
        /* exhausted cache_array, show unresolved */
        rcu_read_unlock();
-       it->cache = &mrt->mfc6_unres_queue;
+       it->cache = &mrt->mfc_unres_queue;
 
        spin_lock_bh(&mfc_unres_lock);
        if (!list_empty(it->cache))
 static void ipmr_mfc_seq_stop(struct seq_file *seq, void *v)
 {
        struct ipmr_mfc_iter *it = seq->private;
-       struct mr6_table *mrt = it->mrt;
+       struct mr_table *mrt = it->mrt;
 
-       if (it->cache == &mrt->mfc6_unres_queue)
+       if (it->cache == &mrt->mfc_unres_queue)
                spin_unlock_bh(&mfc_unres_lock);
-       else if (it->cache == &mrt->mfc6_cache_list)
+       else if (it->cache == &mrt->mfc_cache_list)
                rcu_read_unlock();
 }
 
        } else {
                const struct mfc6_cache *mfc = v;
                const struct ipmr_mfc_iter *it = seq->private;
-               struct mr6_table *mrt = it->mrt;
+               struct mr_table *mrt = it->mrt;
 
                seq_printf(seq, "%pI6 %pI6 %-3hd",
                           &mfc->mf6c_mcastgrp, &mfc->mf6c_origin,
                           mfc->mf6c_parent);
 
-               if (it->cache != &mrt->mfc6_unres_queue) {
+               if (it->cache != &mrt->mfc_unres_queue) {
                        seq_printf(seq, " %8lu %8lu %8lu",
                                   mfc->mfc_un.res.pkt,
                                   mfc->mfc_un.res.bytes,
                                   mfc->mfc_un.res.wrong_if);
                        for (n = mfc->mfc_un.res.minvif;
                             n < mfc->mfc_un.res.maxvif; n++) {
-                               if (MIF_EXISTS(mrt, n) &&
+                               if (VIF_EXISTS(mrt, n) &&
                                    mfc->mfc_un.res.ttls[n] < 255)
                                        seq_printf(seq,
                                                   " %2d:%-3d",
        struct ipv6hdr   *encap;
        struct net_device  *reg_dev = NULL;
        struct net *net = dev_net(skb->dev);
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
        struct flowi6 fl6 = {
                .flowi6_iif     = skb->dev->ifindex,
                .flowi6_mark    = skb->mark,
 
        read_lock(&mrt_lock);
        if (reg_vif_num >= 0)
-               reg_dev = mrt->vif6_table[reg_vif_num].dev;
+               reg_dev = mrt->vif_table[reg_vif_num].dev;
        if (reg_dev)
                dev_hold(reg_dev);
        read_unlock(&mrt_lock);
                                      struct net_device *dev)
 {
        struct net *net = dev_net(dev);
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
        struct flowi6 fl6 = {
                .flowi6_oif     = dev->ifindex,
                .flowi6_iif     = skb->skb_iif ? : LOOPBACK_IFINDEX,
        dev->features           |= NETIF_F_NETNS_LOCAL;
 }
 
-static struct net_device *ip6mr_reg_vif(struct net *net, struct mr6_table *mrt)
+static struct net_device *ip6mr_reg_vif(struct net *net, struct mr_table *mrt)
 {
        struct net_device *dev;
        char name[IFNAMSIZ];
  *     Delete a VIF entry
  */
 
-static int mif6_delete(struct mr6_table *mrt, int vifi, int notify,
+static int mif6_delete(struct mr_table *mrt, int vifi, int notify,
                       struct list_head *head)
 {
        struct vif_device *v;
        if (vifi < 0 || vifi >= mrt->maxvif)
                return -EADDRNOTAVAIL;
 
-       v = &mrt->vif6_table[vifi];
+       v = &mrt->vif_table[vifi];
 
        write_lock_bh(&mrt_lock);
        dev = v->dev;
        if (vifi + 1 == mrt->maxvif) {
                int tmp;
                for (tmp = vifi - 1; tmp >= 0; tmp--) {
-                       if (MIF_EXISTS(mrt, tmp))
+                       if (VIF_EXISTS(mrt, tmp))
                                break;
                }
                mrt->maxvif = tmp + 1;
    and reporting error to netlink readers.
  */
 
-static void ip6mr_destroy_unres(struct mr6_table *mrt, struct mfc6_cache *c)
+static void ip6mr_destroy_unres(struct mr_table *mrt, struct mfc6_cache *c)
 {
        struct net *net = read_pnet(&mrt->net);
        struct sk_buff *skb;
 
 /* Timer process for all the unresolved queue. */
 
-static void ipmr_do_expire_process(struct mr6_table *mrt)
+static void ipmr_do_expire_process(struct mr_table *mrt)
 {
        unsigned long now = jiffies;
        unsigned long expires = 10 * HZ;
        struct mfc6_cache *c, *next;
 
-       list_for_each_entry_safe(c, next, &mrt->mfc6_unres_queue, list) {
+       list_for_each_entry_safe(c, next, &mrt->mfc_unres_queue, list) {
                if (time_after(c->mfc_un.unres.expires, now)) {
                        /* not yet... */
                        unsigned long interval = c->mfc_un.unres.expires - now;
                ip6mr_destroy_unres(mrt, c);
        }
 
-       if (!list_empty(&mrt->mfc6_unres_queue))
+       if (!list_empty(&mrt->mfc_unres_queue))
                mod_timer(&mrt->ipmr_expire_timer, jiffies + expires);
 }
 
 static void ipmr_expire_process(struct timer_list *t)
 {
-       struct mr6_table *mrt = from_timer(mrt, t, ipmr_expire_timer);
+       struct mr_table *mrt = from_timer(mrt, t, ipmr_expire_timer);
 
        if (!spin_trylock(&mfc_unres_lock)) {
                mod_timer(&mrt->ipmr_expire_timer, jiffies + 1);
                return;
        }
 
-       if (!list_empty(&mrt->mfc6_unres_queue))
+       if (!list_empty(&mrt->mfc_unres_queue))
                ipmr_do_expire_process(mrt);
 
        spin_unlock(&mfc_unres_lock);
 
 /* Fill oifs list. It is called under write locked mrt_lock. */
 
-static void ip6mr_update_thresholds(struct mr6_table *mrt, struct mfc6_cache *cache,
+static void ip6mr_update_thresholds(struct mr_table *mrt,
+                                   struct mfc6_cache *cache,
                                    unsigned char *ttls)
 {
        int vifi;
        memset(cache->mfc_un.res.ttls, 255, MAXMIFS);
 
        for (vifi = 0; vifi < mrt->maxvif; vifi++) {
-               if (MIF_EXISTS(mrt, vifi) &&
+               if (VIF_EXISTS(mrt, vifi) &&
                    ttls[vifi] && ttls[vifi] < 255) {
                        cache->mfc_un.res.ttls[vifi] = ttls[vifi];
                        if (cache->mfc_un.res.minvif > vifi)
        cache->mfc_un.res.lastuse = jiffies;
 }
 
-static int mif6_add(struct net *net, struct mr6_table *mrt,
+static int mif6_add(struct net *net, struct mr_table *mrt,
                    struct mif6ctl *vifc, int mrtsock)
 {
        int vifi = vifc->mif6c_mifi;
-       struct vif_device *v = &mrt->vif6_table[vifi];
+       struct vif_device *v = &mrt->vif_table[vifi];
        struct net_device *dev;
        struct inet6_dev *in6_dev;
        int err;
 
        /* Is vif busy ? */
-       if (MIF_EXISTS(mrt, vifi))
+       if (VIF_EXISTS(mrt, vifi))
                return -EADDRINUSE;
 
        switch (vifc->mif6c_flags) {
        return 0;
 }
 
-static struct mfc6_cache *ip6mr_cache_find(struct mr6_table *mrt,
+static struct mfc6_cache *ip6mr_cache_find(struct mr_table *mrt,
                                           const struct in6_addr *origin,
                                           const struct in6_addr *mcastgrp)
 {
        struct rhlist_head *tmp, *list;
        struct mfc6_cache *c;
 
-       list = rhltable_lookup(&mrt->mfc6_hash, &arg, ip6mr_rht_params);
+       list = rhltable_lookup(&mrt->mfc_hash, &arg, ip6mr_rht_params);
        rhl_for_each_entry_rcu(c, tmp, list, mnode)
                return c;
 
 }
 
 /* Look for a (*,*,oif) entry */
-static struct mfc6_cache *ip6mr_cache_find_any_parent(struct mr6_table *mrt,
+static struct mfc6_cache *ip6mr_cache_find_any_parent(struct mr_table *mrt,
                                                      mifi_t mifi)
 {
        struct mfc6_cache_cmp_arg arg = {
        struct rhlist_head *tmp, *list;
        struct mfc6_cache *c;
 
-       list = rhltable_lookup(&mrt->mfc6_hash, &arg, ip6mr_rht_params);
+       list = rhltable_lookup(&mrt->mfc_hash, &arg, ip6mr_rht_params);
        rhl_for_each_entry_rcu(c, tmp, list, mnode)
                if (c->mfc_un.res.ttls[mifi] < 255)
                        return c;
 }
 
 /* Look for a (*,G) entry */
-static struct mfc6_cache *ip6mr_cache_find_any(struct mr6_table *mrt,
+static struct mfc6_cache *ip6mr_cache_find_any(struct mr_table *mrt,
                                               struct in6_addr *mcastgrp,
                                               mifi_t mifi)
 {
        if (ipv6_addr_any(mcastgrp))
                goto skip;
 
-       list = rhltable_lookup(&mrt->mfc6_hash, &arg, ip6mr_rht_params);
+       list = rhltable_lookup(&mrt->mfc_hash, &arg, ip6mr_rht_params);
        rhl_for_each_entry_rcu(c, tmp, list, mnode) {
                if (c->mfc_un.res.ttls[mifi] < 255)
                        return c;
 
 /* Look for a (S,G,iif) entry if parent != -1 */
 static struct mfc6_cache *
-ip6mr_cache_find_parent(struct mr6_table *mrt,
+ip6mr_cache_find_parent(struct mr_table *mrt,
                        const struct in6_addr *origin,
                        const struct in6_addr *mcastgrp,
                        int parent)
        struct rhlist_head *tmp, *list;
        struct mfc6_cache *c;
 
-       list = rhltable_lookup(&mrt->mfc6_hash, &arg, ip6mr_rht_params);
+       list = rhltable_lookup(&mrt->mfc_hash, &arg, ip6mr_rht_params);
        rhl_for_each_entry_rcu(c, tmp, list, mnode)
                if (parent == -1 || parent == c->mf6c_parent)
                        return c;
  *     A cache entry has gone into a resolved state from queued
  */
 
-static void ip6mr_cache_resolve(struct net *net, struct mr6_table *mrt,
+static void ip6mr_cache_resolve(struct net *net, struct mr_table *mrt,
                                struct mfc6_cache *uc, struct mfc6_cache *c)
 {
        struct sk_buff *skb;
  *     Called under mrt_lock.
  */
 
-static int ip6mr_cache_report(struct mr6_table *mrt, struct sk_buff *pkt,
+static int ip6mr_cache_report(struct mr_table *mrt, struct sk_buff *pkt,
                              mifi_t mifi, int assert)
 {
        struct sock *mroute6_sk;
        }
 
        rcu_read_lock();
-       mroute6_sk = rcu_dereference(mrt->mroute6_sk);
+       mroute6_sk = rcu_dereference(mrt->mroute_sk);
        if (!mroute6_sk) {
                rcu_read_unlock();
                kfree_skb(skb);
  */
 
 static int
-ip6mr_cache_unresolved(struct mr6_table *mrt, mifi_t mifi, struct sk_buff *skb)
+ip6mr_cache_unresolved(struct mr_table *mrt, mifi_t mifi, struct sk_buff *skb)
 {
        bool found = false;
        int err;
        struct mfc6_cache *c;
 
        spin_lock_bh(&mfc_unres_lock);
-       list_for_each_entry(c, &mrt->mfc6_unres_queue, list) {
+       list_for_each_entry(c, &mrt->mfc_unres_queue, list) {
                if (ipv6_addr_equal(&c->mf6c_mcastgrp, &ipv6_hdr(skb)->daddr) &&
                    ipv6_addr_equal(&c->mf6c_origin, &ipv6_hdr(skb)->saddr)) {
                        found = true;
                }
 
                atomic_inc(&mrt->cache_resolve_queue_len);
-               list_add(&c->list, &mrt->mfc6_unres_queue);
+               list_add(&c->list, &mrt->mfc_unres_queue);
                mr6_netlink_event(mrt, c, RTM_NEWROUTE);
 
                ipmr_do_expire_process(mrt);
  *     MFC6 cache manipulation by user space
  */
 
-static int ip6mr_mfc_delete(struct mr6_table *mrt, struct mf6cctl *mfc,
+static int ip6mr_mfc_delete(struct mr_table *mrt, struct mf6cctl *mfc,
                            int parent)
 {
        struct mfc6_cache *c;
        rcu_read_unlock();
        if (!c)
                return -ENOENT;
-       rhltable_remove(&mrt->mfc6_hash, &c->mnode, ip6mr_rht_params);
+       rhltable_remove(&mrt->mfc_hash, &c->mnode, ip6mr_rht_params);
        list_del_rcu(&c->list);
 
        mr6_netlink_event(mrt, c, RTM_DELROUTE);
 {
        struct net_device *dev = netdev_notifier_info_to_dev(ptr);
        struct net *net = dev_net(dev);
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
        struct vif_device *v;
        int ct;
 
                return NOTIFY_DONE;
 
        ip6mr_for_each_table(mrt, net) {
-               v = &mrt->vif6_table[0];
+               v = &mrt->vif_table[0];
                for (ct = 0; ct < mrt->maxvif; ct++, v++) {
                        if (v->dev == dev)
                                mif6_delete(mrt, ct, 1, NULL);
        kmem_cache_destroy(mrt_cachep);
 }
 
-static int ip6mr_mfc_add(struct net *net, struct mr6_table *mrt,
+static int ip6mr_mfc_add(struct net *net, struct mr_table *mrt,
                         struct mf6cctl *mfc, int mrtsock, int parent)
 {
        unsigned char ttls[MAXMIFS];
        if (!mrtsock)
                c->mfc_flags |= MFC_STATIC;
 
-       err = rhltable_insert_key(&mrt->mfc6_hash, &c->cmparg, &c->mnode,
+       err = rhltable_insert_key(&mrt->mfc_hash, &c->cmparg, &c->mnode,
                                  ip6mr_rht_params);
        if (err) {
                pr_err("ip6mr: rhtable insert error %d\n", err);
                ip6mr_cache_free(c);
                return err;
        }
-       list_add_tail_rcu(&c->list, &mrt->mfc6_cache_list);
+       list_add_tail_rcu(&c->list, &mrt->mfc_cache_list);
 
        /* Check to see if we resolved a queued list. If so we
         * need to send on the frames and tidy up.
         */
        found = false;
        spin_lock_bh(&mfc_unres_lock);
-       list_for_each_entry(uc, &mrt->mfc6_unres_queue, list) {
+       list_for_each_entry(uc, &mrt->mfc_unres_queue, list) {
                if (ipv6_addr_equal(&uc->mf6c_origin, &c->mf6c_origin) &&
                    ipv6_addr_equal(&uc->mf6c_mcastgrp, &c->mf6c_mcastgrp)) {
                        list_del(&uc->list);
                        break;
                }
        }
-       if (list_empty(&mrt->mfc6_unres_queue))
+       if (list_empty(&mrt->mfc_unres_queue))
                del_timer(&mrt->ipmr_expire_timer);
        spin_unlock_bh(&mfc_unres_lock);
 
  *     Close the multicast socket, and clear the vif tables etc
  */
 
-static void mroute_clean_tables(struct mr6_table *mrt, bool all)
+static void mroute_clean_tables(struct mr_table *mrt, bool all)
 {
        struct mfc6_cache *c, *tmp;
        LIST_HEAD(list);
 
        /* Shut down all active vif entries */
        for (i = 0; i < mrt->maxvif; i++) {
-               if (!all && (mrt->vif6_table[i].flags & VIFF_STATIC))
+               if (!all && (mrt->vif_table[i].flags & VIFF_STATIC))
                        continue;
                mif6_delete(mrt, i, 0, &list);
        }
        unregister_netdevice_many(&list);
 
        /* Wipe the cache */
-       list_for_each_entry_safe(c, tmp, &mrt->mfc6_cache_list, list) {
+       list_for_each_entry_safe(c, tmp, &mrt->mfc_cache_list, list) {
                if (!all && (c->mfc_flags & MFC_STATIC))
                        continue;
-               rhltable_remove(&mrt->mfc6_hash, &c->mnode, ip6mr_rht_params);
+               rhltable_remove(&mrt->mfc_hash, &c->mnode, ip6mr_rht_params);
                list_del_rcu(&c->list);
                mr6_netlink_event(mrt, c, RTM_DELROUTE);
                ip6mr_cache_free(c);
 
        if (atomic_read(&mrt->cache_resolve_queue_len) != 0) {
                spin_lock_bh(&mfc_unres_lock);
-               list_for_each_entry_safe(c, tmp, &mrt->mfc6_unres_queue, list) {
+               list_for_each_entry_safe(c, tmp, &mrt->mfc_unres_queue, list) {
                        list_del(&c->list);
                        mr6_netlink_event(mrt, c, RTM_DELROUTE);
                        ip6mr_destroy_unres(mrt, c);
        }
 }
 
-static int ip6mr_sk_init(struct mr6_table *mrt, struct sock *sk)
+static int ip6mr_sk_init(struct mr_table *mrt, struct sock *sk)
 {
        int err = 0;
        struct net *net = sock_net(sk);
 
        rtnl_lock();
        write_lock_bh(&mrt_lock);
-       if (rtnl_dereference(mrt->mroute6_sk)) {
+       if (rtnl_dereference(mrt->mroute_sk)) {
                err = -EADDRINUSE;
        } else {
-               rcu_assign_pointer(mrt->mroute6_sk, sk);
+               rcu_assign_pointer(mrt->mroute_sk, sk);
                net->ipv6.devconf_all->mc_forwarding++;
        }
        write_unlock_bh(&mrt_lock);
 {
        int err = -EACCES;
        struct net *net = sock_net(sk);
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
 
        if (sk->sk_type != SOCK_RAW ||
            inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
 
        rtnl_lock();
        ip6mr_for_each_table(mrt, net) {
-               if (sk == rtnl_dereference(mrt->mroute6_sk)) {
+               if (sk == rtnl_dereference(mrt->mroute_sk)) {
                        write_lock_bh(&mrt_lock);
-                       RCU_INIT_POINTER(mrt->mroute6_sk, NULL);
+                       RCU_INIT_POINTER(mrt->mroute_sk, NULL);
                        net->ipv6.devconf_all->mc_forwarding--;
                        write_unlock_bh(&mrt_lock);
                        inet6_netconf_notify_devconf(net, RTM_NEWNETCONF,
 
 bool mroute6_is_socket(struct net *net, struct sk_buff *skb)
 {
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
        struct flowi6 fl6 = {
                .flowi6_iif     = skb->skb_iif ? : LOOPBACK_IFINDEX,
                .flowi6_oif     = skb->dev->ifindex,
        if (ip6mr_fib_lookup(net, &fl6, &mrt) < 0)
                return NULL;
 
-       return rcu_access_pointer(mrt->mroute6_sk);
+       return rcu_access_pointer(mrt->mroute_sk);
 }
 EXPORT_SYMBOL(mroute6_is_socket);
 
        struct mf6cctl mfc;
        mifi_t mifi;
        struct net *net = sock_net(sk);
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
 
        if (sk->sk_type != SOCK_RAW ||
            inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
                return -ENOENT;
 
        if (optname != MRT6_INIT) {
-               if (sk != rcu_access_pointer(mrt->mroute6_sk) &&
+               if (sk != rcu_access_pointer(mrt->mroute_sk) &&
                    !ns_capable(net->user_ns, CAP_NET_ADMIN))
                        return -EACCES;
        }
                        return -ENFILE;
                rtnl_lock();
                ret = mif6_add(net, mrt, &vif,
-                              sk == rtnl_dereference(mrt->mroute6_sk));
+                              sk == rtnl_dereference(mrt->mroute_sk));
                rtnl_unlock();
                return ret;
 
                else
                        ret = ip6mr_mfc_add(net, mrt, &mfc,
                                            sk ==
-                                           rtnl_dereference(mrt->mroute6_sk),
+                                           rtnl_dereference(mrt->mroute_sk),
                                            parent);
                rtnl_unlock();
                return ret;
                /* "pim6reg%u" should not exceed 16 bytes (IFNAMSIZ) */
                if (v != RT_TABLE_DEFAULT && v >= 100000000)
                        return -EINVAL;
-               if (sk == rcu_access_pointer(mrt->mroute6_sk))
+               if (sk == rcu_access_pointer(mrt->mroute_sk))
                        return -EBUSY;
 
                rtnl_lock();
        int olr;
        int val;
        struct net *net = sock_net(sk);
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
 
        if (sk->sk_type != SOCK_RAW ||
            inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
        struct vif_device *vif;
        struct mfc6_cache *c;
        struct net *net = sock_net(sk);
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
 
        mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT);
        if (!mrt)
                if (vr.mifi >= mrt->maxvif)
                        return -EINVAL;
                read_lock(&mrt_lock);
-               vif = &mrt->vif6_table[vr.mifi];
-               if (MIF_EXISTS(mrt, vr.mifi)) {
+               vif = &mrt->vif_table[vr.mifi];
+               if (VIF_EXISTS(mrt, vr.mifi)) {
                        vr.icount = vif->pkt_in;
                        vr.ocount = vif->pkt_out;
                        vr.ibytes = vif->bytes_in;
        struct vif_device *vif;
        struct mfc6_cache *c;
        struct net *net = sock_net(sk);
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
 
        mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT);
        if (!mrt)
                if (vr.mifi >= mrt->maxvif)
                        return -EINVAL;
                read_lock(&mrt_lock);
-               vif = &mrt->vif6_table[vr.mifi];
-               if (MIF_EXISTS(mrt, vr.mifi)) {
+               vif = &mrt->vif_table[vr.mifi];
+               if (VIF_EXISTS(mrt, vr.mifi)) {
                        vr.icount = vif->pkt_in;
                        vr.ocount = vif->pkt_out;
                        vr.ibytes = vif->bytes_in;
  *     Processing handlers for ip6mr_forward
  */
 
-static int ip6mr_forward2(struct net *net, struct mr6_table *mrt,
+static int ip6mr_forward2(struct net *net, struct mr_table *mrt,
                          struct sk_buff *skb, struct mfc6_cache *c, int vifi)
 {
        struct ipv6hdr *ipv6h;
-       struct vif_device *vif = &mrt->vif6_table[vifi];
+       struct vif_device *vif = &mrt->vif_table[vifi];
        struct net_device *dev;
        struct dst_entry *dst;
        struct flowi6 fl6;
        return 0;
 }
 
-static int ip6mr_find_vif(struct mr6_table *mrt, struct net_device *dev)
+static int ip6mr_find_vif(struct mr_table *mrt, struct net_device *dev)
 {
        int ct;
 
        for (ct = mrt->maxvif - 1; ct >= 0; ct--) {
-               if (mrt->vif6_table[ct].dev == dev)
+               if (mrt->vif_table[ct].dev == dev)
                        break;
        }
        return ct;
 }
 
-static void ip6_mr_forward(struct net *net, struct mr6_table *mrt,
+static void ip6_mr_forward(struct net *net, struct mr_table *mrt,
                           struct sk_buff *skb, struct mfc6_cache *cache)
 {
        int psend = -1;
        /*
         * Wrong interface: drop packet and (maybe) send PIM assert.
         */
-       if (mrt->vif6_table[vif].dev != skb->dev) {
+       if (mrt->vif_table[vif].dev != skb->dev) {
                cache->mfc_un.res.wrong_if++;
 
                if (true_vifi >= 0 && mrt->mroute_do_assert &&
        }
 
 forward:
-       mrt->vif6_table[vif].pkt_in++;
-       mrt->vif6_table[vif].bytes_in += skb->len;
+       mrt->vif_table[vif].pkt_in++;
+       mrt->vif_table[vif].bytes_in += skb->len;
 
        /*
         *      Forward the frame
 {
        struct mfc6_cache *cache;
        struct net *net = dev_net(skb->dev);
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
        struct flowi6 fl6 = {
                .flowi6_iif     = skb->dev->ifindex,
                .flowi6_mark    = skb->mark,
 }
 
 
-static int __ip6mr_fill_mroute(struct mr6_table *mrt, struct sk_buff *skb,
+static int __ip6mr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
                               struct mfc6_cache *c, struct rtmsg *rtm)
 {
        struct rta_mfc_stats mfcs;
                return -ENOENT;
        }
 
-       if (MIF_EXISTS(mrt, c->mf6c_parent) &&
-           nla_put_u32(skb, RTA_IIF, mrt->vif6_table[c->mf6c_parent].dev->ifindex) < 0)
+       if (VIF_EXISTS(mrt, c->mf6c_parent) &&
+           nla_put_u32(skb, RTA_IIF,
+                       mrt->vif_table[c->mf6c_parent].dev->ifindex) < 0)
                return -EMSGSIZE;
        mp_attr = nla_nest_start(skb, RTA_MULTIPATH);
        if (!mp_attr)
                return -EMSGSIZE;
 
        for (ct = c->mfc_un.res.minvif; ct < c->mfc_un.res.maxvif; ct++) {
-               if (MIF_EXISTS(mrt, ct) && c->mfc_un.res.ttls[ct] < 255) {
+               if (VIF_EXISTS(mrt, ct) && c->mfc_un.res.ttls[ct] < 255) {
                        nhp = nla_reserve_nohdr(skb, sizeof(*nhp));
                        if (!nhp) {
                                nla_nest_cancel(skb, mp_attr);
 
                        nhp->rtnh_flags = 0;
                        nhp->rtnh_hops = c->mfc_un.res.ttls[ct];
-                       nhp->rtnh_ifindex = mrt->vif6_table[ct].dev->ifindex;
+                       nhp->rtnh_ifindex = mrt->vif_table[ct].dev->ifindex;
                        nhp->rtnh_len = sizeof(*nhp);
                }
        }
                    u32 portid)
 {
        int err;
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
        struct mfc6_cache *cache;
        struct rt6_info *rt = (struct rt6_info *)skb_dst(skb);
 
        return err;
 }
 
-static int ip6mr_fill_mroute(struct mr6_table *mrt, struct sk_buff *skb,
+static int ip6mr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
                             u32 portid, u32 seq, struct mfc6_cache *c, int cmd,
                             int flags)
 {
        return len;
 }
 
-static void mr6_netlink_event(struct mr6_table *mrt, struct mfc6_cache *mfc,
+static void mr6_netlink_event(struct mr_table *mrt, struct mfc6_cache *mfc,
                              int cmd)
 {
        struct net *net = read_pnet(&mrt->net);
        return len;
 }
 
-static void mrt6msg_netlink_event(struct mr6_table *mrt, struct sk_buff *pkt)
+static void mrt6msg_netlink_event(struct mr_table *mrt, struct sk_buff *pkt)
 {
        struct net *net = read_pnet(&mrt->net);
        struct nlmsghdr *nlh;
 static int ip6mr_rtm_dumproute(struct sk_buff *skb, struct netlink_callback *cb)
 {
        struct net *net = sock_net(skb->sk);
-       struct mr6_table *mrt;
+       struct mr_table *mrt;
        struct mfc6_cache *mfc;
        unsigned int t = 0, s_t;
        unsigned int e = 0, s_e;
        ip6mr_for_each_table(mrt, net) {
                if (t < s_t)
                        goto next_table;
-               list_for_each_entry_rcu(mfc, &mrt->mfc6_cache_list, list) {
+               list_for_each_entry_rcu(mfc, &mrt->mfc_cache_list, list) {
                        if (e < s_e)
                                goto next_entry;
                        if (ip6mr_fill_mroute(mrt, skb,
                s_e = 0;
 
                spin_lock_bh(&mfc_unres_lock);
-               list_for_each_entry(mfc, &mrt->mfc6_unres_queue, list) {
+               list_for_each_entry(mfc, &mrt->mfc_unres_queue, list) {
                        if (e < s_e)
                                goto next_entry2;
                        if (ip6mr_fill_mroute(mrt, skb,