基于网络层的LTE(含EPC)网络常用类及其函数介绍
2017-01-05 17:09
513 查看
针对NS3出现的LTE及LTE+EPC网络仿真实例(src/lte/examples/lena-simple.cc,src/lte/examples/lena-simple-epc.cc)出现的针对LTE网络才出现的几个类及其函数进行介绍。
首先仿真程序所需最重要的两个类:
LteHelper(src/lte/helper/lte-helper.cc)和EpcHelper,而EpcHelper是虚基类,故我们主要看针对具体场景下的子类,如src/lte/examples/lena-simple-epc.cc里的PointToPointEpcHelper类(src/lte/helper/point-to-point-epc-helper.cc)。
EPS承载:
EpsBearer类(src/lte/model/eps-bearer.cc),对应的QoS Class Indicator,成员枚举以下几类:
用于衡量特定的提供给SDF(服务数据流)的包转发行为(如丢包率,包延迟预算),它同时应用于GBR和Non-GBR承载,用于指定访问节点内定义的控制承载级分组转发方式(如调度权重、接纳门限、队列管理门限、链路层协议配置等),这些都由运营商预先配置到接入网节点中。构造函数完成枚举成员的赋值。
LteHelper类主要函数:
ltehelper->Attach(ueDevs,enbDevs.Get(0)),连接UE和eNB,根据eNB 配置每个UE,在它们之间创建RRC连接。若含有EPC,则调用该函数之后,默认的EPS承载将会自动激活。
ltehelper->ActivateDataRadioBearer,很明显这是负责激活专用无线承载DRB,一般是由EPC负责激活,如果只含有LTE的网络,可以通过LTE的ActivateDataRadioBearer函数实现无线承载的激活。其实现代码如下:
ltehelper->Enable*Traces()完成对相应层次的KPI参数的输出,在文章“ NS3 LTE网络仿真程序, 含LTE无线接入网与EPC”以作出说明。
ltehelper->SetEpcHelper(epchelper)告诉lte,本网还存在epc。
Ipv4StaticRoutingHelper类,继承虚基类Ipv4RoutingHelper类。主要用到的方法:
GetStaticRouting寻找一个静态路由协议并返回Ipv4StaticRoutingl类()指针
AddNetworkRouteTo(Ipv4Address network,Ipv4Address submask,Ipv4Address nextHop,interface,metric=0)增加一个网络路由信息到静态路由表
SetDefaultROute(Ipv4Address nextHop,interface,metric=0),告诉路由系统如果没有特定路由下的默认路由。
EpcHelper类主要函数:
GetPgwNode()返回PGW所指指针
AssignUeIpv4Address(uedev)利用IpvAddressHelper类对UE进行IP地址分配。
GetUeDefaultGatewayAddress()定义是
返回interface=1和地址下标=0下的地址。
应用进程:
一般分服务器端进程(这里要声明协议类型,IP地址和端口)
客户端进程(构造时参数是服务器端地址端口)
无论是服务器还是客户端进程,一般先利用Helper 类定义一个应用并安装在节点后,再用Countainer添加。
首先仿真程序所需最重要的两个类:
LteHelper(src/lte/helper/lte-helper.cc)和EpcHelper,而EpcHelper是虚基类,故我们主要看针对具体场景下的子类,如src/lte/examples/lena-simple-epc.cc里的PointToPointEpcHelper类(src/lte/helper/point-to-point-epc-helper.cc)。
EPS承载:
EpsBearer类(src/lte/model/eps-bearer.cc),对应的QoS Class Indicator,成员枚举以下几类:
enum Qci { GBR_CONV_VOICE = 1, GBR_CONV_VIDEO = 2, GBR_GAMING = 3, GBR_NON_CONV_VIDEO = 4, NGBR_IMS = 5, NGBR_VIDEO_TCP_OPERATOR = 6, NGBR_VOICE_VIDEO_GAMING = 7, NGBR_VIDEO_TCP_PREMIUM = 8, NGBR_VIDEO_TCP_DEFAULT = 9 }qci;
用于衡量特定的提供给SDF(服务数据流)的包转发行为(如丢包率,包延迟预算),它同时应用于GBR和Non-GBR承载,用于指定访问节点内定义的控制承载级分组转发方式(如调度权重、接纳门限、队列管理门限、链路层协议配置等),这些都由运营商预先配置到接入网节点中。构造函数完成枚举成员的赋值。
LteHelper类主要函数:
ltehelper->Attach(ueDevs,enbDevs.Get(0)),连接UE和eNB,根据eNB 配置每个UE,在它们之间创建RRC连接。若含有EPC,则调用该函数之后,默认的EPS承载将会自动激活。
ltehelper->ActivateDataRadioBearer,很明显这是负责激活专用无线承载DRB,一般是由EPC负责激活,如果只含有LTE的网络,可以通过LTE的ActivateDataRadioBearer函数实现无线承载的激活。其实现代码如下:
void LteHelper::ActivateDataRadioBearer (Ptr<NetDevice> ueDevice, EpsBearer bearer) { NS_LOG_FUNCTION (this << ueDevice); NS_ASSERT_MSG (m_epcHelper == 0, "this method must not be used when the EPC is being used"); // Normally it is the EPC that takes care of activating DRBs // when the UE gets connected. When the EPC is not used, we achieve // the same behavior by hooking a dedicated DRB activation function // to the Enb RRC Connection Established trace source Ptr<LteEnbNetDevice> enbLteDevice = ueDevice->GetObject<LteUeNetDevice> ()->GetTargetEnb (); std::ostringstream path; path << "/NodeList/" << enbLteDevice->GetNode ()->GetId () << "/DeviceList/" << enbLteDevice->GetIfIndex () << "/LteEnbRrc/ConnectionEstablished"; Ptr<DrbActivator> arg = Create<DrbActivator> (ueDevice, bearer); Config::Connect (path.str (), MakeBoundCallback (&DrbActivator::ActivateCallback, arg)); }可见是通过Trace机制实现承载的建立,eNB的RRC层ConnectionEstablished作为trace source,DrbActivator 类(src/lte/helper/lte-helper.cc)的ActivateCallback作为trace sink即一旦UE-eNB之间建立RRCL连接后,即自动建立无线承载。
ltehelper->Enable*Traces()完成对相应层次的KPI参数的输出,在文章“ NS3 LTE网络仿真程序, 含LTE无线接入网与EPC”以作出说明。
ltehelper->SetEpcHelper(epchelper)告诉lte,本网还存在epc。
Ipv4StaticRoutingHelper类,继承虚基类Ipv4RoutingHelper类。主要用到的方法:
GetStaticRouting寻找一个静态路由协议并返回Ipv4StaticRoutingl类()指针
AddNetworkRouteTo(Ipv4Address network,Ipv4Address submask,Ipv4Address nextHop,interface,metric=0)增加一个网络路由信息到静态路由表
SetDefaultROute(Ipv4Address nextHop,interface,metric=0),告诉路由系统如果没有特定路由下的默认路由。
EpcHelper类主要函数:
GetPgwNode()返回PGW所指指针
AssignUeIpv4Address(uedev)利用IpvAddressHelper类对UE进行IP地址分配。
GetUeDefaultGatewayAddress()定义是
return m_sgwPgw->GetObject<Ipv4> ()-> GetAddress(1, 0).GetLocal ();GetAddress定义:
Ipv4InerfaceAddress GetAddress(interface,address_index)
返回interface=1和地址下标=0下的地址。
GetLocal返回本地地址。
应用进程:
一般分服务器端进程(这里要声明协议类型,IP地址和端口)
客户端进程(构造时参数是服务器端地址端口)
无论是服务器还是客户端进程,一般先利用Helper 类定义一个应用并安装在节点后,再用Countainer添加。
xxxHelper apphelper(add,port); apphelper.SetAttribute; ApplicationContainer app; app=xxxhelper.install(node)//or app.Add(xxxhelper.install(node))
相关文章推荐
- 网络编程(基于winsocket)-- 常用函数介绍(二)
- 网络编程(基于winsocket)-- 常用函数介绍(一)
- 网络编程_常用的基本函数介绍——htonl、ntohl、htons、ntohs
- 基于TCP网络编程常用函数
- 神经网络常用激活函数及其应用举例
- prototype.js常用函数及其用法
- MFC常用函数介绍
- 基于H.323标准的全面视频网络解决方案及其应用
- Linux 常用网络指令介绍一
- ORACLE常用数值函数、转换函数、字符串函数介绍
- prototype.js常用函数及其用法
- prototype.js常用函数及其用法
- Linux 常用网络指令介绍二
- Asp.Net常用函数介绍
- 图形化编程常用函数功能介绍
- prototype.js常用函数及其用法
- 1.5 MFC中常用类,宏,函数介绍
- 第二十课:常用函数介绍--字符串操作函数
- 介绍一些在网络编程中常用的工具方法
- 常用的Linux网络安全工具介绍