linux/net/mptcp/pm.c

// SPDX-License-Identifier: GPL-2.0
/* Multipath TCP
 *
 * Copyright (c) 2019, Intel Corporation.
 */
#define pr_fmt(fmt)

#include <linux/kernel.h>
#include <net/mptcp.h>
#include "protocol.h"

#include "mib.h"

/* path manager command handlers */

int mptcp_pm_announce_addr(struct mptcp_sock *msk,
			   const struct mptcp_addr_info *addr,
			   bool echo)
{}

int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list)
{}

int mptcp_pm_remove_subflow(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list)
{}

/* path manager event handlers */

void mptcp_pm_new_connection(struct mptcp_sock *msk, const struct sock *ssk, int server_side)
{}

bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk)
{}

/* return true if the new status bit is currently cleared, that is, this event
 * can be server, eventually by an already scheduled work
 */
static bool mptcp_pm_schedule_work(struct mptcp_sock *msk,
				   enum mptcp_pm_status new_status)
{}

void mptcp_pm_fully_established(struct mptcp_sock *msk, const struct sock *ssk)
{}

void mptcp_pm_connection_closed(struct mptcp_sock *msk)
{}

void mptcp_pm_subflow_established(struct mptcp_sock *msk)
{}

void mptcp_pm_subflow_check_next(struct mptcp_sock *msk,
				 const struct mptcp_subflow_context *subflow)
{}

void mptcp_pm_add_addr_received(const struct sock *ssk,
				const struct mptcp_addr_info *addr)
{}

void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk,
			      const struct mptcp_addr_info *addr)
{}

void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk)
{}

void mptcp_pm_rm_addr_received(struct mptcp_sock *msk,
			       const struct mptcp_rm_list *rm_list)
{}

void mptcp_pm_mp_prio_received(struct sock *ssk, u8 bkup)
{}

void mptcp_pm_mp_fail_received(struct sock *sk, u64 fail_seq)
{}

/* path manager helpers */

bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff *skb,
			      unsigned int opt_size, unsigned int remaining,
			      struct mptcp_addr_info *addr, bool *echo,
			      bool *drop_other_suboptions)
{}

bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
			     struct mptcp_rm_list *rm_list)
{}

int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc)
{}

bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc)
{}

int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id,
					 u8 *flags, int *ifindex)
{}

int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info)
{}

int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb)
{}

int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
{}

void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk)
{}

/* if sk is ipv4 or ipv6_only allows only same-family local and remote addresses,
 * otherwise allow any matching local/remote pair
 */
bool mptcp_pm_addr_families_match(const struct sock *sk,
				  const struct mptcp_addr_info *loc,
				  const struct mptcp_addr_info *rem)
{}

void mptcp_pm_data_reset(struct mptcp_sock *msk)
{}

void mptcp_pm_data_init(struct mptcp_sock *msk)
{}

void __init mptcp_pm_init(void)
{}