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. jwt refresh token

    $app->post('auth/refresh-token', ['middleware' => 'jwt.refresh', function() { try { $old_token ...

  2. 没有对“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files”的写访问权限 的解决方案

    问题情况: 在64位机器上运行Web服务,然后在配置好之后测试访问的时候出现如下提示:

  3. [LeetCode]题解(python):116 Populating Next Right Pointers in Each Node

    题目来源 https://leetcode.com/problems/populating-next-right-pointers-in-each-node/ Given a binary tree ...

  4. Vue 双层嵌套

    这种的需要双层嵌套. 代码: <table id="ict-table" class="ict-table ict-report-table blue-theme& ...

  5. C#基础知识大杂烩

    这样是调用父类中第二个有参的构造函数,如果去掉Base默认调用无参构造函数 注意执行顺序是:先调用父类的构造函数,然后再执行子类自己的构造函数. 父类: class Person { public P ...

  6. jQuery源代码学习之八——jQuery属性操作模块

    一.jQuery属性模块整体介绍 jQuery的属性操作模块分四个部分:html属性操作,dom属性操作,类样式操作,和值操作. html属性操作(setAttribute/getAttribute) ...

  7. Hadoop学习笔记: 全排序

    在Hadoop中实现全排序有如下三种方法: 1. 只使用一个reducer 2. 自定义partitioner 3. 使用TotalOrderPartitioner 其中第一种方法显然违背了mapre ...

  8. 并发案例--ScheduledExecutorService用法

    InstanceFactory.getInstance(ScheduledExecutorService.class).schedule(new Callable<Object>() { ...

  9. 算法竞赛入门经典_第二章:循环结构程序设计_上机练习_MyAnswer

    习题2-1 位数 输入一个不超过109的正整数,输出它的位数.例如12735的位数是5.请不要使用任何数学函数,只用四则运算和循环语句实现. #include<stdio.h> int m ...

  10. SQL注入POC

    mysql #encoding=utf-8 import httplib import time import string import sys import random import urlli ...