raw.c revision e2d265d3b587f5f6f8febc0222aace93302ff0be
1/*
2 * raw.c - Raw sockets for protocol family CAN
3 *
4 * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 *    notice, this list of conditions and the following disclaimer in the
14 *    documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of Volkswagen nor the names of its contributors
16 *    may be used to endorse or promote products derived from this software
17 *    without specific prior written permission.
18 *
19 * Alternatively, provided that this notice is retained in full, this
20 * software may be distributed under the terms of the GNU General
21 * Public License ("GPL") version 2, in which case the provisions of the
22 * GPL apply INSTEAD OF those given above.
23 *
24 * The provided data structures and external interfaces from this code
25 * are not restricted to be used by modules with a GPL compatible license.
26 *
27 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
38 * DAMAGE.
39 *
40 */
41
42#include <linux/module.h>
43#include <linux/init.h>
44#include <linux/uio.h>
45#include <linux/net.h>
46#include <linux/slab.h>
47#include <linux/netdevice.h>
48#include <linux/socket.h>
49#include <linux/if_arp.h>
50#include <linux/skbuff.h>
51#include <linux/can.h>
52#include <linux/can/core.h>
53#include <linux/can/raw.h>
54#include <net/sock.h>
55#include <net/net_namespace.h>
56
57#define CAN_RAW_VERSION CAN_VERSION
58static __initdata const char banner[] =
59	KERN_INFO "can: raw protocol (rev " CAN_RAW_VERSION ")\n";
60
61MODULE_DESCRIPTION("PF_CAN raw protocol");
62MODULE_LICENSE("Dual BSD/GPL");
63MODULE_AUTHOR("Urs Thuermann <urs.thuermann@volkswagen.de>");
64MODULE_ALIAS("can-proto-1");
65
66#define MASK_ALL 0
67
68/*
69 * A raw socket has a list of can_filters attached to it, each receiving
70 * the CAN frames matching that filter.  If the filter list is empty,
71 * no CAN frames will be received by the socket.  The default after
72 * opening the socket, is to have one filter which receives all frames.
73 * The filter list is allocated dynamically with the exception of the
74 * list containing only one item.  This common case is optimized by
75 * storing the single filter in dfilter, to avoid using dynamic memory.
76 */
77
78struct raw_sock {
79	struct sock sk;
80	int bound;
81	int ifindex;
82	struct notifier_block notifier;
83	int loopback;
84	int recv_own_msgs;
85	int fd_frames;
86	int count;                 /* number of active filters */
87	struct can_filter dfilter; /* default/single filter */
88	struct can_filter *filter; /* pointer to filter(s) */
89	can_err_mask_t err_mask;
90};
91
92/*
93 * Return pointer to store the extra msg flags for raw_recvmsg().
94 * We use the space of one unsigned int beyond the 'struct sockaddr_can'
95 * in skb->cb.
96 */
97static inline unsigned int *raw_flags(struct sk_buff *skb)
98{
99	BUILD_BUG_ON(sizeof(skb->cb) <= (sizeof(struct sockaddr_can) +
100					 sizeof(unsigned int)));
101
102	/* return pointer after struct sockaddr_can */
103	return (unsigned int *)(&((struct sockaddr_can *)skb->cb)[1]);
104}
105
106static inline struct raw_sock *raw_sk(const struct sock *sk)
107{
108	return (struct raw_sock *)sk;
109}
110
111static void raw_rcv(struct sk_buff *oskb, void *data)
112{
113	struct sock *sk = (struct sock *)data;
114	struct raw_sock *ro = raw_sk(sk);
115	struct sockaddr_can *addr;
116	struct sk_buff *skb;
117	unsigned int *pflags;
118
119	/* check the received tx sock reference */
120	if (!ro->recv_own_msgs && oskb->sk == sk)
121		return;
122
123	/* do not pass frames with DLC > 8 to a legacy socket */
124	if (!ro->fd_frames) {
125		struct canfd_frame *cfd = (struct canfd_frame *)oskb->data;
126
127		if (unlikely(cfd->len > CAN_MAX_DLEN))
128			return;
129	}
130
131	/* clone the given skb to be able to enqueue it into the rcv queue */
132	skb = skb_clone(oskb, GFP_ATOMIC);
133	if (!skb)
134		return;
135
136	/*
137	 *  Put the datagram to the queue so that raw_recvmsg() can
138	 *  get it from there.  We need to pass the interface index to
139	 *  raw_recvmsg().  We pass a whole struct sockaddr_can in skb->cb
140	 *  containing the interface index.
141	 */
142
143	BUILD_BUG_ON(sizeof(skb->cb) < sizeof(struct sockaddr_can));
144	addr = (struct sockaddr_can *)skb->cb;
145	memset(addr, 0, sizeof(*addr));
146	addr->can_family  = AF_CAN;
147	addr->can_ifindex = skb->dev->ifindex;
148
149	/* add CAN specific message flags for raw_recvmsg() */
150	pflags = raw_flags(skb);
151	*pflags = 0;
152	if (oskb->sk)
153		*pflags |= MSG_DONTROUTE;
154	if (oskb->sk == sk)
155		*pflags |= MSG_CONFIRM;
156
157	if (sock_queue_rcv_skb(sk, skb) < 0)
158		kfree_skb(skb);
159}
160
161static int raw_enable_filters(struct net_device *dev, struct sock *sk,
162			      struct can_filter *filter, int count)
163{
164	int err = 0;
165	int i;
166
167	for (i = 0; i < count; i++) {
168		err = can_rx_register(dev, filter[i].can_id,
169				      filter[i].can_mask,
170				      raw_rcv, sk, "raw");
171		if (err) {
172			/* clean up successfully registered filters */
173			while (--i >= 0)
174				can_rx_unregister(dev, filter[i].can_id,
175						  filter[i].can_mask,
176						  raw_rcv, sk);
177			break;
178		}
179	}
180
181	return err;
182}
183
184static int raw_enable_errfilter(struct net_device *dev, struct sock *sk,
185				can_err_mask_t err_mask)
186{
187	int err = 0;
188
189	if (err_mask)
190		err = can_rx_register(dev, 0, err_mask | CAN_ERR_FLAG,
191				      raw_rcv, sk, "raw");
192
193	return err;
194}
195
196static void raw_disable_filters(struct net_device *dev, struct sock *sk,
197			      struct can_filter *filter, int count)
198{
199	int i;
200
201	for (i = 0; i < count; i++)
202		can_rx_unregister(dev, filter[i].can_id, filter[i].can_mask,
203				  raw_rcv, sk);
204}
205
206static inline void raw_disable_errfilter(struct net_device *dev,
207					 struct sock *sk,
208					 can_err_mask_t err_mask)
209
210{
211	if (err_mask)
212		can_rx_unregister(dev, 0, err_mask | CAN_ERR_FLAG,
213				  raw_rcv, sk);
214}
215
216static inline void raw_disable_allfilters(struct net_device *dev,
217					  struct sock *sk)
218{
219	struct raw_sock *ro = raw_sk(sk);
220
221	raw_disable_filters(dev, sk, ro->filter, ro->count);
222	raw_disable_errfilter(dev, sk, ro->err_mask);
223}
224
225static int raw_enable_allfilters(struct net_device *dev, struct sock *sk)
226{
227	struct raw_sock *ro = raw_sk(sk);
228	int err;
229
230	err = raw_enable_filters(dev, sk, ro->filter, ro->count);
231	if (!err) {
232		err = raw_enable_errfilter(dev, sk, ro->err_mask);
233		if (err)
234			raw_disable_filters(dev, sk, ro->filter, ro->count);
235	}
236
237	return err;
238}
239
240static int raw_notifier(struct notifier_block *nb,
241			unsigned long msg, void *data)
242{
243	struct net_device *dev = (struct net_device *)data;
244	struct raw_sock *ro = container_of(nb, struct raw_sock, notifier);
245	struct sock *sk = &ro->sk;
246
247	if (!net_eq(dev_net(dev), &init_net))
248		return NOTIFY_DONE;
249
250	if (dev->type != ARPHRD_CAN)
251		return NOTIFY_DONE;
252
253	if (ro->ifindex != dev->ifindex)
254		return NOTIFY_DONE;
255
256	switch (msg) {
257
258	case NETDEV_UNREGISTER:
259		lock_sock(sk);
260		/* remove current filters & unregister */
261		if (ro->bound)
262			raw_disable_allfilters(dev, sk);
263
264		if (ro->count > 1)
265			kfree(ro->filter);
266
267		ro->ifindex = 0;
268		ro->bound   = 0;
269		ro->count   = 0;
270		release_sock(sk);
271
272		sk->sk_err = ENODEV;
273		if (!sock_flag(sk, SOCK_DEAD))
274			sk->sk_error_report(sk);
275		break;
276
277	case NETDEV_DOWN:
278		sk->sk_err = ENETDOWN;
279		if (!sock_flag(sk, SOCK_DEAD))
280			sk->sk_error_report(sk);
281		break;
282	}
283
284	return NOTIFY_DONE;
285}
286
287static int raw_init(struct sock *sk)
288{
289	struct raw_sock *ro = raw_sk(sk);
290
291	ro->bound            = 0;
292	ro->ifindex          = 0;
293
294	/* set default filter to single entry dfilter */
295	ro->dfilter.can_id   = 0;
296	ro->dfilter.can_mask = MASK_ALL;
297	ro->filter           = &ro->dfilter;
298	ro->count            = 1;
299
300	/* set default loopback behaviour */
301	ro->loopback         = 1;
302	ro->recv_own_msgs    = 0;
303	ro->fd_frames        = 0;
304
305	/* set notifier */
306	ro->notifier.notifier_call = raw_notifier;
307
308	register_netdevice_notifier(&ro->notifier);
309
310	return 0;
311}
312
313static int raw_release(struct socket *sock)
314{
315	struct sock *sk = sock->sk;
316	struct raw_sock *ro;
317
318	if (!sk)
319		return 0;
320
321	ro = raw_sk(sk);
322
323	unregister_netdevice_notifier(&ro->notifier);
324
325	lock_sock(sk);
326
327	/* remove current filters & unregister */
328	if (ro->bound) {
329		if (ro->ifindex) {
330			struct net_device *dev;
331
332			dev = dev_get_by_index(&init_net, ro->ifindex);
333			if (dev) {
334				raw_disable_allfilters(dev, sk);
335				dev_put(dev);
336			}
337		} else
338			raw_disable_allfilters(NULL, sk);
339	}
340
341	if (ro->count > 1)
342		kfree(ro->filter);
343
344	ro->ifindex = 0;
345	ro->bound   = 0;
346	ro->count   = 0;
347
348	sock_orphan(sk);
349	sock->sk = NULL;
350
351	release_sock(sk);
352	sock_put(sk);
353
354	return 0;
355}
356
357static int raw_bind(struct socket *sock, struct sockaddr *uaddr, int len)
358{
359	struct sockaddr_can *addr = (struct sockaddr_can *)uaddr;
360	struct sock *sk = sock->sk;
361	struct raw_sock *ro = raw_sk(sk);
362	int ifindex;
363	int err = 0;
364	int notify_enetdown = 0;
365
366	if (len < sizeof(*addr))
367		return -EINVAL;
368
369	lock_sock(sk);
370
371	if (ro->bound && addr->can_ifindex == ro->ifindex)
372		goto out;
373
374	if (addr->can_ifindex) {
375		struct net_device *dev;
376
377		dev = dev_get_by_index(&init_net, addr->can_ifindex);
378		if (!dev) {
379			err = -ENODEV;
380			goto out;
381		}
382		if (dev->type != ARPHRD_CAN) {
383			dev_put(dev);
384			err = -ENODEV;
385			goto out;
386		}
387		if (!(dev->flags & IFF_UP))
388			notify_enetdown = 1;
389
390		ifindex = dev->ifindex;
391
392		/* filters set by default/setsockopt */
393		err = raw_enable_allfilters(dev, sk);
394		dev_put(dev);
395	} else {
396		ifindex = 0;
397
398		/* filters set by default/setsockopt */
399		err = raw_enable_allfilters(NULL, sk);
400	}
401
402	if (!err) {
403		if (ro->bound) {
404			/* unregister old filters */
405			if (ro->ifindex) {
406				struct net_device *dev;
407
408				dev = dev_get_by_index(&init_net, ro->ifindex);
409				if (dev) {
410					raw_disable_allfilters(dev, sk);
411					dev_put(dev);
412				}
413			} else
414				raw_disable_allfilters(NULL, sk);
415		}
416		ro->ifindex = ifindex;
417		ro->bound = 1;
418	}
419
420 out:
421	release_sock(sk);
422
423	if (notify_enetdown) {
424		sk->sk_err = ENETDOWN;
425		if (!sock_flag(sk, SOCK_DEAD))
426			sk->sk_error_report(sk);
427	}
428
429	return err;
430}
431
432static int raw_getname(struct socket *sock, struct sockaddr *uaddr,
433		       int *len, int peer)
434{
435	struct sockaddr_can *addr = (struct sockaddr_can *)uaddr;
436	struct sock *sk = sock->sk;
437	struct raw_sock *ro = raw_sk(sk);
438
439	if (peer)
440		return -EOPNOTSUPP;
441
442	memset(addr, 0, sizeof(*addr));
443	addr->can_family  = AF_CAN;
444	addr->can_ifindex = ro->ifindex;
445
446	*len = sizeof(*addr);
447
448	return 0;
449}
450
451static int raw_setsockopt(struct socket *sock, int level, int optname,
452			  char __user *optval, unsigned int optlen)
453{
454	struct sock *sk = sock->sk;
455	struct raw_sock *ro = raw_sk(sk);
456	struct can_filter *filter = NULL;  /* dyn. alloc'ed filters */
457	struct can_filter sfilter;         /* single filter */
458	struct net_device *dev = NULL;
459	can_err_mask_t err_mask = 0;
460	int count = 0;
461	int err = 0;
462
463	if (level != SOL_CAN_RAW)
464		return -EINVAL;
465
466	switch (optname) {
467
468	case CAN_RAW_FILTER:
469		if (optlen % sizeof(struct can_filter) != 0)
470			return -EINVAL;
471
472		count = optlen / sizeof(struct can_filter);
473
474		if (count > 1) {
475			/* filter does not fit into dfilter => alloc space */
476			filter = memdup_user(optval, optlen);
477			if (IS_ERR(filter))
478				return PTR_ERR(filter);
479		} else if (count == 1) {
480			if (copy_from_user(&sfilter, optval, sizeof(sfilter)))
481				return -EFAULT;
482		}
483
484		lock_sock(sk);
485
486		if (ro->bound && ro->ifindex)
487			dev = dev_get_by_index(&init_net, ro->ifindex);
488
489		if (ro->bound) {
490			/* (try to) register the new filters */
491			if (count == 1)
492				err = raw_enable_filters(dev, sk, &sfilter, 1);
493			else
494				err = raw_enable_filters(dev, sk, filter,
495							 count);
496			if (err) {
497				if (count > 1)
498					kfree(filter);
499				goto out_fil;
500			}
501
502			/* remove old filter registrations */
503			raw_disable_filters(dev, sk, ro->filter, ro->count);
504		}
505
506		/* remove old filter space */
507		if (ro->count > 1)
508			kfree(ro->filter);
509
510		/* link new filters to the socket */
511		if (count == 1) {
512			/* copy filter data for single filter */
513			ro->dfilter = sfilter;
514			filter = &ro->dfilter;
515		}
516		ro->filter = filter;
517		ro->count  = count;
518
519 out_fil:
520		if (dev)
521			dev_put(dev);
522
523		release_sock(sk);
524
525		break;
526
527	case CAN_RAW_ERR_FILTER:
528		if (optlen != sizeof(err_mask))
529			return -EINVAL;
530
531		if (copy_from_user(&err_mask, optval, optlen))
532			return -EFAULT;
533
534		err_mask &= CAN_ERR_MASK;
535
536		lock_sock(sk);
537
538		if (ro->bound && ro->ifindex)
539			dev = dev_get_by_index(&init_net, ro->ifindex);
540
541		/* remove current error mask */
542		if (ro->bound) {
543			/* (try to) register the new err_mask */
544			err = raw_enable_errfilter(dev, sk, err_mask);
545
546			if (err)
547				goto out_err;
548
549			/* remove old err_mask registration */
550			raw_disable_errfilter(dev, sk, ro->err_mask);
551		}
552
553		/* link new err_mask to the socket */
554		ro->err_mask = err_mask;
555
556 out_err:
557		if (dev)
558			dev_put(dev);
559
560		release_sock(sk);
561
562		break;
563
564	case CAN_RAW_LOOPBACK:
565		if (optlen != sizeof(ro->loopback))
566			return -EINVAL;
567
568		if (copy_from_user(&ro->loopback, optval, optlen))
569			return -EFAULT;
570
571		break;
572
573	case CAN_RAW_RECV_OWN_MSGS:
574		if (optlen != sizeof(ro->recv_own_msgs))
575			return -EINVAL;
576
577		if (copy_from_user(&ro->recv_own_msgs, optval, optlen))
578			return -EFAULT;
579
580		break;
581
582	case CAN_RAW_FD_FRAMES:
583		if (optlen != sizeof(ro->fd_frames))
584			return -EINVAL;
585
586		if (copy_from_user(&ro->fd_frames, optval, optlen))
587			return -EFAULT;
588
589		break;
590
591	default:
592		return -ENOPROTOOPT;
593	}
594	return err;
595}
596
597static int raw_getsockopt(struct socket *sock, int level, int optname,
598			  char __user *optval, int __user *optlen)
599{
600	struct sock *sk = sock->sk;
601	struct raw_sock *ro = raw_sk(sk);
602	int len;
603	void *val;
604	int err = 0;
605
606	if (level != SOL_CAN_RAW)
607		return -EINVAL;
608	if (get_user(len, optlen))
609		return -EFAULT;
610	if (len < 0)
611		return -EINVAL;
612
613	switch (optname) {
614
615	case CAN_RAW_FILTER:
616		lock_sock(sk);
617		if (ro->count > 0) {
618			int fsize = ro->count * sizeof(struct can_filter);
619			if (len > fsize)
620				len = fsize;
621			if (copy_to_user(optval, ro->filter, len))
622				err = -EFAULT;
623		} else
624			len = 0;
625		release_sock(sk);
626
627		if (!err)
628			err = put_user(len, optlen);
629		return err;
630
631	case CAN_RAW_ERR_FILTER:
632		if (len > sizeof(can_err_mask_t))
633			len = sizeof(can_err_mask_t);
634		val = &ro->err_mask;
635		break;
636
637	case CAN_RAW_LOOPBACK:
638		if (len > sizeof(int))
639			len = sizeof(int);
640		val = &ro->loopback;
641		break;
642
643	case CAN_RAW_RECV_OWN_MSGS:
644		if (len > sizeof(int))
645			len = sizeof(int);
646		val = &ro->recv_own_msgs;
647		break;
648
649	case CAN_RAW_FD_FRAMES:
650		if (len > sizeof(int))
651			len = sizeof(int);
652		val = &ro->fd_frames;
653		break;
654
655	default:
656		return -ENOPROTOOPT;
657	}
658
659	if (put_user(len, optlen))
660		return -EFAULT;
661	if (copy_to_user(optval, val, len))
662		return -EFAULT;
663	return 0;
664}
665
666static int raw_sendmsg(struct kiocb *iocb, struct socket *sock,
667		       struct msghdr *msg, size_t size)
668{
669	struct sock *sk = sock->sk;
670	struct raw_sock *ro = raw_sk(sk);
671	struct sk_buff *skb;
672	struct net_device *dev;
673	int ifindex;
674	int err;
675
676	if (msg->msg_name) {
677		struct sockaddr_can *addr =
678			(struct sockaddr_can *)msg->msg_name;
679
680		if (msg->msg_namelen < sizeof(*addr))
681			return -EINVAL;
682
683		if (addr->can_family != AF_CAN)
684			return -EINVAL;
685
686		ifindex = addr->can_ifindex;
687	} else
688		ifindex = ro->ifindex;
689
690	if (ro->fd_frames) {
691		if (unlikely(size != CANFD_MTU && size != CAN_MTU))
692			return -EINVAL;
693	} else {
694		if (unlikely(size != CAN_MTU))
695			return -EINVAL;
696	}
697
698	dev = dev_get_by_index(&init_net, ifindex);
699	if (!dev)
700		return -ENXIO;
701
702	skb = sock_alloc_send_skb(sk, size, msg->msg_flags & MSG_DONTWAIT,
703				  &err);
704	if (!skb)
705		goto put_dev;
706
707	err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size);
708	if (err < 0)
709		goto free_skb;
710	err = sock_tx_timestamp(sk, &skb_shinfo(skb)->tx_flags);
711	if (err < 0)
712		goto free_skb;
713
714	skb->dev = dev;
715	skb->sk  = sk;
716
717	err = can_send(skb, ro->loopback);
718
719	dev_put(dev);
720
721	if (err)
722		goto send_failed;
723
724	return size;
725
726free_skb:
727	kfree_skb(skb);
728put_dev:
729	dev_put(dev);
730send_failed:
731	return err;
732}
733
734static int raw_recvmsg(struct kiocb *iocb, struct socket *sock,
735		       struct msghdr *msg, size_t size, int flags)
736{
737	struct sock *sk = sock->sk;
738	struct raw_sock *ro = raw_sk(sk);
739	struct sk_buff *skb;
740	int rxmtu;
741	int err = 0;
742	int noblock;
743
744	noblock =  flags & MSG_DONTWAIT;
745	flags   &= ~MSG_DONTWAIT;
746
747	skb = skb_recv_datagram(sk, flags, noblock, &err);
748	if (!skb)
749		return err;
750
751	/*
752	 * when serving a legacy socket the DLC <= 8 is already checked inside
753	 * raw_rcv(). Now check if we need to pass a canfd_frame to a legacy
754	 * socket and cut the possible CANFD_MTU/CAN_MTU length to CAN_MTU
755	 */
756	if (!ro->fd_frames)
757		rxmtu = CAN_MTU;
758	else
759		rxmtu = skb->len;
760
761	if (size < rxmtu)
762		msg->msg_flags |= MSG_TRUNC;
763	else
764		size = rxmtu;
765
766	err = memcpy_toiovec(msg->msg_iov, skb->data, size);
767	if (err < 0) {
768		skb_free_datagram(sk, skb);
769		return err;
770	}
771
772	sock_recv_ts_and_drops(msg, sk, skb);
773
774	if (msg->msg_name) {
775		msg->msg_namelen = sizeof(struct sockaddr_can);
776		memcpy(msg->msg_name, skb->cb, msg->msg_namelen);
777	}
778
779	/* assign the flags that have been recorded in raw_rcv() */
780	msg->msg_flags |= *(raw_flags(skb));
781
782	skb_free_datagram(sk, skb);
783
784	return size;
785}
786
787static const struct proto_ops raw_ops = {
788	.family        = PF_CAN,
789	.release       = raw_release,
790	.bind          = raw_bind,
791	.connect       = sock_no_connect,
792	.socketpair    = sock_no_socketpair,
793	.accept        = sock_no_accept,
794	.getname       = raw_getname,
795	.poll          = datagram_poll,
796	.ioctl         = can_ioctl,	/* use can_ioctl() from af_can.c */
797	.listen        = sock_no_listen,
798	.shutdown      = sock_no_shutdown,
799	.setsockopt    = raw_setsockopt,
800	.getsockopt    = raw_getsockopt,
801	.sendmsg       = raw_sendmsg,
802	.recvmsg       = raw_recvmsg,
803	.mmap          = sock_no_mmap,
804	.sendpage      = sock_no_sendpage,
805};
806
807static struct proto raw_proto __read_mostly = {
808	.name       = "CAN_RAW",
809	.owner      = THIS_MODULE,
810	.obj_size   = sizeof(struct raw_sock),
811	.init       = raw_init,
812};
813
814static const struct can_proto raw_can_proto = {
815	.type       = SOCK_RAW,
816	.protocol   = CAN_RAW,
817	.ops        = &raw_ops,
818	.prot       = &raw_proto,
819};
820
821static __init int raw_module_init(void)
822{
823	int err;
824
825	printk(banner);
826
827	err = can_proto_register(&raw_can_proto);
828	if (err < 0)
829		printk(KERN_ERR "can: registration of raw protocol failed\n");
830
831	return err;
832}
833
834static __exit void raw_module_exit(void)
835{
836	can_proto_unregister(&raw_can_proto);
837}
838
839module_init(raw_module_init);
840module_exit(raw_module_exit);
841