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