GNU Linux-libre 4.9.314-gnu1
[releases.git] / drivers / net / vrf.c
1 /*
2  * vrf.c: device driver to encapsulate a VRF space
3  *
4  * Copyright (c) 2015 Cumulus Networks. All rights reserved.
5  * Copyright (c) 2015 Shrijeet Mukherjee <shm@cumulusnetworks.com>
6  * Copyright (c) 2015 David Ahern <dsa@cumulusnetworks.com>
7  *
8  * Based on dummy, team and ipvlan drivers
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  */
15
16 #include <linux/module.h>
17 #include <linux/kernel.h>
18 #include <linux/netdevice.h>
19 #include <linux/etherdevice.h>
20 #include <linux/ip.h>
21 #include <linux/init.h>
22 #include <linux/moduleparam.h>
23 #include <linux/netfilter.h>
24 #include <linux/rtnetlink.h>
25 #include <net/rtnetlink.h>
26 #include <linux/u64_stats_sync.h>
27 #include <linux/hashtable.h>
28
29 #include <linux/inetdevice.h>
30 #include <net/arp.h>
31 #include <net/ip.h>
32 #include <net/ip_fib.h>
33 #include <net/ip6_fib.h>
34 #include <net/ip6_route.h>
35 #include <net/route.h>
36 #include <net/addrconf.h>
37 #include <net/l3mdev.h>
38 #include <net/fib_rules.h>
39 #include <net/netns/generic.h>
40
41 #define DRV_NAME        "vrf"
42 #define DRV_VERSION     "1.0"
43
44 #define FIB_RULE_PREF  1000       /* default preference for FIB rules */
45
46 static unsigned int vrf_net_id;
47
48 struct net_vrf {
49         struct rtable __rcu     *rth;
50         struct rtable __rcu     *rth_local;
51         struct rt6_info __rcu   *rt6;
52         struct rt6_info __rcu   *rt6_local;
53         u32                     tb_id;
54 };
55
56 struct pcpu_dstats {
57         u64                     tx_pkts;
58         u64                     tx_bytes;
59         u64                     tx_drps;
60         u64                     rx_pkts;
61         u64                     rx_bytes;
62         u64                     rx_drps;
63         struct u64_stats_sync   syncp;
64 };
65
66 static void vrf_rx_stats(struct net_device *dev, int len)
67 {
68         struct pcpu_dstats *dstats = this_cpu_ptr(dev->dstats);
69
70         u64_stats_update_begin(&dstats->syncp);
71         dstats->rx_pkts++;
72         dstats->rx_bytes += len;
73         u64_stats_update_end(&dstats->syncp);
74 }
75
76 static void vrf_tx_error(struct net_device *vrf_dev, struct sk_buff *skb)
77 {
78         vrf_dev->stats.tx_errors++;
79         kfree_skb(skb);
80 }
81
82 static struct rtnl_link_stats64 *vrf_get_stats64(struct net_device *dev,
83                                                  struct rtnl_link_stats64 *stats)
84 {
85         int i;
86
87         for_each_possible_cpu(i) {
88                 const struct pcpu_dstats *dstats;
89                 u64 tbytes, tpkts, tdrops, rbytes, rpkts;
90                 unsigned int start;
91
92                 dstats = per_cpu_ptr(dev->dstats, i);
93                 do {
94                         start = u64_stats_fetch_begin_irq(&dstats->syncp);
95                         tbytes = dstats->tx_bytes;
96                         tpkts = dstats->tx_pkts;
97                         tdrops = dstats->tx_drps;
98                         rbytes = dstats->rx_bytes;
99                         rpkts = dstats->rx_pkts;
100                 } while (u64_stats_fetch_retry_irq(&dstats->syncp, start));
101                 stats->tx_bytes += tbytes;
102                 stats->tx_packets += tpkts;
103                 stats->tx_dropped += tdrops;
104                 stats->rx_bytes += rbytes;
105                 stats->rx_packets += rpkts;
106         }
107         return stats;
108 }
109
110 /* Local traffic destined to local address. Reinsert the packet to rx
111  * path, similar to loopback handling.
112  */
113 static int vrf_local_xmit(struct sk_buff *skb, struct net_device *dev,
114                           struct dst_entry *dst)
115 {
116         int len = skb->len;
117
118         skb_orphan(skb);
119
120         skb_dst_set(skb, dst);
121         skb_dst_force(skb);
122
123         /* set pkt_type to avoid skb hitting packet taps twice -
124          * once on Tx and again in Rx processing
125          */
126         skb->pkt_type = PACKET_LOOPBACK;
127
128         skb->protocol = eth_type_trans(skb, dev);
129
130         if (likely(netif_rx(skb) == NET_RX_SUCCESS))
131                 vrf_rx_stats(dev, len);
132         else
133                 this_cpu_inc(dev->dstats->rx_drps);
134
135         return NETDEV_TX_OK;
136 }
137
138 #if IS_ENABLED(CONFIG_IPV6)
139 static int vrf_ip6_local_out(struct net *net, struct sock *sk,
140                              struct sk_buff *skb)
141 {
142         int err;
143
144         err = nf_hook(NFPROTO_IPV6, NF_INET_LOCAL_OUT, net,
145                       sk, skb, NULL, skb_dst(skb)->dev, dst_output);
146
147         if (likely(err == 1))
148                 err = dst_output(net, sk, skb);
149
150         return err;
151 }
152
153 static netdev_tx_t vrf_process_v6_outbound(struct sk_buff *skb,
154                                            struct net_device *dev)
155 {
156         const struct ipv6hdr *iph;
157         struct net *net = dev_net(skb->dev);
158         struct flowi6 fl6;
159         int ret = NET_XMIT_DROP;
160         struct dst_entry *dst;
161         struct dst_entry *dst_null = &net->ipv6.ip6_null_entry->dst;
162
163         if (!pskb_may_pull(skb, ETH_HLEN + sizeof(struct ipv6hdr)))
164                 goto err;
165
166         iph = ipv6_hdr(skb);
167
168         memset(&fl6, 0, sizeof(fl6));
169         /* needed to match OIF rule */
170         fl6.flowi6_oif = dev->ifindex;
171         fl6.flowi6_iif = LOOPBACK_IFINDEX;
172         fl6.daddr = iph->daddr;
173         fl6.saddr = iph->saddr;
174         fl6.flowlabel = ip6_flowinfo(iph);
175         fl6.flowi6_mark = skb->mark;
176         fl6.flowi6_proto = iph->nexthdr;
177         fl6.flowi6_flags = FLOWI_FLAG_SKIP_NH_OIF;
178
179         dst = ip6_route_output(net, NULL, &fl6);
180         if (dst == dst_null)
181                 goto err;
182
183         skb_dst_drop(skb);
184
185         /* if dst.dev is loopback or the VRF device again this is locally
186          * originated traffic destined to a local address. Short circuit
187          * to Rx path using our local dst
188          */
189         if (dst->dev == net->loopback_dev || dst->dev == dev) {
190                 struct net_vrf *vrf = netdev_priv(dev);
191                 struct rt6_info *rt6_local;
192
193                 /* release looked up dst and use cached local dst */
194                 dst_release(dst);
195
196                 rcu_read_lock();
197
198                 rt6_local = rcu_dereference(vrf->rt6_local);
199                 if (unlikely(!rt6_local)) {
200                         rcu_read_unlock();
201                         goto err;
202                 }
203
204                 /* Ordering issue: cached local dst is created on newlink
205                  * before the IPv6 initialization. Using the local dst
206                  * requires rt6i_idev to be set so make sure it is.
207                  */
208                 if (unlikely(!rt6_local->rt6i_idev)) {
209                         rt6_local->rt6i_idev = in6_dev_get(dev);
210                         if (!rt6_local->rt6i_idev) {
211                                 rcu_read_unlock();
212                                 goto err;
213                         }
214                 }
215
216                 dst = &rt6_local->dst;
217                 dst_hold(dst);
218
219                 rcu_read_unlock();
220
221                 return vrf_local_xmit(skb, dev, &rt6_local->dst);
222         }
223
224         skb_dst_set(skb, dst);
225
226         /* strip the ethernet header added for pass through VRF device */
227         __skb_pull(skb, skb_network_offset(skb));
228
229         memset(IP6CB(skb), 0, sizeof(*IP6CB(skb)));
230         ret = vrf_ip6_local_out(net, skb->sk, skb);
231         if (unlikely(net_xmit_eval(ret)))
232                 dev->stats.tx_errors++;
233         else
234                 ret = NET_XMIT_SUCCESS;
235
236         return ret;
237 err:
238         vrf_tx_error(dev, skb);
239         return NET_XMIT_DROP;
240 }
241 #else
242 static netdev_tx_t vrf_process_v6_outbound(struct sk_buff *skb,
243                                            struct net_device *dev)
244 {
245         vrf_tx_error(dev, skb);
246         return NET_XMIT_DROP;
247 }
248 #endif
249
250 /* based on ip_local_out; can't use it b/c the dst is switched pointing to us */
251 static int vrf_ip_local_out(struct net *net, struct sock *sk,
252                             struct sk_buff *skb)
253 {
254         int err;
255
256         err = nf_hook(NFPROTO_IPV4, NF_INET_LOCAL_OUT, net, sk,
257                       skb, NULL, skb_dst(skb)->dev, dst_output);
258         if (likely(err == 1))
259                 err = dst_output(net, sk, skb);
260
261         return err;
262 }
263
264 static netdev_tx_t vrf_process_v4_outbound(struct sk_buff *skb,
265                                            struct net_device *vrf_dev)
266 {
267         struct iphdr *ip4h;
268         int ret = NET_XMIT_DROP;
269         struct flowi4 fl4;
270         struct net *net = dev_net(vrf_dev);
271         struct rtable *rt;
272
273         if (!pskb_may_pull(skb, ETH_HLEN + sizeof(struct iphdr)))
274                 goto err;
275
276         ip4h = ip_hdr(skb);
277
278         memset(&fl4, 0, sizeof(fl4));
279         /* needed to match OIF rule */
280         fl4.flowi4_oif = vrf_dev->ifindex;
281         fl4.flowi4_iif = LOOPBACK_IFINDEX;
282         fl4.flowi4_tos = RT_TOS(ip4h->tos);
283         fl4.flowi4_flags = FLOWI_FLAG_ANYSRC | FLOWI_FLAG_SKIP_NH_OIF;
284         fl4.flowi4_proto = ip4h->protocol;
285         fl4.daddr = ip4h->daddr;
286         fl4.saddr = ip4h->saddr;
287
288         rt = ip_route_output_flow(net, &fl4, NULL);
289         if (IS_ERR(rt))
290                 goto err;
291
292         if (rt->rt_type != RTN_UNICAST && rt->rt_type != RTN_LOCAL) {
293                 ip_rt_put(rt);
294                 goto err;
295         }
296
297         skb_dst_drop(skb);
298
299         /* if dst.dev is loopback or the VRF device again this is locally
300          * originated traffic destined to a local address. Short circuit
301          * to Rx path using our local dst
302          */
303         if (rt->dst.dev == net->loopback_dev || rt->dst.dev == vrf_dev) {
304                 struct net_vrf *vrf = netdev_priv(vrf_dev);
305                 struct rtable *rth_local;
306                 struct dst_entry *dst = NULL;
307
308                 ip_rt_put(rt);
309
310                 rcu_read_lock();
311
312                 rth_local = rcu_dereference(vrf->rth_local);
313                 if (likely(rth_local)) {
314                         dst = &rth_local->dst;
315                         dst_hold(dst);
316                 }
317
318                 rcu_read_unlock();
319
320                 if (unlikely(!dst))
321                         goto err;
322
323                 return vrf_local_xmit(skb, vrf_dev, dst);
324         }
325
326         skb_dst_set(skb, &rt->dst);
327
328         /* strip the ethernet header added for pass through VRF device */
329         __skb_pull(skb, skb_network_offset(skb));
330
331         if (!ip4h->saddr) {
332                 ip4h->saddr = inet_select_addr(skb_dst(skb)->dev, 0,
333                                                RT_SCOPE_LINK);
334         }
335
336         memset(IPCB(skb), 0, sizeof(*IPCB(skb)));
337         ret = vrf_ip_local_out(dev_net(skb_dst(skb)->dev), skb->sk, skb);
338         if (unlikely(net_xmit_eval(ret)))
339                 vrf_dev->stats.tx_errors++;
340         else
341                 ret = NET_XMIT_SUCCESS;
342
343 out:
344         return ret;
345 err:
346         vrf_tx_error(vrf_dev, skb);
347         goto out;
348 }
349
350 static netdev_tx_t is_ip_tx_frame(struct sk_buff *skb, struct net_device *dev)
351 {
352         switch (skb->protocol) {
353         case htons(ETH_P_IP):
354                 return vrf_process_v4_outbound(skb, dev);
355         case htons(ETH_P_IPV6):
356                 return vrf_process_v6_outbound(skb, dev);
357         default:
358                 vrf_tx_error(dev, skb);
359                 return NET_XMIT_DROP;
360         }
361 }
362
363 static netdev_tx_t vrf_xmit(struct sk_buff *skb, struct net_device *dev)
364 {
365         int len = skb->len;
366         netdev_tx_t ret = is_ip_tx_frame(skb, dev);
367
368         if (likely(ret == NET_XMIT_SUCCESS || ret == NET_XMIT_CN)) {
369                 struct pcpu_dstats *dstats = this_cpu_ptr(dev->dstats);
370
371                 u64_stats_update_begin(&dstats->syncp);
372                 dstats->tx_pkts++;
373                 dstats->tx_bytes += len;
374                 u64_stats_update_end(&dstats->syncp);
375         } else {
376                 this_cpu_inc(dev->dstats->tx_drps);
377         }
378
379         return ret;
380 }
381
382 #if IS_ENABLED(CONFIG_IPV6)
383 /* modelled after ip6_finish_output2 */
384 static int vrf_finish_output6(struct net *net, struct sock *sk,
385                               struct sk_buff *skb)
386 {
387         struct dst_entry *dst = skb_dst(skb);
388         struct net_device *dev = dst->dev;
389         struct neighbour *neigh;
390         struct in6_addr *nexthop;
391         int ret;
392
393         nf_reset(skb);
394
395         skb->protocol = htons(ETH_P_IPV6);
396         skb->dev = dev;
397
398         rcu_read_lock_bh();
399         nexthop = rt6_nexthop((struct rt6_info *)dst, &ipv6_hdr(skb)->daddr);
400         neigh = __ipv6_neigh_lookup_noref(dst->dev, nexthop);
401         if (unlikely(!neigh))
402                 neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false);
403         if (!IS_ERR(neigh)) {
404                 ret = dst_neigh_output(dst, neigh, skb);
405                 rcu_read_unlock_bh();
406                 return ret;
407         }
408         rcu_read_unlock_bh();
409
410         IP6_INC_STATS(dev_net(dst->dev),
411                       ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
412         kfree_skb(skb);
413         return -EINVAL;
414 }
415
416 /* modelled after ip6_output */
417 static int vrf_output6(struct net *net, struct sock *sk, struct sk_buff *skb)
418 {
419         return NF_HOOK_COND(NFPROTO_IPV6, NF_INET_POST_ROUTING,
420                             net, sk, skb, NULL, skb_dst(skb)->dev,
421                             vrf_finish_output6,
422                             !(IP6CB(skb)->flags & IP6SKB_REROUTED));
423 }
424
425 /* set dst on skb to send packet to us via dev_xmit path. Allows
426  * packet to go through device based features such as qdisc, netfilter
427  * hooks and packet sockets with skb->dev set to vrf device.
428  */
429 static struct sk_buff *vrf_ip6_out(struct net_device *vrf_dev,
430                                    struct sock *sk,
431                                    struct sk_buff *skb)
432 {
433         struct net_vrf *vrf = netdev_priv(vrf_dev);
434         struct dst_entry *dst = NULL;
435         struct rt6_info *rt6;
436
437         /* don't divert link scope packets */
438         if (rt6_need_strict(&ipv6_hdr(skb)->daddr))
439                 return skb;
440
441         rcu_read_lock();
442
443         rt6 = rcu_dereference(vrf->rt6);
444         if (likely(rt6)) {
445                 dst = &rt6->dst;
446                 dst_hold(dst);
447         }
448
449         rcu_read_unlock();
450
451         if (unlikely(!dst)) {
452                 vrf_tx_error(vrf_dev, skb);
453                 return NULL;
454         }
455
456         skb_dst_drop(skb);
457         skb_dst_set(skb, dst);
458
459         return skb;
460 }
461
462 /* holding rtnl */
463 static void vrf_rt6_release(struct net_device *dev, struct net_vrf *vrf)
464 {
465         struct rt6_info *rt6 = rtnl_dereference(vrf->rt6);
466         struct rt6_info *rt6_local = rtnl_dereference(vrf->rt6_local);
467         struct net *net = dev_net(dev);
468         struct dst_entry *dst;
469
470         RCU_INIT_POINTER(vrf->rt6, NULL);
471         RCU_INIT_POINTER(vrf->rt6_local, NULL);
472         synchronize_rcu();
473
474         /* move dev in dst's to loopback so this VRF device can be deleted
475          * - based on dst_ifdown
476          */
477         if (rt6) {
478                 dst = &rt6->dst;
479                 dev_put(dst->dev);
480                 dst->dev = net->loopback_dev;
481                 dev_hold(dst->dev);
482                 dst_release(dst);
483         }
484
485         if (rt6_local) {
486                 if (rt6_local->rt6i_idev) {
487                         in6_dev_put(rt6_local->rt6i_idev);
488                         rt6_local->rt6i_idev = NULL;
489                 }
490
491                 dst = &rt6_local->dst;
492                 dev_put(dst->dev);
493                 dst->dev = net->loopback_dev;
494                 dev_hold(dst->dev);
495                 dst_release(dst);
496         }
497 }
498
499 static int vrf_rt6_create(struct net_device *dev)
500 {
501         int flags = DST_HOST | DST_NOPOLICY | DST_NOXFRM | DST_NOCACHE;
502         struct net_vrf *vrf = netdev_priv(dev);
503         struct net *net = dev_net(dev);
504         struct fib6_table *rt6i_table;
505         struct rt6_info *rt6, *rt6_local;
506         int rc = -ENOMEM;
507
508         /* IPv6 can be CONFIG enabled and then disabled runtime */
509         if (!ipv6_mod_enabled())
510                 return 0;
511
512         rt6i_table = fib6_new_table(net, vrf->tb_id);
513         if (!rt6i_table)
514                 goto out;
515
516         /* create a dst for routing packets out a VRF device */
517         rt6 = ip6_dst_alloc(net, dev, flags);
518         if (!rt6)
519                 goto out;
520
521         dst_hold(&rt6->dst);
522
523         rt6->rt6i_table = rt6i_table;
524         rt6->dst.output = vrf_output6;
525
526         /* create a dst for local routing - packets sent locally
527          * to local address via the VRF device as a loopback
528          */
529         rt6_local = ip6_dst_alloc(net, dev, flags);
530         if (!rt6_local) {
531                 dst_release(&rt6->dst);
532                 goto out;
533         }
534
535         dst_hold(&rt6_local->dst);
536
537         rt6_local->rt6i_idev  = in6_dev_get(dev);
538         rt6_local->rt6i_flags = RTF_UP | RTF_NONEXTHOP | RTF_LOCAL;
539         rt6_local->rt6i_table = rt6i_table;
540         rt6_local->dst.input  = ip6_input;
541
542         rcu_assign_pointer(vrf->rt6, rt6);
543         rcu_assign_pointer(vrf->rt6_local, rt6_local);
544
545         rc = 0;
546 out:
547         return rc;
548 }
549 #else
550 static struct sk_buff *vrf_ip6_out(struct net_device *vrf_dev,
551                                    struct sock *sk,
552                                    struct sk_buff *skb)
553 {
554         return skb;
555 }
556
557 static void vrf_rt6_release(struct net_device *dev, struct net_vrf *vrf)
558 {
559 }
560
561 static int vrf_rt6_create(struct net_device *dev)
562 {
563         return 0;
564 }
565 #endif
566
567 /* modelled after ip_finish_output2 */
568 static int vrf_finish_output(struct net *net, struct sock *sk, struct sk_buff *skb)
569 {
570         struct dst_entry *dst = skb_dst(skb);
571         struct rtable *rt = (struct rtable *)dst;
572         struct net_device *dev = dst->dev;
573         unsigned int hh_len = LL_RESERVED_SPACE(dev);
574         struct neighbour *neigh;
575         u32 nexthop;
576         int ret = -EINVAL;
577
578         nf_reset(skb);
579
580         /* Be paranoid, rather than too clever. */
581         if (unlikely(skb_headroom(skb) < hh_len && dev->header_ops)) {
582                 struct sk_buff *skb2;
583
584                 skb2 = skb_realloc_headroom(skb, LL_RESERVED_SPACE(dev));
585                 if (!skb2) {
586                         ret = -ENOMEM;
587                         goto err;
588                 }
589                 if (skb->sk)
590                         skb_set_owner_w(skb2, skb->sk);
591
592                 consume_skb(skb);
593                 skb = skb2;
594         }
595
596         rcu_read_lock_bh();
597
598         nexthop = (__force u32)rt_nexthop(rt, ip_hdr(skb)->daddr);
599         neigh = __ipv4_neigh_lookup_noref(dev, nexthop);
600         if (unlikely(!neigh))
601                 neigh = __neigh_create(&arp_tbl, &nexthop, dev, false);
602         if (!IS_ERR(neigh)) {
603                 ret = dst_neigh_output(dst, neigh, skb);
604                 rcu_read_unlock_bh();
605                 return ret;
606         }
607
608         rcu_read_unlock_bh();
609 err:
610         vrf_tx_error(skb->dev, skb);
611         return ret;
612 }
613
614 static int vrf_output(struct net *net, struct sock *sk, struct sk_buff *skb)
615 {
616         struct net_device *dev = skb_dst(skb)->dev;
617
618         IP_UPD_PO_STATS(net, IPSTATS_MIB_OUT, skb->len);
619
620         skb->dev = dev;
621         skb->protocol = htons(ETH_P_IP);
622
623         return NF_HOOK_COND(NFPROTO_IPV4, NF_INET_POST_ROUTING,
624                             net, sk, skb, NULL, dev,
625                             vrf_finish_output,
626                             !(IPCB(skb)->flags & IPSKB_REROUTED));
627 }
628
629 /* set dst on skb to send packet to us via dev_xmit path. Allows
630  * packet to go through device based features such as qdisc, netfilter
631  * hooks and packet sockets with skb->dev set to vrf device.
632  */
633 static struct sk_buff *vrf_ip_out(struct net_device *vrf_dev,
634                                   struct sock *sk,
635                                   struct sk_buff *skb)
636 {
637         struct net_vrf *vrf = netdev_priv(vrf_dev);
638         struct dst_entry *dst = NULL;
639         struct rtable *rth;
640
641         rcu_read_lock();
642
643         rth = rcu_dereference(vrf->rth);
644         if (likely(rth)) {
645                 dst = &rth->dst;
646                 dst_hold(dst);
647         }
648
649         rcu_read_unlock();
650
651         if (unlikely(!dst)) {
652                 vrf_tx_error(vrf_dev, skb);
653                 return NULL;
654         }
655
656         skb_dst_drop(skb);
657         skb_dst_set(skb, dst);
658
659         return skb;
660 }
661
662 /* called with rcu lock held */
663 static struct sk_buff *vrf_l3_out(struct net_device *vrf_dev,
664                                   struct sock *sk,
665                                   struct sk_buff *skb,
666                                   u16 proto)
667 {
668         switch (proto) {
669         case AF_INET:
670                 return vrf_ip_out(vrf_dev, sk, skb);
671         case AF_INET6:
672                 return vrf_ip6_out(vrf_dev, sk, skb);
673         }
674
675         return skb;
676 }
677
678 /* holding rtnl */
679 static void vrf_rtable_release(struct net_device *dev, struct net_vrf *vrf)
680 {
681         struct rtable *rth = rtnl_dereference(vrf->rth);
682         struct rtable *rth_local = rtnl_dereference(vrf->rth_local);
683         struct net *net = dev_net(dev);
684         struct dst_entry *dst;
685
686         RCU_INIT_POINTER(vrf->rth, NULL);
687         RCU_INIT_POINTER(vrf->rth_local, NULL);
688         synchronize_rcu();
689
690         /* move dev in dst's to loopback so this VRF device can be deleted
691          * - based on dst_ifdown
692          */
693         if (rth) {
694                 dst = &rth->dst;
695                 dev_put(dst->dev);
696                 dst->dev = net->loopback_dev;
697                 dev_hold(dst->dev);
698                 dst_release(dst);
699         }
700
701         if (rth_local) {
702                 dst = &rth_local->dst;
703                 dev_put(dst->dev);
704                 dst->dev = net->loopback_dev;
705                 dev_hold(dst->dev);
706                 dst_release(dst);
707         }
708 }
709
710 static int vrf_rtable_create(struct net_device *dev)
711 {
712         struct net_vrf *vrf = netdev_priv(dev);
713         struct rtable *rth, *rth_local;
714
715         if (!fib_new_table(dev_net(dev), vrf->tb_id))
716                 return -ENOMEM;
717
718         /* create a dst for routing packets out through a VRF device */
719         rth = rt_dst_alloc(dev, 0, RTN_UNICAST, 1, 1, 0);
720         if (!rth)
721                 return -ENOMEM;
722
723         /* create a dst for local ingress routing - packets sent locally
724          * to local address via the VRF device as a loopback
725          */
726         rth_local = rt_dst_alloc(dev, RTCF_LOCAL, RTN_LOCAL, 1, 1, 0);
727         if (!rth_local) {
728                 dst_release(&rth->dst);
729                 return -ENOMEM;
730         }
731
732         rth->dst.output = vrf_output;
733         rth->rt_table_id = vrf->tb_id;
734
735         rth_local->rt_table_id = vrf->tb_id;
736
737         rcu_assign_pointer(vrf->rth, rth);
738         rcu_assign_pointer(vrf->rth_local, rth_local);
739
740         return 0;
741 }
742
743 /**************************** device handling ********************/
744
745 /* cycle interface to flush neighbor cache and move routes across tables */
746 static void cycle_netdev(struct net_device *dev)
747 {
748         unsigned int flags = dev->flags;
749         int ret;
750
751         if (!netif_running(dev))
752                 return;
753
754         ret = dev_change_flags(dev, flags & ~IFF_UP);
755         if (ret >= 0)
756                 ret = dev_change_flags(dev, flags);
757
758         if (ret < 0) {
759                 netdev_err(dev,
760                            "Failed to cycle device %s; route tables might be wrong!\n",
761                            dev->name);
762         }
763 }
764
765 static int do_vrf_add_slave(struct net_device *dev, struct net_device *port_dev)
766 {
767         int ret;
768
769         ret = netdev_master_upper_dev_link(port_dev, dev, NULL, NULL);
770         if (ret < 0)
771                 return ret;
772
773         port_dev->priv_flags |= IFF_L3MDEV_SLAVE;
774         cycle_netdev(port_dev);
775
776         return 0;
777 }
778
779 static int vrf_add_slave(struct net_device *dev, struct net_device *port_dev)
780 {
781         if (netif_is_l3_master(port_dev) || netif_is_l3_slave(port_dev))
782                 return -EINVAL;
783
784         return do_vrf_add_slave(dev, port_dev);
785 }
786
787 /* inverse of do_vrf_add_slave */
788 static int do_vrf_del_slave(struct net_device *dev, struct net_device *port_dev)
789 {
790         netdev_upper_dev_unlink(port_dev, dev);
791         port_dev->priv_flags &= ~IFF_L3MDEV_SLAVE;
792
793         cycle_netdev(port_dev);
794
795         return 0;
796 }
797
798 static int vrf_del_slave(struct net_device *dev, struct net_device *port_dev)
799 {
800         return do_vrf_del_slave(dev, port_dev);
801 }
802
803 static void vrf_dev_uninit(struct net_device *dev)
804 {
805         struct net_vrf *vrf = netdev_priv(dev);
806
807         vrf_rtable_release(dev, vrf);
808         vrf_rt6_release(dev, vrf);
809
810         free_percpu(dev->dstats);
811         dev->dstats = NULL;
812 }
813
814 static int vrf_dev_init(struct net_device *dev)
815 {
816         struct net_vrf *vrf = netdev_priv(dev);
817
818         dev->dstats = netdev_alloc_pcpu_stats(struct pcpu_dstats);
819         if (!dev->dstats)
820                 goto out_nomem;
821
822         /* create the default dst which points back to us */
823         if (vrf_rtable_create(dev) != 0)
824                 goto out_stats;
825
826         if (vrf_rt6_create(dev) != 0)
827                 goto out_rth;
828
829         dev->flags = IFF_MASTER | IFF_NOARP;
830
831         /* MTU is irrelevant for VRF device; set to 64k similar to lo */
832         dev->mtu = 64 * 1024;
833
834         /* similarly, oper state is irrelevant; set to up to avoid confusion */
835         dev->operstate = IF_OPER_UP;
836         netdev_lockdep_set_classes(dev);
837         return 0;
838
839 out_rth:
840         vrf_rtable_release(dev, vrf);
841 out_stats:
842         free_percpu(dev->dstats);
843         dev->dstats = NULL;
844 out_nomem:
845         return -ENOMEM;
846 }
847
848 static const struct net_device_ops vrf_netdev_ops = {
849         .ndo_init               = vrf_dev_init,
850         .ndo_uninit             = vrf_dev_uninit,
851         .ndo_start_xmit         = vrf_xmit,
852         .ndo_get_stats64        = vrf_get_stats64,
853         .ndo_add_slave          = vrf_add_slave,
854         .ndo_del_slave          = vrf_del_slave,
855 };
856
857 static u32 vrf_fib_table(const struct net_device *dev)
858 {
859         struct net_vrf *vrf = netdev_priv(dev);
860
861         return vrf->tb_id;
862 }
863
864 static int vrf_rcv_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
865 {
866         kfree_skb(skb);
867         return 0;
868 }
869
870 static struct sk_buff *vrf_rcv_nfhook(u8 pf, unsigned int hook,
871                                       struct sk_buff *skb,
872                                       struct net_device *dev)
873 {
874         struct net *net = dev_net(dev);
875
876         if (nf_hook(pf, hook, net, NULL, skb, dev, NULL, vrf_rcv_finish) != 1)
877                 skb = NULL;    /* kfree_skb(skb) handled by nf code */
878
879         return skb;
880 }
881
882 #if IS_ENABLED(CONFIG_IPV6)
883 /* neighbor handling is done with actual device; do not want
884  * to flip skb->dev for those ndisc packets. This really fails
885  * for multiple next protocols (e.g., NEXTHDR_HOP). But it is
886  * a start.
887  */
888 static bool ipv6_ndisc_frame(const struct sk_buff *skb)
889 {
890         const struct ipv6hdr *iph = ipv6_hdr(skb);
891         bool rc = false;
892
893         if (iph->nexthdr == NEXTHDR_ICMP) {
894                 const struct icmp6hdr *icmph;
895                 struct icmp6hdr _icmph;
896
897                 icmph = skb_header_pointer(skb, sizeof(*iph),
898                                            sizeof(_icmph), &_icmph);
899                 if (!icmph)
900                         goto out;
901
902                 switch (icmph->icmp6_type) {
903                 case NDISC_ROUTER_SOLICITATION:
904                 case NDISC_ROUTER_ADVERTISEMENT:
905                 case NDISC_NEIGHBOUR_SOLICITATION:
906                 case NDISC_NEIGHBOUR_ADVERTISEMENT:
907                 case NDISC_REDIRECT:
908                         rc = true;
909                         break;
910                 }
911         }
912
913 out:
914         return rc;
915 }
916
917 static struct rt6_info *vrf_ip6_route_lookup(struct net *net,
918                                              const struct net_device *dev,
919                                              struct flowi6 *fl6,
920                                              int ifindex,
921                                              int flags)
922 {
923         struct net_vrf *vrf = netdev_priv(dev);
924         struct fib6_table *table = NULL;
925         struct rt6_info *rt6;
926
927         rcu_read_lock();
928
929         /* fib6_table does not have a refcnt and can not be freed */
930         rt6 = rcu_dereference(vrf->rt6);
931         if (likely(rt6))
932                 table = rt6->rt6i_table;
933
934         rcu_read_unlock();
935
936         if (!table)
937                 return NULL;
938
939         return ip6_pol_route(net, table, ifindex, fl6, flags);
940 }
941
942 static void vrf_ip6_input_dst(struct sk_buff *skb, struct net_device *vrf_dev,
943                               int ifindex)
944 {
945         const struct ipv6hdr *iph = ipv6_hdr(skb);
946         struct flowi6 fl6 = {
947                 .daddr          = iph->daddr,
948                 .saddr          = iph->saddr,
949                 .flowlabel      = ip6_flowinfo(iph),
950                 .flowi6_mark    = skb->mark,
951                 .flowi6_proto   = iph->nexthdr,
952                 .flowi6_iif     = ifindex,
953         };
954         struct net *net = dev_net(vrf_dev);
955         struct rt6_info *rt6;
956
957         rt6 = vrf_ip6_route_lookup(net, vrf_dev, &fl6, ifindex,
958                                    RT6_LOOKUP_F_HAS_SADDR | RT6_LOOKUP_F_IFACE);
959         if (unlikely(!rt6))
960                 return;
961
962         if (unlikely(&rt6->dst == &net->ipv6.ip6_null_entry->dst))
963                 return;
964
965         skb_dst_set(skb, &rt6->dst);
966 }
967
968 static struct sk_buff *vrf_ip6_rcv(struct net_device *vrf_dev,
969                                    struct sk_buff *skb)
970 {
971         int orig_iif = skb->skb_iif;
972         bool need_strict;
973
974         /* loopback traffic; do not push through packet taps again.
975          * Reset pkt_type for upper layers to process skb
976          */
977         if (skb->pkt_type == PACKET_LOOPBACK) {
978                 skb->dev = vrf_dev;
979                 skb->skb_iif = vrf_dev->ifindex;
980                 IP6CB(skb)->flags |= IP6SKB_L3SLAVE;
981                 skb->pkt_type = PACKET_HOST;
982                 goto out;
983         }
984
985         /* if packet is NDISC or addressed to multicast or link-local
986          * then keep the ingress interface
987          */
988         need_strict = rt6_need_strict(&ipv6_hdr(skb)->daddr);
989         if (!ipv6_ndisc_frame(skb) && !need_strict) {
990                 vrf_rx_stats(vrf_dev, skb->len);
991                 skb->dev = vrf_dev;
992                 skb->skb_iif = vrf_dev->ifindex;
993
994                 skb_push(skb, skb->mac_len);
995                 dev_queue_xmit_nit(skb, vrf_dev);
996                 skb_pull(skb, skb->mac_len);
997
998                 IP6CB(skb)->flags |= IP6SKB_L3SLAVE;
999         }
1000
1001         if (need_strict)
1002                 vrf_ip6_input_dst(skb, vrf_dev, orig_iif);
1003
1004         skb = vrf_rcv_nfhook(NFPROTO_IPV6, NF_INET_PRE_ROUTING, skb, vrf_dev);
1005 out:
1006         return skb;
1007 }
1008
1009 #else
1010 static struct sk_buff *vrf_ip6_rcv(struct net_device *vrf_dev,
1011                                    struct sk_buff *skb)
1012 {
1013         return skb;
1014 }
1015 #endif
1016
1017 static struct sk_buff *vrf_ip_rcv(struct net_device *vrf_dev,
1018                                   struct sk_buff *skb)
1019 {
1020         skb->dev = vrf_dev;
1021         skb->skb_iif = vrf_dev->ifindex;
1022         IPCB(skb)->flags |= IPSKB_L3SLAVE;
1023
1024         /* loopback traffic; do not push through packet taps again.
1025          * Reset pkt_type for upper layers to process skb
1026          */
1027         if (skb->pkt_type == PACKET_LOOPBACK) {
1028                 skb->pkt_type = PACKET_HOST;
1029                 goto out;
1030         }
1031
1032         vrf_rx_stats(vrf_dev, skb->len);
1033
1034         skb_push(skb, skb->mac_len);
1035         dev_queue_xmit_nit(skb, vrf_dev);
1036         skb_pull(skb, skb->mac_len);
1037
1038         skb = vrf_rcv_nfhook(NFPROTO_IPV4, NF_INET_PRE_ROUTING, skb, vrf_dev);
1039 out:
1040         return skb;
1041 }
1042
1043 /* called with rcu lock held */
1044 static struct sk_buff *vrf_l3_rcv(struct net_device *vrf_dev,
1045                                   struct sk_buff *skb,
1046                                   u16 proto)
1047 {
1048         switch (proto) {
1049         case AF_INET:
1050                 return vrf_ip_rcv(vrf_dev, skb);
1051         case AF_INET6:
1052                 return vrf_ip6_rcv(vrf_dev, skb);
1053         }
1054
1055         return skb;
1056 }
1057
1058 #if IS_ENABLED(CONFIG_IPV6)
1059 /* send to link-local or multicast address via interface enslaved to
1060  * VRF device. Force lookup to VRF table without changing flow struct
1061  */
1062 static struct dst_entry *vrf_link_scope_lookup(const struct net_device *dev,
1063                                               struct flowi6 *fl6)
1064 {
1065         struct net *net = dev_net(dev);
1066         int flags = RT6_LOOKUP_F_IFACE;
1067         struct dst_entry *dst = NULL;
1068         struct rt6_info *rt;
1069
1070         /* VRF device does not have a link-local address and
1071          * sending packets to link-local or mcast addresses over
1072          * a VRF device does not make sense
1073          */
1074         if (fl6->flowi6_oif == dev->ifindex) {
1075                 dst = &net->ipv6.ip6_null_entry->dst;
1076                 dst_hold(dst);
1077                 return dst;
1078         }
1079
1080         if (!ipv6_addr_any(&fl6->saddr))
1081                 flags |= RT6_LOOKUP_F_HAS_SADDR;
1082
1083         rt = vrf_ip6_route_lookup(net, dev, fl6, fl6->flowi6_oif, flags);
1084         if (rt)
1085                 dst = &rt->dst;
1086
1087         return dst;
1088 }
1089 #endif
1090
1091 static const struct l3mdev_ops vrf_l3mdev_ops = {
1092         .l3mdev_fib_table       = vrf_fib_table,
1093         .l3mdev_l3_rcv          = vrf_l3_rcv,
1094         .l3mdev_l3_out          = vrf_l3_out,
1095 #if IS_ENABLED(CONFIG_IPV6)
1096         .l3mdev_link_scope_lookup = vrf_link_scope_lookup,
1097 #endif
1098 };
1099
1100 static void vrf_get_drvinfo(struct net_device *dev,
1101                             struct ethtool_drvinfo *info)
1102 {
1103         strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
1104         strlcpy(info->version, DRV_VERSION, sizeof(info->version));
1105 }
1106
1107 static const struct ethtool_ops vrf_ethtool_ops = {
1108         .get_drvinfo    = vrf_get_drvinfo,
1109 };
1110
1111 static inline size_t vrf_fib_rule_nl_size(void)
1112 {
1113         size_t sz;
1114
1115         sz  = NLMSG_ALIGN(sizeof(struct fib_rule_hdr));
1116         sz += nla_total_size(sizeof(u8));       /* FRA_L3MDEV */
1117         sz += nla_total_size(sizeof(u32));      /* FRA_PRIORITY */
1118
1119         return sz;
1120 }
1121
1122 static int vrf_fib_rule(const struct net_device *dev, __u8 family, bool add_it)
1123 {
1124         struct fib_rule_hdr *frh;
1125         struct nlmsghdr *nlh;
1126         struct sk_buff *skb;
1127         int err;
1128
1129         if (family == AF_INET6 && !ipv6_mod_enabled())
1130                 return 0;
1131
1132         skb = nlmsg_new(vrf_fib_rule_nl_size(), GFP_KERNEL);
1133         if (!skb)
1134                 return -ENOMEM;
1135
1136         nlh = nlmsg_put(skb, 0, 0, 0, sizeof(*frh), 0);
1137         if (!nlh)
1138                 goto nla_put_failure;
1139
1140         /* rule only needs to appear once */
1141         nlh->nlmsg_flags |= NLM_F_EXCL;
1142
1143         frh = nlmsg_data(nlh);
1144         memset(frh, 0, sizeof(*frh));
1145         frh->family = family;
1146         frh->action = FR_ACT_TO_TBL;
1147
1148         if (nla_put_u8(skb, FRA_L3MDEV, 1))
1149                 goto nla_put_failure;
1150
1151         if (nla_put_u32(skb, FRA_PRIORITY, FIB_RULE_PREF))
1152                 goto nla_put_failure;
1153
1154         nlmsg_end(skb, nlh);
1155
1156         /* fib_nl_{new,del}rule handling looks for net from skb->sk */
1157         skb->sk = dev_net(dev)->rtnl;
1158         if (add_it) {
1159                 err = fib_nl_newrule(skb, nlh);
1160                 if (err == -EEXIST)
1161                         err = 0;
1162         } else {
1163                 err = fib_nl_delrule(skb, nlh);
1164                 if (err == -ENOENT)
1165                         err = 0;
1166         }
1167         nlmsg_free(skb);
1168
1169         return err;
1170
1171 nla_put_failure:
1172         nlmsg_free(skb);
1173
1174         return -EMSGSIZE;
1175 }
1176
1177 static int vrf_add_fib_rules(const struct net_device *dev)
1178 {
1179         int err;
1180
1181         err = vrf_fib_rule(dev, AF_INET,  true);
1182         if (err < 0)
1183                 goto out_err;
1184
1185         err = vrf_fib_rule(dev, AF_INET6, true);
1186         if (err < 0)
1187                 goto ipv6_err;
1188
1189         return 0;
1190
1191 ipv6_err:
1192         vrf_fib_rule(dev, AF_INET,  false);
1193
1194 out_err:
1195         netdev_err(dev, "Failed to add FIB rules.\n");
1196         return err;
1197 }
1198
1199 static void vrf_setup(struct net_device *dev)
1200 {
1201         ether_setup(dev);
1202
1203         /* Initialize the device structure. */
1204         dev->netdev_ops = &vrf_netdev_ops;
1205         dev->l3mdev_ops = &vrf_l3mdev_ops;
1206         dev->ethtool_ops = &vrf_ethtool_ops;
1207         dev->destructor = free_netdev;
1208
1209         /* Fill in device structure with ethernet-generic values. */
1210         eth_hw_addr_random(dev);
1211
1212         /* don't acquire vrf device's netif_tx_lock when transmitting */
1213         dev->features |= NETIF_F_LLTX;
1214
1215         /* don't allow vrf devices to change network namespaces. */
1216         dev->features |= NETIF_F_NETNS_LOCAL;
1217
1218         /* does not make sense for a VLAN to be added to a vrf device */
1219         dev->features   |= NETIF_F_VLAN_CHALLENGED;
1220
1221         /* enable offload features */
1222         dev->features   |= NETIF_F_GSO_SOFTWARE;
1223         dev->features   |= NETIF_F_RXCSUM | NETIF_F_HW_CSUM;
1224         dev->features   |= NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA;
1225
1226         dev->hw_features = dev->features;
1227         dev->hw_enc_features = dev->features;
1228
1229         /* default to no qdisc; user can add if desired */
1230         dev->priv_flags |= IFF_NO_QUEUE;
1231 }
1232
1233 static int vrf_validate(struct nlattr *tb[], struct nlattr *data[])
1234 {
1235         if (tb[IFLA_ADDRESS]) {
1236                 if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
1237                         return -EINVAL;
1238                 if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS])))
1239                         return -EADDRNOTAVAIL;
1240         }
1241         return 0;
1242 }
1243
1244 static void vrf_dellink(struct net_device *dev, struct list_head *head)
1245 {
1246         struct net_device *port_dev;
1247         struct list_head *iter;
1248
1249         netdev_for_each_lower_dev(dev, port_dev, iter)
1250                 vrf_del_slave(dev, port_dev);
1251
1252         unregister_netdevice_queue(dev, head);
1253 }
1254
1255 static int vrf_newlink(struct net *src_net, struct net_device *dev,
1256                        struct nlattr *tb[], struct nlattr *data[])
1257 {
1258         struct net_vrf *vrf = netdev_priv(dev);
1259         bool *add_fib_rules;
1260         struct net *net;
1261         int err;
1262
1263         if (!data || !data[IFLA_VRF_TABLE])
1264                 return -EINVAL;
1265
1266         vrf->tb_id = nla_get_u32(data[IFLA_VRF_TABLE]);
1267         if (vrf->tb_id == RT_TABLE_UNSPEC)
1268                 return -EINVAL;
1269
1270         dev->priv_flags |= IFF_L3MDEV_MASTER;
1271
1272         err = register_netdevice(dev);
1273         if (err)
1274                 goto out;
1275
1276         net = dev_net(dev);
1277         add_fib_rules = net_generic(net, vrf_net_id);
1278         if (*add_fib_rules) {
1279                 err = vrf_add_fib_rules(dev);
1280                 if (err) {
1281                         unregister_netdevice(dev);
1282                         goto out;
1283                 }
1284                 *add_fib_rules = false;
1285         }
1286
1287 out:
1288         return err;
1289 }
1290
1291 static size_t vrf_nl_getsize(const struct net_device *dev)
1292 {
1293         return nla_total_size(sizeof(u32));  /* IFLA_VRF_TABLE */
1294 }
1295
1296 static int vrf_fillinfo(struct sk_buff *skb,
1297                         const struct net_device *dev)
1298 {
1299         struct net_vrf *vrf = netdev_priv(dev);
1300
1301         return nla_put_u32(skb, IFLA_VRF_TABLE, vrf->tb_id);
1302 }
1303
1304 static size_t vrf_get_slave_size(const struct net_device *bond_dev,
1305                                  const struct net_device *slave_dev)
1306 {
1307         return nla_total_size(sizeof(u32));  /* IFLA_VRF_PORT_TABLE */
1308 }
1309
1310 static int vrf_fill_slave_info(struct sk_buff *skb,
1311                                const struct net_device *vrf_dev,
1312                                const struct net_device *slave_dev)
1313 {
1314         struct net_vrf *vrf = netdev_priv(vrf_dev);
1315
1316         if (nla_put_u32(skb, IFLA_VRF_PORT_TABLE, vrf->tb_id))
1317                 return -EMSGSIZE;
1318
1319         return 0;
1320 }
1321
1322 static const struct nla_policy vrf_nl_policy[IFLA_VRF_MAX + 1] = {
1323         [IFLA_VRF_TABLE] = { .type = NLA_U32 },
1324 };
1325
1326 static struct rtnl_link_ops vrf_link_ops __read_mostly = {
1327         .kind           = DRV_NAME,
1328         .priv_size      = sizeof(struct net_vrf),
1329
1330         .get_size       = vrf_nl_getsize,
1331         .policy         = vrf_nl_policy,
1332         .validate       = vrf_validate,
1333         .fill_info      = vrf_fillinfo,
1334
1335         .get_slave_size  = vrf_get_slave_size,
1336         .fill_slave_info = vrf_fill_slave_info,
1337
1338         .newlink        = vrf_newlink,
1339         .dellink        = vrf_dellink,
1340         .setup          = vrf_setup,
1341         .maxtype        = IFLA_VRF_MAX,
1342 };
1343
1344 static int vrf_device_event(struct notifier_block *unused,
1345                             unsigned long event, void *ptr)
1346 {
1347         struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1348
1349         /* only care about unregister events to drop slave references */
1350         if (event == NETDEV_UNREGISTER) {
1351                 struct net_device *vrf_dev;
1352
1353                 if (!netif_is_l3_slave(dev))
1354                         goto out;
1355
1356                 vrf_dev = netdev_master_upper_dev_get(dev);
1357                 vrf_del_slave(vrf_dev, dev);
1358         }
1359 out:
1360         return NOTIFY_DONE;
1361 }
1362
1363 static struct notifier_block vrf_notifier_block __read_mostly = {
1364         .notifier_call = vrf_device_event,
1365 };
1366
1367 /* Initialize per network namespace state */
1368 static int __net_init vrf_netns_init(struct net *net)
1369 {
1370         bool *add_fib_rules = net_generic(net, vrf_net_id);
1371
1372         *add_fib_rules = true;
1373
1374         return 0;
1375 }
1376
1377 static struct pernet_operations vrf_net_ops __net_initdata = {
1378         .init = vrf_netns_init,
1379         .id   = &vrf_net_id,
1380         .size = sizeof(bool),
1381 };
1382
1383 static int __init vrf_init_module(void)
1384 {
1385         int rc;
1386
1387         register_netdevice_notifier(&vrf_notifier_block);
1388
1389         rc = register_pernet_subsys(&vrf_net_ops);
1390         if (rc < 0)
1391                 goto error;
1392
1393         rc = rtnl_link_register(&vrf_link_ops);
1394         if (rc < 0) {
1395                 unregister_pernet_subsys(&vrf_net_ops);
1396                 goto error;
1397         }
1398
1399         return 0;
1400
1401 error:
1402         unregister_netdevice_notifier(&vrf_notifier_block);
1403         return rc;
1404 }
1405
1406 module_init(vrf_init_module);
1407 MODULE_AUTHOR("Shrijeet Mukherjee, David Ahern");
1408 MODULE_DESCRIPTION("Device driver to instantiate VRF domains");
1409 MODULE_LICENSE("GPL");
1410 MODULE_ALIAS_RTNL_LINK(DRV_NAME);
1411 MODULE_VERSION(DRV_VERSION);