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 --- |