(OK) Android-x86-7.1.1/ kernel 4.4.62 - quagga - MIMP - 6 (mptcp_fullmesh.c)
2017-07-01 17:00
393 查看
gedit kernel/net/mptcp/mptcp_fullmesh.c
static void create_subflow_worker(struct work_struct *work)
{
struct fullmesh_priv *fmp = container_of(work, struct fullmesh_priv,
subflow_work);
struct mptcp_cb *mpcb = fmp->mpcb;
struct sock *meta_sk = mpcb->meta_sk;
struct mptcp_loc_addr *mptcp_local;
const struct mptcp_fm_ns *fm_ns = fm_get_ns(sock_net(meta_sk));
int iter = 0, retry = 0;
int i;
/* We need a local (stable) copy of the address-list. Really, it is not
* such a big deal, if the address-list is not 100% up-to-date.
*/
rcu_read_lock_bh();
mptcp_local = rcu_dereference_bh(fm_ns->local);
mptcp_local = kmemdup(mptcp_local, sizeof(*mptcp_local), GFP_ATOMIC);
rcu_read_unlock_bh();
if (!mptcp_local)
return;
next_subflow:
if (iter) {
release_sock(meta_sk);
mutex_unlock(&mpcb->mpcb_mutex);
cond_resched();
}
mutex_lock(&mpcb->mpcb_mutex);
lock_sock_nested(meta_sk, SINGLE_DEPTH_NESTING);
/* Create the additional subflows for the first pair */
if (fmp->first_pair == 0 && mpcb->master_sk) {
struct mptcp_loc4 loc;
struct mptcp_rem4 rem;
loc.addr.s_addr = inet_sk(meta_sk)->inet_saddr;
loc.loc4_id = 0;
loc.low_prio = 0;
loc.if_idx = mpcb->master_sk->sk_bound_dev_if;
rem.addr.s_addr = inet_sk(meta_sk)->inet_daddr;
rem.port = inet_sk(meta_sk)->inet_dport;
rem.rem4_id = 0; /* Default 0 */
mptcp_v4_subflows(meta_sk, &loc, &rem);
fmp->first_pair = 1;
}
iter++;
if (sock_flag(meta_sk, SOCK_DEAD))
goto exit;
if (mpcb->master_sk &&
!tcp_sk(mpcb->master_sk)->mptcp->fully_established)
goto exit;
/*
112.26.0.1 (16783984)
112.26.1.1 (16849520)
112.26.2.1 (16915056)
112.26.3.1 (16980592)
112.26.4.1 (17046128)
112.26.0.6 (100670064)
112.26.1.6 (100735600)
112.26.2.6 (100801136)
112.26.3.6 (100866672)
112.26.4.6 (100932208)
*/
//ztg add
/*
printk(KERN_INFO "create_subflow_worker: i = %u\n", fmp->rem4_bits);
printk(KERN_INFO "create_subflow_worker: remaddr0 = %u\n", fmp->remaddr4[0].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: remaddr1 = %u\n", fmp->remaddr4[1].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: remaddr2 = %u\n", fmp->remaddr4[2].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: remaddr3 = %u\n", fmp->remaddr4[3].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: remaddr4 = %u\n", fmp->remaddr4[4].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: remaddr5 = %u\n", fmp->remaddr4[5].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: remaddr6 = %u\n", fmp->remaddr4[6].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: remaddr7 = %u\n", fmp->remaddr4[7].addr.s_addr);
//*/
mptcp_for_each_bit_set(fmp->rem4_bits, i) {
struct fullmesh_rem4 *rem;
u8 remaining_bits;
rem = &fmp->remaddr4[i];
remaining_bits = ~(rem->bitfield) & mptcp_local->loc4_bits;
/* Are there still combinations to handle? */
if (remaining_bits) {
int i = mptcp_find_free_index(~remaining_bits);
struct mptcp_rem4 rem4;
rem->bitfield |= (1 << i);
rem4.addr = rem->addr;
rem4.port = rem->port;
rem4.rem4_id = rem->rem4_id;
//ztg add
//printk(KERN_INFO "create_subflow_worker: i = %u\n", remaining_bits);
//printk(KERN_INFO "create_subflow_worker: locaddr%d = %u\n", i, mptcp_local->locaddr4[i].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: locaddr = %u --- remaddr = %u\n", mptcp_local->locaddr4[i].addr.s_addr, rem4.addr.s_addr);
/* If a route is not yet available then retry once */
if (mptcp_init4_subsockets(meta_sk, &mptcp_local->locaddr4[i],
&rem4) == -ENETUNREACH)
retry = rem->retry_bitfield |= (1 << i);
else
mptcp_v4_subflows(meta_sk,
&mptcp_local->locaddr4[i],
&rem4);
goto next_subflow;
}
}
// ...
}
static void create_subflow_worker(struct work_struct *work)
{
struct fullmesh_priv *fmp = container_of(work, struct fullmesh_priv,
subflow_work);
struct mptcp_cb *mpcb = fmp->mpcb;
struct sock *meta_sk = mpcb->meta_sk;
struct mptcp_loc_addr *mptcp_local;
const struct mptcp_fm_ns *fm_ns = fm_get_ns(sock_net(meta_sk));
int iter = 0, retry = 0;
int i;
/* We need a local (stable) copy of the address-list. Really, it is not
* such a big deal, if the address-list is not 100% up-to-date.
*/
rcu_read_lock_bh();
mptcp_local = rcu_dereference_bh(fm_ns->local);
mptcp_local = kmemdup(mptcp_local, sizeof(*mptcp_local), GFP_ATOMIC);
rcu_read_unlock_bh();
if (!mptcp_local)
return;
next_subflow:
if (iter) {
release_sock(meta_sk);
mutex_unlock(&mpcb->mpcb_mutex);
cond_resched();
}
mutex_lock(&mpcb->mpcb_mutex);
lock_sock_nested(meta_sk, SINGLE_DEPTH_NESTING);
/* Create the additional subflows for the first pair */
if (fmp->first_pair == 0 && mpcb->master_sk) {
struct mptcp_loc4 loc;
struct mptcp_rem4 rem;
loc.addr.s_addr = inet_sk(meta_sk)->inet_saddr;
loc.loc4_id = 0;
loc.low_prio = 0;
loc.if_idx = mpcb->master_sk->sk_bound_dev_if;
rem.addr.s_addr = inet_sk(meta_sk)->inet_daddr;
rem.port = inet_sk(meta_sk)->inet_dport;
rem.rem4_id = 0; /* Default 0 */
mptcp_v4_subflows(meta_sk, &loc, &rem);
fmp->first_pair = 1;
}
iter++;
if (sock_flag(meta_sk, SOCK_DEAD))
goto exit;
if (mpcb->master_sk &&
!tcp_sk(mpcb->master_sk)->mptcp->fully_established)
goto exit;
/*
112.26.0.1 (16783984)
112.26.1.1 (16849520)
112.26.2.1 (16915056)
112.26.3.1 (16980592)
112.26.4.1 (17046128)
112.26.0.6 (100670064)
112.26.1.6 (100735600)
112.26.2.6 (100801136)
112.26.3.6 (100866672)
112.26.4.6 (100932208)
*/
//ztg add
/*
printk(KERN_INFO "create_subflow_worker: i = %u\n", fmp->rem4_bits);
printk(KERN_INFO "create_subflow_worker: remaddr0 = %u\n", fmp->remaddr4[0].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: remaddr1 = %u\n", fmp->remaddr4[1].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: remaddr2 = %u\n", fmp->remaddr4[2].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: remaddr3 = %u\n", fmp->remaddr4[3].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: remaddr4 = %u\n", fmp->remaddr4[4].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: remaddr5 = %u\n", fmp->remaddr4[5].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: remaddr6 = %u\n", fmp->remaddr4[6].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: remaddr7 = %u\n", fmp->remaddr4[7].addr.s_addr);
//*/
mptcp_for_each_bit_set(fmp->rem4_bits, i) {
struct fullmesh_rem4 *rem;
u8 remaining_bits;
rem = &fmp->remaddr4[i];
remaining_bits = ~(rem->bitfield) & mptcp_local->loc4_bits;
/* Are there still combinations to handle? */
if (remaining_bits) {
int i = mptcp_find_free_index(~remaining_bits);
struct mptcp_rem4 rem4;
rem->bitfield |= (1 << i);
rem4.addr = rem->addr;
rem4.port = rem->port;
rem4.rem4_id = rem->rem4_id;
//ztg add
//printk(KERN_INFO "create_subflow_worker: i = %u\n", remaining_bits);
//printk(KERN_INFO "create_subflow_worker: locaddr%d = %u\n", i, mptcp_local->locaddr4[i].addr.s_addr);
printk(KERN_INFO "create_subflow_worker: locaddr = %u --- remaddr = %u\n", mptcp_local->locaddr4[i].addr.s_addr, rem4.addr.s_addr);
/* If a route is not yet available then retry once */
if (mptcp_init4_subsockets(meta_sk, &mptcp_local->locaddr4[i],
&rem4) == -ENETUNREACH)
retry = rem->retry_bitfield |= (1 << i);
else
mptcp_v4_subflows(meta_sk,
&mptcp_local->locaddr4[i],
&rem4);
goto next_subflow;
}
}
// ...
}
相关文章推荐
- (OK) Android-x86-7.1.1/ kernel 4.4.62 - quagga - MIMP - 7 (mptcp_fullmesh.c)
- (OK) Android-x86-7.1.1/ kernel 4.4.62 - quagga - MIMP - 8 (mptcp_fullmesh.c, mptcp_ipv4.c)
- (OK) Android-x86-7.1.1/ kernel 4.4.62 - quagga - MIMP - 4 (mptcp_fullmesh.c)
- (OK)(OK) Android-x86-7.1.1/ kernel 4.4.62 - quagga - MIMP - 11 ( 2 nodes) - mptcp_write_xmit
- (OK)(OK) Android-x86-7.1.1/ kernel 4.4.62 - quagga - MIMP - 12 ( 6 nodes) - mptcp_write_xmit
- (OK) Android-x86-7.1.1/ kernel 4.4.62 - quagga - 改进多跳路由协议 - 为每一个目的地址仅生成一条路由表项 - MIMP - 3
- (OK)(OK) Android-x86-7.1.1/ kernel 4.4.62 - quagga - MIMP - 14 ( 6 nodes) - 建立子路径 & 发送数据包
- (OK) Android-x86-7.1.1/ kernel 4.4.62/ MPTCP-0.92/ quagga/ospf6d/ MIMP - 2 - tcpdump.txt
- (OK) Android-x86-7.1.1/ kernel 4.4.62/ MPTCP-0.92/ quagga/ospf6d/ MIMP(MultiInterface MultiPath) - 1
- (OK) Android-x86-7.1.1/ kernel 4.4.62 - quagga - MIMP - 9
- (OK)(OK) Android-x86-7.1.1/ kernel 4.4.62 - quagga - MIMP - 15 ( 6 nodes) - 节点1服务器-节点5客户端-抓包-缺少JION
- (OK) Android-x86-7.1.1/ kernel 4.4.62 - quagga - MIMP - 10 ( 2 nodes)
- (OK) Android-x86-7.1.1/ kernel 4.4.62 - quagga - MIMP - 13 ( 6 nodes) - ping & tcpdump
- (OK) MPTCP-0.92 setup - kernel/net/mptcp/Kconfig - Android-x86 7.1.1 - kernel 4.4.62
- (OK) MPTCP-0.92 - 【two path】 - Android-x86 7.1.1 - kernel 4.4.62
- (OK) MPTCP-0.92 setup - kernel/net/ipv4/Kconfig - Android-x86 7.1.1 - kernel 4.4.62
- (OK) Android-x86-7.1.1 - quagga - ospf6d - MIMP (MultiInterface MultiPath) ---2
- (OK) Android-x86-7.1.1 - quagga - ospf6d - MIMP (MultiInterface MultiPath) ---3
- (OK) Android-x86-7.1.1 - quagga - ospf6d - MIMP (MultiInterface MultiPath) ---1
- (OK) mim-mptcp-fullpath-mdr - (使用 fullpath quagga 和 mptcp) - android-x86-7.1-rc2 - kernel-4.9.54