Lines Matching refs:tsk

113 static int tipc_sk_publish(struct tipc_sock *tsk, uint scope,
115 static int tipc_sk_withdraw(struct tipc_sock *tsk, uint scope,
118 static int tipc_sk_insert(struct tipc_sock *tsk);
119 static void tipc_sk_remove(struct tipc_sock *tsk);
184 static u32 tsk_own_node(struct tipc_sock *tsk) in tsk_own_node() argument
186 return msg_prevnode(&tsk->phdr); in tsk_own_node()
189 static u32 tsk_peer_node(struct tipc_sock *tsk) in tsk_peer_node() argument
191 return msg_destnode(&tsk->phdr); in tsk_peer_node()
194 static u32 tsk_peer_port(struct tipc_sock *tsk) in tsk_peer_port() argument
196 return msg_destport(&tsk->phdr); in tsk_peer_port()
199 static bool tsk_unreliable(struct tipc_sock *tsk) in tsk_unreliable() argument
201 return msg_src_droppable(&tsk->phdr) != 0; in tsk_unreliable()
204 static void tsk_set_unreliable(struct tipc_sock *tsk, bool unreliable) in tsk_set_unreliable() argument
206 msg_set_src_droppable(&tsk->phdr, unreliable ? 1 : 0); in tsk_set_unreliable()
209 static bool tsk_unreturnable(struct tipc_sock *tsk) in tsk_unreturnable() argument
211 return msg_dest_droppable(&tsk->phdr) != 0; in tsk_unreturnable()
214 static void tsk_set_unreturnable(struct tipc_sock *tsk, bool unreturnable) in tsk_set_unreturnable() argument
216 msg_set_dest_droppable(&tsk->phdr, unreturnable ? 1 : 0); in tsk_set_unreturnable()
219 static int tsk_importance(struct tipc_sock *tsk) in tsk_importance() argument
221 return msg_importance(&tsk->phdr); in tsk_importance()
224 static int tsk_set_importance(struct tipc_sock *tsk, int imp) in tsk_set_importance() argument
228 msg_set_importance(&tsk->phdr, (u32)imp); in tsk_set_importance()
237 static int tsk_conn_cong(struct tipc_sock *tsk) in tsk_conn_cong() argument
239 return tsk->sent_unacked >= TIPC_FLOWCTRL_WIN; in tsk_conn_cong()
286 static bool tsk_peer_msg(struct tipc_sock *tsk, struct tipc_msg *msg) in tsk_peer_msg() argument
288 struct tipc_net *tn = net_generic(sock_net(&tsk->sk), tipc_net_id); in tsk_peer_msg()
289 u32 peer_port = tsk_peer_port(tsk); in tsk_peer_msg()
293 if (unlikely(!tsk->connected)) in tsk_peer_msg()
300 peer_node = tsk_peer_node(tsk); in tsk_peer_msg()
333 struct tipc_sock *tsk; in tipc_sk_create() local
363 tsk = tipc_sk(sk); in tipc_sk_create()
364 tsk->max_pkt = MAX_PKT_DEFAULT; in tipc_sk_create()
365 INIT_LIST_HEAD(&tsk->publications); in tipc_sk_create()
366 msg = &tsk->phdr; in tipc_sk_create()
375 if (tipc_sk_insert(tsk)) { in tipc_sk_create()
379 msg_set_origport(msg, tsk->portid); in tipc_sk_create()
380 setup_timer(&sk->sk_timer, tipc_sk_timeout, (unsigned long)tsk); in tipc_sk_create()
386 tsk->conn_timeout = CONN_TIMEOUT_DEFAULT; in tipc_sk_create()
387 tsk->sent_unacked = 0; in tipc_sk_create()
388 atomic_set(&tsk->dupl_rcvcnt, 0); in tipc_sk_create()
391 tsk_set_unreturnable(tsk, true); in tipc_sk_create()
393 tsk_set_unreliable(tsk, true); in tipc_sk_create()
400 struct tipc_sock *tsk = container_of(head, struct tipc_sock, rcu); in tipc_sk_callback() local
402 sock_put(&tsk->sk); in tipc_sk_callback()
425 struct tipc_sock *tsk; in tipc_release() local
437 tsk = tipc_sk(sk); in tipc_release()
444 dnode = tsk_peer_node(tsk); in tipc_release()
455 tsk->connected = 0; in tipc_release()
456 tipc_node_remove_conn(net, dnode, tsk->portid); in tipc_release()
462 tipc_sk_withdraw(tsk, 0, NULL); in tipc_release()
464 tipc_sk_remove(tsk); in tipc_release()
465 if (tsk->connected) { in tipc_release()
468 tsk_own_node(tsk), tsk_peer_port(tsk), in tipc_release()
469 tsk->portid, TIPC_ERR_NO_PORT); in tipc_release()
471 tipc_node_xmit_skb(net, skb, dnode, tsk->portid); in tipc_release()
472 tipc_node_remove_conn(net, dnode, tsk->portid); in tipc_release()
479 call_rcu(&tsk->rcu, tipc_sk_callback); in tipc_release()
505 struct tipc_sock *tsk = tipc_sk(sk); in tipc_bind() local
510 res = tipc_sk_withdraw(tsk, 0, NULL); in tipc_bind()
538 tipc_sk_publish(tsk, addr->scope, &addr->addr.nameseq) : in tipc_bind()
539 tipc_sk_withdraw(tsk, -addr->scope, &addr->addr.nameseq); in tipc_bind()
562 struct tipc_sock *tsk = tipc_sk(sock->sk); in tipc_getname() local
570 addr->addr.id.ref = tsk_peer_port(tsk); in tipc_getname()
571 addr->addr.id.node = tsk_peer_node(tsk); in tipc_getname()
573 addr->addr.id.ref = tsk->portid; in tipc_getname()
630 struct tipc_sock *tsk = tipc_sk(sk); in tipc_poll() local
637 if (!tsk->link_cong) in tipc_poll()
642 if (!tsk->link_cong && !tsk_conn_cong(tsk)) in tipc_poll()
673 struct tipc_sock *tsk = tipc_sk(sk); in tipc_sendmcast() local
675 struct tipc_msg *mhdr = &tsk->phdr; in tipc_sendmcast()
704 tsk->link_cong = 1; in tipc_sendmcast()
780 static void tipc_sk_proto_rcv(struct tipc_sock *tsk, struct sk_buff *skb) in tipc_sk_proto_rcv() argument
782 struct sock *sk = &tsk->sk; in tipc_sk_proto_rcv()
788 if (!tsk_peer_msg(tsk, hdr)) in tipc_sk_proto_rcv()
791 tsk->probing_state = TIPC_CONN_OK; in tipc_sk_proto_rcv()
798 conn_cong = tsk_conn_cong(tsk); in tipc_sk_proto_rcv()
799 tsk->sent_unacked -= msg_msgcnt(hdr); in tipc_sk_proto_rcv()
812 struct tipc_sock *tsk = tipc_sk(sk); in tipc_wait_for_sndmsg() local
828 done = sk_wait_event(sk, timeo_p, !tsk->link_cong); in tipc_wait_for_sndmsg()
864 struct tipc_sock *tsk = tipc_sk(sk); in __tipc_sendmsg() local
866 struct tipc_msg *mhdr = &tsk->phdr; in __tipc_sendmsg()
879 if (tsk->connected && sock->state == SS_READY) in __tipc_sendmsg()
880 dest = &tsk->remote; in __tipc_sendmsg()
892 if (tsk->published) in __tipc_sendmsg()
895 tsk->conn_type = dest->addr.name.name.type; in __tipc_sendmsg()
896 tsk->conn_instance = dest->addr.name.name.instance; in __tipc_sendmsg()
932 mtu = tipc_node_get_mtu(net, dnode, tsk->portid); in __tipc_sendmsg()
939 TIPC_SKB_CB(skb)->wakeup_pending = tsk->link_cong; in __tipc_sendmsg()
940 rc = tipc_node_xmit(net, &pktchain, dnode, tsk->portid); in __tipc_sendmsg()
947 tsk->link_cong = 1; in __tipc_sendmsg()
966 struct tipc_sock *tsk = tipc_sk(sk); in tipc_wait_for_sndpkt() local
985 (!tsk->link_cong && in tipc_wait_for_sndpkt()
986 !tsk_conn_cong(tsk)) || in tipc_wait_for_sndpkt()
987 !tsk->connected); in tipc_wait_for_sndpkt()
1020 struct tipc_sock *tsk = tipc_sk(sk); in __tipc_send_stream() local
1021 struct tipc_msg *mhdr = &tsk->phdr; in __tipc_send_stream()
1024 u32 portid = tsk->portid; in __tipc_send_stream()
1035 tsk->sent_unacked = 1; in __tipc_send_stream()
1049 dnode = tsk_peer_node(tsk); in __tipc_send_stream()
1054 mtu = tsk->max_pkt; in __tipc_send_stream()
1061 if (likely(!tsk_conn_cong(tsk))) { in __tipc_send_stream()
1064 tsk->sent_unacked++; in __tipc_send_stream()
1072 tsk->max_pkt = tipc_node_get_mtu(net, dnode, in __tipc_send_stream()
1080 tsk->link_cong = 1; in __tipc_send_stream()
1109 static void tipc_sk_finish_conn(struct tipc_sock *tsk, u32 peer_port, in tipc_sk_finish_conn() argument
1112 struct sock *sk = &tsk->sk; in tipc_sk_finish_conn()
1114 struct tipc_msg *msg = &tsk->phdr; in tipc_sk_finish_conn()
1122 tsk->probing_intv = CONN_PROBING_INTERVAL; in tipc_sk_finish_conn()
1123 tsk->probing_state = TIPC_CONN_OK; in tipc_sk_finish_conn()
1124 tsk->connected = 1; in tipc_sk_finish_conn()
1125 sk_reset_timer(sk, &sk->sk_timer, jiffies + tsk->probing_intv); in tipc_sk_finish_conn()
1126 tipc_node_add_conn(net, peer_node, tsk->portid, peer_port); in tipc_sk_finish_conn()
1127 tsk->max_pkt = tipc_node_get_mtu(net, peer_node, tsk->portid); in tipc_sk_finish_conn()
1164 struct tipc_sock *tsk) in tipc_sk_anc_data_recv() argument
1207 has_name = (tsk->conn_type != 0); in tipc_sk_anc_data_recv()
1208 anc_data[0] = tsk->conn_type; in tipc_sk_anc_data_recv()
1209 anc_data[1] = tsk->conn_instance; in tipc_sk_anc_data_recv()
1210 anc_data[2] = tsk->conn_instance; in tipc_sk_anc_data_recv()
1224 static void tipc_sk_send_ack(struct tipc_sock *tsk, uint ack) in tipc_sk_send_ack() argument
1226 struct net *net = sock_net(&tsk->sk); in tipc_sk_send_ack()
1229 u32 peer_port = tsk_peer_port(tsk); in tipc_sk_send_ack()
1230 u32 dnode = tsk_peer_node(tsk); in tipc_sk_send_ack()
1232 if (!tsk->connected) in tipc_sk_send_ack()
1235 dnode, tsk_own_node(tsk), peer_port, in tipc_sk_send_ack()
1236 tsk->portid, TIPC_OK); in tipc_sk_send_ack()
1292 struct tipc_sock *tsk = tipc_sk(sk); in tipc_recvmsg() local
1335 res = tipc_sk_anc_data_recv(m, msg, tsk); in tipc_recvmsg()
1360 (++tsk->rcv_unacked >= TIPC_CONNACK_INTV)) { in tipc_recvmsg()
1361 tipc_sk_send_ack(tsk, tsk->rcv_unacked); in tipc_recvmsg()
1362 tsk->rcv_unacked = 0; in tipc_recvmsg()
1386 struct tipc_sock *tsk = tipc_sk(sk); in tipc_recv_stream() local
1431 res = tipc_sk_anc_data_recv(m, msg, tsk); in tipc_recv_stream()
1469 if (unlikely(++tsk->rcv_unacked >= TIPC_CONNACK_INTV)) { in tipc_recv_stream()
1470 tipc_sk_send_ack(tsk, tsk->rcv_unacked); in tipc_recv_stream()
1471 tsk->rcv_unacked = 0; in tipc_recv_stream()
1534 static bool filter_connect(struct tipc_sock *tsk, struct sk_buff *skb) in filter_connect() argument
1536 struct sock *sk = &tsk->sk; in filter_connect()
1548 if (unlikely(!tsk_peer_msg(tsk, hdr))) in filter_connect()
1553 tsk->connected = 0; in filter_connect()
1555 tipc_node_remove_conn(net, tsk_peer_node(tsk), in filter_connect()
1556 tsk->portid); in filter_connect()
1578 tipc_sk_finish_conn(tsk, msg_origport(hdr), msg_orignode(hdr)); in filter_connect()
1579 msg_set_importance(&tsk->phdr, msg_importance(hdr)); in filter_connect()
1653 struct tipc_sock *tsk = tipc_sk(sk); in filter_rcv() local
1660 tipc_sk_proto_rcv(tsk, skb); in filter_rcv()
1666 tsk->link_cong = 0; in filter_rcv()
1683 } else if (unlikely(!filter_connect(tsk, skb))) { in filter_rcv()
1780 struct tipc_sock *tsk; in tipc_sk_rcv() local
1786 tsk = tipc_sk_lookup(net, dport); in tipc_sk_rcv()
1788 if (likely(tsk)) { in tipc_sk_rcv()
1789 sk = &tsk->sk; in tipc_sk_rcv()
1852 struct tipc_sock *tsk = tipc_sk(sk); in tipc_connect() local
1855 long timeout = (flags & O_NONBLOCK) ? 0 : tsk->conn_timeout; in tipc_connect()
1864 memset(&tsk->remote, 0, sizeof(struct sockaddr_tipc)); in tipc_connect()
1865 tsk->connected = 0; in tipc_connect()
1869 memcpy(&tsk->remote, dest, destlen); in tipc_connect()
1870 tsk->connected = 1; in tipc_connect()
2081 struct tipc_sock *tsk = tipc_sk(sk); in tipc_shutdown() local
2083 u32 dnode = tsk_peer_node(tsk); in tipc_shutdown()
2084 u32 dport = tsk_peer_port(tsk); in tipc_shutdown()
2086 u32 oport = tsk->portid; in tipc_shutdown()
2099 dnode = tsk_peer_node(tsk); in tipc_shutdown()
2114 tipc_node_xmit_skb(net, skb, dnode, tsk->portid); in tipc_shutdown()
2116 tsk->connected = 0; in tipc_shutdown()
2118 tipc_node_remove_conn(net, dnode, tsk->portid); in tipc_shutdown()
2141 struct tipc_sock *tsk = (struct tipc_sock *)data; in tipc_sk_timeout() local
2142 struct sock *sk = &tsk->sk; in tipc_sk_timeout()
2145 u32 own_node = tsk_own_node(tsk); in tipc_sk_timeout()
2148 if (!tsk->connected) { in tipc_sk_timeout()
2152 peer_port = tsk_peer_port(tsk); in tipc_sk_timeout()
2153 peer_node = tsk_peer_node(tsk); in tipc_sk_timeout()
2155 if (tsk->probing_state == TIPC_CONN_PROBING) { in tipc_sk_timeout()
2158 tsk->connected = 0; in tipc_sk_timeout()
2159 tipc_node_remove_conn(sock_net(sk), tsk_peer_node(tsk), in tipc_sk_timeout()
2160 tsk_peer_port(tsk)); in tipc_sk_timeout()
2170 peer_port, tsk->portid, TIPC_OK); in tipc_sk_timeout()
2171 tsk->probing_state = TIPC_CONN_PROBING; in tipc_sk_timeout()
2172 sk_reset_timer(sk, &sk->sk_timer, jiffies + tsk->probing_intv); in tipc_sk_timeout()
2176 tipc_node_xmit_skb(sock_net(sk), skb, peer_node, tsk->portid); in tipc_sk_timeout()
2181 static int tipc_sk_publish(struct tipc_sock *tsk, uint scope, in tipc_sk_publish() argument
2184 struct net *net = sock_net(&tsk->sk); in tipc_sk_publish()
2188 if (tsk->connected) in tipc_sk_publish()
2190 key = tsk->portid + tsk->pub_count + 1; in tipc_sk_publish()
2191 if (key == tsk->portid) in tipc_sk_publish()
2195 scope, tsk->portid, key); in tipc_sk_publish()
2199 list_add(&publ->pport_list, &tsk->publications); in tipc_sk_publish()
2200 tsk->pub_count++; in tipc_sk_publish()
2201 tsk->published = 1; in tipc_sk_publish()
2205 static int tipc_sk_withdraw(struct tipc_sock *tsk, uint scope, in tipc_sk_withdraw() argument
2208 struct net *net = sock_net(&tsk->sk); in tipc_sk_withdraw()
2213 list_for_each_entry_safe(publ, safe, &tsk->publications, pport_list) { in tipc_sk_withdraw()
2232 if (list_empty(&tsk->publications)) in tipc_sk_withdraw()
2233 tsk->published = 0; in tipc_sk_withdraw()
2245 struct tipc_sock *tsk; in tipc_sk_reinit() local
2252 rht_for_each_entry_rcu(tsk, pos, tbl, i, node) { in tipc_sk_reinit()
2253 spin_lock_bh(&tsk->sk.sk_lock.slock); in tipc_sk_reinit()
2254 msg = &tsk->phdr; in tipc_sk_reinit()
2257 spin_unlock_bh(&tsk->sk.sk_lock.slock); in tipc_sk_reinit()
2266 struct tipc_sock *tsk; in tipc_sk_lookup() local
2269 tsk = rhashtable_lookup_fast(&tn->sk_rht, &portid, tsk_rht_params); in tipc_sk_lookup()
2270 if (tsk) in tipc_sk_lookup()
2271 sock_hold(&tsk->sk); in tipc_sk_lookup()
2274 return tsk; in tipc_sk_lookup()
2277 static int tipc_sk_insert(struct tipc_sock *tsk) in tipc_sk_insert() argument
2279 struct sock *sk = &tsk->sk; in tipc_sk_insert()
2289 tsk->portid = portid; in tipc_sk_insert()
2290 sock_hold(&tsk->sk); in tipc_sk_insert()
2291 if (!rhashtable_lookup_insert_fast(&tn->sk_rht, &tsk->node, in tipc_sk_insert()
2294 sock_put(&tsk->sk); in tipc_sk_insert()
2300 static void tipc_sk_remove(struct tipc_sock *tsk) in tipc_sk_remove() argument
2302 struct sock *sk = &tsk->sk; in tipc_sk_remove()
2305 if (!rhashtable_remove_fast(&tn->sk_rht, &tsk->node, tsk_rht_params)) { in tipc_sk_remove()
2355 struct tipc_sock *tsk = tipc_sk(sk); in tipc_setsockopt() local
2373 res = tsk_set_importance(tsk, value); in tipc_setsockopt()
2377 tsk_set_unreliable(tsk, value); in tipc_setsockopt()
2382 tsk_set_unreturnable(tsk, value); in tipc_setsockopt()
2414 struct tipc_sock *tsk = tipc_sk(sk); in tipc_getsockopt() local
2431 value = tsk_importance(tsk); in tipc_getsockopt()
2434 value = tsk_unreliable(tsk); in tipc_getsockopt()
2437 value = tsk_unreturnable(tsk); in tipc_getsockopt()
2440 value = tsk->conn_timeout; in tipc_getsockopt()
2603 static int __tipc_nl_add_sk_con(struct sk_buff *skb, struct tipc_sock *tsk) in __tipc_nl_add_sk_con() argument
2609 peer_node = tsk_peer_node(tsk); in __tipc_nl_add_sk_con()
2610 peer_port = tsk_peer_port(tsk); in __tipc_nl_add_sk_con()
2619 if (tsk->conn_type != 0) { in __tipc_nl_add_sk_con()
2622 if (nla_put_u32(skb, TIPC_NLA_CON_TYPE, tsk->conn_type)) in __tipc_nl_add_sk_con()
2624 if (nla_put_u32(skb, TIPC_NLA_CON_INST, tsk->conn_instance)) in __tipc_nl_add_sk_con()
2639 struct tipc_sock *tsk) in __tipc_nl_add_sk() argument
2655 if (nla_put_u32(skb, TIPC_NLA_SOCK_REF, tsk->portid)) in __tipc_nl_add_sk()
2660 if (tsk->connected) { in __tipc_nl_add_sk()
2661 err = __tipc_nl_add_sk_con(skb, tsk); in __tipc_nl_add_sk()
2664 } else if (!list_empty(&tsk->publications)) { in __tipc_nl_add_sk()
2684 struct tipc_sock *tsk; in tipc_nl_sk_dump() local
2695 rht_for_each_entry_rcu(tsk, pos, tbl, tbl_id, node) { in tipc_nl_sk_dump()
2696 spin_lock_bh(&tsk->sk.sk_lock.slock); in tipc_nl_sk_dump()
2697 if (prev_portid && prev_portid != tsk->portid) { in tipc_nl_sk_dump()
2698 spin_unlock_bh(&tsk->sk.sk_lock.slock); in tipc_nl_sk_dump()
2702 err = __tipc_nl_add_sk(skb, cb, tsk); in tipc_nl_sk_dump()
2704 prev_portid = tsk->portid; in tipc_nl_sk_dump()
2705 spin_unlock_bh(&tsk->sk.sk_lock.slock); in tipc_nl_sk_dump()
2709 spin_unlock_bh(&tsk->sk.sk_lock.slock); in tipc_nl_sk_dump()
2762 struct tipc_sock *tsk, u32 *last_publ) in __tipc_nl_list_sk_publ() argument
2768 list_for_each_entry(p, &tsk->publications, pport_list) { in __tipc_nl_list_sk_publ()
2784 p = list_first_entry(&tsk->publications, struct publication, in __tipc_nl_list_sk_publ()
2788 list_for_each_entry_from(p, &tsk->publications, pport_list) { in __tipc_nl_list_sk_publ()
2807 struct tipc_sock *tsk; in tipc_nl_publ_dump() local
2835 tsk = tipc_sk_lookup(net, tsk_portid); in tipc_nl_publ_dump()
2836 if (!tsk) in tipc_nl_publ_dump()
2839 lock_sock(&tsk->sk); in tipc_nl_publ_dump()
2840 err = __tipc_nl_list_sk_publ(skb, cb, tsk, &last_publ); in tipc_nl_publ_dump()
2843 release_sock(&tsk->sk); in tipc_nl_publ_dump()
2844 sock_put(&tsk->sk); in tipc_nl_publ_dump()