Lines Matching refs:ro
125 struct raw_sock *ro = raw_sk(sk); in raw_rcv() local
131 if (!ro->recv_own_msgs && oskb->sk == sk) in raw_rcv()
135 if ((!ro->fd_frames && can_is_canfd_skb(oskb)) || in raw_rcv()
136 (!ro->xl_frames && can_is_canxl_skb(oskb))) in raw_rcv()
140 if (this_cpu_ptr(ro->uniq)->skb == oskb && in raw_rcv()
141 this_cpu_ptr(ro->uniq)->skbcnt == can_skb_prv(oskb)->skbcnt) { in raw_rcv()
142 if (!ro->join_filters) in raw_rcv()
145 this_cpu_inc(ro->uniq->join_rx_count); in raw_rcv()
147 if (this_cpu_ptr(ro->uniq)->join_rx_count < ro->count) in raw_rcv()
150 this_cpu_ptr(ro->uniq)->skb = oskb; in raw_rcv()
151 this_cpu_ptr(ro->uniq)->skbcnt = can_skb_prv(oskb)->skbcnt; in raw_rcv()
152 this_cpu_ptr(ro->uniq)->join_rx_count = 1; in raw_rcv()
154 if (ro->join_filters && ro->count > 1) in raw_rcv()
249 struct raw_sock *ro = raw_sk(sk); in raw_disable_allfilters() local
251 raw_disable_filters(net, dev, sk, ro->filter, ro->count); in raw_disable_allfilters()
252 raw_disable_errfilter(net, dev, sk, ro->err_mask); in raw_disable_allfilters()
258 struct raw_sock *ro = raw_sk(sk); in raw_enable_allfilters() local
261 err = raw_enable_filters(net, dev, sk, ro->filter, ro->count); in raw_enable_allfilters()
263 err = raw_enable_errfilter(net, dev, sk, ro->err_mask); in raw_enable_allfilters()
265 raw_disable_filters(net, dev, sk, ro->filter, in raw_enable_allfilters()
266 ro->count); in raw_enable_allfilters()
272 static void raw_notify(struct raw_sock *ro, unsigned long msg, in raw_notify() argument
275 struct sock *sk = &ro->sk; in raw_notify()
280 if (ro->ifindex != dev->ifindex) in raw_notify()
287 if (ro->bound) in raw_notify()
290 if (ro->count > 1) in raw_notify()
291 kfree(ro->filter); in raw_notify()
293 ro->ifindex = 0; in raw_notify()
294 ro->bound = 0; in raw_notify()
295 ro->count = 0; in raw_notify()
336 struct raw_sock *ro = raw_sk(sk); in raw_init() local
338 ro->bound = 0; in raw_init()
339 ro->ifindex = 0; in raw_init()
342 ro->dfilter.can_id = 0; in raw_init()
343 ro->dfilter.can_mask = MASK_ALL; in raw_init()
344 ro->filter = &ro->dfilter; in raw_init()
345 ro->count = 1; in raw_init()
348 ro->loopback = 1; in raw_init()
349 ro->recv_own_msgs = 0; in raw_init()
350 ro->fd_frames = 0; in raw_init()
351 ro->xl_frames = 0; in raw_init()
352 ro->join_filters = 0; in raw_init()
355 ro->uniq = alloc_percpu(struct uniqframe); in raw_init()
356 if (unlikely(!ro->uniq)) in raw_init()
361 list_add_tail(&ro->notifier, &raw_notifier_list); in raw_init()
370 struct raw_sock *ro; in raw_release() local
375 ro = raw_sk(sk); in raw_release()
378 while (raw_busy_notifier == ro) { in raw_release()
383 list_del(&ro->notifier); in raw_release()
389 if (ro->bound) { in raw_release()
390 if (ro->ifindex) { in raw_release()
393 dev = dev_get_by_index(sock_net(sk), ro->ifindex); in raw_release()
403 if (ro->count > 1) in raw_release()
404 kfree(ro->filter); in raw_release()
406 ro->ifindex = 0; in raw_release()
407 ro->bound = 0; in raw_release()
408 ro->count = 0; in raw_release()
409 free_percpu(ro->uniq); in raw_release()
424 struct raw_sock *ro = raw_sk(sk); in raw_bind() local
436 if (ro->bound && addr->can_ifindex == ro->ifindex) in raw_bind()
468 if (ro->bound) { in raw_bind()
470 if (ro->ifindex) { in raw_bind()
474 ro->ifindex); in raw_bind()
484 ro->ifindex = ifindex; in raw_bind()
485 ro->bound = 1; in raw_bind()
505 struct raw_sock *ro = raw_sk(sk); in raw_getname() local
512 addr->can_ifindex = ro->ifindex; in raw_getname()
521 struct raw_sock *ro = raw_sk(sk); in raw_setsockopt() local
556 if (ro->bound && ro->ifindex) { in raw_setsockopt()
557 dev = dev_get_by_index(sock_net(sk), ro->ifindex); in raw_setsockopt()
566 if (ro->bound) { in raw_setsockopt()
581 raw_disable_filters(sock_net(sk), dev, sk, ro->filter, in raw_setsockopt()
582 ro->count); in raw_setsockopt()
586 if (ro->count > 1) in raw_setsockopt()
587 kfree(ro->filter); in raw_setsockopt()
592 ro->dfilter = sfilter; in raw_setsockopt()
593 filter = &ro->dfilter; in raw_setsockopt()
595 ro->filter = filter; in raw_setsockopt()
596 ro->count = count; in raw_setsockopt()
617 if (ro->bound && ro->ifindex) { in raw_setsockopt()
618 dev = dev_get_by_index(sock_net(sk), ro->ifindex); in raw_setsockopt()
626 if (ro->bound) { in raw_setsockopt()
636 ro->err_mask); in raw_setsockopt()
640 ro->err_mask = err_mask; in raw_setsockopt()
650 if (optlen != sizeof(ro->loopback)) in raw_setsockopt()
653 if (copy_from_sockptr(&ro->loopback, optval, optlen)) in raw_setsockopt()
659 if (optlen != sizeof(ro->recv_own_msgs)) in raw_setsockopt()
662 if (copy_from_sockptr(&ro->recv_own_msgs, optval, optlen)) in raw_setsockopt()
675 if (ro->xl_frames && !fd_frames) in raw_setsockopt()
678 ro->fd_frames = fd_frames; in raw_setsockopt()
682 if (optlen != sizeof(ro->xl_frames)) in raw_setsockopt()
685 if (copy_from_sockptr(&ro->xl_frames, optval, optlen)) in raw_setsockopt()
689 if (ro->xl_frames) in raw_setsockopt()
690 ro->fd_frames = ro->xl_frames; in raw_setsockopt()
694 if (optlen != sizeof(ro->join_filters)) in raw_setsockopt()
697 if (copy_from_sockptr(&ro->join_filters, optval, optlen)) in raw_setsockopt()
712 struct raw_sock *ro = raw_sk(sk); in raw_getsockopt() local
727 if (ro->count > 0) { in raw_getsockopt()
728 int fsize = ro->count * sizeof(struct can_filter); in raw_getsockopt()
739 if (copy_to_user(optval, ro->filter, len)) in raw_getsockopt()
754 val = &ro->err_mask; in raw_getsockopt()
760 val = &ro->loopback; in raw_getsockopt()
766 val = &ro->recv_own_msgs; in raw_getsockopt()
772 val = &ro->fd_frames; in raw_getsockopt()
778 val = &ro->xl_frames; in raw_getsockopt()
784 val = &ro->join_filters; in raw_getsockopt()
798 static bool raw_bad_txframe(struct raw_sock *ro, struct sk_buff *skb, int mtu) in raw_bad_txframe() argument
805 if (ro->fd_frames && can_is_canfd_skb(skb) && in raw_bad_txframe()
810 if (ro->xl_frames && can_is_canxl_skb(skb) && in raw_bad_txframe()
820 struct raw_sock *ro = raw_sk(sk); in raw_sendmsg() local
842 ifindex = ro->ifindex; in raw_sendmsg()
864 if (raw_bad_txframe(ro, skb, dev->mtu)) in raw_sendmsg()
881 err = can_send(skb, ro->loopback); in raw_sendmsg()