Lines Matching refs:jsk

57 	struct j1939_sock *jsk = j1939_sk(sk);
59 atomic_inc(&jsk->skb_pending);
64 struct j1939_sock *jsk = j1939_sk(sk);
66 return atomic_read(&jsk->skb_pending);
71 struct j1939_sock *jsk = j1939_sk(sk);
74 if (!atomic_dec_return(&jsk->skb_pending))
75 wake_up(&jsk->waitq); /* no pending SKB's */
78 static void j1939_jsk_add(struct j1939_priv *priv, struct j1939_sock *jsk)
80 jsk->state |= J1939_SOCK_BOUND;
84 list_add_tail(&jsk->list, &priv->j1939_socks);
88 static void j1939_jsk_del(struct j1939_priv *priv, struct j1939_sock *jsk)
91 list_del_init(&jsk->list);
95 jsk->state &= ~J1939_SOCK_BOUND;
100 struct j1939_sock *jsk = j1939_sk(session->sk);
103 spin_lock_bh(&jsk->sk_session_queue_lock);
104 empty = list_empty(&jsk->sk_session_queue);
106 list_add_tail(&session->sk_session_queue_entry, &jsk->sk_session_queue);
107 spin_unlock_bh(&jsk->sk_session_queue_lock);
108 j1939_sock_pending_add(&jsk->sk);
114 j1939_session *j1939_sk_get_incomplete_session(struct j1939_sock *jsk)
118 spin_lock_bh(&jsk->sk_session_queue_lock);
119 if (!list_empty(&jsk->sk_session_queue)) {
120 session = list_last_entry(&jsk->sk_session_queue,
128 spin_unlock_bh(&jsk->sk_session_queue_lock);
134 struct j1939_sock *jsk, int err)
139 spin_lock_bh(&jsk->sk_session_queue_lock);
140 list_for_each_entry_safe(session, tmp, &jsk->sk_session_queue,
146 spin_unlock_bh(&jsk->sk_session_queue_lock);
151 struct j1939_sock *jsk;
159 jsk = j1939_sk(session->sk);
160 lockdep_assert_held(&jsk->sk_session_queue_lock);
164 first = list_first_entry_or_null(&jsk->sk_session_queue,
175 first = list_first_entry_or_null(&jsk->sk_session_queue,
200 struct j1939_sock *jsk;
205 jsk = j1939_sk(session->sk);
207 spin_lock_bh(&jsk->sk_session_queue_lock);
209 spin_unlock_bh(&jsk->sk_session_queue_lock);
212 static bool j1939_sk_match_dst(struct j1939_sock *jsk,
215 if ((jsk->state & J1939_SOCK_PROMISC))
219 if (jsk->addr.src_name && skcb->addr.dst_name) {
220 if (jsk->addr.src_name != skcb->addr.dst_name)
229 if (jsk->addr.sa != skcb->addr.da)
231 } else if (!sock_flag(&jsk->sk, SOCK_BROADCAST)) {
240 if (jsk->state & J1939_SOCK_CONNECTED) {
244 if (jsk->addr.dst_name && skcb->addr.src_name) {
245 if (jsk->addr.dst_name != skcb->addr.src_name)
248 if (jsk->addr.da != skcb->addr.sa)
254 if (j1939_pgn_is_valid(jsk->pgn_rx_filter) &&
255 jsk->pgn_rx_filter != skcb->addr.pgn)
262 static bool j1939_sk_match_filter(struct j1939_sock *jsk,
268 spin_lock_bh(&jsk->filters_lock);
270 f = jsk->filters;
271 nfilter = jsk->nfilters;
287 spin_unlock_bh(&jsk->filters_lock);
291 spin_unlock_bh(&jsk->filters_lock);
295 static bool j1939_sk_recv_match_one(struct j1939_sock *jsk,
298 if (!(jsk->state & J1939_SOCK_BOUND))
301 if (!j1939_sk_match_dst(jsk, skcb))
304 if (!j1939_sk_match_filter(jsk, skcb))
310 static void j1939_sk_recv_one(struct j1939_sock *jsk, struct sk_buff *oskb)
316 if (oskb->sk == &jsk->sk)
319 if (!j1939_sk_recv_match_one(jsk, oskcb))
334 if (sock_queue_rcv_skb(&jsk->sk, skb) < 0)
340 struct j1939_sock *jsk;
344 list_for_each_entry(jsk, &priv->j1939_socks, list) {
345 match = j1939_sk_recv_match_one(jsk, skcb);
356 struct j1939_sock *jsk;
359 list_for_each_entry(jsk, &priv->j1939_socks, list) {
360 j1939_sk_recv_one(jsk, skb);
367 struct j1939_sock *jsk = j1939_sk(sk);
384 if (jsk->priv) {
385 j1939_priv_put(jsk->priv);
386 jsk->priv = NULL;
395 struct j1939_sock *jsk = j1939_sk(sk);
401 memset((void *)jsk + sizeof(jsk->sk), 0x0,
402 sizeof(*jsk) - sizeof(jsk->sk));
404 INIT_LIST_HEAD(&jsk->list);
405 init_waitqueue_head(&jsk->waitq);
406 jsk->sk.sk_priority = j1939_to_sk_priority(6);
407 jsk->sk.sk_reuse = 1; /* per default */
408 jsk->addr.sa = J1939_NO_ADDR;
409 jsk->addr.da = J1939_NO_ADDR;
410 jsk->addr.pgn = J1939_NO_PGN;
411 jsk->pgn_rx_filter = J1939_NO_PGN;
412 atomic_set(&jsk->skb_pending, 0);
413 spin_lock_init(&jsk->sk_session_queue_lock);
414 INIT_LIST_HEAD(&jsk->sk_session_queue);
415 spin_lock_init(&jsk->filters_lock);
445 struct j1939_sock *jsk = j1939_sk(sock->sk);
457 priv = jsk->priv;
462 if (jsk->state & J1939_SOCK_BOUND) {
466 if (jsk->ifindex != addr->can_ifindex) {
472 j1939_jsk_del(priv, jsk);
473 j1939_local_ecu_put(priv, jsk->addr.src_name, jsk->addr.sa);
504 jsk->ifindex = addr->can_ifindex;
510 jsk->priv = priv;
515 jsk->pgn_rx_filter = addr->can_addr.j1939.pgn;
516 jsk->addr.src_name = addr->can_addr.j1939.name;
517 jsk->addr.sa = addr->can_addr.j1939.addr;
520 ret = j1939_local_ecu_get(priv, jsk->addr.src_name, jsk->addr.sa);
526 j1939_jsk_add(priv, jsk);
538 struct j1939_sock *jsk = j1939_sk(sock->sk);
548 if (!(jsk->state & J1939_SOCK_BOUND)) {
554 if (jsk->ifindex != addr->can_ifindex) {
561 !sock_flag(&jsk->sk, SOCK_BROADCAST)) {
567 jsk->addr.dst_name = addr->can_addr.j1939.name;
568 jsk->addr.da = addr->can_addr.j1939.addr;
571 jsk->addr.pgn = addr->can_addr.j1939.pgn;
573 jsk->state |= J1939_SOCK_CONNECTED;
582 const struct j1939_sock *jsk, int peer)
590 addr->can_ifindex = jsk->ifindex;
591 addr->can_addr.j1939.pgn = jsk->addr.pgn;
593 addr->can_addr.j1939.name = jsk->addr.dst_name;
594 addr->can_addr.j1939.addr = jsk->addr.da;
596 addr->can_addr.j1939.name = jsk->addr.src_name;
597 addr->can_addr.j1939.addr = jsk->addr.sa;
606 struct j1939_sock *jsk = j1939_sk(sk);
611 if (peer && !(jsk->state & J1939_SOCK_CONNECTED)) {
616 j1939_sk_sock2sockaddr_can(addr, jsk, peer);
628 struct j1939_sock *jsk;
634 jsk = j1939_sk(sk);
636 if (jsk->state & J1939_SOCK_BOUND) {
637 struct j1939_priv *priv = jsk->priv;
639 if (wait_event_interruptible(jsk->waitq,
640 !j1939_sock_pending_get(&jsk->sk))) {
642 j1939_sk_queue_drop_all(priv, jsk, ESHUTDOWN);
645 j1939_jsk_del(priv, jsk);
647 j1939_local_ecu_put(priv, jsk->addr.src_name,
648 jsk->addr.sa);
653 kfree(jsk->filters);
663 static int j1939_sk_setsockopt_flag(struct j1939_sock *jsk, sockptr_t optval,
672 lock_sock(&jsk->sk);
674 jsk->state |= flag;
676 jsk->state &= ~flag;
677 release_sock(&jsk->sk);
685 struct j1939_sock *jsk = j1939_sk(sk);
717 lock_sock(&jsk->sk);
718 spin_lock_bh(&jsk->filters_lock);
719 ofilters = jsk->filters;
720 jsk->filters = filters;
721 jsk->nfilters = count;
722 spin_unlock_bh(&jsk->filters_lock);
723 release_sock(&jsk->sk);
727 return j1939_sk_setsockopt_flag(jsk, optval, optlen,
730 ret = j1939_sk_setsockopt_flag(jsk, optval, optlen,
735 if (!(jsk->state & J1939_SOCK_ERRQUEUE))
747 lock_sock(&jsk->sk);
748 jsk->sk.sk_priority = j1939_to_sk_priority(tmp);
749 release_sock(&jsk->sk);
760 struct j1939_sock *jsk = j1939_sk(sk);
774 lock_sock(&jsk->sk);
777 tmp = (jsk->state & J1939_SOCK_PROMISC) ? 1 : 0;
780 tmp = (jsk->state & J1939_SOCK_ERRQUEUE) ? 1 : 0;
783 tmp = j1939_prio(jsk->sk.sk_priority);
803 release_sock(&jsk->sk);
873 struct j1939_sock *jsk = j1939_sk(sk);
900 skcb->addr = jsk->addr;
987 struct j1939_sock *jsk;
994 jsk = j1939_sk(sk);
996 if (!(jsk->state & J1939_SOCK_ERRQUEUE))
1088 struct j1939_sock *jsk;
1098 list_for_each_entry(jsk, &priv->j1939_socks, list) {
1099 if (j1939_sk_recv_match_one(jsk, &session->skcb))
1100 __j1939_sk_errqueue(session, &jsk->sk, type);
1107 struct j1939_sock *jsk = j1939_sk(sk);
1109 if (jsk->state & J1939_SOCK_ERRQUEUE)
1121 struct j1939_sock *jsk = j1939_sk(sk);
1122 struct j1939_session *session = j1939_sk_get_incomplete_session(jsk);
1168 j1939_sk_queue_drop_all(priv, jsk,
1215 struct j1939_sock *jsk = j1939_sk(sk);
1222 if (!(jsk->state & J1939_SOCK_BOUND)) {
1227 priv = jsk->priv;
1228 ifindex = jsk->ifindex;
1230 if (!jsk->addr.src_name && jsk->addr.sa == J1939_NO_ADDR) {
1269 if (!jsk->addr.dst_name && jsk->addr.da == J1939_NO_ADDR &&
1287 struct j1939_sock *jsk;
1291 list_for_each_entry(jsk, &priv->j1939_socks, list) {
1292 jsk->sk.sk_err = error_code;
1293 if (!sock_flag(&jsk->sk, SOCK_DEAD))
1294 sk_error_report(&jsk->sk);
1296 j1939_sk_queue_drop_all(priv, jsk, error_code);