Lines Matching refs:ro
121 struct raw_sock *ro = raw_sk(sk); in raw_rcv() local
127 if (!ro->recv_own_msgs && oskb->sk == sk) in raw_rcv()
131 if (!ro->fd_frames && oskb->len != CAN_MTU) in raw_rcv()
135 if (this_cpu_ptr(ro->uniq)->skb == oskb && in raw_rcv()
136 this_cpu_ptr(ro->uniq)->skbcnt == can_skb_prv(oskb)->skbcnt) { in raw_rcv()
137 if (ro->join_filters) { in raw_rcv()
138 this_cpu_inc(ro->uniq->join_rx_count); in raw_rcv()
140 if (this_cpu_ptr(ro->uniq)->join_rx_count < ro->count) in raw_rcv()
146 this_cpu_ptr(ro->uniq)->skb = oskb; in raw_rcv()
147 this_cpu_ptr(ro->uniq)->skbcnt = can_skb_prv(oskb)->skbcnt; in raw_rcv()
148 this_cpu_ptr(ro->uniq)->join_rx_count = 1; in raw_rcv()
150 if (ro->join_filters && ro->count > 1) in raw_rcv()
246 struct raw_sock *ro = raw_sk(sk); in raw_disable_allfilters() local
248 raw_disable_filters(net, dev, sk, ro->filter, ro->count); in raw_disable_allfilters()
249 raw_disable_errfilter(net, dev, sk, ro->err_mask); in raw_disable_allfilters()
255 struct raw_sock *ro = raw_sk(sk); in raw_enable_allfilters() local
258 err = raw_enable_filters(net, dev, sk, ro->filter, ro->count); in raw_enable_allfilters()
260 err = raw_enable_errfilter(net, dev, sk, ro->err_mask); in raw_enable_allfilters()
262 raw_disable_filters(net, dev, sk, ro->filter, in raw_enable_allfilters()
263 ro->count); in raw_enable_allfilters()
273 struct raw_sock *ro = container_of(nb, struct raw_sock, notifier); in raw_notifier() local
274 struct sock *sk = &ro->sk; in raw_notifier()
282 if (ro->ifindex != dev->ifindex) in raw_notifier()
290 if (ro->bound) in raw_notifier()
293 if (ro->count > 1) in raw_notifier()
294 kfree(ro->filter); in raw_notifier()
296 ro->ifindex = 0; in raw_notifier()
297 ro->bound = 0; in raw_notifier()
298 ro->count = 0; in raw_notifier()
318 struct raw_sock *ro = raw_sk(sk); in raw_init() local
320 ro->bound = 0; in raw_init()
321 ro->ifindex = 0; in raw_init()
324 ro->dfilter.can_id = 0; in raw_init()
325 ro->dfilter.can_mask = MASK_ALL; in raw_init()
326 ro->filter = &ro->dfilter; in raw_init()
327 ro->count = 1; in raw_init()
330 ro->loopback = 1; in raw_init()
331 ro->recv_own_msgs = 0; in raw_init()
332 ro->fd_frames = 0; in raw_init()
333 ro->join_filters = 0; in raw_init()
336 ro->uniq = alloc_percpu(struct uniqframe); in raw_init()
337 if (unlikely(!ro->uniq)) in raw_init()
341 ro->notifier.notifier_call = raw_notifier; in raw_init()
343 register_netdevice_notifier(&ro->notifier); in raw_init()
351 struct raw_sock *ro; in raw_release() local
356 ro = raw_sk(sk); in raw_release()
358 unregister_netdevice_notifier(&ro->notifier); in raw_release()
363 if (ro->bound) { in raw_release()
364 if (ro->ifindex) { in raw_release()
367 dev = dev_get_by_index(sock_net(sk), ro->ifindex); in raw_release()
376 if (ro->count > 1) in raw_release()
377 kfree(ro->filter); in raw_release()
379 ro->ifindex = 0; in raw_release()
380 ro->bound = 0; in raw_release()
381 ro->count = 0; in raw_release()
382 free_percpu(ro->uniq); in raw_release()
397 struct raw_sock *ro = raw_sk(sk); in raw_bind() local
409 if (ro->bound && addr->can_ifindex == ro->ifindex) in raw_bind()
441 if (ro->bound) { in raw_bind()
443 if (ro->ifindex) { in raw_bind()
447 ro->ifindex); in raw_bind()
456 ro->ifindex = ifindex; in raw_bind()
457 ro->bound = 1; in raw_bind()
477 struct raw_sock *ro = raw_sk(sk); in raw_getname() local
484 addr->can_ifindex = ro->ifindex; in raw_getname()
493 struct raw_sock *ro = raw_sk(sk); in raw_setsockopt() local
527 if (ro->bound && ro->ifindex) in raw_setsockopt()
528 dev = dev_get_by_index(sock_net(sk), ro->ifindex); in raw_setsockopt()
530 if (ro->bound) { in raw_setsockopt()
545 raw_disable_filters(sock_net(sk), dev, sk, ro->filter, in raw_setsockopt()
546 ro->count); in raw_setsockopt()
550 if (ro->count > 1) in raw_setsockopt()
551 kfree(ro->filter); in raw_setsockopt()
556 ro->dfilter = sfilter; in raw_setsockopt()
557 filter = &ro->dfilter; in raw_setsockopt()
559 ro->filter = filter; in raw_setsockopt()
560 ro->count = count; in raw_setsockopt()
581 if (ro->bound && ro->ifindex) in raw_setsockopt()
582 dev = dev_get_by_index(sock_net(sk), ro->ifindex); in raw_setsockopt()
585 if (ro->bound) { in raw_setsockopt()
595 ro->err_mask); in raw_setsockopt()
599 ro->err_mask = err_mask; in raw_setsockopt()
610 if (optlen != sizeof(ro->loopback)) in raw_setsockopt()
613 if (copy_from_user(&ro->loopback, optval, optlen)) in raw_setsockopt()
619 if (optlen != sizeof(ro->recv_own_msgs)) in raw_setsockopt()
622 if (copy_from_user(&ro->recv_own_msgs, optval, optlen)) in raw_setsockopt()
628 if (optlen != sizeof(ro->fd_frames)) in raw_setsockopt()
631 if (copy_from_user(&ro->fd_frames, optval, optlen)) in raw_setsockopt()
637 if (optlen != sizeof(ro->join_filters)) in raw_setsockopt()
640 if (copy_from_user(&ro->join_filters, optval, optlen)) in raw_setsockopt()
655 struct raw_sock *ro = raw_sk(sk); in raw_getsockopt() local
671 if (ro->count > 0) { in raw_getsockopt()
672 int fsize = ro->count * sizeof(struct can_filter); in raw_getsockopt()
675 if (copy_to_user(optval, ro->filter, len)) in raw_getsockopt()
688 val = &ro->err_mask; in raw_getsockopt()
694 val = &ro->loopback; in raw_getsockopt()
700 val = &ro->recv_own_msgs; in raw_getsockopt()
706 val = &ro->fd_frames; in raw_getsockopt()
712 val = &ro->join_filters; in raw_getsockopt()
729 struct raw_sock *ro = raw_sk(sk); in raw_sendmsg() local
746 ifindex = ro->ifindex; in raw_sendmsg()
748 if (ro->fd_frames) { in raw_sendmsg()
779 err = can_send(skb, ro->loopback); in raw_sendmsg()