Lines Matching refs:ro
127 struct raw_sock *ro = raw_sk(sk); in raw_rcv() local
133 if (!ro->recv_own_msgs && oskb->sk == sk) in raw_rcv()
137 if ((!ro->fd_frames && can_is_canfd_skb(oskb)) || in raw_rcv()
138 (!ro->xl_frames && can_is_canxl_skb(oskb))) in raw_rcv()
142 if (this_cpu_ptr(ro->uniq)->skb == oskb && in raw_rcv()
143 this_cpu_ptr(ro->uniq)->skbcnt == can_skb_prv(oskb)->skbcnt) { in raw_rcv()
144 if (!ro->join_filters) in raw_rcv()
147 this_cpu_inc(ro->uniq->join_rx_count); in raw_rcv()
149 if (this_cpu_ptr(ro->uniq)->join_rx_count < ro->count) in raw_rcv()
152 this_cpu_ptr(ro->uniq)->skb = oskb; in raw_rcv()
153 this_cpu_ptr(ro->uniq)->skbcnt = can_skb_prv(oskb)->skbcnt; in raw_rcv()
154 this_cpu_ptr(ro->uniq)->join_rx_count = 1; in raw_rcv()
156 if (ro->join_filters && ro->count > 1) in raw_rcv()
251 struct raw_sock *ro = raw_sk(sk); in raw_disable_allfilters() local
253 raw_disable_filters(net, dev, sk, ro->filter, ro->count); in raw_disable_allfilters()
254 raw_disable_errfilter(net, dev, sk, ro->err_mask); in raw_disable_allfilters()
260 struct raw_sock *ro = raw_sk(sk); in raw_enable_allfilters() local
263 err = raw_enable_filters(net, dev, sk, ro->filter, ro->count); in raw_enable_allfilters()
265 err = raw_enable_errfilter(net, dev, sk, ro->err_mask); in raw_enable_allfilters()
267 raw_disable_filters(net, dev, sk, ro->filter, in raw_enable_allfilters()
268 ro->count); in raw_enable_allfilters()
274 static void raw_notify(struct raw_sock *ro, unsigned long msg, in raw_notify() argument
277 struct sock *sk = &ro->sk; in raw_notify()
282 if (ro->dev != dev) in raw_notify()
289 if (ro->bound) { in raw_notify()
291 netdev_put(dev, &ro->dev_tracker); in raw_notify()
294 if (ro->count > 1) in raw_notify()
295 kfree(ro->filter); in raw_notify()
297 ro->ifindex = 0; in raw_notify()
298 ro->bound = 0; in raw_notify()
299 ro->dev = NULL; in raw_notify()
300 ro->count = 0; in raw_notify()
341 struct raw_sock *ro = raw_sk(sk); in raw_init() local
343 ro->bound = 0; in raw_init()
344 ro->ifindex = 0; in raw_init()
345 ro->dev = NULL; in raw_init()
348 ro->dfilter.can_id = 0; in raw_init()
349 ro->dfilter.can_mask = MASK_ALL; in raw_init()
350 ro->filter = &ro->dfilter; in raw_init()
351 ro->count = 1; in raw_init()
354 ro->loopback = 1; in raw_init()
355 ro->recv_own_msgs = 0; in raw_init()
356 ro->fd_frames = 0; in raw_init()
357 ro->xl_frames = 0; in raw_init()
358 ro->join_filters = 0; in raw_init()
361 ro->uniq = alloc_percpu(struct uniqframe); in raw_init()
362 if (unlikely(!ro->uniq)) in raw_init()
367 list_add_tail(&ro->notifier, &raw_notifier_list); in raw_init()
376 struct raw_sock *ro; in raw_release() local
381 ro = raw_sk(sk); in raw_release()
384 while (raw_busy_notifier == ro) { in raw_release()
389 list_del(&ro->notifier); in raw_release()
396 if (ro->bound) { in raw_release()
397 if (ro->dev) { in raw_release()
398 raw_disable_allfilters(dev_net(ro->dev), ro->dev, sk); in raw_release()
399 netdev_put(ro->dev, &ro->dev_tracker); in raw_release()
405 if (ro->count > 1) in raw_release()
406 kfree(ro->filter); in raw_release()
408 ro->ifindex = 0; in raw_release()
409 ro->bound = 0; in raw_release()
410 ro->dev = NULL; in raw_release()
411 ro->count = 0; in raw_release()
412 free_percpu(ro->uniq); in raw_release()
429 struct raw_sock *ro = raw_sk(sk); in raw_bind() local
443 if (ro->bound && addr->can_ifindex == ro->ifindex) in raw_bind()
475 if (ro->bound) { in raw_bind()
477 if (ro->dev) { in raw_bind()
478 raw_disable_allfilters(dev_net(ro->dev), in raw_bind()
479 ro->dev, sk); in raw_bind()
481 netdev_put(ro->dev, &ro->dev_tracker); in raw_bind()
486 ro->ifindex = ifindex; in raw_bind()
487 ro->bound = 1; in raw_bind()
489 ro->dev = dev; in raw_bind()
490 if (ro->dev) in raw_bind()
491 netdev_hold(ro->dev, &ro->dev_tracker, GFP_KERNEL); in raw_bind()
516 struct raw_sock *ro = raw_sk(sk); in raw_getname() local
523 addr->can_ifindex = ro->ifindex; in raw_getname()
532 struct raw_sock *ro = raw_sk(sk); in raw_setsockopt() local
567 dev = ro->dev; in raw_setsockopt()
568 if (ro->bound && dev) { in raw_setsockopt()
577 if (ro->bound) { in raw_setsockopt()
592 raw_disable_filters(sock_net(sk), dev, sk, ro->filter, in raw_setsockopt()
593 ro->count); in raw_setsockopt()
597 if (ro->count > 1) in raw_setsockopt()
598 kfree(ro->filter); in raw_setsockopt()
603 ro->dfilter = sfilter; in raw_setsockopt()
604 filter = &ro->dfilter; in raw_setsockopt()
606 ro->filter = filter; in raw_setsockopt()
607 ro->count = count; in raw_setsockopt()
627 dev = ro->dev; in raw_setsockopt()
628 if (ro->bound && dev) { in raw_setsockopt()
636 if (ro->bound) { in raw_setsockopt()
646 ro->err_mask); in raw_setsockopt()
650 ro->err_mask = err_mask; in raw_setsockopt()
659 if (optlen != sizeof(ro->loopback)) in raw_setsockopt()
662 if (copy_from_sockptr(&ro->loopback, optval, optlen)) in raw_setsockopt()
668 if (optlen != sizeof(ro->recv_own_msgs)) in raw_setsockopt()
671 if (copy_from_sockptr(&ro->recv_own_msgs, optval, optlen)) in raw_setsockopt()
684 if (ro->xl_frames && !fd_frames) in raw_setsockopt()
687 ro->fd_frames = fd_frames; in raw_setsockopt()
691 if (optlen != sizeof(ro->xl_frames)) in raw_setsockopt()
694 if (copy_from_sockptr(&ro->xl_frames, optval, optlen)) in raw_setsockopt()
698 if (ro->xl_frames) in raw_setsockopt()
699 ro->fd_frames = ro->xl_frames; in raw_setsockopt()
703 if (optlen != sizeof(ro->join_filters)) in raw_setsockopt()
706 if (copy_from_sockptr(&ro->join_filters, optval, optlen)) in raw_setsockopt()
721 struct raw_sock *ro = raw_sk(sk); in raw_getsockopt() local
736 if (ro->count > 0) { in raw_getsockopt()
737 int fsize = ro->count * sizeof(struct can_filter); in raw_getsockopt()
748 if (copy_to_user(optval, ro->filter, len)) in raw_getsockopt()
763 val = &ro->err_mask; in raw_getsockopt()
769 val = &ro->loopback; in raw_getsockopt()
775 val = &ro->recv_own_msgs; in raw_getsockopt()
781 val = &ro->fd_frames; in raw_getsockopt()
787 val = &ro->xl_frames; in raw_getsockopt()
793 val = &ro->join_filters; in raw_getsockopt()
807 static bool raw_bad_txframe(struct raw_sock *ro, struct sk_buff *skb, int mtu) in raw_bad_txframe() argument
814 if (ro->fd_frames && can_is_canfd_skb(skb) && in raw_bad_txframe()
819 if (ro->xl_frames && can_is_canxl_skb(skb) && in raw_bad_txframe()
829 struct raw_sock *ro = raw_sk(sk); in raw_sendmsg() local
851 ifindex = ro->ifindex; in raw_sendmsg()
873 if (raw_bad_txframe(ro, skb, dev->mtu)) in raw_sendmsg()
890 err = can_send(skb, ro->loopback); in raw_sendmsg()