protocol.h (6da14d74e2bd07bca2cba10878dda5dc0485d59c) protocol.h (ff5a0b421cb23bf6b2898939ffef5b683045d9d3)
1/* SPDX-License-Identifier: GPL-2.0 */
2/* Multipath TCP
3 *
4 * Copyright (c) 2017 - 2019, Intel Corporation.
5 */
6
7#ifndef __MPTCP_PROTOCOL_H
8#define __MPTCP_PROTOCOL_H

--- 418 unchanged lines hidden (view full) ---

427 map_valid : 1,
428 map_csum_reqd : 1,
429 map_data_fin : 1,
430 mpc_map : 1,
431 backup : 1,
432 send_mp_prio : 1,
433 rx_eof : 1,
434 can_ack : 1, /* only after processing the remote a key */
1/* SPDX-License-Identifier: GPL-2.0 */
2/* Multipath TCP
3 *
4 * Copyright (c) 2017 - 2019, Intel Corporation.
5 */
6
7#ifndef __MPTCP_PROTOCOL_H
8#define __MPTCP_PROTOCOL_H

--- 418 unchanged lines hidden (view full) ---

427 map_valid : 1,
428 map_csum_reqd : 1,
429 map_data_fin : 1,
430 mpc_map : 1,
431 backup : 1,
432 send_mp_prio : 1,
433 rx_eof : 1,
434 can_ack : 1, /* only after processing the remote a key */
435 disposable : 1; /* ctx can be free at ulp release time */
435 disposable : 1, /* ctx can be free at ulp release time */
436 stale : 1; /* unable to snd/rcv data, do not use for xmit */
436 enum mptcp_data_avail data_avail;
437 u32 remote_nonce;
438 u64 thmac;
439 u32 local_nonce;
440 u32 remote_token;
441 u8 hmac[MPTCPOPT_HMAC_LEN];
442 u8 local_id;
443 u8 remote_id;

--- 111 unchanged lines hidden (view full) ---

555 smp_wmb();
556 clear_bit(MPTCP_DELEGATE_SEND, &subflow->delegated_status);
557}
558
559int mptcp_is_enabled(const struct net *net);
560unsigned int mptcp_get_add_addr_timeout(const struct net *net);
561int mptcp_is_checksum_enabled(const struct net *net);
562int mptcp_allow_join_id0(const struct net *net);
437 enum mptcp_data_avail data_avail;
438 u32 remote_nonce;
439 u64 thmac;
440 u32 local_nonce;
441 u32 remote_token;
442 u8 hmac[MPTCPOPT_HMAC_LEN];
443 u8 local_id;
444 u8 remote_id;

--- 111 unchanged lines hidden (view full) ---

556 smp_wmb();
557 clear_bit(MPTCP_DELEGATE_SEND, &subflow->delegated_status);
558}
559
560int mptcp_is_enabled(const struct net *net);
561unsigned int mptcp_get_add_addr_timeout(const struct net *net);
562int mptcp_is_checksum_enabled(const struct net *net);
563int mptcp_allow_join_id0(const struct net *net);
564unsigned int mptcp_stale_loss_cnt(const struct net *net);
563void mptcp_subflow_fully_established(struct mptcp_subflow_context *subflow,
564 struct mptcp_options_received *mp_opt);
565bool __mptcp_retransmit_pending_data(struct sock *sk);
565void mptcp_subflow_fully_established(struct mptcp_subflow_context *subflow,
566 struct mptcp_options_received *mp_opt);
567bool __mptcp_retransmit_pending_data(struct sock *sk);
568void __mptcp_push_pending(struct sock *sk, unsigned int flags);
566bool mptcp_subflow_data_available(struct sock *sk);
567void __init mptcp_subflow_init(void);
568void mptcp_subflow_shutdown(struct sock *sk, struct sock *ssk, int how);
569void mptcp_close_ssk(struct sock *sk, struct sock *ssk,
570 struct mptcp_subflow_context *subflow);
571void mptcp_subflow_reset(struct sock *ssk);
572void mptcp_sock_graft(struct sock *sk, struct socket *parent);
573struct socket *__mptcp_nmpc_socket(const struct mptcp_sock *msk);
574
575/* called with sk socket lock held */
576int __mptcp_subflow_connect(struct sock *sk, const struct mptcp_addr_info *loc,
577 const struct mptcp_addr_info *remote,
578 u8 flags, int ifindex);
579int mptcp_subflow_create_socket(struct sock *sk, struct socket **new_sock);
580void mptcp_info2sockaddr(const struct mptcp_addr_info *info,
581 struct sockaddr_storage *addr,
582 unsigned short family);
583
569bool mptcp_subflow_data_available(struct sock *sk);
570void __init mptcp_subflow_init(void);
571void mptcp_subflow_shutdown(struct sock *sk, struct sock *ssk, int how);
572void mptcp_close_ssk(struct sock *sk, struct sock *ssk,
573 struct mptcp_subflow_context *subflow);
574void mptcp_subflow_reset(struct sock *ssk);
575void mptcp_sock_graft(struct sock *sk, struct socket *parent);
576struct socket *__mptcp_nmpc_socket(const struct mptcp_sock *msk);
577
578/* called with sk socket lock held */
579int __mptcp_subflow_connect(struct sock *sk, const struct mptcp_addr_info *loc,
580 const struct mptcp_addr_info *remote,
581 u8 flags, int ifindex);
582int mptcp_subflow_create_socket(struct sock *sk, struct socket **new_sock);
583void mptcp_info2sockaddr(const struct mptcp_addr_info *info,
584 struct sockaddr_storage *addr,
585 unsigned short family);
586
584static inline bool mptcp_subflow_active(struct mptcp_subflow_context *subflow)
587static inline bool __mptcp_subflow_active(struct mptcp_subflow_context *subflow)
585{
586 struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
587
588 /* can't send if JOIN hasn't completed yet (i.e. is usable for mptcp) */
589 if (subflow->request_join && !subflow->fully_established)
590 return false;
591
592 /* only send if our side has not closed yet */
593 return ((1 << ssk->sk_state) & (TCPF_ESTABLISHED | TCPF_CLOSE_WAIT));
594}
595
588{
589 struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
590
591 /* can't send if JOIN hasn't completed yet (i.e. is usable for mptcp) */
592 if (subflow->request_join && !subflow->fully_established)
593 return false;
594
595 /* only send if our side has not closed yet */
596 return ((1 << ssk->sk_state) & (TCPF_ESTABLISHED | TCPF_CLOSE_WAIT));
597}
598
599void mptcp_subflow_set_active(struct mptcp_subflow_context *subflow);
600
601bool mptcp_subflow_active(struct mptcp_subflow_context *subflow);
602
596static inline void mptcp_subflow_tcp_fallback(struct sock *sk,
597 struct mptcp_subflow_context *ctx)
598{
599 sk->sk_data_ready = ctx->tcp_data_ready;
600 sk->sk_state_change = ctx->tcp_state_change;
601 sk->sk_write_space = ctx->tcp_write_space;
602 sk->sk_error_report = ctx->tcp_error_report;
603

--- 90 unchanged lines hidden (view full) ---

694
695void mptcp_crypto_key_sha(u64 key, u32 *token, u64 *idsn);
696
697void mptcp_crypto_hmac_sha(u64 key1, u64 key2, u8 *msg, int len, void *hmac);
698
699void __init mptcp_pm_init(void);
700void mptcp_pm_data_init(struct mptcp_sock *msk);
701void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk);
603static inline void mptcp_subflow_tcp_fallback(struct sock *sk,
604 struct mptcp_subflow_context *ctx)
605{
606 sk->sk_data_ready = ctx->tcp_data_ready;
607 sk->sk_state_change = ctx->tcp_state_change;
608 sk->sk_write_space = ctx->tcp_write_space;
609 sk->sk_error_report = ctx->tcp_error_report;
610

--- 90 unchanged lines hidden (view full) ---

701
702void mptcp_crypto_key_sha(u64 key, u32 *token, u64 *idsn);
703
704void mptcp_crypto_hmac_sha(u64 key1, u64 key2, u8 *msg, int len, void *hmac);
705
706void __init mptcp_pm_init(void);
707void mptcp_pm_data_init(struct mptcp_sock *msk);
708void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk);
709void mptcp_pm_nl_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk);
702void mptcp_pm_new_connection(struct mptcp_sock *msk, const struct sock *ssk, int server_side);
703void mptcp_pm_fully_established(struct mptcp_sock *msk, const struct sock *ssk, gfp_t gfp);
704bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk);
705void mptcp_pm_connection_closed(struct mptcp_sock *msk);
706void mptcp_pm_subflow_established(struct mptcp_sock *msk);
707void mptcp_pm_subflow_closed(struct mptcp_sock *msk, u8 id);
708void mptcp_pm_add_addr_received(struct mptcp_sock *msk,
709 const struct mptcp_addr_info *addr);

--- 168 unchanged lines hidden ---
710void mptcp_pm_new_connection(struct mptcp_sock *msk, const struct sock *ssk, int server_side);
711void mptcp_pm_fully_established(struct mptcp_sock *msk, const struct sock *ssk, gfp_t gfp);
712bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk);
713void mptcp_pm_connection_closed(struct mptcp_sock *msk);
714void mptcp_pm_subflow_established(struct mptcp_sock *msk);
715void mptcp_pm_subflow_closed(struct mptcp_sock *msk, u8 id);
716void mptcp_pm_add_addr_received(struct mptcp_sock *msk,
717 const struct mptcp_addr_info *addr);

--- 168 unchanged lines hidden ---