Lines Matching refs:jsk
56 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sock_pending_add() local
58 atomic_inc(&jsk->skb_pending); in j1939_sock_pending_add()
63 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sock_pending_get() local
65 return atomic_read(&jsk->skb_pending); in j1939_sock_pending_get()
70 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sock_pending_del() local
73 if (!atomic_dec_return(&jsk->skb_pending)) in j1939_sock_pending_del()
74 wake_up(&jsk->waitq); /* no pending SKB's */ in j1939_sock_pending_del()
77 static void j1939_jsk_add(struct j1939_priv *priv, struct j1939_sock *jsk) in j1939_jsk_add() argument
79 jsk->state |= J1939_SOCK_BOUND; in j1939_jsk_add()
83 list_add_tail(&jsk->list, &priv->j1939_socks); in j1939_jsk_add()
87 static void j1939_jsk_del(struct j1939_priv *priv, struct j1939_sock *jsk) in j1939_jsk_del() argument
90 list_del_init(&jsk->list); in j1939_jsk_del()
94 jsk->state &= ~J1939_SOCK_BOUND; in j1939_jsk_del()
99 struct j1939_sock *jsk = j1939_sk(session->sk); in j1939_sk_queue_session() local
102 spin_lock_bh(&jsk->sk_session_queue_lock); in j1939_sk_queue_session()
103 empty = list_empty(&jsk->sk_session_queue); in j1939_sk_queue_session()
105 list_add_tail(&session->sk_session_queue_entry, &jsk->sk_session_queue); in j1939_sk_queue_session()
106 spin_unlock_bh(&jsk->sk_session_queue_lock); in j1939_sk_queue_session()
107 j1939_sock_pending_add(&jsk->sk); in j1939_sk_queue_session()
113 j1939_session *j1939_sk_get_incomplete_session(struct j1939_sock *jsk) in j1939_sk_get_incomplete_session() argument
117 spin_lock_bh(&jsk->sk_session_queue_lock); in j1939_sk_get_incomplete_session()
118 if (!list_empty(&jsk->sk_session_queue)) { in j1939_sk_get_incomplete_session()
119 session = list_last_entry(&jsk->sk_session_queue, in j1939_sk_get_incomplete_session()
127 spin_unlock_bh(&jsk->sk_session_queue_lock); in j1939_sk_get_incomplete_session()
133 struct j1939_sock *jsk, int err) in j1939_sk_queue_drop_all() argument
138 spin_lock_bh(&jsk->sk_session_queue_lock); in j1939_sk_queue_drop_all()
139 list_for_each_entry_safe(session, tmp, &jsk->sk_session_queue, in j1939_sk_queue_drop_all()
145 spin_unlock_bh(&jsk->sk_session_queue_lock); in j1939_sk_queue_drop_all()
150 struct j1939_sock *jsk; in j1939_sk_queue_activate_next_locked() local
158 jsk = j1939_sk(session->sk); in j1939_sk_queue_activate_next_locked()
159 lockdep_assert_held(&jsk->sk_session_queue_lock); in j1939_sk_queue_activate_next_locked()
163 first = list_first_entry_or_null(&jsk->sk_session_queue, in j1939_sk_queue_activate_next_locked()
174 first = list_first_entry_or_null(&jsk->sk_session_queue, in j1939_sk_queue_activate_next_locked()
196 struct j1939_sock *jsk; in j1939_sk_queue_activate_next() local
201 jsk = j1939_sk(session->sk); in j1939_sk_queue_activate_next()
203 spin_lock_bh(&jsk->sk_session_queue_lock); in j1939_sk_queue_activate_next()
205 spin_unlock_bh(&jsk->sk_session_queue_lock); in j1939_sk_queue_activate_next()
208 static bool j1939_sk_match_dst(struct j1939_sock *jsk, in j1939_sk_match_dst() argument
211 if ((jsk->state & J1939_SOCK_PROMISC)) in j1939_sk_match_dst()
215 if (jsk->addr.src_name && skcb->addr.dst_name) { in j1939_sk_match_dst()
216 if (jsk->addr.src_name != skcb->addr.dst_name) in j1939_sk_match_dst()
225 if (jsk->addr.sa != skcb->addr.da) in j1939_sk_match_dst()
227 } else if (!sock_flag(&jsk->sk, SOCK_BROADCAST)) { in j1939_sk_match_dst()
236 if (jsk->state & J1939_SOCK_CONNECTED) { in j1939_sk_match_dst()
240 if (jsk->addr.dst_name && skcb->addr.src_name) { in j1939_sk_match_dst()
241 if (jsk->addr.dst_name != skcb->addr.src_name) in j1939_sk_match_dst()
244 if (jsk->addr.da != skcb->addr.sa) in j1939_sk_match_dst()
250 if (j1939_pgn_is_valid(jsk->pgn_rx_filter) && in j1939_sk_match_dst()
251 jsk->pgn_rx_filter != skcb->addr.pgn) in j1939_sk_match_dst()
258 static bool j1939_sk_match_filter(struct j1939_sock *jsk, in j1939_sk_match_filter() argument
261 const struct j1939_filter *f = jsk->filters; in j1939_sk_match_filter()
262 int nfilter = jsk->nfilters; in j1939_sk_match_filter()
280 static bool j1939_sk_recv_match_one(struct j1939_sock *jsk, in j1939_sk_recv_match_one() argument
283 if (!(jsk->state & J1939_SOCK_BOUND)) in j1939_sk_recv_match_one()
286 if (!j1939_sk_match_dst(jsk, skcb)) in j1939_sk_recv_match_one()
289 if (!j1939_sk_match_filter(jsk, skcb)) in j1939_sk_recv_match_one()
295 static void j1939_sk_recv_one(struct j1939_sock *jsk, struct sk_buff *oskb) in j1939_sk_recv_one() argument
301 if (oskb->sk == &jsk->sk) in j1939_sk_recv_one()
304 if (!j1939_sk_recv_match_one(jsk, oskcb)) in j1939_sk_recv_one()
319 if (sock_queue_rcv_skb(&jsk->sk, skb) < 0) in j1939_sk_recv_one()
325 struct j1939_sock *jsk; in j1939_sk_recv_match() local
329 list_for_each_entry(jsk, &priv->j1939_socks, list) { in j1939_sk_recv_match()
330 match = j1939_sk_recv_match_one(jsk, skcb); in j1939_sk_recv_match()
341 struct j1939_sock *jsk; in j1939_sk_recv() local
344 list_for_each_entry(jsk, &priv->j1939_socks, list) { in j1939_sk_recv()
345 j1939_sk_recv_one(jsk, skb); in j1939_sk_recv()
352 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_sock_destruct() local
369 if (jsk->priv) { in j1939_sk_sock_destruct()
370 j1939_priv_put(jsk->priv); in j1939_sk_sock_destruct()
371 jsk->priv = NULL; in j1939_sk_sock_destruct()
380 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_init() local
386 memset((void *)jsk + sizeof(jsk->sk), 0x0, in j1939_sk_init()
387 sizeof(*jsk) - sizeof(jsk->sk)); in j1939_sk_init()
389 INIT_LIST_HEAD(&jsk->list); in j1939_sk_init()
390 init_waitqueue_head(&jsk->waitq); in j1939_sk_init()
391 jsk->sk.sk_priority = j1939_to_sk_priority(6); in j1939_sk_init()
392 jsk->sk.sk_reuse = 1; /* per default */ in j1939_sk_init()
393 jsk->addr.sa = J1939_NO_ADDR; in j1939_sk_init()
394 jsk->addr.da = J1939_NO_ADDR; in j1939_sk_init()
395 jsk->addr.pgn = J1939_NO_PGN; in j1939_sk_init()
396 jsk->pgn_rx_filter = J1939_NO_PGN; in j1939_sk_init()
397 atomic_set(&jsk->skb_pending, 0); in j1939_sk_init()
398 spin_lock_init(&jsk->sk_session_queue_lock); in j1939_sk_init()
399 INIT_LIST_HEAD(&jsk->sk_session_queue); in j1939_sk_init()
425 struct j1939_sock *jsk = j1939_sk(sock->sk); in j1939_sk_bind() local
426 struct j1939_priv *priv = jsk->priv; in j1939_sk_bind()
438 if (jsk->state & J1939_SOCK_BOUND) { in j1939_sk_bind()
442 if (jsk->ifindex != addr->can_ifindex) { in j1939_sk_bind()
448 j1939_jsk_del(priv, jsk); in j1939_sk_bind()
449 j1939_local_ecu_put(priv, jsk->addr.src_name, jsk->addr.sa); in j1939_sk_bind()
472 jsk->ifindex = addr->can_ifindex; in j1939_sk_bind()
478 jsk->priv = priv; in j1939_sk_bind()
483 jsk->pgn_rx_filter = addr->can_addr.j1939.pgn; in j1939_sk_bind()
484 jsk->addr.src_name = addr->can_addr.j1939.name; in j1939_sk_bind()
485 jsk->addr.sa = addr->can_addr.j1939.addr; in j1939_sk_bind()
488 ret = j1939_local_ecu_get(priv, jsk->addr.src_name, jsk->addr.sa); in j1939_sk_bind()
494 j1939_jsk_add(priv, jsk); in j1939_sk_bind()
506 struct j1939_sock *jsk = j1939_sk(sock->sk); in j1939_sk_connect() local
516 if (!(jsk->state & J1939_SOCK_BOUND)) { in j1939_sk_connect()
522 if (jsk->ifindex != addr->can_ifindex) { in j1939_sk_connect()
529 !sock_flag(&jsk->sk, SOCK_BROADCAST)) { in j1939_sk_connect()
535 jsk->addr.dst_name = addr->can_addr.j1939.name; in j1939_sk_connect()
536 jsk->addr.da = addr->can_addr.j1939.addr; in j1939_sk_connect()
539 jsk->addr.pgn = addr->can_addr.j1939.pgn; in j1939_sk_connect()
541 jsk->state |= J1939_SOCK_CONNECTED; in j1939_sk_connect()
550 const struct j1939_sock *jsk, int peer) in j1939_sk_sock2sockaddr_can() argument
553 addr->can_ifindex = jsk->ifindex; in j1939_sk_sock2sockaddr_can()
554 addr->can_addr.j1939.pgn = jsk->addr.pgn; in j1939_sk_sock2sockaddr_can()
556 addr->can_addr.j1939.name = jsk->addr.dst_name; in j1939_sk_sock2sockaddr_can()
557 addr->can_addr.j1939.addr = jsk->addr.da; in j1939_sk_sock2sockaddr_can()
559 addr->can_addr.j1939.name = jsk->addr.src_name; in j1939_sk_sock2sockaddr_can()
560 addr->can_addr.j1939.addr = jsk->addr.sa; in j1939_sk_sock2sockaddr_can()
569 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_getname() local
574 if (peer && !(jsk->state & J1939_SOCK_CONNECTED)) { in j1939_sk_getname()
579 j1939_sk_sock2sockaddr_can(addr, jsk, peer); in j1939_sk_getname()
591 struct j1939_sock *jsk; in j1939_sk_release() local
597 jsk = j1939_sk(sk); in j1939_sk_release()
599 if (jsk->state & J1939_SOCK_BOUND) { in j1939_sk_release()
600 struct j1939_priv *priv = jsk->priv; in j1939_sk_release()
602 if (wait_event_interruptible(jsk->waitq, in j1939_sk_release()
603 !j1939_sock_pending_get(&jsk->sk))) { in j1939_sk_release()
605 j1939_sk_queue_drop_all(priv, jsk, ESHUTDOWN); in j1939_sk_release()
608 j1939_jsk_del(priv, jsk); in j1939_sk_release()
610 j1939_local_ecu_put(priv, jsk->addr.src_name, in j1939_sk_release()
611 jsk->addr.sa); in j1939_sk_release()
616 kfree(jsk->filters); in j1939_sk_release()
626 static int j1939_sk_setsockopt_flag(struct j1939_sock *jsk, char __user *optval, in j1939_sk_setsockopt_flag() argument
635 lock_sock(&jsk->sk); in j1939_sk_setsockopt_flag()
637 jsk->state |= flag; in j1939_sk_setsockopt_flag()
639 jsk->state &= ~flag; in j1939_sk_setsockopt_flag()
640 release_sock(&jsk->sk); in j1939_sk_setsockopt_flag()
648 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_setsockopt() local
680 lock_sock(&jsk->sk); in j1939_sk_setsockopt()
681 ofilters = jsk->filters; in j1939_sk_setsockopt()
682 jsk->filters = filters; in j1939_sk_setsockopt()
683 jsk->nfilters = count; in j1939_sk_setsockopt()
684 release_sock(&jsk->sk); in j1939_sk_setsockopt()
688 return j1939_sk_setsockopt_flag(jsk, optval, optlen, in j1939_sk_setsockopt()
691 ret = j1939_sk_setsockopt_flag(jsk, optval, optlen, in j1939_sk_setsockopt()
696 if (!(jsk->state & J1939_SOCK_ERRQUEUE)) in j1939_sk_setsockopt()
708 lock_sock(&jsk->sk); in j1939_sk_setsockopt()
709 jsk->sk.sk_priority = j1939_to_sk_priority(tmp); in j1939_sk_setsockopt()
710 release_sock(&jsk->sk); in j1939_sk_setsockopt()
721 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_getsockopt() local
735 lock_sock(&jsk->sk); in j1939_sk_getsockopt()
738 tmp = (jsk->state & J1939_SOCK_PROMISC) ? 1 : 0; in j1939_sk_getsockopt()
741 tmp = (jsk->state & J1939_SOCK_ERRQUEUE) ? 1 : 0; in j1939_sk_getsockopt()
744 tmp = j1939_prio(jsk->sk.sk_priority); in j1939_sk_getsockopt()
764 release_sock(&jsk->sk); in j1939_sk_getsockopt()
834 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_alloc_skb() local
861 skcb->addr = jsk->addr; in j1939_sk_alloc_skb()
919 struct j1939_sock *jsk; in j1939_sk_errqueue() local
929 jsk = j1939_sk(sk); in j1939_sk_errqueue()
931 if (!(jsk->state & J1939_SOCK_ERRQUEUE)) in j1939_sk_errqueue()
1000 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_send_loop() local
1001 struct j1939_session *session = j1939_sk_get_incomplete_session(jsk); in j1939_sk_send_loop()
1047 j1939_sk_queue_drop_all(priv, jsk, in j1939_sk_send_loop()
1094 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_sendmsg() local
1101 if (!(jsk->state & J1939_SOCK_BOUND)) { in j1939_sk_sendmsg()
1106 priv = jsk->priv; in j1939_sk_sendmsg()
1107 ifindex = jsk->ifindex; in j1939_sk_sendmsg()
1109 if (!jsk->addr.src_name && jsk->addr.sa == J1939_NO_ADDR) { in j1939_sk_sendmsg()
1148 if (!jsk->addr.dst_name && jsk->addr.da == J1939_NO_ADDR && in j1939_sk_sendmsg()
1166 struct j1939_sock *jsk; in j1939_sk_netdev_event_netdown() local
1170 list_for_each_entry(jsk, &priv->j1939_socks, list) { in j1939_sk_netdev_event_netdown()
1171 jsk->sk.sk_err = error_code; in j1939_sk_netdev_event_netdown()
1172 if (!sock_flag(&jsk->sk, SOCK_DEAD)) in j1939_sk_netdev_event_netdown()
1173 jsk->sk.sk_error_report(&jsk->sk); in j1939_sk_netdev_event_netdown()
1175 j1939_sk_queue_drop_all(priv, jsk, error_code); in j1939_sk_netdev_event_netdown()