基于网络层的LTE(含EPC)网络常用类及其函数介绍

针对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))


发布了264 篇原创文章 · 获赞 213 · 访问量 46万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览