Lines Matching refs:msk

17 int mptcp_pm_announce_addr(struct mptcp_sock *msk,  in mptcp_pm_announce_addr()  argument
21 u8 add_addr = READ_ONCE(msk->pm.addr_signal); in mptcp_pm_announce_addr()
23 pr_debug("msk=%p, local_id=%d, echo=%d", msk, addr->id, echo); in mptcp_pm_announce_addr()
25 lockdep_assert_held(&msk->pm.lock); in mptcp_pm_announce_addr()
34 msk->pm.remote = *addr; in mptcp_pm_announce_addr()
37 msk->pm.local = *addr; in mptcp_pm_announce_addr()
40 WRITE_ONCE(msk->pm.addr_signal, add_addr); in mptcp_pm_announce_addr()
44 int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list) in mptcp_pm_remove_addr() argument
46 u8 rm_addr = READ_ONCE(msk->pm.addr_signal); in mptcp_pm_remove_addr()
48 pr_debug("msk=%p, rm_list_nr=%d", msk, rm_list->nr); in mptcp_pm_remove_addr()
55 msk->pm.rm_list_tx = *rm_list; in mptcp_pm_remove_addr()
57 WRITE_ONCE(msk->pm.addr_signal, rm_addr); in mptcp_pm_remove_addr()
58 mptcp_pm_nl_addr_send_ack(msk); in mptcp_pm_remove_addr()
62 int mptcp_pm_remove_subflow(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list) in mptcp_pm_remove_subflow() argument
64 pr_debug("msk=%p, rm_list_nr=%d", msk, rm_list->nr); in mptcp_pm_remove_subflow()
66 spin_lock_bh(&msk->pm.lock); in mptcp_pm_remove_subflow()
67 mptcp_pm_nl_rm_subflow_received(msk, rm_list); in mptcp_pm_remove_subflow()
68 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_remove_subflow()
74 void mptcp_pm_new_connection(struct mptcp_sock *msk, const struct sock *ssk, int server_side) in mptcp_pm_new_connection() argument
76 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_new_connection()
78 pr_debug("msk=%p, token=%u side=%d", msk, msk->token, server_side); in mptcp_pm_new_connection()
81 mptcp_event(MPTCP_EVENT_CREATED, msk, ssk, GFP_ATOMIC); in mptcp_pm_new_connection()
84 bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk) in mptcp_pm_allow_new_subflow() argument
86 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_allow_new_subflow()
90 subflows_max = mptcp_pm_get_subflows_max(msk); in mptcp_pm_allow_new_subflow()
92 pr_debug("msk=%p subflows=%d max=%d allow=%d", msk, pm->subflows, in mptcp_pm_allow_new_subflow()
113 static bool mptcp_pm_schedule_work(struct mptcp_sock *msk, in mptcp_pm_schedule_work() argument
116 pr_debug("msk=%p status=%x new=%lx", msk, msk->pm.status, in mptcp_pm_schedule_work()
118 if (msk->pm.status & BIT(new_status)) in mptcp_pm_schedule_work()
121 msk->pm.status |= BIT(new_status); in mptcp_pm_schedule_work()
122 mptcp_schedule_work((struct sock *)msk); in mptcp_pm_schedule_work()
126 void mptcp_pm_fully_established(struct mptcp_sock *msk, const struct sock *ssk, gfp_t gfp) in mptcp_pm_fully_established() argument
128 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_fully_established()
131 pr_debug("msk=%p", msk); in mptcp_pm_fully_established()
140 !(msk->pm.status & BIT(MPTCP_PM_ALREADY_ESTABLISHED))) in mptcp_pm_fully_established()
141 mptcp_pm_schedule_work(msk, MPTCP_PM_ESTABLISHED); in mptcp_pm_fully_established()
143 if ((msk->pm.status & BIT(MPTCP_PM_ALREADY_ESTABLISHED)) == 0) in mptcp_pm_fully_established()
146 msk->pm.status |= BIT(MPTCP_PM_ALREADY_ESTABLISHED); in mptcp_pm_fully_established()
150 mptcp_event(MPTCP_EVENT_ESTABLISHED, msk, ssk, gfp); in mptcp_pm_fully_established()
153 void mptcp_pm_connection_closed(struct mptcp_sock *msk) in mptcp_pm_connection_closed() argument
155 pr_debug("msk=%p", msk); in mptcp_pm_connection_closed()
158 void mptcp_pm_subflow_established(struct mptcp_sock *msk) in mptcp_pm_subflow_established() argument
160 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_subflow_established()
162 pr_debug("msk=%p", msk); in mptcp_pm_subflow_established()
170 mptcp_pm_schedule_work(msk, MPTCP_PM_SUBFLOW_ESTABLISHED); in mptcp_pm_subflow_established()
175 void mptcp_pm_subflow_closed(struct mptcp_sock *msk, u8 id) in mptcp_pm_subflow_closed() argument
177 pr_debug("msk=%p", msk); in mptcp_pm_subflow_closed()
180 void mptcp_pm_add_addr_received(struct mptcp_sock *msk, in mptcp_pm_add_addr_received() argument
183 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_add_addr_received()
185 pr_debug("msk=%p remote_id=%d accept=%d", msk, addr->id, in mptcp_pm_add_addr_received()
188 mptcp_event_addr_announced(msk, addr); in mptcp_pm_add_addr_received()
193 mptcp_pm_announce_addr(msk, addr, true); in mptcp_pm_add_addr_received()
194 mptcp_pm_add_addr_send_ack(msk); in mptcp_pm_add_addr_received()
195 } else if (mptcp_pm_schedule_work(msk, MPTCP_PM_ADD_ADDR_RECEIVED)) { in mptcp_pm_add_addr_received()
202 void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, in mptcp_pm_add_addr_echoed() argument
205 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_add_addr_echoed()
207 pr_debug("msk=%p", msk); in mptcp_pm_add_addr_echoed()
211 if (mptcp_lookup_anno_list_by_saddr(msk, addr) && READ_ONCE(pm->work_pending)) in mptcp_pm_add_addr_echoed()
212 mptcp_pm_schedule_work(msk, MPTCP_PM_SUBFLOW_ESTABLISHED); in mptcp_pm_add_addr_echoed()
217 void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk) in mptcp_pm_add_addr_send_ack() argument
219 if (!mptcp_pm_should_add_signal(msk)) in mptcp_pm_add_addr_send_ack()
222 mptcp_pm_schedule_work(msk, MPTCP_PM_ADD_ADDR_SEND_ACK); in mptcp_pm_add_addr_send_ack()
225 void mptcp_pm_rm_addr_received(struct mptcp_sock *msk, in mptcp_pm_rm_addr_received() argument
228 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_rm_addr_received()
231 pr_debug("msk=%p remote_ids_nr=%d", msk, rm_list->nr); in mptcp_pm_rm_addr_received()
234 mptcp_event_addr_removed(msk, rm_list->ids[i]); in mptcp_pm_rm_addr_received()
237 mptcp_pm_schedule_work(msk, MPTCP_PM_RM_ADDR_RECEIVED); in mptcp_pm_rm_addr_received()
259 bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, struct sk_buff *skb, in mptcp_pm_add_addr_signal() argument
268 spin_lock_bh(&msk->pm.lock); in mptcp_pm_add_addr_signal()
271 if (!mptcp_pm_should_add_signal(msk)) in mptcp_pm_add_addr_signal()
283 *echo = mptcp_pm_should_add_signal_echo(msk); in mptcp_pm_add_addr_signal()
284 *port = !!(*echo ? msk->pm.remote.port : msk->pm.local.port); in mptcp_pm_add_addr_signal()
286 family = *echo ? msk->pm.remote.family : msk->pm.local.family; in mptcp_pm_add_addr_signal()
291 *addr = msk->pm.remote; in mptcp_pm_add_addr_signal()
292 add_addr = msk->pm.addr_signal & ~BIT(MPTCP_ADD_ADDR_ECHO); in mptcp_pm_add_addr_signal()
294 *addr = msk->pm.local; in mptcp_pm_add_addr_signal()
295 add_addr = msk->pm.addr_signal & ~BIT(MPTCP_ADD_ADDR_SIGNAL); in mptcp_pm_add_addr_signal()
297 WRITE_ONCE(msk->pm.addr_signal, add_addr); in mptcp_pm_add_addr_signal()
301 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_add_addr_signal()
305 bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining, in mptcp_pm_rm_addr_signal() argument
311 spin_lock_bh(&msk->pm.lock); in mptcp_pm_rm_addr_signal()
314 if (!mptcp_pm_should_rm_signal(msk)) in mptcp_pm_rm_addr_signal()
317 rm_addr = msk->pm.addr_signal & ~BIT(MPTCP_RM_ADDR_SIGNAL); in mptcp_pm_rm_addr_signal()
318 len = mptcp_rm_addr_len(&msk->pm.rm_list_tx); in mptcp_pm_rm_addr_signal()
320 WRITE_ONCE(msk->pm.addr_signal, rm_addr); in mptcp_pm_rm_addr_signal()
326 *rm_list = msk->pm.rm_list_tx; in mptcp_pm_rm_addr_signal()
327 WRITE_ONCE(msk->pm.addr_signal, rm_addr); in mptcp_pm_rm_addr_signal()
331 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_rm_addr_signal()
335 int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc) in mptcp_pm_get_local_id() argument
337 return mptcp_pm_nl_get_local_id(msk, skc); in mptcp_pm_get_local_id()
340 void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk) in mptcp_pm_subflow_chk_stale() argument
352 mptcp_pm_nl_subflow_chk_stale(msk, ssk); in mptcp_pm_subflow_chk_stale()
359 void mptcp_pm_data_init(struct mptcp_sock *msk) in mptcp_pm_data_init() argument
361 msk->pm.add_addr_signaled = 0; in mptcp_pm_data_init()
362 msk->pm.add_addr_accepted = 0; in mptcp_pm_data_init()
363 msk->pm.local_addr_used = 0; in mptcp_pm_data_init()
364 msk->pm.subflows = 0; in mptcp_pm_data_init()
365 msk->pm.rm_list_tx.nr = 0; in mptcp_pm_data_init()
366 msk->pm.rm_list_rx.nr = 0; in mptcp_pm_data_init()
367 WRITE_ONCE(msk->pm.work_pending, false); in mptcp_pm_data_init()
368 WRITE_ONCE(msk->pm.addr_signal, 0); in mptcp_pm_data_init()
369 WRITE_ONCE(msk->pm.accept_addr, false); in mptcp_pm_data_init()
370 WRITE_ONCE(msk->pm.accept_subflow, false); in mptcp_pm_data_init()
371 WRITE_ONCE(msk->pm.remote_deny_join_id0, false); in mptcp_pm_data_init()
372 msk->pm.status = 0; in mptcp_pm_data_init()
374 spin_lock_init(&msk->pm.lock); in mptcp_pm_data_init()
375 INIT_LIST_HEAD(&msk->pm.anno_list); in mptcp_pm_data_init()
377 mptcp_pm_nl_data_init(msk); in mptcp_pm_data_init()