您的位置:首页 > 理论基础 > 计算机网络

基于网络层的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,成员枚举以下几类:

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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  NS3 lte 网络 函数