LTE用户文档

(如有不当的地方,欢迎指正!)

14 Evolved Packet Core (EPC)

 
我们现在讲解如何编写一个仿真程序——除了 LTE 无线接入网外,还允许仿真 EPC。 EPC 允许使用 IPv4 网络与 LTE 设备连接。换句话说,可以在 LTE 上使用常规的 ns-3 应用和 IPv4  sockets ,并且能够把 LTE 网络与仿真中的任何 IPv4 网络相连接。
 
首先,除了我们已经在 Basic simulation program 中介绍过的 LteHelper 之外 ,你还需要使用一个额外的 EpcHelper 类——负责创建 EPC 实体和网络拓扑。 注意,你不能直接使用 EpcHelper  ,因为它是一个抽象基类;相反,你需要使用它的一个子类——提供不同的 EPC 拓扑实现。 本例中,我们会考虑 PointToPointEpcHelper, 基于点对点链路实现 EPC 。为了使用它,首先需要在仿真程序中插入下列代码:
 
Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
 
然后,你需要告诉 LTE helper 接下来要使用 EPC:
 
lteHelper->SetEpcHelper (epcHelper);
 
上面一步是很有必要的, LTE helper 将触发合适的 EPC 配置与一些相关的重要配置,例如当一个基站或用户添加到仿真中时或者创建一个EPS 承载时。另外,所有这些实现都不受用户的干预。
 
调用 lteHelper->SetEpcHelper (epcHelper) 会使能 EPC 起作用,同时具有副作用——创建的任何新的 LteEnbRrc 所拥有的 EpsBearerToRlcMapping 属性设置为 RLC_UM_ALWAYS 而不是 RLC_TM_ALWAYS(原文档中写的是RLC_SM_ALWAYS,有误!) ,如果后者是默认的话;否则,属性不会改变(例如,如果你修改默认属性为 RLC_AM_ALWAYS, 它将不会变动)。
 
注意, EpcHelper 也会自动地创建 PGW 节点并配置它,以便它可以合适地处理来自/去往 LTE 无线接入网的业务。不过,你需要添加一些明确的代码来连接 PGW 到其他的 IPv4 网络(例如因特网)。这里有一个非常简单的例子——如何通过点对点链路连接单个远程主机到 PGW :
Ptr<Node> pgw = epcHelper->GetPgwNode (); 
// 创建一个远程主机
NodeContainer remoteHostContainer;
remoteHostContainer.Create ();
Ptr<Node> remoteHost = remoteHostContainer.Get ();
InternetStackHelper internet;
internet.Install (remoteHostContainer); // 创建 internet
PointToPointHelper p2ph;
p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
p2ph.SetDeviceAttribute ("Mtu", UintegerValue ());
p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.010)));
NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
Ipv4AddressHelper ipv4h;
ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
// 接口 0 为本地主机,1 为 p2p 设备
Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress ();
指定路由很重要,以便远程主机可以到达 LTE 用户。实现这的一个方式是利用这样一个事实——PointToPointEpcHelper 默认会分配 LTE 用户一个7.0.0.0 网络的 IP 地址。只要考虑到这一点就足够了:
 
Ipv4StaticRoutingHelper ipv4RoutingHelper;
Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), );
现在,你应该继续并创建 LTE 基站和用户(参考前面章节)。 当然,你可以配置 LTE 的其他方面,例如路径损耗和衰落模型。 一旦你创建完用户,你应该也给它们配置 IP 网络。按照下面的方式实现。我们假定你有一个装用户和基站节点的容器,类似于:

NodeContainer ueNodes;
NodeContainer enbNodes;
 
配置一个只有 LTE 的仿真,你通常会这样做:
 
NetDeviceContainer ueLteDevs = lteHelper->InstallUeDevice (ueNodes);
lteHelper->Attach (ueLteDevs, enbLteDevs.Get ());
 
为了给用户配置 IP 网络,你只需要额外添加这些:

// 在用户上安装 IP 协议栈
InternetStackHelper internet;
internet.Install (ueNodes); // 给用户分配 IP 地址
for (uint32_t u = ; u < ueNodes.GetN (); ++u)
{
Ptr<Node> ue = ueNodes.Get (u);
Ptr<NetDevice> ueLteDevice = ueLteDevs.Get (u);
Ipv4InterfaceContainer ueIpIface = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueLteDevice));
// 为用户设置默认网关
Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ue->GetObject<Ipv4> ());
ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), );
}
 EPC 的承载激活与 LTE-only 仿真稍微不同。首先,当使用 EPC 时,不再使用 ActivateDataRadioBearer 方法。其次,使用 EPC ,当你调用 LteHelper::Attach () 时,默认的 EPS 承载将自动激活。第三,如果你想设置专用的 EPS 承载,你可以使用方法  LteHelper::ActivateDedicatedEpsBearer () 来实现。 该方法被看作一个参数 Traffic Flow Template (TFT,业务流模板)——一个定义业务(会被映射到专用的 EPS 承载上)类型的结构体。下面一个例子讲的是,当用户在端口 1234 通信时,如何为应用设置专用的无线承载:
 
Ptr<EpcTft> tft = Create<EpcTft> ();
EpcTft::PacketFilter pf;
pf.localPortStart = ;
pf.localPortEnd = ;
tft->Add (pf);
lteHelper->ActivateDedicatedEpsBearer (ueLteDevs, EpsBearer (EpsBearer::NGBR_VIDEO_TCP_DEFAULT), tft);
你当然也可以使用自定义的 EpsBearer 和 EpcTft 配置,请参考 doxygen 文档来学习如何实现它。
 
最后,你可以在 LTE 用户节点上安装应用,通过因特网与远程应用进行通信。这可以通过一般的ns3 过程实现。 接下来是一个简单的例子,一个远程主机,如何设置下行通信,远程主机上有一个 UdpClient 应用,LTE 用户(与前面的代码片段使用相同的变量名)上有一个 PacketSink。
 
uint16_t dlPort = ;
PacketSinkHelper packetSinkHelper ("ns3::UdpSocketFactory",
InetSocketAddress (Ipv4Address::GetAny (), dlPort));
ApplicationContainer serverApps = packetSinkHelper.Install (ue);
serverApps.Start (Seconds (0.01));
UdpClientHelper client (ueIpIface.GetAddress (), dlPort);
ApplicationContainer clientApps = client.Install (remoteHost);
clientApps.Start (Seconds (0.01));
好了,现在你可以像往常一样开始你的仿真:
 
Simulator::Stop (Seconds (10.0));
Simulator::Run ();

参考文献

https://www.nsnam.org/docs/models/html/lte-user.html

 

LTE Module User Documentation(翻译8)——核心网(EPC)的更多相关文章

  1. LTE Module User Documentation(翻译1)——背景、使用概述、基本的仿真程序和配置LTE模型参数

    LTE用户文档 (如有不当的地方,欢迎指正!) 1.背景 假定读者已经熟悉 ns-3 simulator ,能运行一般的仿真程序.如果不是的话,强烈推荐读者参考 [ns3tutorial].   2. ...

  2. LTE Module User Documentation(翻译15)——示例程序、参考场景以及故障检测和调试技巧

    LTE用户文档 (如有不当的地方,欢迎指正!)     21 Examples Programs(示例程序)   路径 src/lte/examples/ 包含一些示例仿真程序,这些例子表明如何仿真不 ...

  3. LTE Module User Documentation(翻译14)——Uplink Power Control(上行功率控制)

    LTE用户文档 (如有不当的地方,欢迎指正!) 20 Uplink Power Control(上行功率控制)   上行功率控制功能默认是开启的.用户可以通过设置布尔属性 ns3::LteUePhy: ...

  4. LTE Module User Documentation(翻译13)——频率复用算法(Frequency Reuse Algorithms)

    LTE用户文档 (如有不当的地方,欢迎指正!)   19 Frequency Reuse Algorithms(频率复用算法)   本节我们将描述如何在 LTE 仿真中使用频率复用(FR)算法.共有两 ...

  5. LTE Module User Documentation(翻译12)——X2切换(X2-based handover)

    LTE用户文档 (如有不当的地方,欢迎指正!) 18 X2-based handover   正如 3GPP 定义的,切换是改变用户服务小区的连接方式的过程.这一过程中涉及的两个基站通常称为源基站和目 ...

  6. LTE Module User Documentation(翻译11)——配置用户测量

    LTE用户文档 (如有不当的地方,欢迎指正!) 17 Configure UE measurements   仿真中激活的用户测量配置取决于所选的 “consumers”,例如切换算法.用户可能需要添 ...

  7. LTE Module User Documentation(翻译10)——网络连接(Network Attachment)

    LTE用户文档 (如有不当的地方,欢迎指正!) 16 Network Attachment(网络连接)   正如前面章节 Basic simulation program 所述,连接用户到基站时通过调 ...

  8. LTE Module User Documentation(翻译9)——Using the EPC with emulation mode

    LTE用户文档 (如有不当的地方,欢迎指正!) 15 Using the EPC with emulation mode(使用仿真方式的 EPC)     在上一节中,我们使用点对点链路连接基站和服务 ...

  9. LTE Module User Documentation(翻译7)——无线环境地图(REM)、AMC 模型 和 CQI 计算

    LTE用户文档 (如有不当的地方,欢迎指正!) 12 Radio Environment Maps   通过使用类 RadioEnvironmentMapHelper  是可能输出文件 Radio E ...

随机推荐

  1. <script>元素的位置

    脚本元素会组织下载网页内容,浏览器可以同时下载多个组件,但一旦遇到一个外部脚本文本后,浏览器会停止进一步下载,知道这个脚本文件下载,解析并执行完毕.这会严重影响网页载入的总时间,特别是在网页在入时会发 ...

  2. FastDFS connect timed out

    java.net.SocketTimeoutException: connect timed outUpload file "1003.png"fails:connect time ...

  3. Android Studio编译运行project报错:····· finished with non-zero exit value 1

    错误代码: Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.ide.c ...

  4. php对二维数组进行相关操作(排序、转换、去空白等)

    php对二维数组进行相关操作(排序.转换.去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04   这篇文章主要介绍了php对二维数组进行相关操作,包括php对 ...

  5. ExtJS笔记 Ext.data.Model

    A Model represents some object that your application manages. For example, one might define a Model ...

  6. awk脚本

    $0,意即所有域. 有两种方式保存shell提示符下awk脚本的输出.最简单的方式是使用输出重定向符号>文件名,下面的例子重定向输出到文件wow. #awk '{print $0}' grade ...

  7. Android Glide数据更新及内存缓存、硬盘缓存清理

    [转] 原文                                         Android Glide数据更新及内存缓存.硬盘缓存清理 Android的Glide在加载图片时候内部默 ...

  8. 一个ICMP单元

    unit ICMPUtils; interface {$IFDEF VER80} { This source file is *NOT* compatible with Delphi 1 becaus ...

  9. ansible使用笔记

    ansible使用笔记 介绍 ansible 是一个模型驱动的配置管理器,支持多节点发布.远程任务执行.默认使用 SSH 进行远程连接.无需在被管理节点上安装附加软件,可使用各种编程语言进行扩展.an ...

  10. python 多线程就这么简单(续)

    之前讲了多线程的一篇博客,感觉讲的意犹未尽,其实,多线程非常有意思.因为我们在使用电脑的过程中无时无刻都在多进程和多线程.我们可以接着之前的例子继续讲.请先看我的上一篇博客. python 多线程就这 ...