This source file includes following definitions.
- can_sock_destruct
- can_get_proto
- can_put_proto
- can_create
- can_send
- can_dev_rcv_lists_find
- effhash
- can_rcv_list_find
- can_rx_register
- can_rx_delete_receiver
- can_rx_unregister
- deliver
- can_rcv_filter
- can_receive
- can_rcv
- canfd_rcv
- can_proto_register
- can_proto_unregister
- can_notifier
- can_pernet_init
- can_pernet_exit
- can_init
- can_exit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 #include <linux/module.h>
44 #include <linux/stddef.h>
45 #include <linux/init.h>
46 #include <linux/kmod.h>
47 #include <linux/slab.h>
48 #include <linux/list.h>
49 #include <linux/spinlock.h>
50 #include <linux/rcupdate.h>
51 #include <linux/uaccess.h>
52 #include <linux/net.h>
53 #include <linux/netdevice.h>
54 #include <linux/socket.h>
55 #include <linux/if_ether.h>
56 #include <linux/if_arp.h>
57 #include <linux/skbuff.h>
58 #include <linux/can.h>
59 #include <linux/can/core.h>
60 #include <linux/can/skb.h>
61 #include <linux/can/can-ml.h>
62 #include <linux/ratelimit.h>
63 #include <net/net_namespace.h>
64 #include <net/sock.h>
65
66 #include "af_can.h"
67
68 MODULE_DESCRIPTION("Controller Area Network PF_CAN core");
69 MODULE_LICENSE("Dual BSD/GPL");
70 MODULE_AUTHOR("Urs Thuermann <urs.thuermann@volkswagen.de>, "
71 "Oliver Hartkopp <oliver.hartkopp@volkswagen.de>");
72
73 MODULE_ALIAS_NETPROTO(PF_CAN);
74
75 static int stats_timer __read_mostly = 1;
76 module_param(stats_timer, int, 0444);
77 MODULE_PARM_DESC(stats_timer, "enable timer for statistics (default:on)");
78
79 static struct kmem_cache *rcv_cache __read_mostly;
80
81
82 static const struct can_proto __rcu *proto_tab[CAN_NPROTO] __read_mostly;
83 static DEFINE_MUTEX(proto_tab_lock);
84
85 static atomic_t skbcounter = ATOMIC_INIT(0);
86
87
88
89 void can_sock_destruct(struct sock *sk)
90 {
91 skb_queue_purge(&sk->sk_receive_queue);
92 skb_queue_purge(&sk->sk_error_queue);
93 }
94 EXPORT_SYMBOL(can_sock_destruct);
95
96 static const struct can_proto *can_get_proto(int protocol)
97 {
98 const struct can_proto *cp;
99
100 rcu_read_lock();
101 cp = rcu_dereference(proto_tab[protocol]);
102 if (cp && !try_module_get(cp->prot->owner))
103 cp = NULL;
104 rcu_read_unlock();
105
106 return cp;
107 }
108
109 static inline void can_put_proto(const struct can_proto *cp)
110 {
111 module_put(cp->prot->owner);
112 }
113
114 static int can_create(struct net *net, struct socket *sock, int protocol,
115 int kern)
116 {
117 struct sock *sk;
118 const struct can_proto *cp;
119 int err = 0;
120
121 sock->state = SS_UNCONNECTED;
122
123 if (protocol < 0 || protocol >= CAN_NPROTO)
124 return -EINVAL;
125
126 cp = can_get_proto(protocol);
127
128 #ifdef CONFIG_MODULES
129 if (!cp) {
130
131
132 err = request_module("can-proto-%d", protocol);
133
134
135
136
137
138 if (err)
139 pr_err_ratelimited("can: request_module (can-proto-%d) failed.\n",
140 protocol);
141
142 cp = can_get_proto(protocol);
143 }
144 #endif
145
146
147
148 if (!cp)
149 return -EPROTONOSUPPORT;
150
151 if (cp->type != sock->type) {
152 err = -EPROTOTYPE;
153 goto errout;
154 }
155
156 sock->ops = cp->ops;
157
158 sk = sk_alloc(net, PF_CAN, GFP_KERNEL, cp->prot, kern);
159 if (!sk) {
160 err = -ENOMEM;
161 goto errout;
162 }
163
164 sock_init_data(sock, sk);
165 sk->sk_destruct = can_sock_destruct;
166
167 if (sk->sk_prot->init)
168 err = sk->sk_prot->init(sk);
169
170 if (err) {
171
172 sock_orphan(sk);
173 sock_put(sk);
174 }
175
176 errout:
177 can_put_proto(cp);
178 return err;
179 }
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199 int can_send(struct sk_buff *skb, int loop)
200 {
201 struct sk_buff *newskb = NULL;
202 struct canfd_frame *cfd = (struct canfd_frame *)skb->data;
203 struct can_pkg_stats *pkg_stats = dev_net(skb->dev)->can.pkg_stats;
204 int err = -EINVAL;
205
206 if (skb->len == CAN_MTU) {
207 skb->protocol = htons(ETH_P_CAN);
208 if (unlikely(cfd->len > CAN_MAX_DLEN))
209 goto inval_skb;
210 } else if (skb->len == CANFD_MTU) {
211 skb->protocol = htons(ETH_P_CANFD);
212 if (unlikely(cfd->len > CANFD_MAX_DLEN))
213 goto inval_skb;
214 } else {
215 goto inval_skb;
216 }
217
218
219
220
221
222 if (unlikely(skb->len > skb->dev->mtu && cfd->len > CAN_MAX_DLEN)) {
223 err = -EMSGSIZE;
224 goto inval_skb;
225 }
226
227 if (unlikely(skb->dev->type != ARPHRD_CAN)) {
228 err = -EPERM;
229 goto inval_skb;
230 }
231
232 if (unlikely(!(skb->dev->flags & IFF_UP))) {
233 err = -ENETDOWN;
234 goto inval_skb;
235 }
236
237 skb->ip_summed = CHECKSUM_UNNECESSARY;
238
239 skb_reset_mac_header(skb);
240 skb_reset_network_header(skb);
241 skb_reset_transport_header(skb);
242
243 if (loop) {
244
245
246
247 skb->pkt_type = PACKET_LOOPBACK;
248
249
250
251
252
253
254
255
256
257 if (!(skb->dev->flags & IFF_ECHO)) {
258
259
260
261 newskb = skb_clone(skb, GFP_ATOMIC);
262 if (!newskb) {
263 kfree_skb(skb);
264 return -ENOMEM;
265 }
266
267 can_skb_set_owner(newskb, skb->sk);
268 newskb->ip_summed = CHECKSUM_UNNECESSARY;
269 newskb->pkt_type = PACKET_BROADCAST;
270 }
271 } else {
272
273 skb->pkt_type = PACKET_HOST;
274 }
275
276
277 err = dev_queue_xmit(skb);
278 if (err > 0)
279 err = net_xmit_errno(err);
280
281 if (err) {
282 kfree_skb(newskb);
283 return err;
284 }
285
286 if (newskb)
287 netif_rx_ni(newskb);
288
289
290 pkg_stats->tx_frames++;
291 pkg_stats->tx_frames_delta++;
292
293 return 0;
294
295 inval_skb:
296 kfree_skb(skb);
297 return err;
298 }
299 EXPORT_SYMBOL(can_send);
300
301
302
303 static struct can_dev_rcv_lists *can_dev_rcv_lists_find(struct net *net,
304 struct net_device *dev)
305 {
306 if (dev) {
307 struct can_ml_priv *ml_priv = dev->ml_priv;
308 return &ml_priv->dev_rcv_lists;
309 } else {
310 return net->can.rx_alldev_list;
311 }
312 }
313
314
315
316
317
318
319
320
321
322
323
324
325
326 static unsigned int effhash(canid_t can_id)
327 {
328 unsigned int hash;
329
330 hash = can_id;
331 hash ^= can_id >> CAN_EFF_RCV_HASH_BITS;
332 hash ^= can_id >> (2 * CAN_EFF_RCV_HASH_BITS);
333
334 return hash & ((1 << CAN_EFF_RCV_HASH_BITS) - 1);
335 }
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364 static struct hlist_head *can_rcv_list_find(canid_t *can_id, canid_t *mask,
365 struct can_dev_rcv_lists *dev_rcv_lists)
366 {
367 canid_t inv = *can_id & CAN_INV_FILTER;
368
369
370 if (*mask & CAN_ERR_FLAG) {
371
372 *mask &= CAN_ERR_MASK;
373 return &dev_rcv_lists->rx[RX_ERR];
374 }
375
376
377
378 #define CAN_EFF_RTR_FLAGS (CAN_EFF_FLAG | CAN_RTR_FLAG)
379
380
381 if ((*mask & CAN_EFF_FLAG) && !(*can_id & CAN_EFF_FLAG))
382 *mask &= (CAN_SFF_MASK | CAN_EFF_RTR_FLAGS);
383
384
385 *can_id &= *mask;
386
387
388 if (inv)
389 return &dev_rcv_lists->rx[RX_INV];
390
391
392 if (!(*mask))
393 return &dev_rcv_lists->rx[RX_ALL];
394
395
396 if (((*mask & CAN_EFF_RTR_FLAGS) == CAN_EFF_RTR_FLAGS) &&
397 !(*can_id & CAN_RTR_FLAG)) {
398 if (*can_id & CAN_EFF_FLAG) {
399 if (*mask == (CAN_EFF_MASK | CAN_EFF_RTR_FLAGS))
400 return &dev_rcv_lists->rx_eff[effhash(*can_id)];
401 } else {
402 if (*mask == (CAN_SFF_MASK | CAN_EFF_RTR_FLAGS))
403 return &dev_rcv_lists->rx_sff[*can_id];
404 }
405 }
406
407
408 return &dev_rcv_lists->rx[RX_FIL];
409 }
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441 int can_rx_register(struct net *net, struct net_device *dev, canid_t can_id,
442 canid_t mask, void (*func)(struct sk_buff *, void *),
443 void *data, char *ident, struct sock *sk)
444 {
445 struct receiver *rcv;
446 struct hlist_head *rcv_list;
447 struct can_dev_rcv_lists *dev_rcv_lists;
448 struct can_rcv_lists_stats *rcv_lists_stats = net->can.rcv_lists_stats;
449 int err = 0;
450
451
452
453 if (dev && dev->type != ARPHRD_CAN)
454 return -ENODEV;
455
456 if (dev && !net_eq(net, dev_net(dev)))
457 return -ENODEV;
458
459 rcv = kmem_cache_alloc(rcv_cache, GFP_KERNEL);
460 if (!rcv)
461 return -ENOMEM;
462
463 spin_lock_bh(&net->can.rcvlists_lock);
464
465 dev_rcv_lists = can_dev_rcv_lists_find(net, dev);
466 rcv_list = can_rcv_list_find(&can_id, &mask, dev_rcv_lists);
467
468 rcv->can_id = can_id;
469 rcv->mask = mask;
470 rcv->matches = 0;
471 rcv->func = func;
472 rcv->data = data;
473 rcv->ident = ident;
474 rcv->sk = sk;
475
476 hlist_add_head_rcu(&rcv->list, rcv_list);
477 dev_rcv_lists->entries++;
478
479 rcv_lists_stats->rcv_entries++;
480 rcv_lists_stats->rcv_entries_max = max(rcv_lists_stats->rcv_entries_max,
481 rcv_lists_stats->rcv_entries);
482 spin_unlock_bh(&net->can.rcvlists_lock);
483
484 return err;
485 }
486 EXPORT_SYMBOL(can_rx_register);
487
488
489 static void can_rx_delete_receiver(struct rcu_head *rp)
490 {
491 struct receiver *rcv = container_of(rp, struct receiver, rcu);
492 struct sock *sk = rcv->sk;
493
494 kmem_cache_free(rcv_cache, rcv);
495 if (sk)
496 sock_put(sk);
497 }
498
499
500
501
502
503
504
505
506
507
508
509
510 void can_rx_unregister(struct net *net, struct net_device *dev, canid_t can_id,
511 canid_t mask, void (*func)(struct sk_buff *, void *),
512 void *data)
513 {
514 struct receiver *rcv = NULL;
515 struct hlist_head *rcv_list;
516 struct can_rcv_lists_stats *rcv_lists_stats = net->can.rcv_lists_stats;
517 struct can_dev_rcv_lists *dev_rcv_lists;
518
519 if (dev && dev->type != ARPHRD_CAN)
520 return;
521
522 if (dev && !net_eq(net, dev_net(dev)))
523 return;
524
525 spin_lock_bh(&net->can.rcvlists_lock);
526
527 dev_rcv_lists = can_dev_rcv_lists_find(net, dev);
528 rcv_list = can_rcv_list_find(&can_id, &mask, dev_rcv_lists);
529
530
531
532
533
534 hlist_for_each_entry_rcu(rcv, rcv_list, list) {
535 if (rcv->can_id == can_id && rcv->mask == mask &&
536 rcv->func == func && rcv->data == data)
537 break;
538 }
539
540
541
542
543 if (!rcv) {
544 WARN(1, "BUG: receive list entry not found for dev %s, id %03X, mask %03X\n",
545 DNAME(dev), can_id, mask);
546 goto out;
547 }
548
549 hlist_del_rcu(&rcv->list);
550 dev_rcv_lists->entries--;
551
552 if (rcv_lists_stats->rcv_entries > 0)
553 rcv_lists_stats->rcv_entries--;
554
555 out:
556 spin_unlock_bh(&net->can.rcvlists_lock);
557
558
559 if (rcv) {
560 if (rcv->sk)
561 sock_hold(rcv->sk);
562 call_rcu(&rcv->rcu, can_rx_delete_receiver);
563 }
564 }
565 EXPORT_SYMBOL(can_rx_unregister);
566
567 static inline void deliver(struct sk_buff *skb, struct receiver *rcv)
568 {
569 rcv->func(skb, rcv->data);
570 rcv->matches++;
571 }
572
573 static int can_rcv_filter(struct can_dev_rcv_lists *dev_rcv_lists, struct sk_buff *skb)
574 {
575 struct receiver *rcv;
576 int matches = 0;
577 struct can_frame *cf = (struct can_frame *)skb->data;
578 canid_t can_id = cf->can_id;
579
580 if (dev_rcv_lists->entries == 0)
581 return 0;
582
583 if (can_id & CAN_ERR_FLAG) {
584
585 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_ERR], list) {
586 if (can_id & rcv->mask) {
587 deliver(skb, rcv);
588 matches++;
589 }
590 }
591 return matches;
592 }
593
594
595 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_ALL], list) {
596 deliver(skb, rcv);
597 matches++;
598 }
599
600
601 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_FIL], list) {
602 if ((can_id & rcv->mask) == rcv->can_id) {
603 deliver(skb, rcv);
604 matches++;
605 }
606 }
607
608
609 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_INV], list) {
610 if ((can_id & rcv->mask) != rcv->can_id) {
611 deliver(skb, rcv);
612 matches++;
613 }
614 }
615
616
617 if (can_id & CAN_RTR_FLAG)
618 return matches;
619
620 if (can_id & CAN_EFF_FLAG) {
621 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx_eff[effhash(can_id)], list) {
622 if (rcv->can_id == can_id) {
623 deliver(skb, rcv);
624 matches++;
625 }
626 }
627 } else {
628 can_id &= CAN_SFF_MASK;
629 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx_sff[can_id], list) {
630 deliver(skb, rcv);
631 matches++;
632 }
633 }
634
635 return matches;
636 }
637
638 static void can_receive(struct sk_buff *skb, struct net_device *dev)
639 {
640 struct can_dev_rcv_lists *dev_rcv_lists;
641 struct net *net = dev_net(dev);
642 struct can_pkg_stats *pkg_stats = net->can.pkg_stats;
643 int matches;
644
645
646 pkg_stats->rx_frames++;
647 pkg_stats->rx_frames_delta++;
648
649
650 while (!(can_skb_prv(skb)->skbcnt))
651 can_skb_prv(skb)->skbcnt = atomic_inc_return(&skbcounter);
652
653 rcu_read_lock();
654
655
656 matches = can_rcv_filter(net->can.rx_alldev_list, skb);
657
658
659 dev_rcv_lists = can_dev_rcv_lists_find(net, dev);
660 matches += can_rcv_filter(dev_rcv_lists, skb);
661
662 rcu_read_unlock();
663
664
665 consume_skb(skb);
666
667 if (matches > 0) {
668 pkg_stats->matches++;
669 pkg_stats->matches_delta++;
670 }
671 }
672
673 static int can_rcv(struct sk_buff *skb, struct net_device *dev,
674 struct packet_type *pt, struct net_device *orig_dev)
675 {
676 struct canfd_frame *cfd = (struct canfd_frame *)skb->data;
677
678 if (unlikely(dev->type != ARPHRD_CAN || skb->len != CAN_MTU ||
679 cfd->len > CAN_MAX_DLEN)) {
680 pr_warn_once("PF_CAN: dropped non conform CAN skbuf: dev type %d, len %d, datalen %d\n",
681 dev->type, skb->len, cfd->len);
682 kfree_skb(skb);
683 return NET_RX_DROP;
684 }
685
686 can_receive(skb, dev);
687 return NET_RX_SUCCESS;
688 }
689
690 static int canfd_rcv(struct sk_buff *skb, struct net_device *dev,
691 struct packet_type *pt, struct net_device *orig_dev)
692 {
693 struct canfd_frame *cfd = (struct canfd_frame *)skb->data;
694
695 if (unlikely(dev->type != ARPHRD_CAN || skb->len != CANFD_MTU ||
696 cfd->len > CANFD_MAX_DLEN)) {
697 pr_warn_once("PF_CAN: dropped non conform CAN FD skbuf: dev type %d, len %d, datalen %d\n",
698 dev->type, skb->len, cfd->len);
699 kfree_skb(skb);
700 return NET_RX_DROP;
701 }
702
703 can_receive(skb, dev);
704 return NET_RX_SUCCESS;
705 }
706
707
708
709
710
711
712
713
714
715
716
717
718
719 int can_proto_register(const struct can_proto *cp)
720 {
721 int proto = cp->protocol;
722 int err = 0;
723
724 if (proto < 0 || proto >= CAN_NPROTO) {
725 pr_err("can: protocol number %d out of range\n", proto);
726 return -EINVAL;
727 }
728
729 err = proto_register(cp->prot, 0);
730 if (err < 0)
731 return err;
732
733 mutex_lock(&proto_tab_lock);
734
735 if (rcu_access_pointer(proto_tab[proto])) {
736 pr_err("can: protocol %d already registered\n", proto);
737 err = -EBUSY;
738 } else {
739 RCU_INIT_POINTER(proto_tab[proto], cp);
740 }
741
742 mutex_unlock(&proto_tab_lock);
743
744 if (err < 0)
745 proto_unregister(cp->prot);
746
747 return err;
748 }
749 EXPORT_SYMBOL(can_proto_register);
750
751
752
753
754
755 void can_proto_unregister(const struct can_proto *cp)
756 {
757 int proto = cp->protocol;
758
759 mutex_lock(&proto_tab_lock);
760 BUG_ON(rcu_access_pointer(proto_tab[proto]) != cp);
761 RCU_INIT_POINTER(proto_tab[proto], NULL);
762 mutex_unlock(&proto_tab_lock);
763
764 synchronize_rcu();
765
766 proto_unregister(cp->prot);
767 }
768 EXPORT_SYMBOL(can_proto_unregister);
769
770
771 static int can_notifier(struct notifier_block *nb, unsigned long msg,
772 void *ptr)
773 {
774 struct net_device *dev = netdev_notifier_info_to_dev(ptr);
775
776 if (dev->type != ARPHRD_CAN)
777 return NOTIFY_DONE;
778
779 switch (msg) {
780 case NETDEV_REGISTER:
781 WARN(!dev->ml_priv,
782 "No CAN mid layer private allocated, please fix your driver and use alloc_candev()!\n");
783 break;
784 }
785
786 return NOTIFY_DONE;
787 }
788
789 static int can_pernet_init(struct net *net)
790 {
791 spin_lock_init(&net->can.rcvlists_lock);
792 net->can.rx_alldev_list =
793 kzalloc(sizeof(*net->can.rx_alldev_list), GFP_KERNEL);
794 if (!net->can.rx_alldev_list)
795 goto out;
796 net->can.pkg_stats = kzalloc(sizeof(*net->can.pkg_stats), GFP_KERNEL);
797 if (!net->can.pkg_stats)
798 goto out_free_rx_alldev_list;
799 net->can.rcv_lists_stats = kzalloc(sizeof(*net->can.rcv_lists_stats), GFP_KERNEL);
800 if (!net->can.rcv_lists_stats)
801 goto out_free_pkg_stats;
802
803 if (IS_ENABLED(CONFIG_PROC_FS)) {
804
805 if (stats_timer) {
806 timer_setup(&net->can.stattimer, can_stat_update,
807 0);
808 mod_timer(&net->can.stattimer,
809 round_jiffies(jiffies + HZ));
810 }
811 net->can.pkg_stats->jiffies_init = jiffies;
812 can_init_proc(net);
813 }
814
815 return 0;
816
817 out_free_pkg_stats:
818 kfree(net->can.pkg_stats);
819 out_free_rx_alldev_list:
820 kfree(net->can.rx_alldev_list);
821 out:
822 return -ENOMEM;
823 }
824
825 static void can_pernet_exit(struct net *net)
826 {
827 if (IS_ENABLED(CONFIG_PROC_FS)) {
828 can_remove_proc(net);
829 if (stats_timer)
830 del_timer_sync(&net->can.stattimer);
831 }
832
833 kfree(net->can.rx_alldev_list);
834 kfree(net->can.pkg_stats);
835 kfree(net->can.rcv_lists_stats);
836 }
837
838
839
840 static struct packet_type can_packet __read_mostly = {
841 .type = cpu_to_be16(ETH_P_CAN),
842 .func = can_rcv,
843 };
844
845 static struct packet_type canfd_packet __read_mostly = {
846 .type = cpu_to_be16(ETH_P_CANFD),
847 .func = canfd_rcv,
848 };
849
850 static const struct net_proto_family can_family_ops = {
851 .family = PF_CAN,
852 .create = can_create,
853 .owner = THIS_MODULE,
854 };
855
856
857 static struct notifier_block can_netdev_notifier __read_mostly = {
858 .notifier_call = can_notifier,
859 };
860
861 static struct pernet_operations can_pernet_ops __read_mostly = {
862 .init = can_pernet_init,
863 .exit = can_pernet_exit,
864 };
865
866 static __init int can_init(void)
867 {
868 int err;
869
870
871 BUILD_BUG_ON(offsetof(struct can_frame, can_dlc) !=
872 offsetof(struct canfd_frame, len) ||
873 offsetof(struct can_frame, data) !=
874 offsetof(struct canfd_frame, data));
875
876 pr_info("can: controller area network core (" CAN_VERSION_STRING ")\n");
877
878 rcv_cache = kmem_cache_create("can_receiver", sizeof(struct receiver),
879 0, 0, NULL);
880 if (!rcv_cache)
881 return -ENOMEM;
882
883 err = register_pernet_subsys(&can_pernet_ops);
884 if (err)
885 goto out_pernet;
886
887
888 err = sock_register(&can_family_ops);
889 if (err)
890 goto out_sock;
891 err = register_netdevice_notifier(&can_netdev_notifier);
892 if (err)
893 goto out_notifier;
894
895 dev_add_pack(&can_packet);
896 dev_add_pack(&canfd_packet);
897
898 return 0;
899
900 out_notifier:
901 sock_unregister(PF_CAN);
902 out_sock:
903 unregister_pernet_subsys(&can_pernet_ops);
904 out_pernet:
905 kmem_cache_destroy(rcv_cache);
906
907 return err;
908 }
909
910 static __exit void can_exit(void)
911 {
912
913 dev_remove_pack(&canfd_packet);
914 dev_remove_pack(&can_packet);
915 unregister_netdevice_notifier(&can_netdev_notifier);
916 sock_unregister(PF_CAN);
917
918 unregister_pernet_subsys(&can_pernet_ops);
919
920 rcu_barrier();
921
922 kmem_cache_destroy(rcv_cache);
923 }
924
925 module_init(can_init);
926 module_exit(can_exit);