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()
242 struct raw_sock *ro = raw_sk(sk); in raw_disable_allfilters() local
244 raw_disable_filters(dev, sk, ro->filter, ro->count); in raw_disable_allfilters()
245 raw_disable_errfilter(dev, sk, ro->err_mask); in raw_disable_allfilters()
250 struct raw_sock *ro = raw_sk(sk); in raw_enable_allfilters() local
253 err = raw_enable_filters(dev, sk, ro->filter, ro->count); in raw_enable_allfilters()
255 err = raw_enable_errfilter(dev, sk, ro->err_mask); in raw_enable_allfilters()
257 raw_disable_filters(dev, sk, ro->filter, ro->count); in raw_enable_allfilters()
267 struct raw_sock *ro = container_of(nb, struct raw_sock, notifier); in raw_notifier() local
268 struct sock *sk = &ro->sk; in raw_notifier()
276 if (ro->ifindex != dev->ifindex) in raw_notifier()
284 if (ro->bound) in raw_notifier()
287 if (ro->count > 1) in raw_notifier()
288 kfree(ro->filter); in raw_notifier()
290 ro->ifindex = 0; in raw_notifier()
291 ro->bound = 0; in raw_notifier()
292 ro->count = 0; in raw_notifier()
312 struct raw_sock *ro = raw_sk(sk); in raw_init() local
314 ro->bound = 0; in raw_init()
315 ro->ifindex = 0; in raw_init()
318 ro->dfilter.can_id = 0; in raw_init()
319 ro->dfilter.can_mask = MASK_ALL; in raw_init()
320 ro->filter = &ro->dfilter; in raw_init()
321 ro->count = 1; in raw_init()
324 ro->loopback = 1; in raw_init()
325 ro->recv_own_msgs = 0; in raw_init()
326 ro->fd_frames = 0; in raw_init()
327 ro->join_filters = 0; in raw_init()
330 ro->uniq = alloc_percpu(struct uniqframe); in raw_init()
331 if (unlikely(!ro->uniq)) in raw_init()
335 ro->notifier.notifier_call = raw_notifier; in raw_init()
337 register_netdevice_notifier(&ro->notifier); in raw_init()
345 struct raw_sock *ro; in raw_release() local
350 ro = raw_sk(sk); in raw_release()
352 unregister_netdevice_notifier(&ro->notifier); in raw_release()
357 if (ro->bound) { in raw_release()
358 if (ro->ifindex) { in raw_release()
361 dev = dev_get_by_index(&init_net, ro->ifindex); in raw_release()
370 if (ro->count > 1) in raw_release()
371 kfree(ro->filter); in raw_release()
373 ro->ifindex = 0; in raw_release()
374 ro->bound = 0; in raw_release()
375 ro->count = 0; in raw_release()
376 free_percpu(ro->uniq); in raw_release()
391 struct raw_sock *ro = raw_sk(sk); in raw_bind() local
401 if (ro->bound && addr->can_ifindex == ro->ifindex) in raw_bind()
433 if (ro->bound) { in raw_bind()
435 if (ro->ifindex) { in raw_bind()
438 dev = dev_get_by_index(&init_net, ro->ifindex); in raw_bind()
446 ro->ifindex = ifindex; in raw_bind()
447 ro->bound = 1; in raw_bind()
467 struct raw_sock *ro = raw_sk(sk); in raw_getname() local
474 addr->can_ifindex = ro->ifindex; in raw_getname()
485 struct raw_sock *ro = raw_sk(sk); in raw_setsockopt() local
516 if (ro->bound && ro->ifindex) in raw_setsockopt()
517 dev = dev_get_by_index(&init_net, ro->ifindex); in raw_setsockopt()
519 if (ro->bound) { in raw_setsockopt()
533 raw_disable_filters(dev, sk, ro->filter, ro->count); in raw_setsockopt()
537 if (ro->count > 1) in raw_setsockopt()
538 kfree(ro->filter); in raw_setsockopt()
543 ro->dfilter = sfilter; in raw_setsockopt()
544 filter = &ro->dfilter; in raw_setsockopt()
546 ro->filter = filter; in raw_setsockopt()
547 ro->count = count; in raw_setsockopt()
568 if (ro->bound && ro->ifindex) in raw_setsockopt()
569 dev = dev_get_by_index(&init_net, ro->ifindex); in raw_setsockopt()
572 if (ro->bound) { in raw_setsockopt()
580 raw_disable_errfilter(dev, sk, ro->err_mask); in raw_setsockopt()
584 ro->err_mask = err_mask; in raw_setsockopt()
595 if (optlen != sizeof(ro->loopback)) in raw_setsockopt()
598 if (copy_from_user(&ro->loopback, optval, optlen)) in raw_setsockopt()
604 if (optlen != sizeof(ro->recv_own_msgs)) in raw_setsockopt()
607 if (copy_from_user(&ro->recv_own_msgs, optval, optlen)) in raw_setsockopt()
613 if (optlen != sizeof(ro->fd_frames)) in raw_setsockopt()
616 if (copy_from_user(&ro->fd_frames, optval, optlen)) in raw_setsockopt()
622 if (optlen != sizeof(ro->join_filters)) in raw_setsockopt()
625 if (copy_from_user(&ro->join_filters, optval, optlen)) in raw_setsockopt()
640 struct raw_sock *ro = raw_sk(sk); in raw_getsockopt() local
656 if (ro->count > 0) { in raw_getsockopt()
657 int fsize = ro->count * sizeof(struct can_filter); in raw_getsockopt()
660 if (copy_to_user(optval, ro->filter, len)) in raw_getsockopt()
673 val = &ro->err_mask; in raw_getsockopt()
679 val = &ro->loopback; in raw_getsockopt()
685 val = &ro->recv_own_msgs; in raw_getsockopt()
691 val = &ro->fd_frames; in raw_getsockopt()
697 val = &ro->join_filters; in raw_getsockopt()
714 struct raw_sock *ro = raw_sk(sk); in raw_sendmsg() local
731 ifindex = ro->ifindex; in raw_sendmsg()
733 if (ro->fd_frames) { in raw_sendmsg()
764 err = can_send(skb, ro->loopback); in raw_sendmsg()