MPTCP 源码分析(三) 子路径选择
- "net/mptcp/mptcp_sched.c" line of
- static struct sock *get_available_subflow(struct sock *meta_sk,
- struct sk_buff *skb,
- bool zero_wnd_test)
- {
- struct mptcp_cb *mpcb = tcp_sk(meta_sk)->mpcb; //MPTCP内核实现的三个组成部分之一:Multi-path control bock(mpcb)
- struct sock *sk, *bestsk = NULL, *lowpriosk = NULL, *backupsk = NULL;
- u32 min_time_to_peer = 0xffffffff, lowprio_min_time_to_peer = 0xffffffff;
- int cnt_backups = ;
- /* if there is only one subflow, bypass the scheduling function */
- if (mpcb->cnt_subflows == ) {
- bestsk = (struct sock *)mpcb->connection_list;
- if (!mptcp_is_available(bestsk, skb, zero_wnd_test))
- bestsk = NULL;
- return bestsk;
- }
- /* Answer data_fin on same subflow!!! */
- if (meta_sk->sk_shutdown & RCV_SHUTDOWN &&
- skb && mptcp_is_data_fin(skb)) {
- mptcp_for_each_sk(mpcb, sk) {
- if (tcp_sk(sk)->mptcp->path_index == mpcb->dfin_path_index &&
- mptcp_is_available(sk, skb, zero_wnd_test))
- return sk;
- }
- }
- "net/mptcp/mptcp_input.c" line of
- /* Record it, because we want to send our data_fin on the same path */
- if (tp->mptcp->map_data_fin) {
- mpcb->dfin_path_index = tp->mptcp->path_index;
- mpcb->dfin_combined = !!(sk->sk_shutdown & RCV_SHUTDOWN);
- }
- "net/mptcp/mptcp_sched.c" line of
- /* First, find the best subflow */
- mptcp_for_each_sk(mpcb, sk) {
- struct tcp_sock *tp = tcp_sk(sk);
- if (tp->mptcp->rcv_low_prio || tp->mptcp->low_prio)
- cnt_backups++;
- if ((tp->mptcp->rcv_low_prio || tp->mptcp->low_prio) &&
- tp->srtt < lowprio_min_time_to_peer) {
- if (!mptcp_is_available(sk, skb, zero_wnd_test))
- continue;
- if (mptcp_dont_reinject_skb(tp, skb)) {
- backupsk = sk;
- continue;
- }
- lowprio_min_time_to_peer = tp->srtt;
- lowpriosk = sk;
- } else if (!(tp->mptcp->rcv_low_prio || tp->mptcp->low_prio) &&
- tp->srtt < min_time_to_peer) {
- if (!mptcp_is_available(sk, skb, zero_wnd_test))
- continue;
- if (mptcp_dont_reinject_skb(tp, skb)) {
- backupsk = sk;
- continue;
- }
- min_time_to_peer = tp->srtt;
- bestsk = sk;
- }
- }
- "net/mptcp/mptcp_sched.c" line of
- if (mpcb->cnt_established == cnt_backups && lowpriosk) {
- sk = lowpriosk;
- } else if (bestsk) {
- sk = bestsk;
- } else if (backupsk) {
- /* It has been sent on all subflows once - let's give it a
- 181 * chance again by restarting its pathmask.
- 182 */
- if (skb)
- TCP_SKB_CB(skb)->path_mask = ;
- sk = backupsk;
- }
- return sk;
- }
ip link set dev eth0 multipath backup
MPTCP 源码分析(三) 子路径选择的更多相关文章
- MPTCP 源码分析(五) 接收端窗口值
简述: 在TCP协议中影响数据发送的三个因素分别为:发送端窗口值.接收端窗口值和拥塞窗口值. 本文主要分析MPTCP中各个子路径对接收端窗口值rcv_wnd的处理. 接收端窗口值的初始化 ...
- tomcat源码分析(三)一次http请求的旅行-从Socket说起
p { margin-bottom: 0.25cm; line-height: 120% } tomcat源码分析(三)一次http请求的旅行 在http请求旅行之前,我们先来准备下我们所需要的工具. ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
- Duilib源码分析(三)XML解析器—CMarkup
上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...
- Django搭建及源码分析(三)---+uWSGI+nginx
每个框架或者应用都是为了解决某些问题才出现旦生的,没有一个事物是可以解决所有问题的.如果觉得某个框架或者应用使用很不方便,那么很有可能就是你没有将其使用到正确的地方,没有按开发者的设计初衷来使用它,当 ...
- Spring5深度源码分析(三)之AnnotationConfigApplicationContext启动原理分析
代码地址:https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian AnnotationCon ...
- Vue.js 源码分析(三) 基础篇 模板渲染 el、emplate、render属性详解
Vue有三个属性和模板有关,官网上是这样解释的: el ;提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标 template ;一个字符串模板作为 Vue 实例的标识使用.模板将会 ...
- ABP源码分析三:ABP Module
Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...
- ABP源码分析三十一:ABP.AutoMapper
这个模块封装了Automapper,使其更易于使用. 下图描述了改模块涉及的所有类之间的关系. AutoMapAttribute,AutoMapFromAttribute和AutoMapToAttri ...
随机推荐
- 《Java编程思想》笔记 第一章 对象导论
1.抽象过程 Q:什么是对象??? A: 1) 万物皆对象 --- 对象具有状态,行为和标识 2)程序是对象的集合,他们通过发送消息来告诉彼此要做的 3)通过创建包含现有对象的包的方式来创建新类型 ...
- Selenium2+python自动化22-发送各种类型附件邮件【转载】
前言 最近一些小伙伴,在搞邮箱的事情,小编于是去折腾了一下!总结了一些干货,与大家分享一下!速来,抱大腿,我要开车了! 基本思路就是,使用MIMEMultipart来标示这个邮件是多个部分组成的,然后 ...
- ionic3 打包发布,以安卓说明
1 添加图标 ionic cordova resources [<platform>] 官方https://ionicframework.com/docs/cli/cordova/reso ...
- selenium 定位
一 . chrome的调试工具 1)在chrome界面,按F12快捷键,弹出chrome的调试工具 2)找出登录按钮的id和username.password的id 二.XPath工具 安装 为了提 ...
- centos6.5 安装vlc播放器【超简单】
# cd /etc/yum.repos.d/ # wget http://pkgrepo.linuxtech.net/el6/release/linuxtech.repo //我试了3次才下载下来 # ...
- ACM-ICPC北京赛区(2017)网络赛2【后缀数组+Java//不会】
#1579 : Reverse Suffix Array 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 There is a strong data structure ...
- Gitlab运维
安装Gitlab 新建 /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] name=gitlab-ce baseurl=http://mirrors.tuna.t ...
- [BZOJ5020][THUWC2017]在美妙的数学王国中畅游(LCT)
5020: [THUWC 2017]在美妙的数学王国中畅游 Time Limit: 80 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 323 ...
- [BZOJ 3157] 国王奇遇记
Link: BZOJ 3157 传送门 Solution: 题意:求解$\sum_{i=1}^n m^i \cdot {i^m}$ $O(m^2)$做法: 定义一个函数$f[i]$,$f[i]=\su ...
- 【树上莫队】bzoj3757 苹果树
学习这位神犇的:http://blog.csdn.net/jiangyuze831/article/details/41476865 注意: ①排序时第一关键字是左端点所在块编号(块状树),第二关键字 ...