Lines Matching refs:jsk

57 	struct j1939_sock *jsk = j1939_sk(sk);  in j1939_sock_pending_add()  local
59 atomic_inc(&jsk->skb_pending); in j1939_sock_pending_add()
64 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sock_pending_get() local
66 return atomic_read(&jsk->skb_pending); in j1939_sock_pending_get()
71 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sock_pending_del() local
74 if (!atomic_dec_return(&jsk->skb_pending)) in j1939_sock_pending_del()
75 wake_up(&jsk->waitq); /* no pending SKB's */ in j1939_sock_pending_del()
78 static void j1939_jsk_add(struct j1939_priv *priv, struct j1939_sock *jsk) in j1939_jsk_add() argument
80 jsk->state |= J1939_SOCK_BOUND; in j1939_jsk_add()
84 list_add_tail(&jsk->list, &priv->j1939_socks); in j1939_jsk_add()
88 static void j1939_jsk_del(struct j1939_priv *priv, struct j1939_sock *jsk) in j1939_jsk_del() argument
91 list_del_init(&jsk->list); in j1939_jsk_del()
95 jsk->state &= ~J1939_SOCK_BOUND; in j1939_jsk_del()
100 struct j1939_sock *jsk = j1939_sk(session->sk); in j1939_sk_queue_session() local
103 spin_lock_bh(&jsk->sk_session_queue_lock); in j1939_sk_queue_session()
104 empty = list_empty(&jsk->sk_session_queue); in j1939_sk_queue_session()
106 list_add_tail(&session->sk_session_queue_entry, &jsk->sk_session_queue); in j1939_sk_queue_session()
107 spin_unlock_bh(&jsk->sk_session_queue_lock); in j1939_sk_queue_session()
108 j1939_sock_pending_add(&jsk->sk); in j1939_sk_queue_session()
114 j1939_session *j1939_sk_get_incomplete_session(struct j1939_sock *jsk) in j1939_sk_get_incomplete_session() argument
118 spin_lock_bh(&jsk->sk_session_queue_lock); in j1939_sk_get_incomplete_session()
119 if (!list_empty(&jsk->sk_session_queue)) { in j1939_sk_get_incomplete_session()
120 session = list_last_entry(&jsk->sk_session_queue, in j1939_sk_get_incomplete_session()
128 spin_unlock_bh(&jsk->sk_session_queue_lock); in j1939_sk_get_incomplete_session()
134 struct j1939_sock *jsk, int err) in j1939_sk_queue_drop_all() argument
139 spin_lock_bh(&jsk->sk_session_queue_lock); in j1939_sk_queue_drop_all()
140 list_for_each_entry_safe(session, tmp, &jsk->sk_session_queue, in j1939_sk_queue_drop_all()
146 spin_unlock_bh(&jsk->sk_session_queue_lock); in j1939_sk_queue_drop_all()
151 struct j1939_sock *jsk; in j1939_sk_queue_activate_next_locked() local
159 jsk = j1939_sk(session->sk); in j1939_sk_queue_activate_next_locked()
160 lockdep_assert_held(&jsk->sk_session_queue_lock); in j1939_sk_queue_activate_next_locked()
164 first = list_first_entry_or_null(&jsk->sk_session_queue, in j1939_sk_queue_activate_next_locked()
175 first = list_first_entry_or_null(&jsk->sk_session_queue, in j1939_sk_queue_activate_next_locked()
197 struct j1939_sock *jsk; in j1939_sk_queue_activate_next() local
202 jsk = j1939_sk(session->sk); in j1939_sk_queue_activate_next()
204 spin_lock_bh(&jsk->sk_session_queue_lock); in j1939_sk_queue_activate_next()
206 spin_unlock_bh(&jsk->sk_session_queue_lock); in j1939_sk_queue_activate_next()
209 static bool j1939_sk_match_dst(struct j1939_sock *jsk, in j1939_sk_match_dst() argument
212 if ((jsk->state & J1939_SOCK_PROMISC)) in j1939_sk_match_dst()
216 if (jsk->addr.src_name && skcb->addr.dst_name) { in j1939_sk_match_dst()
217 if (jsk->addr.src_name != skcb->addr.dst_name) in j1939_sk_match_dst()
226 if (jsk->addr.sa != skcb->addr.da) in j1939_sk_match_dst()
228 } else if (!sock_flag(&jsk->sk, SOCK_BROADCAST)) { in j1939_sk_match_dst()
237 if (jsk->state & J1939_SOCK_CONNECTED) { in j1939_sk_match_dst()
241 if (jsk->addr.dst_name && skcb->addr.src_name) { in j1939_sk_match_dst()
242 if (jsk->addr.dst_name != skcb->addr.src_name) in j1939_sk_match_dst()
245 if (jsk->addr.da != skcb->addr.sa) in j1939_sk_match_dst()
251 if (j1939_pgn_is_valid(jsk->pgn_rx_filter) && in j1939_sk_match_dst()
252 jsk->pgn_rx_filter != skcb->addr.pgn) in j1939_sk_match_dst()
259 static bool j1939_sk_match_filter(struct j1939_sock *jsk, in j1939_sk_match_filter() argument
262 const struct j1939_filter *f = jsk->filters; in j1939_sk_match_filter()
263 int nfilter = jsk->nfilters; in j1939_sk_match_filter()
281 static bool j1939_sk_recv_match_one(struct j1939_sock *jsk, in j1939_sk_recv_match_one() argument
284 if (!(jsk->state & J1939_SOCK_BOUND)) in j1939_sk_recv_match_one()
287 if (!j1939_sk_match_dst(jsk, skcb)) in j1939_sk_recv_match_one()
290 if (!j1939_sk_match_filter(jsk, skcb)) in j1939_sk_recv_match_one()
296 static void j1939_sk_recv_one(struct j1939_sock *jsk, struct sk_buff *oskb) in j1939_sk_recv_one() argument
302 if (oskb->sk == &jsk->sk) in j1939_sk_recv_one()
305 if (!j1939_sk_recv_match_one(jsk, oskcb)) in j1939_sk_recv_one()
320 if (sock_queue_rcv_skb(&jsk->sk, skb) < 0) in j1939_sk_recv_one()
326 struct j1939_sock *jsk; in j1939_sk_recv_match() local
330 list_for_each_entry(jsk, &priv->j1939_socks, list) { in j1939_sk_recv_match()
331 match = j1939_sk_recv_match_one(jsk, skcb); in j1939_sk_recv_match()
342 struct j1939_sock *jsk; in j1939_sk_recv() local
345 list_for_each_entry(jsk, &priv->j1939_socks, list) { in j1939_sk_recv()
346 j1939_sk_recv_one(jsk, skb); in j1939_sk_recv()
353 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_sock_destruct() local
370 if (jsk->priv) { in j1939_sk_sock_destruct()
371 j1939_priv_put(jsk->priv); in j1939_sk_sock_destruct()
372 jsk->priv = NULL; in j1939_sk_sock_destruct()
381 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_init() local
387 memset((void *)jsk + sizeof(jsk->sk), 0x0, in j1939_sk_init()
388 sizeof(*jsk) - sizeof(jsk->sk)); in j1939_sk_init()
390 INIT_LIST_HEAD(&jsk->list); in j1939_sk_init()
391 init_waitqueue_head(&jsk->waitq); in j1939_sk_init()
392 jsk->sk.sk_priority = j1939_to_sk_priority(6); in j1939_sk_init()
393 jsk->sk.sk_reuse = 1; /* per default */ in j1939_sk_init()
394 jsk->addr.sa = J1939_NO_ADDR; in j1939_sk_init()
395 jsk->addr.da = J1939_NO_ADDR; in j1939_sk_init()
396 jsk->addr.pgn = J1939_NO_PGN; in j1939_sk_init()
397 jsk->pgn_rx_filter = J1939_NO_PGN; in j1939_sk_init()
398 atomic_set(&jsk->skb_pending, 0); in j1939_sk_init()
399 spin_lock_init(&jsk->sk_session_queue_lock); in j1939_sk_init()
400 INIT_LIST_HEAD(&jsk->sk_session_queue); in j1939_sk_init()
430 struct j1939_sock *jsk = j1939_sk(sock->sk); in j1939_sk_bind() local
442 priv = jsk->priv; in j1939_sk_bind()
447 if (jsk->state & J1939_SOCK_BOUND) { in j1939_sk_bind()
451 if (jsk->ifindex != addr->can_ifindex) { in j1939_sk_bind()
457 j1939_jsk_del(priv, jsk); in j1939_sk_bind()
458 j1939_local_ecu_put(priv, jsk->addr.src_name, jsk->addr.sa); in j1939_sk_bind()
489 jsk->ifindex = addr->can_ifindex; in j1939_sk_bind()
495 jsk->priv = priv; in j1939_sk_bind()
500 jsk->pgn_rx_filter = addr->can_addr.j1939.pgn; in j1939_sk_bind()
501 jsk->addr.src_name = addr->can_addr.j1939.name; in j1939_sk_bind()
502 jsk->addr.sa = addr->can_addr.j1939.addr; in j1939_sk_bind()
505 ret = j1939_local_ecu_get(priv, jsk->addr.src_name, jsk->addr.sa); in j1939_sk_bind()
511 j1939_jsk_add(priv, jsk); in j1939_sk_bind()
523 struct j1939_sock *jsk = j1939_sk(sock->sk); in j1939_sk_connect() local
533 if (!(jsk->state & J1939_SOCK_BOUND)) { in j1939_sk_connect()
539 if (jsk->ifindex != addr->can_ifindex) { in j1939_sk_connect()
546 !sock_flag(&jsk->sk, SOCK_BROADCAST)) { in j1939_sk_connect()
552 jsk->addr.dst_name = addr->can_addr.j1939.name; in j1939_sk_connect()
553 jsk->addr.da = addr->can_addr.j1939.addr; in j1939_sk_connect()
556 jsk->addr.pgn = addr->can_addr.j1939.pgn; in j1939_sk_connect()
558 jsk->state |= J1939_SOCK_CONNECTED; in j1939_sk_connect()
567 const struct j1939_sock *jsk, int peer) in j1939_sk_sock2sockaddr_can() argument
575 addr->can_ifindex = jsk->ifindex; in j1939_sk_sock2sockaddr_can()
576 addr->can_addr.j1939.pgn = jsk->addr.pgn; in j1939_sk_sock2sockaddr_can()
578 addr->can_addr.j1939.name = jsk->addr.dst_name; in j1939_sk_sock2sockaddr_can()
579 addr->can_addr.j1939.addr = jsk->addr.da; in j1939_sk_sock2sockaddr_can()
581 addr->can_addr.j1939.name = jsk->addr.src_name; in j1939_sk_sock2sockaddr_can()
582 addr->can_addr.j1939.addr = jsk->addr.sa; in j1939_sk_sock2sockaddr_can()
591 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_getname() local
596 if (peer && !(jsk->state & J1939_SOCK_CONNECTED)) { in j1939_sk_getname()
601 j1939_sk_sock2sockaddr_can(addr, jsk, peer); in j1939_sk_getname()
613 struct j1939_sock *jsk; in j1939_sk_release() local
619 jsk = j1939_sk(sk); in j1939_sk_release()
621 if (jsk->state & J1939_SOCK_BOUND) { in j1939_sk_release()
622 struct j1939_priv *priv = jsk->priv; in j1939_sk_release()
624 if (wait_event_interruptible(jsk->waitq, in j1939_sk_release()
625 !j1939_sock_pending_get(&jsk->sk))) { in j1939_sk_release()
627 j1939_sk_queue_drop_all(priv, jsk, ESHUTDOWN); in j1939_sk_release()
630 j1939_jsk_del(priv, jsk); in j1939_sk_release()
632 j1939_local_ecu_put(priv, jsk->addr.src_name, in j1939_sk_release()
633 jsk->addr.sa); in j1939_sk_release()
638 kfree(jsk->filters); in j1939_sk_release()
648 static int j1939_sk_setsockopt_flag(struct j1939_sock *jsk, sockptr_t optval, in j1939_sk_setsockopt_flag() argument
657 lock_sock(&jsk->sk); in j1939_sk_setsockopt_flag()
659 jsk->state |= flag; in j1939_sk_setsockopt_flag()
661 jsk->state &= ~flag; in j1939_sk_setsockopt_flag()
662 release_sock(&jsk->sk); in j1939_sk_setsockopt_flag()
670 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_setsockopt() local
702 lock_sock(&jsk->sk); in j1939_sk_setsockopt()
703 ofilters = jsk->filters; in j1939_sk_setsockopt()
704 jsk->filters = filters; in j1939_sk_setsockopt()
705 jsk->nfilters = count; in j1939_sk_setsockopt()
706 release_sock(&jsk->sk); in j1939_sk_setsockopt()
710 return j1939_sk_setsockopt_flag(jsk, optval, optlen, in j1939_sk_setsockopt()
713 ret = j1939_sk_setsockopt_flag(jsk, optval, optlen, in j1939_sk_setsockopt()
718 if (!(jsk->state & J1939_SOCK_ERRQUEUE)) in j1939_sk_setsockopt()
730 lock_sock(&jsk->sk); in j1939_sk_setsockopt()
731 jsk->sk.sk_priority = j1939_to_sk_priority(tmp); in j1939_sk_setsockopt()
732 release_sock(&jsk->sk); in j1939_sk_setsockopt()
743 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_getsockopt() local
757 lock_sock(&jsk->sk); in j1939_sk_getsockopt()
760 tmp = (jsk->state & J1939_SOCK_PROMISC) ? 1 : 0; in j1939_sk_getsockopt()
763 tmp = (jsk->state & J1939_SOCK_ERRQUEUE) ? 1 : 0; in j1939_sk_getsockopt()
766 tmp = j1939_prio(jsk->sk.sk_priority); in j1939_sk_getsockopt()
786 release_sock(&jsk->sk); in j1939_sk_getsockopt()
856 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_alloc_skb() local
883 skcb->addr = jsk->addr; in j1939_sk_alloc_skb()
970 struct j1939_sock *jsk; in __j1939_sk_errqueue() local
976 jsk = j1939_sk(sk); in __j1939_sk_errqueue()
978 if (!(jsk->state & J1939_SOCK_ERRQUEUE)) in __j1939_sk_errqueue()
1069 struct j1939_sock *jsk; in j1939_sk_errqueue() local
1079 list_for_each_entry(jsk, &priv->j1939_socks, list) { in j1939_sk_errqueue()
1080 if (j1939_sk_recv_match_one(jsk, &session->skcb)) in j1939_sk_errqueue()
1081 __j1939_sk_errqueue(session, &jsk->sk, type); in j1939_sk_errqueue()
1097 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_send_loop() local
1098 struct j1939_session *session = j1939_sk_get_incomplete_session(jsk); in j1939_sk_send_loop()
1144 j1939_sk_queue_drop_all(priv, jsk, in j1939_sk_send_loop()
1191 struct j1939_sock *jsk = j1939_sk(sk); in j1939_sk_sendmsg() local
1198 if (!(jsk->state & J1939_SOCK_BOUND)) { in j1939_sk_sendmsg()
1203 priv = jsk->priv; in j1939_sk_sendmsg()
1204 ifindex = jsk->ifindex; in j1939_sk_sendmsg()
1206 if (!jsk->addr.src_name && jsk->addr.sa == J1939_NO_ADDR) { in j1939_sk_sendmsg()
1245 if (!jsk->addr.dst_name && jsk->addr.da == J1939_NO_ADDR && in j1939_sk_sendmsg()
1263 struct j1939_sock *jsk; in j1939_sk_netdev_event_netdown() local
1267 list_for_each_entry(jsk, &priv->j1939_socks, list) { in j1939_sk_netdev_event_netdown()
1268 jsk->sk.sk_err = error_code; in j1939_sk_netdev_event_netdown()
1269 if (!sock_flag(&jsk->sk, SOCK_DEAD)) in j1939_sk_netdev_event_netdown()
1270 sk_error_report(&jsk->sk); in j1939_sk_netdev_event_netdown()
1272 j1939_sk_queue_drop_all(priv, jsk, error_code); in j1939_sk_netdev_event_netdown()