1 /* 2 * af_can.c - Protocol family CAN core module 3 * (used by different CAN protocol modules) 4 * 5 * Copyright (c) 2002-2007 Volkswagen Group Electronic Research 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. Neither the name of Volkswagen nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * Alternatively, provided that this notice is retained in full, this 21 * software may be distributed under the terms of the GNU General 22 * Public License ("GPL") version 2, in which case the provisions of the 23 * GPL apply INSTEAD OF those given above. 24 * 25 * The provided data structures and external interfaces from this code 26 * are not restricted to be used by modules with a GPL compatible license. 27 * 28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 31 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 32 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 33 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 34 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 35 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 36 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 39 * DAMAGE. 40 * 41 * Send feedback to <socketcan-users@lists.berlios.de> 42 * 43 */ 44 45 #include <linux/module.h> 46 #include <linux/init.h> 47 #include <linux/kmod.h> 48 #include <linux/slab.h> 49 #include <linux/list.h> 50 #include <linux/spinlock.h> 51 #include <linux/rcupdate.h> 52 #include <linux/uaccess.h> 53 #include <linux/net.h> 54 #include <linux/netdevice.h> 55 #include <linux/socket.h> 56 #include <linux/if_ether.h> 57 #include <linux/if_arp.h> 58 #include <linux/skbuff.h> 59 #include <linux/can.h> 60 #include <linux/can/core.h> 61 #include <net/net_namespace.h> 62 #include <net/sock.h> 63 64 #include "af_can.h" 65 66 static __initdata const char banner[] = KERN_INFO 67 "can: controller area network core (" CAN_VERSION_STRING ")\n"; 68 69 MODULE_DESCRIPTION("Controller Area Network PF_CAN core"); 70 MODULE_LICENSE("Dual BSD/GPL"); 71 MODULE_AUTHOR("Urs Thuermann <urs.thuermann@volkswagen.de>, " 72 "Oliver Hartkopp <oliver.hartkopp@volkswagen.de>"); 73 74 MODULE_ALIAS_NETPROTO(PF_CAN); 75 76 static int stats_timer __read_mostly = 1; 77 module_param(stats_timer, int, S_IRUGO); 78 MODULE_PARM_DESC(stats_timer, "enable timer for statistics (default:on)"); 79 80 HLIST_HEAD(can_rx_dev_list); 81 static struct dev_rcv_lists can_rx_alldev_list; 82 static DEFINE_SPINLOCK(can_rcvlists_lock); 83 84 static struct kmem_cache *rcv_cache __read_mostly; 85 86 /* table of registered CAN protocols */ 87 static struct can_proto *proto_tab[CAN_NPROTO] __read_mostly; 88 static DEFINE_SPINLOCK(proto_tab_lock); 89 90 struct timer_list can_stattimer; /* timer for statistics update */ 91 struct s_stats can_stats; /* packet statistics */ 92 struct s_pstats can_pstats; /* receive list statistics */ 93 94 /* 95 * af_can socket functions 96 */ 97 98 static int can_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) 99 { 100 struct sock *sk = sock->sk; 101 102 switch (cmd) { 103 104 case SIOCGSTAMP: 105 return sock_get_timestamp(sk, (struct timeval __user *)arg); 106 107 default: 108 return -ENOIOCTLCMD; 109 } 110 } 111 112 static void can_sock_destruct(struct sock *sk) 113 { 114 skb_queue_purge(&sk->sk_receive_queue); 115 } 116 117 static int can_create(struct net *net, struct socket *sock, int protocol) 118 { 119 struct sock *sk; 120 struct can_proto *cp; 121 char module_name[sizeof("can-proto-000")]; 122 int err = 0; 123 124 sock->state = SS_UNCONNECTED; 125 126 if (protocol < 0 || protocol >= CAN_NPROTO) 127 return -EINVAL; 128 129 if (net != &init_net) 130 return -EAFNOSUPPORT; 131 132 /* try to load protocol module, when CONFIG_KMOD is defined */ 133 if (!proto_tab[protocol]) { 134 sprintf(module_name, "can-proto-%d", protocol); 135 err = request_module(module_name); 136 137 /* 138 * In case of error we only print a message but don't 139 * return the error code immediately. Below we will 140 * return -EPROTONOSUPPORT 141 */ 142 if (err == -ENOSYS) { 143 if (printk_ratelimit()) 144 printk(KERN_INFO "can: request_module(%s)" 145 " not implemented.\n", module_name); 146 } else if (err) { 147 if (printk_ratelimit()) 148 printk(KERN_ERR "can: request_module(%s)" 149 " failed.\n", module_name); 150 } 151 } 152 153 spin_lock(&proto_tab_lock); 154 cp = proto_tab[protocol]; 155 if (cp && !try_module_get(cp->prot->owner)) 156 cp = NULL; 157 spin_unlock(&proto_tab_lock); 158 159 /* check for available protocol and correct usage */ 160 161 if (!cp) 162 return -EPROTONOSUPPORT; 163 164 if (cp->type != sock->type) { 165 err = -EPROTONOSUPPORT; 166 goto errout; 167 } 168 169 if (cp->capability >= 0 && !capable(cp->capability)) { 170 err = -EPERM; 171 goto errout; 172 } 173 174 sock->ops = cp->ops; 175 176 sk = sk_alloc(net, PF_CAN, GFP_KERNEL, cp->prot); 177 if (!sk) { 178 err = -ENOMEM; 179 goto errout; 180 } 181 182 sock_init_data(sock, sk); 183 sk->sk_destruct = can_sock_destruct; 184 185 if (sk->sk_prot->init) 186 err = sk->sk_prot->init(sk); 187 188 if (err) { 189 /* release sk on errors */ 190 sock_orphan(sk); 191 sock_put(sk); 192 } 193 194 errout: 195 module_put(cp->prot->owner); 196 return err; 197 } 198 199 /* 200 * af_can tx path 201 */ 202 203 /** 204 * can_send - transmit a CAN frame (optional with local loopback) 205 * @skb: pointer to socket buffer with CAN frame in data section 206 * @loop: loopback for listeners on local CAN sockets (recommended default!) 207 * 208 * Return: 209 * 0 on success 210 * -ENETDOWN when the selected interface is down 211 * -ENOBUFS on full driver queue (see net_xmit_errno()) 212 * -ENOMEM when local loopback failed at calling skb_clone() 213 * -EPERM when trying to send on a non-CAN interface 214 */ 215 int can_send(struct sk_buff *skb, int loop) 216 { 217 int err; 218 219 if (skb->dev->type != ARPHRD_CAN) { 220 kfree_skb(skb); 221 return -EPERM; 222 } 223 224 if (!(skb->dev->flags & IFF_UP)) { 225 kfree_skb(skb); 226 return -ENETDOWN; 227 } 228 229 skb->protocol = htons(ETH_P_CAN); 230 skb_reset_network_header(skb); 231 skb_reset_transport_header(skb); 232 233 if (loop) { 234 /* local loopback of sent CAN frames */ 235 236 /* indication for the CAN driver: do loopback */ 237 skb->pkt_type = PACKET_LOOPBACK; 238 239 /* 240 * The reference to the originating sock may be required 241 * by the receiving socket to check whether the frame is 242 * its own. Example: can_raw sockopt CAN_RAW_RECV_OWN_MSGS 243 * Therefore we have to ensure that skb->sk remains the 244 * reference to the originating sock by restoring skb->sk 245 * after each skb_clone() or skb_orphan() usage. 246 */ 247 248 if (!(skb->dev->flags & IFF_ECHO)) { 249 /* 250 * If the interface is not capable to do loopback 251 * itself, we do it here. 252 */ 253 struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC); 254 255 if (!newskb) { 256 kfree_skb(skb); 257 return -ENOMEM; 258 } 259 260 newskb->sk = skb->sk; 261 newskb->ip_summed = CHECKSUM_UNNECESSARY; 262 newskb->pkt_type = PACKET_BROADCAST; 263 netif_rx(newskb); 264 } 265 } else { 266 /* indication for the CAN driver: no loopback required */ 267 skb->pkt_type = PACKET_HOST; 268 } 269 270 /* send to netdevice */ 271 err = dev_queue_xmit(skb); 272 if (err > 0) 273 err = net_xmit_errno(err); 274 275 /* update statistics */ 276 can_stats.tx_frames++; 277 can_stats.tx_frames_delta++; 278 279 return err; 280 } 281 EXPORT_SYMBOL(can_send); 282 283 /* 284 * af_can rx path 285 */ 286 287 static struct dev_rcv_lists *find_dev_rcv_lists(struct net_device *dev) 288 { 289 struct dev_rcv_lists *d = NULL; 290 struct hlist_node *n; 291 292 /* 293 * find receive list for this device 294 * 295 * The hlist_for_each_entry*() macros curse through the list 296 * using the pointer variable n and set d to the containing 297 * struct in each list iteration. Therefore, after list 298 * iteration, d is unmodified when the list is empty, and it 299 * points to last list element, when the list is non-empty 300 * but no match in the loop body is found. I.e. d is *not* 301 * NULL when no match is found. We can, however, use the 302 * cursor variable n to decide if a match was found. 303 */ 304 305 hlist_for_each_entry_rcu(d, n, &can_rx_dev_list, list) { 306 if (d->dev == dev) 307 break; 308 } 309 310 return n ? d : NULL; 311 } 312 313 static struct hlist_head *find_rcv_list(canid_t *can_id, canid_t *mask, 314 struct dev_rcv_lists *d) 315 { 316 canid_t inv = *can_id & CAN_INV_FILTER; /* save flag before masking */ 317 318 /* filter error frames */ 319 if (*mask & CAN_ERR_FLAG) { 320 /* clear CAN_ERR_FLAG in list entry */ 321 *mask &= CAN_ERR_MASK; 322 return &d->rx[RX_ERR]; 323 } 324 325 /* ensure valid values in can_mask */ 326 if (*mask & CAN_EFF_FLAG) 327 *mask &= (CAN_EFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG); 328 else 329 *mask &= (CAN_SFF_MASK | CAN_RTR_FLAG); 330 331 /* reduce condition testing at receive time */ 332 *can_id &= *mask; 333 334 /* inverse can_id/can_mask filter */ 335 if (inv) 336 return &d->rx[RX_INV]; 337 338 /* mask == 0 => no condition testing at receive time */ 339 if (!(*mask)) 340 return &d->rx[RX_ALL]; 341 342 /* use extra filterset for the subscription of exactly *ONE* can_id */ 343 if (*can_id & CAN_EFF_FLAG) { 344 if (*mask == (CAN_EFF_MASK | CAN_EFF_FLAG)) { 345 /* RFC: a use-case for hash-tables in the future? */ 346 return &d->rx[RX_EFF]; 347 } 348 } else { 349 if (*mask == CAN_SFF_MASK) 350 return &d->rx_sff[*can_id]; 351 } 352 353 /* default: filter via can_id/can_mask */ 354 return &d->rx[RX_FIL]; 355 } 356 357 /** 358 * can_rx_register - subscribe CAN frames from a specific interface 359 * @dev: pointer to netdevice (NULL => subcribe from 'all' CAN devices list) 360 * @can_id: CAN identifier (see description) 361 * @mask: CAN mask (see description) 362 * @func: callback function on filter match 363 * @data: returned parameter for callback function 364 * @ident: string for calling module indentification 365 * 366 * Description: 367 * Invokes the callback function with the received sk_buff and the given 368 * parameter 'data' on a matching receive filter. A filter matches, when 369 * 370 * <received_can_id> & mask == can_id & mask 371 * 372 * The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can 373 * filter for error frames (CAN_ERR_FLAG bit set in mask). 374 * 375 * Return: 376 * 0 on success 377 * -ENOMEM on missing cache mem to create subscription entry 378 * -ENODEV unknown device 379 */ 380 int can_rx_register(struct net_device *dev, canid_t can_id, canid_t mask, 381 void (*func)(struct sk_buff *, void *), void *data, 382 char *ident) 383 { 384 struct receiver *r; 385 struct hlist_head *rl; 386 struct dev_rcv_lists *d; 387 int err = 0; 388 389 /* insert new receiver (dev,canid,mask) -> (func,data) */ 390 391 r = kmem_cache_alloc(rcv_cache, GFP_KERNEL); 392 if (!r) 393 return -ENOMEM; 394 395 spin_lock(&can_rcvlists_lock); 396 397 d = find_dev_rcv_lists(dev); 398 if (d) { 399 rl = find_rcv_list(&can_id, &mask, d); 400 401 r->can_id = can_id; 402 r->mask = mask; 403 r->matches = 0; 404 r->func = func; 405 r->data = data; 406 r->ident = ident; 407 408 hlist_add_head_rcu(&r->list, rl); 409 d->entries++; 410 411 can_pstats.rcv_entries++; 412 if (can_pstats.rcv_entries_max < can_pstats.rcv_entries) 413 can_pstats.rcv_entries_max = can_pstats.rcv_entries; 414 } else { 415 kmem_cache_free(rcv_cache, r); 416 err = -ENODEV; 417 } 418 419 spin_unlock(&can_rcvlists_lock); 420 421 return err; 422 } 423 EXPORT_SYMBOL(can_rx_register); 424 425 /* 426 * can_rx_delete_device - rcu callback for dev_rcv_lists structure removal 427 */ 428 static void can_rx_delete_device(struct rcu_head *rp) 429 { 430 struct dev_rcv_lists *d = container_of(rp, struct dev_rcv_lists, rcu); 431 432 kfree(d); 433 } 434 435 /* 436 * can_rx_delete_receiver - rcu callback for single receiver entry removal 437 */ 438 static void can_rx_delete_receiver(struct rcu_head *rp) 439 { 440 struct receiver *r = container_of(rp, struct receiver, rcu); 441 442 kmem_cache_free(rcv_cache, r); 443 } 444 445 /** 446 * can_rx_unregister - unsubscribe CAN frames from a specific interface 447 * @dev: pointer to netdevice (NULL => unsubcribe from 'all' CAN devices list) 448 * @can_id: CAN identifier 449 * @mask: CAN mask 450 * @func: callback function on filter match 451 * @data: returned parameter for callback function 452 * 453 * Description: 454 * Removes subscription entry depending on given (subscription) values. 455 */ 456 void can_rx_unregister(struct net_device *dev, canid_t can_id, canid_t mask, 457 void (*func)(struct sk_buff *, void *), void *data) 458 { 459 struct receiver *r = NULL; 460 struct hlist_head *rl; 461 struct hlist_node *next; 462 struct dev_rcv_lists *d; 463 464 spin_lock(&can_rcvlists_lock); 465 466 d = find_dev_rcv_lists(dev); 467 if (!d) { 468 printk(KERN_ERR "BUG: receive list not found for " 469 "dev %s, id %03X, mask %03X\n", 470 DNAME(dev), can_id, mask); 471 goto out; 472 } 473 474 rl = find_rcv_list(&can_id, &mask, d); 475 476 /* 477 * Search the receiver list for the item to delete. This should 478 * exist, since no receiver may be unregistered that hasn't 479 * been registered before. 480 */ 481 482 hlist_for_each_entry_rcu(r, next, rl, list) { 483 if (r->can_id == can_id && r->mask == mask 484 && r->func == func && r->data == data) 485 break; 486 } 487 488 /* 489 * Check for bugs in CAN protocol implementations: 490 * If no matching list item was found, the list cursor variable next 491 * will be NULL, while r will point to the last item of the list. 492 */ 493 494 if (!next) { 495 printk(KERN_ERR "BUG: receive list entry not found for " 496 "dev %s, id %03X, mask %03X\n", 497 DNAME(dev), can_id, mask); 498 r = NULL; 499 d = NULL; 500 goto out; 501 } 502 503 hlist_del_rcu(&r->list); 504 d->entries--; 505 506 if (can_pstats.rcv_entries > 0) 507 can_pstats.rcv_entries--; 508 509 /* remove device structure requested by NETDEV_UNREGISTER */ 510 if (d->remove_on_zero_entries && !d->entries) 511 hlist_del_rcu(&d->list); 512 else 513 d = NULL; 514 515 out: 516 spin_unlock(&can_rcvlists_lock); 517 518 /* schedule the receiver item for deletion */ 519 if (r) 520 call_rcu(&r->rcu, can_rx_delete_receiver); 521 522 /* schedule the device structure for deletion */ 523 if (d) 524 call_rcu(&d->rcu, can_rx_delete_device); 525 } 526 EXPORT_SYMBOL(can_rx_unregister); 527 528 static inline void deliver(struct sk_buff *skb, struct receiver *r) 529 { 530 struct sk_buff *clone = skb_clone(skb, GFP_ATOMIC); 531 532 if (clone) { 533 clone->sk = skb->sk; 534 r->func(clone, r->data); 535 r->matches++; 536 } 537 } 538 539 static int can_rcv_filter(struct dev_rcv_lists *d, struct sk_buff *skb) 540 { 541 struct receiver *r; 542 struct hlist_node *n; 543 int matches = 0; 544 struct can_frame *cf = (struct can_frame *)skb->data; 545 canid_t can_id = cf->can_id; 546 547 if (d->entries == 0) 548 return 0; 549 550 if (can_id & CAN_ERR_FLAG) { 551 /* check for error frame entries only */ 552 hlist_for_each_entry_rcu(r, n, &d->rx[RX_ERR], list) { 553 if (can_id & r->mask) { 554 deliver(skb, r); 555 matches++; 556 } 557 } 558 return matches; 559 } 560 561 /* check for unfiltered entries */ 562 hlist_for_each_entry_rcu(r, n, &d->rx[RX_ALL], list) { 563 deliver(skb, r); 564 matches++; 565 } 566 567 /* check for can_id/mask entries */ 568 hlist_for_each_entry_rcu(r, n, &d->rx[RX_FIL], list) { 569 if ((can_id & r->mask) == r->can_id) { 570 deliver(skb, r); 571 matches++; 572 } 573 } 574 575 /* check for inverted can_id/mask entries */ 576 hlist_for_each_entry_rcu(r, n, &d->rx[RX_INV], list) { 577 if ((can_id & r->mask) != r->can_id) { 578 deliver(skb, r); 579 matches++; 580 } 581 } 582 583 /* check CAN_ID specific entries */ 584 if (can_id & CAN_EFF_FLAG) { 585 hlist_for_each_entry_rcu(r, n, &d->rx[RX_EFF], list) { 586 if (r->can_id == can_id) { 587 deliver(skb, r); 588 matches++; 589 } 590 } 591 } else { 592 can_id &= CAN_SFF_MASK; 593 hlist_for_each_entry_rcu(r, n, &d->rx_sff[can_id], list) { 594 deliver(skb, r); 595 matches++; 596 } 597 } 598 599 return matches; 600 } 601 602 static int can_rcv(struct sk_buff *skb, struct net_device *dev, 603 struct packet_type *pt, struct net_device *orig_dev) 604 { 605 struct dev_rcv_lists *d; 606 int matches; 607 608 if (dev->type != ARPHRD_CAN || dev->nd_net != &init_net) { 609 kfree_skb(skb); 610 return 0; 611 } 612 613 /* update statistics */ 614 can_stats.rx_frames++; 615 can_stats.rx_frames_delta++; 616 617 rcu_read_lock(); 618 619 /* deliver the packet to sockets listening on all devices */ 620 matches = can_rcv_filter(&can_rx_alldev_list, skb); 621 622 /* find receive list for this device */ 623 d = find_dev_rcv_lists(dev); 624 if (d) 625 matches += can_rcv_filter(d, skb); 626 627 rcu_read_unlock(); 628 629 /* free the skbuff allocated by the netdevice driver */ 630 kfree_skb(skb); 631 632 if (matches > 0) { 633 can_stats.matches++; 634 can_stats.matches_delta++; 635 } 636 637 return 0; 638 } 639 640 /* 641 * af_can protocol functions 642 */ 643 644 /** 645 * can_proto_register - register CAN transport protocol 646 * @cp: pointer to CAN protocol structure 647 * 648 * Return: 649 * 0 on success 650 * -EINVAL invalid (out of range) protocol number 651 * -EBUSY protocol already in use 652 * -ENOBUF if proto_register() fails 653 */ 654 int can_proto_register(struct can_proto *cp) 655 { 656 int proto = cp->protocol; 657 int err = 0; 658 659 if (proto < 0 || proto >= CAN_NPROTO) { 660 printk(KERN_ERR "can: protocol number %d out of range\n", 661 proto); 662 return -EINVAL; 663 } 664 665 spin_lock(&proto_tab_lock); 666 if (proto_tab[proto]) { 667 printk(KERN_ERR "can: protocol %d already registered\n", 668 proto); 669 err = -EBUSY; 670 goto errout; 671 } 672 673 err = proto_register(cp->prot, 0); 674 if (err < 0) 675 goto errout; 676 677 proto_tab[proto] = cp; 678 679 /* use generic ioctl function if the module doesn't bring its own */ 680 if (!cp->ops->ioctl) 681 cp->ops->ioctl = can_ioctl; 682 683 errout: 684 spin_unlock(&proto_tab_lock); 685 686 return err; 687 } 688 EXPORT_SYMBOL(can_proto_register); 689 690 /** 691 * can_proto_unregister - unregister CAN transport protocol 692 * @cp: pointer to CAN protocol structure 693 */ 694 void can_proto_unregister(struct can_proto *cp) 695 { 696 int proto = cp->protocol; 697 698 spin_lock(&proto_tab_lock); 699 if (!proto_tab[proto]) { 700 printk(KERN_ERR "BUG: can: protocol %d is not registered\n", 701 proto); 702 } 703 proto_unregister(cp->prot); 704 proto_tab[proto] = NULL; 705 spin_unlock(&proto_tab_lock); 706 } 707 EXPORT_SYMBOL(can_proto_unregister); 708 709 /* 710 * af_can notifier to create/remove CAN netdevice specific structs 711 */ 712 static int can_notifier(struct notifier_block *nb, unsigned long msg, 713 void *data) 714 { 715 struct net_device *dev = (struct net_device *)data; 716 struct dev_rcv_lists *d; 717 718 if (dev->nd_net != &init_net) 719 return NOTIFY_DONE; 720 721 if (dev->type != ARPHRD_CAN) 722 return NOTIFY_DONE; 723 724 switch (msg) { 725 726 case NETDEV_REGISTER: 727 728 /* 729 * create new dev_rcv_lists for this device 730 * 731 * N.B. zeroing the struct is the correct initialization 732 * for the embedded hlist_head structs. 733 * Another list type, e.g. list_head, would require 734 * explicit initialization. 735 */ 736 737 d = kzalloc(sizeof(*d), GFP_KERNEL); 738 if (!d) { 739 printk(KERN_ERR 740 "can: allocation of receive list failed\n"); 741 return NOTIFY_DONE; 742 } 743 d->dev = dev; 744 745 spin_lock(&can_rcvlists_lock); 746 hlist_add_head_rcu(&d->list, &can_rx_dev_list); 747 spin_unlock(&can_rcvlists_lock); 748 749 break; 750 751 case NETDEV_UNREGISTER: 752 spin_lock(&can_rcvlists_lock); 753 754 d = find_dev_rcv_lists(dev); 755 if (d) { 756 if (d->entries) { 757 d->remove_on_zero_entries = 1; 758 d = NULL; 759 } else 760 hlist_del_rcu(&d->list); 761 } else 762 printk(KERN_ERR "can: notifier: receive list not " 763 "found for dev %s\n", dev->name); 764 765 spin_unlock(&can_rcvlists_lock); 766 767 if (d) 768 call_rcu(&d->rcu, can_rx_delete_device); 769 770 break; 771 } 772 773 return NOTIFY_DONE; 774 } 775 776 /* 777 * af_can module init/exit functions 778 */ 779 780 static struct packet_type can_packet __read_mostly = { 781 .type = __constant_htons(ETH_P_CAN), 782 .dev = NULL, 783 .func = can_rcv, 784 }; 785 786 static struct net_proto_family can_family_ops __read_mostly = { 787 .family = PF_CAN, 788 .create = can_create, 789 .owner = THIS_MODULE, 790 }; 791 792 /* notifier block for netdevice event */ 793 static struct notifier_block can_netdev_notifier __read_mostly = { 794 .notifier_call = can_notifier, 795 }; 796 797 static __init int can_init(void) 798 { 799 printk(banner); 800 801 rcv_cache = kmem_cache_create("can_receiver", sizeof(struct receiver), 802 0, 0, NULL); 803 if (!rcv_cache) 804 return -ENOMEM; 805 806 /* 807 * Insert can_rx_alldev_list for reception on all devices. 808 * This struct is zero initialized which is correct for the 809 * embedded hlist heads, the dev pointer, and the entries counter. 810 */ 811 812 spin_lock(&can_rcvlists_lock); 813 hlist_add_head_rcu(&can_rx_alldev_list.list, &can_rx_dev_list); 814 spin_unlock(&can_rcvlists_lock); 815 816 if (stats_timer) { 817 /* the statistics are updated every second (timer triggered) */ 818 setup_timer(&can_stattimer, can_stat_update, 0); 819 mod_timer(&can_stattimer, round_jiffies(jiffies + HZ)); 820 } else 821 can_stattimer.function = NULL; 822 823 can_init_proc(); 824 825 /* protocol register */ 826 sock_register(&can_family_ops); 827 register_netdevice_notifier(&can_netdev_notifier); 828 dev_add_pack(&can_packet); 829 830 return 0; 831 } 832 833 static __exit void can_exit(void) 834 { 835 struct dev_rcv_lists *d; 836 struct hlist_node *n, *next; 837 838 if (stats_timer) 839 del_timer(&can_stattimer); 840 841 can_remove_proc(); 842 843 /* protocol unregister */ 844 dev_remove_pack(&can_packet); 845 unregister_netdevice_notifier(&can_netdev_notifier); 846 sock_unregister(PF_CAN); 847 848 /* remove can_rx_dev_list */ 849 spin_lock(&can_rcvlists_lock); 850 hlist_del(&can_rx_alldev_list.list); 851 hlist_for_each_entry_safe(d, n, next, &can_rx_dev_list, list) { 852 hlist_del(&d->list); 853 kfree(d); 854 } 855 spin_unlock(&can_rcvlists_lock); 856 857 kmem_cache_destroy(rcv_cache); 858 } 859 860 module_init(can_init); 861 module_exit(can_exit); 862