Lines Matching refs:ro
131 struct raw_sock *ro = raw_sk(sk); in raw_rcv() local
138 if (!ro->recv_own_msgs && oskb->sk == sk) in raw_rcv()
142 if (!ro->fd_frames && can_is_canfd_skb(oskb)) in raw_rcv()
149 if (!ro->xl_frames) in raw_rcv()
153 if (ro->raw_vcid_opts.flags & CAN_RAW_XL_VCID_RX_FILTER) { in raw_rcv()
155 if ((cxl->prio & ro->rx_vcid_mask_shifted) != in raw_rcv()
156 (ro->rx_vcid_shifted & ro->rx_vcid_mask_shifted)) in raw_rcv()
166 if (this_cpu_ptr(ro->uniq)->skb == oskb && in raw_rcv()
167 this_cpu_ptr(ro->uniq)->skbcnt == can_skb_prv(oskb)->skbcnt) { in raw_rcv()
168 if (!ro->join_filters) in raw_rcv()
171 this_cpu_inc(ro->uniq->join_rx_count); in raw_rcv()
173 if (this_cpu_ptr(ro->uniq)->join_rx_count < ro->count) in raw_rcv()
176 this_cpu_ptr(ro->uniq)->skb = oskb; in raw_rcv()
177 this_cpu_ptr(ro->uniq)->skbcnt = can_skb_prv(oskb)->skbcnt; in raw_rcv()
178 this_cpu_ptr(ro->uniq)->join_rx_count = 1; in raw_rcv()
180 if (ro->join_filters && ro->count > 1) in raw_rcv()
275 struct raw_sock *ro = raw_sk(sk); in raw_disable_allfilters() local
277 raw_disable_filters(net, dev, sk, ro->filter, ro->count); in raw_disable_allfilters()
278 raw_disable_errfilter(net, dev, sk, ro->err_mask); in raw_disable_allfilters()
284 struct raw_sock *ro = raw_sk(sk); in raw_enable_allfilters() local
287 err = raw_enable_filters(net, dev, sk, ro->filter, ro->count); in raw_enable_allfilters()
289 err = raw_enable_errfilter(net, dev, sk, ro->err_mask); in raw_enable_allfilters()
291 raw_disable_filters(net, dev, sk, ro->filter, in raw_enable_allfilters()
292 ro->count); in raw_enable_allfilters()
298 static void raw_notify(struct raw_sock *ro, unsigned long msg, in raw_notify() argument
301 struct sock *sk = &ro->sk; in raw_notify()
306 if (ro->dev != dev) in raw_notify()
313 if (ro->bound) { in raw_notify()
315 netdev_put(dev, &ro->dev_tracker); in raw_notify()
318 if (ro->count > 1) in raw_notify()
319 kfree(ro->filter); in raw_notify()
321 ro->ifindex = 0; in raw_notify()
322 ro->bound = 0; in raw_notify()
323 ro->dev = NULL; in raw_notify()
324 ro->count = 0; in raw_notify()
365 struct raw_sock *ro = raw_sk(sk); in raw_init() local
367 ro->bound = 0; in raw_init()
368 ro->ifindex = 0; in raw_init()
369 ro->dev = NULL; in raw_init()
372 ro->dfilter.can_id = 0; in raw_init()
373 ro->dfilter.can_mask = MASK_ALL; in raw_init()
374 ro->filter = &ro->dfilter; in raw_init()
375 ro->count = 1; in raw_init()
378 ro->loopback = 1; in raw_init()
379 ro->recv_own_msgs = 0; in raw_init()
380 ro->fd_frames = 0; in raw_init()
381 ro->xl_frames = 0; in raw_init()
382 ro->join_filters = 0; in raw_init()
385 ro->uniq = alloc_percpu(struct uniqframe); in raw_init()
386 if (unlikely(!ro->uniq)) in raw_init()
391 list_add_tail(&ro->notifier, &raw_notifier_list); in raw_init()
400 struct raw_sock *ro; in raw_release() local
406 ro = raw_sk(sk); in raw_release()
410 while (raw_busy_notifier == ro) { in raw_release()
415 list_del(&ro->notifier); in raw_release()
422 if (ro->bound) { in raw_release()
423 if (ro->dev) { in raw_release()
424 raw_disable_allfilters(dev_net(ro->dev), ro->dev, sk); in raw_release()
425 netdev_put(ro->dev, &ro->dev_tracker); in raw_release()
431 if (ro->count > 1) in raw_release()
432 kfree(ro->filter); in raw_release()
434 ro->ifindex = 0; in raw_release()
435 ro->bound = 0; in raw_release()
436 ro->dev = NULL; in raw_release()
437 ro->count = 0; in raw_release()
438 free_percpu(ro->uniq); in raw_release()
456 struct raw_sock *ro = raw_sk(sk); in raw_bind() local
470 if (ro->bound && addr->can_ifindex == ro->ifindex) in raw_bind()
502 if (ro->bound) { in raw_bind()
504 if (ro->dev) { in raw_bind()
505 raw_disable_allfilters(dev_net(ro->dev), in raw_bind()
506 ro->dev, sk); in raw_bind()
508 netdev_put(ro->dev, &ro->dev_tracker); in raw_bind()
513 ro->ifindex = ifindex; in raw_bind()
514 ro->bound = 1; in raw_bind()
516 ro->dev = dev; in raw_bind()
517 if (ro->dev) in raw_bind()
518 netdev_hold(ro->dev, &ro->dev_tracker, GFP_KERNEL); in raw_bind()
542 struct raw_sock *ro = raw_sk(sk); in raw_getname() local
549 addr->can_ifindex = ro->ifindex; in raw_getname()
558 struct raw_sock *ro = raw_sk(sk); in raw_setsockopt() local
593 dev = ro->dev; in raw_setsockopt()
594 if (ro->bound && dev) { in raw_setsockopt()
603 if (ro->bound) { in raw_setsockopt()
618 raw_disable_filters(sock_net(sk), dev, sk, ro->filter, in raw_setsockopt()
619 ro->count); in raw_setsockopt()
623 if (ro->count > 1) in raw_setsockopt()
624 kfree(ro->filter); in raw_setsockopt()
629 ro->dfilter = sfilter; in raw_setsockopt()
630 filter = &ro->dfilter; in raw_setsockopt()
632 ro->filter = filter; in raw_setsockopt()
633 ro->count = count; in raw_setsockopt()
653 dev = ro->dev; in raw_setsockopt()
654 if (ro->bound && dev) { in raw_setsockopt()
662 if (ro->bound) { in raw_setsockopt()
672 ro->err_mask); in raw_setsockopt()
676 ro->err_mask = err_mask; in raw_setsockopt()
691 ro->loopback = !!flag; in raw_setsockopt()
701 ro->recv_own_msgs = !!flag; in raw_setsockopt()
712 if (ro->xl_frames && !flag) in raw_setsockopt()
715 ro->fd_frames = !!flag; in raw_setsockopt()
725 ro->xl_frames = !!flag; in raw_setsockopt()
728 if (ro->xl_frames) in raw_setsockopt()
729 ro->fd_frames = ro->xl_frames; in raw_setsockopt()
733 if (optlen != sizeof(ro->raw_vcid_opts)) in raw_setsockopt()
736 if (copy_from_sockptr(&ro->raw_vcid_opts, optval, optlen)) in raw_setsockopt()
740 ro->tx_vcid_shifted = ro->raw_vcid_opts.tx_vcid << CANXL_VCID_OFFSET; in raw_setsockopt()
741 ro->rx_vcid_shifted = ro->raw_vcid_opts.rx_vcid << CANXL_VCID_OFFSET; in raw_setsockopt()
742 ro->rx_vcid_mask_shifted = ro->raw_vcid_opts.rx_vcid_mask << CANXL_VCID_OFFSET; in raw_setsockopt()
752 ro->join_filters = !!flag; in raw_setsockopt()
765 struct raw_sock *ro = raw_sk(sk); in raw_getsockopt() local
782 if (ro->count > 0) { in raw_getsockopt()
783 int fsize = ro->count * sizeof(struct can_filter); in raw_getsockopt()
794 if (copy_to_user(optval, ro->filter, len)) in raw_getsockopt()
809 val = &ro->err_mask; in raw_getsockopt()
815 flag = ro->loopback; in raw_getsockopt()
822 flag = ro->recv_own_msgs; in raw_getsockopt()
829 flag = ro->fd_frames; in raw_getsockopt()
836 flag = ro->xl_frames; in raw_getsockopt()
844 if (len < sizeof(ro->raw_vcid_opts)) { in raw_getsockopt()
847 if (put_user(sizeof(ro->raw_vcid_opts), optlen)) in raw_getsockopt()
850 if (len > sizeof(ro->raw_vcid_opts)) in raw_getsockopt()
851 len = sizeof(ro->raw_vcid_opts); in raw_getsockopt()
852 if (copy_to_user(optval, &ro->raw_vcid_opts, len)) in raw_getsockopt()
862 flag = ro->join_filters; in raw_getsockopt()
877 static void raw_put_canxl_vcid(struct raw_sock *ro, struct sk_buff *skb) in raw_put_canxl_vcid() argument
885 if (!(ro->raw_vcid_opts.flags & CAN_RAW_XL_VCID_TX_PASS)) in raw_put_canxl_vcid()
889 if (ro->raw_vcid_opts.flags & CAN_RAW_XL_VCID_TX_SET) { in raw_put_canxl_vcid()
891 cxl->prio |= ro->tx_vcid_shifted; in raw_put_canxl_vcid()
895 static unsigned int raw_check_txframe(struct raw_sock *ro, struct sk_buff *skb, in raw_check_txframe() argument
903 if (ro->fd_frames && can_is_canfd_skb(skb) && in raw_check_txframe()
908 if (ro->xl_frames && can_is_canxl_skb(skb) && in raw_check_txframe()
918 struct raw_sock *ro = raw_sk(sk); in raw_sendmsg() local
941 ifindex = ro->ifindex; in raw_sendmsg()
971 txmtu = raw_check_txframe(ro, skb, dev); in raw_sendmsg()
977 raw_put_canxl_vcid(ro, skb); in raw_sendmsg()
993 err = can_send(skb, ro->loopback); in raw_sendmsg()