root/net/can/af_can.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. can_sock_destruct
  2. can_get_proto
  3. can_put_proto
  4. can_create
  5. can_send
  6. can_dev_rcv_lists_find
  7. effhash
  8. can_rcv_list_find
  9. can_rx_register
  10. can_rx_delete_receiver
  11. can_rx_unregister
  12. deliver
  13. can_rcv_filter
  14. can_receive
  15. can_rcv
  16. canfd_rcv
  17. can_proto_register
  18. can_proto_unregister
  19. can_notifier
  20. can_pernet_init
  21. can_pernet_exit
  22. can_init
  23. can_exit

   1 // SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
   2 /* af_can.c - Protocol family CAN core module
   3  *            (used by different CAN protocol modules)
   4  *
   5  * Copyright (c) 2002-2017 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  */
  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 /* table of registered CAN protocols */
  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 /* af_can socket functions */
  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                 /* try to load protocol module if kernel is modular */
 131 
 132                 err = request_module("can-proto-%d", protocol);
 133 
 134                 /* In case of error we only print a message but don't
 135                  * return the error code immediately.  Below we will
 136                  * return -EPROTONOSUPPORT
 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         /* check for available protocol and correct usage */
 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                 /* release sk on errors */
 172                 sock_orphan(sk);
 173                 sock_put(sk);
 174         }
 175 
 176  errout:
 177         can_put_proto(cp);
 178         return err;
 179 }
 180 
 181 /* af_can tx path */
 182 
 183 /**
 184  * can_send - transmit a CAN frame (optional with local loopback)
 185  * @skb: pointer to socket buffer with CAN frame in data section
 186  * @loop: loopback for listeners on local CAN sockets (recommended default!)
 187  *
 188  * Due to the loopback this routine must not be called from hardirq context.
 189  *
 190  * Return:
 191  *  0 on success
 192  *  -ENETDOWN when the selected interface is down
 193  *  -ENOBUFS on full driver queue (see net_xmit_errno())
 194  *  -ENOMEM when local loopback failed at calling skb_clone()
 195  *  -EPERM when trying to send on a non-CAN interface
 196  *  -EMSGSIZE CAN frame size is bigger than CAN interface MTU
 197  *  -EINVAL when the skb->data does not contain a valid CAN frame
 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         /* Make sure the CAN frame can pass the selected CAN netdevice.
 219          * As structs can_frame and canfd_frame are similar, we can provide
 220          * CAN FD frames to legacy CAN drivers as long as the length is <= 8
 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                 /* local loopback of sent CAN frames */
 245 
 246                 /* indication for the CAN driver: do loopback */
 247                 skb->pkt_type = PACKET_LOOPBACK;
 248 
 249                 /* The reference to the originating sock may be required
 250                  * by the receiving socket to check whether the frame is
 251                  * its own. Example: can_raw sockopt CAN_RAW_RECV_OWN_MSGS
 252                  * Therefore we have to ensure that skb->sk remains the
 253                  * reference to the originating sock by restoring skb->sk
 254                  * after each skb_clone() or skb_orphan() usage.
 255                  */
 256 
 257                 if (!(skb->dev->flags & IFF_ECHO)) {
 258                         /* If the interface is not capable to do loopback
 259                          * itself, we do it here.
 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                 /* indication for the CAN driver: no loopback required */
 273                 skb->pkt_type = PACKET_HOST;
 274         }
 275 
 276         /* send to netdevice */
 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         /* update statistics */
 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 /* af_can rx path */
 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  * effhash - hash function for 29 bit CAN identifier reduction
 316  * @can_id: 29 bit CAN identifier
 317  *
 318  * Description:
 319  *  To reduce the linear traversal in one linked list of _single_ EFF CAN
 320  *  frame subscriptions the 29 bit identifier is mapped to 10 bits.
 321  *  (see CAN_EFF_RCV_HASH_BITS definition)
 322  *
 323  * Return:
 324  *  Hash value from 0x000 - 0x3FF ( enforced by CAN_EFF_RCV_HASH_BITS mask )
 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  * can_rcv_list_find - determine optimal filterlist inside device filter struct
 339  * @can_id: pointer to CAN identifier of a given can_filter
 340  * @mask: pointer to CAN mask of a given can_filter
 341  * @d: pointer to the device filter struct
 342  *
 343  * Description:
 344  *  Returns the optimal filterlist to reduce the filter handling in the
 345  *  receive path. This function is called by service functions that need
 346  *  to register or unregister a can_filter in the filter lists.
 347  *
 348  *  A filter matches in general, when
 349  *
 350  *          <received_can_id> & mask == can_id & mask
 351  *
 352  *  so every bit set in the mask (even CAN_EFF_FLAG, CAN_RTR_FLAG) describe
 353  *  relevant bits for the filter.
 354  *
 355  *  The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can
 356  *  filter for error messages (CAN_ERR_FLAG bit set in mask). For error msg
 357  *  frames there is a special filterlist and a special rx path filter handling.
 358  *
 359  * Return:
 360  *  Pointer to optimal filterlist for the given can_id/mask pair.
 361  *  Constistency checked mask.
 362  *  Reduced can_id to have a preprocessed filter compare value.
 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; /* save flag before masking */
 368 
 369         /* filter for error message frames in extra filterlist */
 370         if (*mask & CAN_ERR_FLAG) {
 371                 /* clear CAN_ERR_FLAG in filter entry */
 372                 *mask &= CAN_ERR_MASK;
 373                 return &dev_rcv_lists->rx[RX_ERR];
 374         }
 375 
 376         /* with cleared CAN_ERR_FLAG we have a simple mask/value filterpair */
 377 
 378 #define CAN_EFF_RTR_FLAGS (CAN_EFF_FLAG | CAN_RTR_FLAG)
 379 
 380         /* ensure valid values in can_mask for 'SFF only' frame filtering */
 381         if ((*mask & CAN_EFF_FLAG) && !(*can_id & CAN_EFF_FLAG))
 382                 *mask &= (CAN_SFF_MASK | CAN_EFF_RTR_FLAGS);
 383 
 384         /* reduce condition testing at receive time */
 385         *can_id &= *mask;
 386 
 387         /* inverse can_id/can_mask filter */
 388         if (inv)
 389                 return &dev_rcv_lists->rx[RX_INV];
 390 
 391         /* mask == 0 => no condition testing at receive time */
 392         if (!(*mask))
 393                 return &dev_rcv_lists->rx[RX_ALL];
 394 
 395         /* extra filterlists for the subscription of a single non-RTR can_id */
 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         /* default: filter via can_id/can_mask */
 408         return &dev_rcv_lists->rx[RX_FIL];
 409 }
 410 
 411 /**
 412  * can_rx_register - subscribe CAN frames from a specific interface
 413  * @dev: pointer to netdevice (NULL => subcribe from 'all' CAN devices list)
 414  * @can_id: CAN identifier (see description)
 415  * @mask: CAN mask (see description)
 416  * @func: callback function on filter match
 417  * @data: returned parameter for callback function
 418  * @ident: string for calling module identification
 419  * @sk: socket pointer (might be NULL)
 420  *
 421  * Description:
 422  *  Invokes the callback function with the received sk_buff and the given
 423  *  parameter 'data' on a matching receive filter. A filter matches, when
 424  *
 425  *          <received_can_id> & mask == can_id & mask
 426  *
 427  *  The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can
 428  *  filter for error message frames (CAN_ERR_FLAG bit set in mask).
 429  *
 430  *  The provided pointer to the sk_buff is guaranteed to be valid as long as
 431  *  the callback function is running. The callback function must *not* free
 432  *  the given sk_buff while processing it's task. When the given sk_buff is
 433  *  needed after the end of the callback function it must be cloned inside
 434  *  the callback function with skb_clone().
 435  *
 436  * Return:
 437  *  0 on success
 438  *  -ENOMEM on missing cache mem to create subscription entry
 439  *  -ENODEV unknown device
 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         /* insert new receiver  (dev,canid,mask) -> (func,data) */
 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 /* can_rx_delete_receiver - rcu callback for single receiver entry removal */
 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  * can_rx_unregister - unsubscribe CAN frames from a specific interface
 501  * @dev: pointer to netdevice (NULL => unsubscribe from 'all' CAN devices list)
 502  * @can_id: CAN identifier
 503  * @mask: CAN mask
 504  * @func: callback function on filter match
 505  * @data: returned parameter for callback function
 506  *
 507  * Description:
 508  *  Removes subscription entry depending on given (subscription) values.
 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         /* Search the receiver list for the item to delete.  This should
 531          * exist, since no receiver may be unregistered that hasn't
 532          * been registered before.
 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         /* Check for bugs in CAN protocol implementations using af_can.c:
 541          * 'rcv' will be NULL if no matching list item was found for removal.
 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         /* schedule the receiver item for deletion */
 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                 /* check for error message frame entries only */
 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         /* check for unfiltered entries */
 595         hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_ALL], list) {
 596                 deliver(skb, rcv);
 597                 matches++;
 598         }
 599 
 600         /* check for can_id/mask entries */
 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         /* check for inverted can_id/mask entries */
 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         /* check filterlists for single non-RTR can_ids */
 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         /* update statistics */
 646         pkg_stats->rx_frames++;
 647         pkg_stats->rx_frames_delta++;
 648 
 649         /* create non-zero unique skb identifier together with *skb */
 650         while (!(can_skb_prv(skb)->skbcnt))
 651                 can_skb_prv(skb)->skbcnt = atomic_inc_return(&skbcounter);
 652 
 653         rcu_read_lock();
 654 
 655         /* deliver the packet to sockets listening on all devices */
 656         matches = can_rcv_filter(net->can.rx_alldev_list, skb);
 657 
 658         /* find receive list for this device */
 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         /* consume the skbuff allocated by the netdevice driver */
 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 /* af_can protocol functions */
 708 
 709 /**
 710  * can_proto_register - register CAN transport protocol
 711  * @cp: pointer to CAN protocol structure
 712  *
 713  * Return:
 714  *  0 on success
 715  *  -EINVAL invalid (out of range) protocol number
 716  *  -EBUSY  protocol already in use
 717  *  -ENOBUF if proto_register() fails
 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  * can_proto_unregister - unregister CAN transport protocol
 753  * @cp: pointer to CAN protocol structure
 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 /* af_can notifier to create/remove CAN netdevice specific structs */
 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                 /* the statistics are updated every second (timer triggered) */
 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 /* af_can module init/exit functions */
 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 /* notifier block for netdevice event */
 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         /* check for correct padding to be able to use the structs similarly */
 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         /* protocol register */
 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         /* protocol unregister */
 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(); /* Wait for completion of call_rcu()'s */
 921 
 922         kmem_cache_destroy(rcv_cache);
 923 }
 924 
 925 module_init(can_init);
 926 module_exit(can_exit);

/* [<][>][^][v][top][bottom][index][help] */