43 #include <linux/module.h>
44 #include <linux/stddef.h>
47 #include <linux/slab.h>
48 #include <linux/list.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>
100 struct sock *
sk = sock->
sk;
113 static void can_sock_destruct(
struct sock *
sk)
124 if (cp && !try_module_get(cp->
prot->owner))
131 static inline void can_put_proto(
const struct can_proto *cp)
133 module_put(cp->
prot->owner);
151 cp = can_get_proto(protocol);
153 #ifdef CONFIG_MODULES
157 err = request_module(
"can-proto-%d", protocol);
166 "(can-proto-%d) failed.\n", protocol);
168 cp = can_get_proto(protocol);
193 if (sk->sk_prot->init)
194 err = sk->sk_prot->init(sk);
264 skb_reset_network_header(skb);
265 skb_reset_transport_header(skb);
293 newskb->
sk = skb->
sk;
380 #define CAN_EFF_RTR_FLAGS (CAN_EFF_FLAG | CAN_RTR_FLAG)
383 if ((*mask &
CAN_EFF_FLAG) && !(*can_id & CAN_EFF_FLAG))
398 if (((*mask & CAN_EFF_RTR_FLAGS) == CAN_EFF_RTR_FLAGS) &&
401 if (*can_id & CAN_EFF_FLAG) {
408 return &d->
rx_sff[*can_id];
463 spin_lock(&can_rcvlists_lock);
465 d = find_dev_rcv_lists(dev);
467 rl = find_rcv_list(&can_id, &mask, d);
476 hlist_add_head_rcu(&r->
list, rl);
487 spin_unlock(&can_rcvlists_lock);
496 static void can_rx_delete_receiver(
struct rcu_head *
rp)
525 spin_lock(&can_rcvlists_lock);
527 d = find_dev_rcv_lists(dev);
530 "dev %s, id %03X, mask %03X\n",
531 DNAME(dev), can_id, mask);
535 rl = find_rcv_list(&can_id, &mask, d);
543 hlist_for_each_entry_rcu(r, next, rl,
list) {
557 "dev %s, id %03X, mask %03X\n",
558 DNAME(dev), can_id, mask);
563 hlist_del_rcu(&r->
list);
576 spin_unlock(&can_rcvlists_lock);
601 if (can_id & CAN_ERR_FLAG) {
604 if (can_id & r->
mask) {
638 if (can_id & CAN_EFF_FLAG) {
640 if (r->
can_id == can_id) {
647 hlist_for_each_entry_rcu(r, n, &d->
rx_sff[can_id],
list) {
671 d = find_dev_rcv_lists(dev);
673 matches += can_rcv_filter(d, skb);
697 "PF_CAN: dropped non conform CAN skbuf: "
698 "dev type %d, len %d, datalen %d\n",
702 can_receive(skb, dev);
721 "PF_CAN: dropped non conform CAN FD skbuf: "
722 "dev type %d, len %d, datalen %d\n",
726 can_receive(skb, dev);
765 if (proto_tab[proto]) {
790 BUG_ON(proto_tab[proto] != cp);
809 if (!net_eq(dev_net(dev), &
init_net))
823 "can: allocation of receive list failed\n");
832 spin_lock(&can_rcvlists_lock);
844 "found for dev %s\n", dev->
name);
846 spin_unlock(&can_rcvlists_lock);
863 static struct packet_type canfd_packet __read_mostly = {
870 .create = can_create,
875 static struct notifier_block can_netdev_notifier __read_mostly = {
876 .notifier_call = can_notifier,
879 static __init int can_init(
void)
914 static __exit void can_exit(
void)