Skip to content

Commit

Permalink
Merge pull request #51 from Ysurac/develop
Browse files Browse the repository at this point in the history
Allow up to 16 WANs on x86/x86_64
  • Loading branch information
suyuan168 authored Mar 30, 2021
2 parents c3c8bda + b556b63 commit e5401f1
Showing 1 changed file with 162 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
From 443fcdfe3545d63ebac785e359ac42995bd7e014 Mon Sep 17 00:00:00 2001
From: Park Ju Hyung <[email protected]>
Date: Thu, 28 Jan 2021 13:11:32 +0900
Subject: [PATCH] mptcp: fullmesh: raise addresses limit from 8 to 16

This allows fullmesh path manager to use up-to 16 addresses instead of
the previous limit of 8.

Note that this increases the size of 'struct mptcp_cb' considerably.

Signed-off-by: Park Ju Hyung <[email protected]>
---
include/net/mptcp.h | 2 +-
net/mptcp/mptcp_fullmesh.c | 42 +++++++++++++++++++-------------------
2 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/include/net/mptcp.h b/include/net/mptcp.h
index 8da833dd1712..07e5314b628c 100644
--- a/include/net/mptcp.h
+++ b/include/net/mptcp.h
@@ -329,7 +329,7 @@ struct mptcp_cb {
__u32 mptcp_loc_token;
__u32 mptcp_rem_token;

-#define MPTCP_PM_SIZE 608
+#define MPTCP_PM_SIZE 720
u8 mptcp_pm[MPTCP_PM_SIZE] __aligned(8);
const struct mptcp_pm_ops *pm_ops;

diff --git a/net/mptcp/mptcp_fullmesh.c b/net/mptcp/mptcp_fullmesh.c
index 5424960256e6..c95fb6b60531 100644
--- a/net/mptcp/mptcp_fullmesh.c
+++ b/net/mptcp/mptcp_fullmesh.c
@@ -20,32 +20,32 @@ enum {
/* Max number of local or remote addresses we can store.
* When changing, see the bitfield below in fullmesh_rem4/6.
*/
-#define MPTCP_MAX_ADDR 8
+#define MPTCP_MAX_ADDR 16

struct fullmesh_rem4 {
u8 rem4_id;
- u8 bitfield;
- u8 retry_bitfield;
+ u16 bitfield;
+ u16 retry_bitfield;
__be16 port;
struct in_addr addr;
};

struct fullmesh_rem6 {
u8 rem6_id;
- u8 bitfield;
- u8 retry_bitfield;
+ u16 bitfield;
+ u16 retry_bitfield;
__be16 port;
struct in6_addr addr;
};

struct mptcp_loc_addr {
struct mptcp_loc4 locaddr4[MPTCP_MAX_ADDR];
- u8 loc4_bits;
- u8 next_v4_index;
+ u16 loc4_bits;
+ u16 next_v4_index;

struct mptcp_loc6 locaddr6[MPTCP_MAX_ADDR];
- u8 loc6_bits;
- u8 next_v6_index;
+ u16 loc6_bits;
+ u16 next_v6_index;
struct rcu_head rcu;
};

@@ -71,13 +71,13 @@ struct fullmesh_priv {
struct mptcp_cb *mpcb;

u16 remove_addrs; /* Addresses to remove */
- u8 announced_addrs_v4; /* IPv4 Addresses we did announce */
- u8 announced_addrs_v6; /* IPv6 Addresses we did announce */
+ u16 announced_addrs_v4; /* IPv4 Addresses we did announce */
+ u16 announced_addrs_v6; /* IPv6 Addresses we did announce */

u8 add_addr; /* Are we sending an add_addr? */

- u8 rem4_bits;
- u8 rem6_bits;
+ u16 rem4_bits;
+ u16 rem6_bits;

/* Have we established the additional subflows for primary pair? */
u8 first_pair:1;
@@ -115,12 +115,12 @@ static struct fullmesh_priv *fullmesh_get_priv(const struct mptcp_cb *mpcb)
}

/* Find the first free index in the bitfield */
-static int __mptcp_find_free_index(u8 bitfield, u8 base)
+static int __mptcp_find_free_index(u16 bitfield, u16 base)
{
int i;

/* There are anyways no free bits... */
- if (bitfield == 0xff)
+ if (bitfield == 0xffff)
goto exit;

i = ffs(~(bitfield >> base)) - 1;
@@ -136,7 +136,7 @@ static int __mptcp_find_free_index(u8 bitfield, u8 base)
return -1;
}

-static int mptcp_find_free_index(u8 bitfield)
+static int mptcp_find_free_index(u16 bitfield)
{
return __mptcp_find_free_index(bitfield, 0);
}
@@ -510,7 +510,7 @@ static void create_subflow_worker(struct work_struct *work)

mptcp_for_each_bit_set(fmp->rem4_bits, i) {
struct fullmesh_rem4 *rem;
- u8 remaining_bits;
+ u16 remaining_bits;

rem = &fmp->remaddr4[i];
remaining_bits = ~(rem->bitfield) & mptcp_local->loc4_bits;
@@ -558,7 +558,7 @@ static void create_subflow_worker(struct work_struct *work)
}
mptcp_for_each_bit_set(fmp->rem6_bits, i) {
struct fullmesh_rem6 *rem;
- u8 remaining_bits;
+ u16 remaining_bits;

rem = &fmp->remaddr6[i];
remaining_bits = ~(rem->bitfield) & mptcp_local->loc6_bits;
@@ -646,7 +646,7 @@ static int mptcp_find_address(const struct mptcp_loc_addr *mptcp_local,
int if_idx)
{
int i;
- u8 loc_bits;
+ u16 loc_bits;
bool found = false;

if (family == AF_INET)
@@ -680,7 +680,7 @@ static int mptcp_find_address_transp(const struct mptcp_loc_addr *mptcp_local,
sa_family_t family, int if_idx)
{
bool found = false;
- u8 loc_bits;
+ u16 loc_bits;
int i;

if (family == AF_INET)
@@ -1564,7 +1564,7 @@ static void full_mesh_addr_signal(struct sock *sk, unsigned *size,
struct mptcp_loc_addr *mptcp_local;
struct mptcp_fm_ns *fm_ns = fm_get_ns(sock_net(sk));
int remove_addr_len;
- u8 unannouncedv4 = 0, unannouncedv6 = 0;
+ u16 unannouncedv4 = 0, unannouncedv6 = 0;
bool meta_v4 = meta_sk->sk_family == AF_INET;

mpcb->addr_signal = 0;

0 comments on commit e5401f1

Please sign in to comment.