参考链接:MPTCP github源码一、MPTCP github源码二
参考链接:运行mptcp源码、源码二配置
源码一ns3版本是3.19,会出现gcc版本的问题,建议更换gcc版本至gcc5.5。运行成功后就可以直接运行mptcp。
源码二ns3版本是3.29,比较新,gcc等依赖问题更好解决,但是没有example代码,要自己编写mptcp运行代码。如果ns3不是很熟悉的话不建议尝试。
在以上源码的运行过程中,可能会涉及以下问题,以下链接亲测可用:
- gcc版本的问题:工具系列 | Ubuntu18.04安装Openssl-1.1.1
- all warning报错问题解决
- libssl依赖问题
- 一些cc文件无法编译的语法问题:gcc版本降级,参考链接:gcc降级到5.5
- error: ‘UChar’ has not been declared:ns3.19运行C++11标准
- 如果以上问题都解决后,还是出现gcc版本问题,或者依赖问题的话,建议重装虚拟机!!!
ns3官方api
一、源码一进入mptcp,文件中
输入以下语句来运行mptcp。
sudo ./waf --run scratch/mptcp
运行截图:
源码二学习源码二可以理解为一个可运行mptcp的环境,运行mptcp的代码需要自己编写。如果ns3不是很熟悉的话不建议尝试。
我们可以使用如下指令查找包含MPTCP的文件:
find . -name ‘*.cc’ | xargs grep MPTCP
解决ns3环境问题后,使用vscode在虚拟机中打开源码二,可以看到有八个cc文件:
crypto意为密码:定义了一些密码,先不看
2、fullmeshfullmesh意为组网:设置组网络
3、mappingmapping意为映射,看到后缀为.h的文件中有两个类
(1)MpTcpMapping类维护一个存放MpTcpMapping的映射表set
MpTcpMapping属性包括m_dataSequenceNumber(0)、m_subflowSequenceNumber(0)、m_dataLevelLength(0)。即:数据序列号,子流序列号,数据级长度
猜测:
MpTcpMapping是子流序列号到数据序列号的映射
MappingList是存放单个子流到多个数据序列号的映射
维护一个存放MpTcpMapping的映射表set
it is a set ordered by SSN
猜测MpTcpMappingContainer是存放多个子流的映射。
4、ndiffports (1)RttEstimator类被include
(2)MpTcpSocketBase类被include
const MpTcpSocketBase&这个类型传入create。
MpTcpSocketBase my_sock();
如何构造这个类型:先调用一个无参构造函数,然后再赋值进去形成有参的。
//setAttribute的意思是设置属性,和属性类型。NS3 中Attribute 学习
my_sock.SetAttribute(“peerkey”,peerKeyType);
主要注意的是CreateSubflows接口
void CreateSubflows (Ptr5、socketmeta, uint16_t localport, uint16_t remoteport);
规定socket的形式
6、subflow#include "ns3/mptcp-mapping.h"(1)MpTcpSubflow类
class MpTcpSubflow : public TcpSocketBase
继承于TcpSocketBase,继承方式为public继承
学习到这里还是一知半解,包括对ns3环境的不熟悉导致无法理解如何去调用这些类。决定放弃源码二进入源码一的学习,后续如果有时间会重新学习源码二。



