zoukankan      html  css  js  c++  java
  • LTE Module User Documentation(翻译8)——核心网(EPC)

     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 (1); Ptr<Node> remoteHost = remoteHostContainer.Get (0); InternetStackHelper internet; internet.Install (remoteHostContainer); // 创建 internet PointToPointHelper p2ph; p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s"))); p2ph.SetDeviceAttribute ("Mtu", UintegerValue (1500)); 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 (1);

     

    指定路由很重要,以便远程主机可以到达 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"), 1);
    现在,你应该继续并创建 LTE 基站和用户(参考前面章节)。 当然,你可以配置 LTE 的其他方面,例如路径损耗和衰落模型。 一旦你创建完用户,你应该也给它们配置 IP 网络。按照下面的方式实现。我们假定你有一个装用户和基站节点的容器,类似于:
     
    NodeContainer ueNodes;
    NodeContainer enbNodes;
     
    配置一个只有 LTE 的仿真,你通常会这样做:
     
    NetDeviceContainer ueLteDevs = lteHelper->InstallUeDevice (ueNodes);
    lteHelper->Attach (ueLteDevs, enbLteDevs.Get (0));
     
    为了给用户配置 IP 网络,你只需要额外添加这些:
     
    // 在用户上安装 IP 协议栈
    InternetStackHelper internet;
    internet.Install (ueNodes);
    
    // 给用户分配 IP 地址
    for (uint32_t u = 0; 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 (), 1);
      }
     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 = 1234;
    pf.localPortEnd = 1234;
    tft->Add (pf);
    lteHelper->ActivateDedicatedEpsBearer (ueLteDevs, EpsBearer (EpsBearer::NGBR_VIDEO_TCP_DEFAULT), tft);
    你当然也可以使用自定义的 EpsBearer 和 EpcTft 配置,请参考 doxygen 文档来学习如何实现它。
     
    最后,你可以在 LTE 用户节点上安装应用,通过因特网与远程应用进行通信。这可以通过一般的ns3 过程实现。 接下来是一个简单的例子,一个远程主机,如何设置下行通信,远程主机上有一个 UdpClient 应用,LTE 用户(与前面的代码片段使用相同的变量名)上有一个 PacketSink
     
    uint16_t dlPort = 1234;
    PacketSinkHelper packetSinkHelper ("ns3::UdpSocketFactory",
                                      InetSocketAddress (Ipv4Address::GetAny (), dlPort));
    ApplicationContainer serverApps = packetSinkHelper.Install (ue);
    serverApps.Start (Seconds (0.01));
    UdpClientHelper client (ueIpIface.GetAddress (0), 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

     
  • 相关阅读:
    golang类型判断
    golang文件相对路径问题
    golang中数组与切片的区别
    golang的一些基础数据类型转换
    golang变量的注意
    Oracle数据库导入导出总结(dmp文件)
    Ajax,谷歌提示AutoCompleteExtender控件
    验证控件插图扩展控件ValidatorCalloutExtender(用于扩展验证控件)和TextBoxWatermarkExtender
    当使用母版页时JavaScript客户端获取服务器控件的Id
    实现GridView翻页并且实现CheckBox选中功能的保持
  • 原文地址:https://www.cnblogs.com/alice123/p/5502408.html
Copyright © 2011-2022 走看看