资讯详情

OpenBTS教程

文章目录

  • 简介
  • 第1章 设置
  • 第2章 初始测试和配置
  • 第3章 故障排除和性能调整
  • 第4章 从单个节点到多个节点
  • 第5章GPRS
  • 第6章 OpenRegistration
  • 第7章NodeManager API
  • 第8章 向前和向上
  • 快速参考附录A
  • 安装附录B操作系统

简介

电话很酷。是的,智能手机也很酷,但我正在谈论普通的旧双向电话。在地球上任何两点之间传递你声音的能力都是人类伟大的成就。也许更令人惊讶的是,这种成就被认为是理所当然的。在过去的100年里,我们一直在努力建立公共交换电话网络。挂埋铜网。在城市和城镇之间建立了长途线路。手动路由和连接呼叫,然后自动模拟机器和数字计算机。移动网络一路发明部署。同样的基础设施故事发生在技术先进:设备升级,手机反复更换。现在,有线和无线电话网络几十年来一直在稳步提供语音服务,因此数据带宽正在进入下一个升级周期:光纤回家,LTE智能手机。 OpenBTS这两个世界的桥接。通过无线射频接口和开放IP允许协议之间的任何转换IP连接的人部署移动网络。地球上许多地方仍然没有家庭电话线或移动网络接收。但更多的时候,他们确实通过卫星或长途卫星WiFi连接互联网。适当集成,OpenBTS这种互联网连接可以转换并分布到大地理区域的移动网络。任何GSM可连接和使用语音服务或电话SMS,甚至基本数据。将连接带到偏远地区,同时跳过整个基础设施建设和升级周期。 OpenBTS无线电与软件定义的结合改变了移动网络的方式。该新技术允许纯软件构建复杂的无线电网络。 OpenBTS是一个C 它实现了应用程序GSM栈。随着新功能的实施或协议支持的增加,现有的OpenBTS通过简单的软件更新增强移动网络的功能!另外,因为OpenBTS只是软件,你可以随意做任何事。您不再需要硬件供应商访问其关闭的黑盒。构建利基产品或实验功能;移动网络最终开放创新。

谁应该读这本书? 电信工程师 - 有线或无线、电路交换或分组交换 - 应能定OpenBTS本项目介绍。我们已经注意解释了材料过于分散的危险OpenBTS的无线电和IP侧。假如你是射频(RF)专家,你会学到一些关于互联网电话的知识。并且检查水平很低。如果您对在移动设备上调试应用程序感兴趣,OpenBTS无线传输中的具体情况提供了几个原始接口。您的软件还可以使用新的数据API构建搜索救援、应急响应、功率优化、道路交通分析等应用。

为什么我写了一本书? 我的背景主要是VoIP中。当我开始使用它时OpenBTS在工作中,我无意识地理解无线电系统的复杂性。相反,我和其他人一起工作的是无线电专家,但我从未联系过他们VoIP。 OpenBTS项目文档丰富,但支持各方观众广泛;需要简化。我们希望有一本新书能为技术提供一个完整的新手,使他们能够成功地建立自己的网络:获得语音通话、交换短信等。最初的成功应该建立信心,让这个人自己开始。我试图逐步将健康数量的上下文结合起来。移动网络在GSM和RF还是很复杂的。每一个提示都有帮助。我希望你在设置你的时候能避免大问题!我也希望这本书足够有趣,可以在没有硬件的情况下阅读。在深入OpenBTS在相关项目之前,本书应为您提供足够的信息来确定所需资源的范围。

今天移动网络上的文本 正如Marc Andreessen软件正在吃掉世界。这在移动行业是绝对正确的。随着处理能力的加快和便宜,软件中可以实现极其复杂的信号处理算法。该软件也可以在日益普遍的硬件上运行。由于特殊硬件和协议,供应商锁定的时代已经过时,移动基础设施中的一些真正的竞争和创新机会似乎越来越接近。几年前,建立自己的移动网络这本书将成为一个非常不同的读者。 “编译”和“定制”这些词甚至可能没有出现。图I-说明了这种网络的系统结构。

经过多年的研究,这种网络架构是一个令人难以置信的项目。它非常强大和可扩展,但不幸的是,它非常不灵活和昂贵。大学越来越关注这个问题,其中最著名的是加州大学伯克利分校新兴地区的技术和基础设施(TIER)小组和硅谷卡内基梅隆大学CyLab该中心最近发表了一篇关于传统移动系统结构的论文,包括传统有线网络的演变行李。 为了解决这个问题,有许多开源项目。仅举几例:Osmocom,OpenLTE和YateBTS。每个项目都有不同的目标和系统结构来解决传统网络的问题。然而,这本书是关于这个组织的老将的,OpenBTS。 OpenBTS该项目是一组可用于构建更现代化轻量级网络的开源软件组件。 OpenBTS允许传统移动网络的Um无线电接口直接连接到互联网电话协议。图I-2说明了这种新的“混合”体系结构。

由于移动网络的无线接口与传统网络相同,因此不需要更改手机上的软件或配置。然而,网络核心不再由一系列复杂的协议和服务器组成。它由开放协议组成并使用IP作为其传输。已经存在许多实施这些开放协议的软件项目。 OpenBTS为了连接仍然不可用的功能,还开发了一些新组件GSM互联网世界。围绕云和应用程序的兴奋似乎最终开始流行起来。

浏览本书 本书结束时,您将建立一个功能齐全的移动网络。它将显示任何其他网络在您的手机上的操作,并在网络参与者之间进行路由呼叫SMS,并在手机和互联网之间提供数据连接。

第一章将逐步引导您选择无线电和处理硬件,设置基本操作系统和开发环境,编译和安装软件组件。 第二章介绍了初始组件配置和激活以及网络功能测试。 第三章深入探讨了生产网络的故障排除和性能调整技术。 第四章详细介绍了如何将您的单节点网络扩展到具有移动和切换功能的真正多节点移动网络。 第五章根据您的配置提供通用分组无线业务(GPRS)数据功能。 第六章讨论了一个类似的WiFi专属门户网站OpenBTS可用于应急响应和特殊功能ad hoc网络。 第七章提供和OpenBTS NodeManager控件和事件API上述应用程序交互和构建应用程序的参考资料。 第八章介绍了您网络的一些后续步骤:与公共交换电话网络(PSTN)互联,交换专用分支(PBX)集成以及当前的频谱监管状态。 提供附录AGSM术语,RF快速参考测量、组件端口、路径和文件。 介绍了附录BUbuntu 安装12操作系统。 如何捕获附录C不仅显示了如何捕获IP交换机还捕获原始交换机GSM无线电帧。 在线资源 OpenBTS社区 OpenBTS文档 GSM间隙和频道可视化器 GitHub上的OpenBTS源代码库

第1章 设置

本章将指导您选择硬件,安装基本操作系统和开发环境设置,以及实际的编译和安装组成OpenBTS软件套件的组件。可以采几条捷径 - 例如,如果你想使用官方的二进制包,而不是编译你的程序包,整个过程都是针对那些想从头开始构建的程序。

虽然OpenBTS它实现了软件构建移动网络所涉及的大部分复杂性,但无线电波仍必须以某种方式传输和接收。本节详细介绍了您应该在开发环境中购买哪些硬件组件来实现此功能。第二章介绍了这些组件的配置。

第一个需求是标准商品Linux服务器。其他体系结构已经开始得到支持,但现在仍然坚持使用运行32位操作系统的x86处理器,以获得最佳结果。这台电脑可以是你测试环境中的独立电脑,也可以是你每天使用的笔记本电脑或台式机上的虚拟机。处理能力和RAM最低要求没有明确量、网络负载、网络使用类型、无线电环境等多种变量,最低要求没有明确定义。每个变量都会影响所需的资源。单载波信号要求OpenBTS软件生成向下波形发送给手机,并从手机接收的向上波形中解调。 OpenBTS支持在单个物理无线电上创建多个并发载波信号,线性增加网络容量,但处理需求很高。建议使用单载波信号(最多7个并行语音通道)的稳定实验室设置Intel i5或与2 GB RAM相当的设备。必须至少有一个USB2接口,但USB3正迅速成为新软件定义无线电的要求。现在开始使用USB为了避免将来升级,这可能是个好主意。 USB接口增加吞吐量的需求与无线电波样本的数量和大小有关。多个同时载波信号可用于生产环境,大大增加了所需的采样带宽。此外,解调信号的算法可以更稳定地配置为操作(例如,纠正部署环境造成的信号失真)。因此,产生和解调这些信号所需的处理能力可能比实验室设备大一个数量级。另一件需要记住的事情是,随着OpenBTS新功能可能需要更多的处理能力或内存来推出更新版本。例如,全球移动系统(GSM)模式下的OpenBTS在英特尔凌动处理器上平稳运行,但新的OpenBTS-UMTS至少需要一个英特尔i7。这个旁注实际上是在软件中定义无线电接入网络的(RAN)主要优点。随着新标准的发布,它们可以通过简单的软件更新应用于生产RAN,而不是交换昂贵的硬件基础设施。

软件无线电(SDR)是从硬件角度使OpenBTS成为可能的关键突破。SDR已用于军事应用约20年。直到最近,由于技术成本的降低,它们才能提供给更多的观众。现代SDR是一种通过USB电缆或以太网连接到计算机的硬件。它们通常和一张牌一样小,或者像三张牌一样小DVD同样大,并通过USB直接供电主机连接或小型外部电源。 SDR硬件实现了一个完全通用的无线电,可以通过主机应用程序发送和接收定义频率范围(即60 MHz至4 GHz)原始波形。主机应用程序可以是FM收音机可以接收原始波形,解调信号,播放音频。这意味着无线电硬件不再围绕特定的应用程序设计;完全由主机定义,允许任何东西纯粹用软件来创建无线电应用。 OpenBTS支持来自多个供应商的SDR:Ettus Research,Fairwaves,Nuand和Range Networks。这些产品的价格从大约500美元到超过2500美元不等。如果您选择通过以太网连接的产品,请确保您的Linux服务器具有用于无线电的专用以太网端口(最好是千兆位以太网)。大多数SDR是适用于任何无线电项目的完全通用的硬件,而一些SDR专门针对实施移动网络进行了优化。购买前请咨询供应商。天线许多SDR具有足够的发射和接收灵敏度,可以在小型环境下无天线操作。通常,可以实现半径为1米的覆盖区域。这是实验室环境的理想设置,特别是如果多个开发人员使用多个无线电。覆盖区域不会相互重叠和相互干扰。另外,您的网络不会干扰该地区的任何运营商。即使您的覆盖区域非常小,国家监管机构仍然很可能会要求您在使用GSM频率之前获得测试许可证。有关更多信息,请参阅第78页的“频谱管理”。在实验室环境中,多个开发人员将共享一个OpenBTS实例,因此必须扩展覆盖区域。添加一对小型5 dBi天线可以在无阻碍的环境中大幅提升,最高可达25米半径。这些通常是带有SubMiniature A型(SMA)连接器的橡胶鸭式天线,外观与典型的家庭WiFi路由器天线相似。图1-1显示了一个例子。

天线针对特定频率进行调谐,因此请选择与您将使用的GSM频段(850,900,1800或1900 MHz)最接近的频段。频率也在覆盖区域大小中起作用。低频段(850和900 MHz)传播的距离比高频段更大 - 有时几乎是两倍。

对于测试,至少需要两个与您将使用的频段(850,900,1800或1900 MHz)兼容的GSM手机。大多数现代GSM手机都是“四频段”,这意味着所有频段都得到支持。还有“三频”和“双频”手持设备。确定手机是否与您的网络兼容的最简单方法是在GSM Arena上搜索模型。这里列出了完整的技术规格。您还必须确保您使用的手机已解锁。如果手机处于“锁定”状态,则意味着制造商已将硬件的基带处理器编程为仅与特定载波一起工作。通常可以通过在拨号盘上输入一系列数字来消除此限制,但这超出了本书的范围。最简单的选择是使用可以接受任何运营商的用户身份模块(SIM)卡的解锁手机。

GSM手机中使用的SIM卡只不过是一个精简的智能卡。智能卡也被称为芯片卡或集成电路卡(ICC),可以在许多认证和识别应用中找到。全尺寸智能卡具有与信用卡相同的尺寸;较新的信用卡实际上使用智能卡技术来提高安全性。 SIM卡使用标准智能卡写入器进行编程,一旦写入,就会从全尺寸卡框中弹出,以便它们适合GSM手机。图1-2显示了全尺寸智能卡载体,弹出的全尺寸SIM卡和微调的SIM卡。

有几种方法可以在您的测试环境中使用SIM卡。根据您的需求和未来的部署计划,您可以决定使用备用SIM,自己创建一些新的SIM,或者委托一家公司对其进行批量编程。

出于测试目的,任何物理上适合手机的SIM卡都可能工作。但是,使用现有的SIM卡,已过期的SIM卡或外国的SIM卡会进行权衡,主要涉及安全功能。存储在SIM中的秘密密钥,名为“Ki”,只有SIM发行者知道。它存储在SIM卡中不可读的部分内存中,制造商将其放置在那里后无法检索。运营商和手机之间的这种共享秘密是允许网络在用户有效的情况下以密码方式确定的。 OpenBTS针对这种情况提供了一种称为“基于缓存的身份验证”的替代身份验证方法。它与手机进行初始身份验证交换并记录结果。它使用这个相同的请求,并期望在未来有相同的答案。该方法并不像每个请求的唯一交换一样安全,但仍然比完全禁用身份验证要好。另一个名为“Kc”的密钥用于支持呼叫加密。在您的测试环境中使用其他电话的SIM卡时,您将失去这两项功能,但如果您无法使用智能卡写卡器和空白卡,则这是您的最佳选择。当使用其他运营商的SIM卡连接到您自己的OpenBTS网络时,一些手机是棘手的。如果手机可以检测到它的“本地”载波信号,手动选择另一个载波的选项可能会从设置菜单中隐藏。在未锁定的iPhone中使用AT&T SIM卡时通常会遇到这种情况。

要为您自己的测试环境创建一小批SIM卡,您需要空白的可擦写“神奇”SIM卡和智能卡写卡器。阿里巴巴网站上的多家供应商提供了许多产品。通过USB连接的示例作者如图1-3所示,但市场上有许多不同寻常的作家。

软件安装和写入命令取决于选择哪个写入器和卡。有关编写SIM卡的最新信息可以在OpenBTS wiki页面上找到。

SIM写入公司开始以合理的价格提供更少量的卡片。您通常会提交一些关于您的订单的参数,例如卡片工艺,所需的验证算法和卡片数量,以获得报价。一旦订购完成,成品将是一盒SIM卡以及一张单独的文件或文件,其中包含每张卡片的ID和加密密钥列表。然后可以使用脚本将该列表批量导入到订户数据库中。现在,您的所有订阅者都可以进行系统配置,无需手动刻录10,000张个人SIM卡,而且每个用户都留下了精美的SIM卡。

相比一旦你有一个技术上兼容的SIM卡(2G与3G与4G等),它可能仍然具有不兼容的外形因素。这很容易通过使用SIM卡切割器来弥补,这是运营商喜欢收取可观的服务费用。它看起来像订书机,但功能更像是曲奇工具,如图1-4所示。

他们可以以低于20美元的价格购买,并将SIM卡从标准转换为微型,并将微型转换为纳米。这些尺寸之间的唯一区别是实际芯片周围的塑料量。

现在已经收集了硬件,您可以继续设置开发环境。 OpenBTS传统上是在Ubuntu长期支持(LTS)发行版上开发和测试的。它也在Debian和CentOS发行版上进行了测试。对于本书,将使用经过测试的分发和体系结构:Ubuntu Server 12.04 LTS 32位。从OpenBTS 5.0开始,64位系统也受到支持,但尚未广泛部署。除了Ubuntu 12之外,Ubuntu 13和14系统也已成功使用。基于RPM的系统(CenOS,Fedora和Red Hat Enterprise Linux)的初步打包也可用,但本书不会涉及。请访问OpenBTS.org获取更多信息。如果您尚未安装兼容的操作系统,附录B将提供完整的分步指南。如果您打算使用官方OpenBTS发行包,请随意跳到第10页的“安装”。

Git是一个管理软件源代码更改的版本控制系统。 OpenBTS项目利用了Git中的一些新功能,例如子模块分支跟踪。为确保您的客户端兼容(例如,比1.8.2更新),它需要更新。首先,执行这个命令来添加对Personal Package Archives的支持,这是一种分发二进制发行包的替代方法:

$ sudo apt-get install software-properties-common python-software-properties

然后,执行以下命令为最新的Git构建到您的系统:

$ sudo add-apt-repository ppa:git-core/ppa

现在,您只需刷新软件包列表并再次安装Git来更新系统的客户端:

$ sudo apt-get update 
$ sudo apt -get install git

要确认新的Git客户端已正确安装,请运行以下命令:

$ git --version git version 1.9.1

现在您已安装Git,您可以继续下载开发脚本。

OpenBTS项目由多个托管在GitHub上独立开发库中的软件组件组成。理解Git的复杂性不应该成为使用OpenBTS的障碍,因此编写了几个开发脚本,以便下载代码,切换分支和编译组件。要将这些开发脚本下载到新环境中,请运行以下命令:

$ git clone https://github.com/RangeNetworks/dev.git

开发脚本假定您为GitHub设置了安全Shell(SSH)密钥。如果您不这样做,请在继续之前按照这些说明进行设置。 现在,要下载所有组件,只需运行clone.sh脚本:

$ cd dev 
$ ./clone.sh

每个组件的存储库都将从GitHub克隆到您的开发环境中。 clone.sh脚本还会自动初始化所​​需的任何子模块。既然OpenBTS项目源代码位于您的开发环境中,您可以选择特定的分支或版本进行编译。 switchto.sh脚本用于在构建版本目标之间切换。例如,如果要构建v4.0.0发行版,请运行以下命令:

$ ./switchto.sh v4.0.0

可以使用state.sh脚本为每个组件列出当前版本的目标。该脚本还列出了每个组件的任何未完成的本地更改。

$ ./state.sh

本书重点介绍5.0系列分支。要定位5.0中最新,最好的代码,请运行以下命令:

$ ./switchto.sh 5.0

现在您的开发环境已准备好在5.0系列分支中构建最新的位。要编译二进制包,您将使用build.sh脚本。它会自动安装编译器和自动配置工具以及任何所需的依赖关系。它还控制将构建哪个无线电收发器应用。由于有多种不同的驱动程序可用于各种无线电类型,因此build.sh需要一个参数,以便知道哪个硬件正在定位(有效的无线电类型为SDR1,USRP1,B100,B110,B200,B210,N200和N210)。 OpenBTS还支持Fairwaves的UmTRX硬件。但是,它使用UHD无线电驱动程序的定制版本,并且build.sh脚本尚未自动安装。本书的目标是Ettus Research N200。立即运行build命令:

$ ./build.sh N200

这个过程在第一次运行时可能需要一段时间(30-60分钟),具体取决于正在执行的硬件。展望未来,您只需重新编译更新的组件。例如,以下命令仅重新编译Ettus Research B100收音机的OpenBTS包:

$ ./build.sh B100

openbts当构建脚本完成时,将会有一个名为“BUILDS”的新目录,其中包含一个子目录建立时间戳。此目录的示例如下所示:

$ ls dev/BUILDS/2014-07-29--20-44-51/*.deb 
liba53_0.1_i386.deb range-asterisk-config_5.0_all.deb 
libcoredumper1_1.2.1-1_i386.deb range-configs_5.0_all.deb 
libcoredumper-dev_1.2.1-1_i386.deb 
sipauthserve_5.0_i386.deb 
openbts_5.0_i386.deb 
smqueue_5.0_i386.deb 
range-asterisk_11.7.0.4_i386.deb

恭喜!您现在可以继续安装和启动每个组件,并了解每个组件的用途。

现在你已经下载了一套官方发行版软件包或编译好自己的软件包,需要安装并启动它们。为每个组件提供一些背景信息,然后提供安装过程和所需的任何初始化配置。由于一些组件依赖于其他组件,它们将按照满足这些相互依赖性的顺序呈现。在继续之前,请转到新的编译目录:

$ cd dev/BUILDS/2014-07-29--20-44-51/

安装依赖关系 如果您使用build.sh脚本在前一节编译了自己的一组包,这些依赖关系已经安装完毕,这部分可以跳过。如果您使用的是一组官方发行版软件包,则需要安装一些额外的系统库并定义一个额外的资源库源,以便找到并安装所有依赖项。执行以下命令为ZeroMQ定义额外的存储库源,ZeroMQ是所有组件使用的库:

$ sudo apt-get install software-properties-common python-software-properties 
$ sudo add-apt-repository ppa:chris-lea/zeromq 
$ sudo apt-get update

Coredumper库

OpenBTS使用coredumper共享库来产生有意义的调试信息,如果OpenBTS崩溃。 Google最初编写了它,实际上有两个libcoredumper软件包:libcoredumper-dev包含编译利用coredumper库的程序所需的开发文件,libcoredumper包含应用程序在运行时加载的共享库:

$ sudo dpkg -i libcoredumper1_1.2.1-1_i386 .deb

自发布本书以来,包名中的确切版本号可能已发生变化。

A5/3库

OpenBTS使用A5/3共享库来支持呼叫加密。它包含必须与OpenBTS分开分发的加密程序例程:

$ sudo dpkg -i liba53_0.1_i386.deb

通过在全新系统上安装以下所有组件,可以确保您可以使用功能齐全的GSM网络,框。语音,短信和数据所需的一切都将在一个系统中运行。您将要安装的整体架构如图1-5所示。

会话发起协议(SIP)和实时传输协议(RTP)是OpenBTS用于将GSM流量转换为VoIP的两种协议。

此软件包包含一组默认配置,可让新的Ubuntu系统在安装时即装即用。它包括网络接口,防火墙规则,域名系统(DNS)配置,日志记录等设置。如果您已经习惯于配置Linux发行版,但可能不想安装此软件包,但其内容可用作指导进行所需的更改。在安装过程中,系统会多次提示您确认覆盖某些配置文件。如果您不确定文件的功能,在处理全新系统时,安全答案始终为“Y”:

$ sudo dpkg -i range-configs_5.0_all.deb

如果您回答“Y”,则此软件包将覆盖您的网络接口配置,当询问有关/etc/network/interfaces的更改时。您可以在此提示下回答“N”,并保留您的配置:但是,只有手动将第62页的“中央服务”中详述的文本添加到您的接口定义之后,GPRS才能正常工作。它负责调用iptables-restore自动加载防火墙规则。

Asterisk是一个VoIP交换机,负责处理SIP INVITE请求,建立呼叫的各个部分,并将它们连接在一起。有两个包负责设置Asterisk安装,它不需要任何额外的配置:range-asterisk和range-asterisk-configs。 range-asterisk软件包包含Asterisk SIP交换机软件的确认版本,并确保已包含OpenBTS所需的相应模块。没有包含Asterisk的其他补丁;它只是为了代表Asterisk最新的确认版本。 range-asterisk-configs软件包包含一组配置文件,因此Asterisk知道并可以与订户注册数据库进行通信。这个数据库是各种组件存储和更新用户的电话号码,身份,身份验证,来电显示和注册状态的地方。另外,通过使用这个数据库,在将新手机添加到网络时,不再需要手动编辑Asterisk配置文件:

$ sudo dpkg -i range-asterisk*.deb 
$ sudo apt-get install -f

SIP授权服务器(SIPAuthServe)是一个应用程序,用于处理OpenBTS在手机尝试加入移动网络时产生的SIP REGISER请求。当手机认证成功时,SIPAuthServe负责使用启动它的OpenBTS实例的IP地址更新订户注册数据库,允许其他订户呼叫手机:

$ sudo dpkg -i sipauthserve_5.0_i386.deb $ sudo apt -get install -f

SIP MESSAGE Queue(SMQueue)是一个应用程序,用于处理手机发送SMS时OpenBTS生成的SIP MESSAGE请求。它存储消息,安排它们在网络中传送,并在目标手机不可用时重新安排它们:

$ sudo dpkg -i smqueue_5.0_i386.deb 
$ sudo apt-get install -f

最后,我们到达显示。 OpenBTS负责在软件中实现GSM空中接口,并直接与GSM手机通信。该通信在IP网络侧转换为SIP和RTP,并与上述组件交互以形成核心网络。 GSM手机看到一个完全兼容的GSM无线接入网络,核心网络可以看到标准的SIP端点。任何一方都不应该知道允许手持设备无缝连接到IP世界之间有一层:

$ sudo dpkg -i openbts_5.0_i386.deb 
$ sudo apt-get install -f

现在每个组件都已安装,你需要开始他们。使用名为Upstart的系统在Ubuntu上控制组件。未来版本的OpenBTS套件将支持其他机制,如systemd,但现在使用Upstart。要启动所有组件,执行以下命令:

$ sudo start asterisk 
$ sudo start sipauthserve 
$ sudo start smqueue 
$ sudo start openbts

相反,要停止所有组件,请使用:

$ sudo stop openbts 
$ sudo stop asterisk 
$ sudo stop sipauthserve 
$ sudo stop smqueue

启动和关闭的顺序并不重要,但如果OpenBTS在没有其他组件的情况下运行,GSM网络将可见但不可用。每个组件都在后台运行,并在出现故障时自动重启。要监视组件在后台运行时的控制台输出,可以使用以下日志文​​件:

/var/log/upstart/asterisk.log 
/var/log/upstart/sipauthserve.log 
/var/log/upstart/smqueue.log
/var/log/upstart/openbts.log

系统组件已安装并正在运行。下一步将开始测试和配置它们。

第2章 初始测试和配置

现在应该安装软件和硬件。本章将指导您完成一些初步的完整性检查,功能测试和基本配置定制。到本章结束时,您将通过您的私人移动网络在手机间成功交换第一条短信息和语音通话!

如果服务的其他实例已在运行,则后面的一些手动步骤将会发生冲突并失败。为了确保这个系统上没有别的东西在运行,执行以下命令:

$ sudo stop openbts 
$ sudo stop asterisk 
$ sudo stop sipauthserve 
$ sudo stop smqueue

现在您可以继续确认链中每个步骤的连通性,然后运行第一个基本试验。

首先要验证的是收发器应用程序可以与无线电硬件通信。不同的供应商有不同的方法来完成这一点。

所有Ettus硬件均使用Transceiver52M二进制文件,该文件安装在上一章的/OpenBTS中。运行它,如下所示,以查看是否检测到硬件设备:

$ cd /OpenBTS 
$ sudo ./transceiver 
[sudo] password for openbts: 
linux; GNU C ++版本4.6.3; Boost_104601; UHD_003.006.002-releaseUsing internal clock reference 
-- Opening a USRP2/N-Series device... 
-- Current recv frame size: 1472 bytes 
-- Current send frame size: 1472 bytes

上述示例显示尝试成功。收发器可以通过按Ctrl-C来停止。如果您看到类似以下输出的内容,则存在以下问题:

$ cd /OpenBTS 
$ sudo ./transceiver 
[sudo] password for openbts: 
linux; GNU C++ version 4.6.3; Boost_104601; UHD_003.007.002-release Using internal clock reference 
ALERT 1745:1745 2014-09-05T22:37:00.4 UHDDevice.cpp:528:open: No UHD devices found with address
ALERT 1745:1745 2014-09-05T22:37:00.4 runTransceiver.cpp:160:main: Transceiver exiting...

Ettus提供了一对帮助应用程序来自动检测和检查附加无线电。运行以下命令以列出所有连接的设备。如果未显示,请跳至第18页的“排除USB故障”或第19页的“故障排除以太网”以解决连接问题。这个例子显示了通过以太网连接的N200:

$ uhd_find_devices 
linux; GNU C++ version 4.6.3; Boost_104601; UHD_003.007.002-release 
UHD Device 0 
Device Address: 
type: usrp2 
addr: 192.168.10.2 
name: 
serial: XXXXXX

另一个有用的应用程序是uhd_usrp_probe,它将检查设备并返回其技术信息和配置。这个应用程序的示例运行如下:

$ uhd_usrp_probe 
linux; GNU C++ version 4.6.3; Boost_104601; UHD_003.007.002-release 
-- Opening a USRP2/N-Series device... 
-- Current recv frame size: 1472 bytes 
-- Current send frame size: 1472 bytes 
_____________________________________________________ 
/ | Device: USRP2 /N-Series Device 
| _____________________________________________________ 
| / 
| | Mboard: N200r4 
| | hardware: 2576 
| | mac-addr: XX:XX:XX:XX:XX:XX 
| | ip-addr: 192.168.10.2 
| | subnet: 255.255.255.255 
| | gateway: 255.255.255.255 
| | gpsdo: none 
| | serial: XXXXXX 
| | FW Version: 12.3 
| | FPGA Version: 10.0 
| | 
| | Time sources: none, external, _external_, mimo 
| | Clock sources: internal, external, mimo 
| | Sensors: mimo_locked, ref_locked 
| | _____________________________________________________ 
| | / 
| | | RX DSP: 0 
| | | Freq range: -50.000 to 50.000 Mhz 
| | _____________________________________________________ 
| | / 
| | | RX DSP: 1 
| | | Freq range: -50.000 to 50.000 Mhz 
| | _____________________________________________________ 
| | / 
| | | RX Dboard: A 
| | | ID: SBX (0x0054) 
| | | Serial: XXXXXX 
| | | _____________________________________________________ 
| | | / 
| | | | RX Frontend: 0 
| | | | Name: SBXv3 RX 
| | | | Antennas: TX/RX, RX2, CAL 
| | | | Sensors: lo_locked 
| | | | Freq range: 400.000 to 4400.000 Mhz 
| | | | Gain range PGA0: 0.0 to 31.5 step 0.5 dB 
| | | | Connection Type: IQ 
| | | | Uses LO offset: No 
| | | _____________________________________________________ 
| | | / 
| | | | RX Codec: A 
| | | | Name: ads62p44 
| | | | Gain range digital: 0.0 to 6.0 step 0.5 dB 
| | | | Gain range fine: 0.0 to 0.5 step 0.1 dB 
| | _____________________________________________________ 
| | / 
| | | TX DSP: 0 
| | | Freq range: -250.000 to 250.000 Mhz 
| | _____________________________________________________ 
| | / 
| | | TX Dboard: A 
| | | ID: SBX (0x0055) 
| | | Serial: XXXXXX 
| | | _____________________________________________________ 
| | | / 
| | | | TX Frontend: 0 
| | | | Name: SBXv3 TX 
| | | | Antennas: TX/RX, CAL 
| | | | Sensors: lo_locked 
| | | | Freq range: 400.000 to 4400.000 Mhz 
| | | | Gain range PGA0: 0.0 to 31.5 step 0.5 dB 
| | | | Connection Type: QI 
| | | | Uses LO offset: No 
| | | _____________________________________________________ 
| | | / 
| | | | TX Codec: A 
| | | | Name: ad9777 
| | | | Gain Elements: None

网络SDR1无线电广播使用TransceiverRAD1二进制文件,该文件安装在上一章的/OpenBTS中。如下运行它,看看是否检测到硬件设备:

$ cd /OpenBTS 
$ sudo ./transceiver 1

如果程序不立即停止并继续运行,它已成功检测到无线电硬件。收发器可以通过按Ctrl-C停止,如下所示:

$ cd /OpenBTS 
$ sudo ./transceiver 1 ^C 

Received shutdown signal

如果程序立即停止,如下面的输出所示,继续进入故障排除USB部分以解决此问题:

$ cd /OpenBTS 
$ sudo ./transceiver 1 
$

使用虚拟机设置时,USB连接最常见的问题是所需的USB设备未与正确的虚拟机相关联。使用虚拟机的设置来查找相应的USB设备并将其分配给运行OpenBTS开发环境的虚拟机。

无论使用虚拟机还是实际服务器,以太网连接的无线电都必须有一个额外的以太网接口。虽然可以更改无线电的IP地址以匹配您的本地网络,但这是不可取的,因为在收发器应用程序和无线电硬件之间通过以太网交换的样本对延迟和丢失非常敏感。他们应该建立专门的连接。在服务器中安装额外的物理以太网接口或在虚拟机中创建额外的虚拟以太网接口。确保该接口与无线电硬件在同一子网上。所有Ettus硬件的默认IP地址是192.168.10.2。使用以下示例为您的额外以太网接口分配适当的地址:

$ sudo ifconfig eth1 192.168.10.1/24

现在使用简单的ping命令测试连接。按Ctrl-C停止ping测试:

$ ping 192.168.10.2 
PING 192.168.10.2 (192.168.10.2) 56(84) bytes of data. 
64 bytes from 192.168.10.2: icmp_req=1 ttl=64 time=1.037 ms 
64 bytes from 192.168.10.2: icmp_req=2 ttl=64 time=1.113 ms ^C

既然您已确认收发器软件可以通信使用无线电硬件,您可以在后台开始运行OpenBTS服务。使用以下命令执行此操作:

$ sudo start openbts

OpenBTS服务将自动启动收发器软件的实例并连接到无线电硬件。无线电采样然后通过本地用户数据报协议(UDP)套接字在收发器软件和OpenBTS软件之间交换。

OpenBTS的所有配置都是通过操作存储在SQLite3数据库中的密钥来完成的。默认情况下,该数据库存储在/etc/OpenBTS/OpenBTS.db。每个键在OpenBTS中编译的模式中定义,用于验证正在使用的值。这种配置系统所带来的一个优点是,大多数关键值可以在几秒钟内改变并应用于运行系统,而不会中断服务。这些是动态密钥。配置系统中还有一些静态键需要重新启动OpenBTS才能应用更改。

操作配置键最简单的方法是通过OpenBTS命令行界面(CLI)。运行以下shell命令打开它:

$ sudo /OpenBTS/OpenBTSCLI

现在,您将看到一个OpenBTS提示符。这是包括配置更改在内的命令可以被执行以供OpenBTS处理的地方。从现在起,前缀为$的命令将在Linux命令行上执行。 OpenBTS>前缀的命令用于OpenBTS命令行。打开两个终端窗口可能会很方便,因此不需要不断地输入和退出OpenBTS命令行。

首先要检查的是无线频段和绝对射频频道号(ARFCN)。无线电波段是四个值中的一个:850,900,1800或1900 MHz,对应于全球可用的四个GSM波段。 ARFCN只是选定频段内的一对频率,将用于无线电信号的传输和接收。每个无线电频段有超过100种不同的ARFCN可以使用。 ARFCN也可以被称为载波(例如,使用多个ARFCN的系统是多载波系统)。选择正确的频段和ARFCN对于监管原因以及避免与当地运营商的干扰很重要。您可以使用OpenBTS config命令检查当前频段和ARFCN设置。这些配置键位于GSM.Radio类别中。要查看名称中带有单词GSM.Radio的所有配置密钥,请输入以下命令:

OpenBTS> config GSM.Radio 
GSM.Radio.ARFCNs 1 [default] 
GSM.Radio.Band 900 [default] 
GSM.Radio.C0 51 [default] 
GSM.Radio.MaxExpectedDelaySpread 4 [default] 
GSM.Radio.PowerManager.MaxAttenDB 10 [default] 
GSM.Radio.PowerManager.MinAttenDB 0 [default] 
GSM.Radio.RSSITarget -50 [default] 
GSM.Radio.SNRTarget 10 [default]

GSM.Radio.Band键显示正在使用900 MHz频段,GSM.Radio.C0键表示当前选择该频段的ARFCN#51。如果您的无线电硬件对特定频率没有限制或优化,则可以继续进行这些设置。消除干扰的简单优化是选择您的国家/地区的其他运营商未使用的频段。一般来说,美洲使用850和1900 MHz系统,而世界其他地区则使用900和1800 MHz。国家列表可以在Wikipedia上找到。另外,如果可能的话,选择较低的频率以改善低功率覆盖。如果您的本地注册管理机构为您指定了特定频段和ARFCN,那么您必须使用它。要更改您的GSM频段,您必须再次使用OpenBTS config命令。这一次,将所需的乐队添加到该命令的末尾。以下示例将频段更改为850 MHz:

OpenBTS> config GSM.Radio.Band 850 
GSM.Radio.Band changed from "900" to "850" 
WARNING: GSM.Radio.C0 (51) falls outside the valid range of ARFCNs 128-251 for GSM.Radio.Band (850) 
GSM.Radio.Band is static; change takes effect on restart

该命令确认该Band已更改,但传递了另外两条信息。首先,关于ARFCN对850MHz频段无效的警告。 850 MHz的有效范围是128-251。其次,通知您GSM.Radio.Band参数是静态的,不能在运行时应用; OpenBTS必须重新启动。要修复第一条警告,请再次使用config命令为850 MHz频带设置有效的ARFCN:

OpenBTS> config GSM.Radio.C0 166 
GSM.Radio.C0 changed from "51" to "166" 
GSM.Radio.C0 is static; change takes effect on restart

该命令确认ARFCN已更改,并再次警告此参数为静态。您现在可以重新启动OpenBTS以应用更改:

$ sudo stop openbts 
openbts stop/waiting 

$ sudo start openbts 
openbts start/running, process 6075

该服务将需要几秒钟时间才能开始备份,并且您可以再次自由使用OpenBTS CLI 。

Range Networks SDR1硬件可以配备滤波器,针对特定的GSM频段优化无线电。 每个单元也被校准到一个特定的频带,并且如果OpenBTS设置不符合这个校准,可能会表现不佳。 要查看收音机的出厂校准,请使用trxfactory命令:

OpenBTS> trxfactory 
Factory Information 
SDR Serial Number = XXXX 
RF Serial Number = XXX 
GSM.Radio.Band = 850 
GSM.Radio.RxGain = 52 
TRX.TxAttenOffset = 1 
TRX.RadioFrequencyOffset = 116

要确定是否需要调整,请使用audit命令。 在对安装进行故障排除时,audit命令是您不变的伴侣。 它会报告非默认值,无效值和冲突值,如果您使用的是范围网络硬件,则会列出出厂校准和当前运行配置之间不匹配的部分:

OpenBTS> audit 
+---------------------------------------------------------------------+ 
| WARNING : Factory Radio Calibration [key current-value (factory)] | 
| To use the factory value again, execute: rmconfig key             | 
+---------------------------------------------------------------------+ 
TRX.RadioFrequencyOffset "132" ("116")

在本例中,TRX.RadioFrequencyOffset参数与工厂校准不匹配。 如消息所示,可以使用rmconfig命令再次使用出厂值:

OpenBTS> rmconfig TRX.RadioFrequencyOffset 
TRX.RadioFrequencyOffset set back to its default value 
TRX.RadioFrequencyOffset is static; change takes effect on restart

这是另一个需要重新启动OpenBTS的静态参数,如上所述。 大多数配置参数不是静态的,因此重新启动OpenBTS将成为例外而不是规则。 对于报告为不匹配的任何其他校准参数重复此过程。

Range Networks和Ettus Research无线电之间的一个主要区别在于GSM.Radio.RxGain的适当值。 Range Networks对这个参数使用了一个更高的值,如果它没有调整,Ettus Research设备将无法正常工作。 接收到的信号将过载驱动解调器。 对于初学者,请将GSM.Radio.RxGain设置为10:

OpenBTS> devconfig GSM.Radio.RxGain 10 
GSM.Radio.RxGain changed from "52" to "10" 
GSM.Radio.RxGain is static; change takes effect on restart

还有一个专用的命令,可以让你设置这个参数而不用重新启动OpenBTS。 如果您需要进行微调以避免每次重新启动,请使用rxgain。

既然Radio已经过校准并且设置已确认,您将使用手机搜索新创建的网络。 每部手机的菜单都不同,但该项通常与“运营商选择”或“网络选择”类似。图2-1中详细介绍了在Android上手动选择不同运营商的流程。

从Android菜单系统启动“设置”应用程序。 选择“更多”。 选择“移动网络”。 选择“网络运营商”。这可能会也可能不会启动搜索。 如果没有,请选择“搜索网络”。 搜索完成后,将显示可用运营商网络列表。 图2-2详细说明了在iOS 7上手动选择不同运营商的流程。

1.在主屏幕中,打开“设置”应用程序。 2.选择“运营商”。 3.在“网络选择”屏幕上,禁用自动载波选择。 4.手机现在将搜索可用的运营商网络。 5.搜索完成后,将显示可用运营商网络列表。

我们在这里看到了可选运营商列表中的测试网络。 根据使用的手机型号,固件和SIM卡,网络ID将显示为“00101”,“001-01”,“测试PLMN 1-1”或GSM“OpenBTS”的短名称。如果您的测试网络 没有被检测到,通过重新选择菜单项,在打开和关闭之间切换飞行模式,或者关闭手机电源,再次强制搜索。 如果仍然无法使用,请再次确认手机支持您在上面配置的GSM频段,并且基带已解锁(即不受合同限制仅使用特定载波)。 本部分让您验证下行链路是否正常工作; 以下部分将指导您验证上行链路。 然后,您将继续输入手机的身份参数并通过第一次连接(第27页)连接至网络。

如果您从未有过涉及射频或模拟信号的项目,那么您可能会对可能出现问题的数量感到惊讶。最终,您可能会惊讶于RF通信可以工作!在OpenBTS社区中的射频专家有时被视为黑魔法从业者…但我离题了。在GSM网络中,使用两个独立的射频,因此基站和手机可以在两个方向上同时通信。换句话说,GSM使用频分多址建立全双工通信。选择ARFCN(请参阅第20页的“更改频带和ARFCN”)决定使用哪一对频率。从基站到手机的路径称为下行链路,从手机返回到基站的路径称为上行链路。在上一节中,您已经能够成功搜索并找到新的网络信标。这表明网络的下行链路到达了您的手机,并且信号足够干净以解调和解释所显示的网络短名称和/或身份号码所证明的信息。在建立新网络时需要注意的一点是,无线电干扰或来自上行链路上其他来源的“噪音”。如果上行链路噪声太大,则来自手机的信号不能可靠地解调成可用信息。 OpenBTS将通过使用noise命令显示当前级别:

OpenBTS> noise 
noise RSSI is -68 dB wrt full scale 
MS RSSI target is -50 dB wrt full scale 
INFO: the current noise level is acceptable.

在本例中,检测到的环境噪声接收信号强度指示(RSSI)为-68 dB(较低的数字更好,意味着噪声较少)以及配置的目标RSSI级别手机是-50分贝。这意味着基站最多可以从手机获得比环境噪声多18dB的能量 - 这是一个非常好的余量,这意味着由于噪声导致的上行链路接收问题不应该成为问题。这两个数字之间的小利润将产生不同的信息。例如,具有10dB或更小的裕量将报告:

WARNING: the current noise level is approaching the MS RSSI target, uplink connectivity will be extremely limited. 

警告:当前的噪声级别接近MS RSSI目标,上行链路连接将非常有限。

并且零或小于零的边际将报告:

WARNING: the current noise level exceeds the MS RSSI target, uplink connectivity will be impossible. 

警告:当前噪声级别超过MS RSSI目标,上行链路连接将不可能。

如果报告了这些WARNING消息中的任一个,则需要采取措施来减少上行链路噪声和/或增加手持机发送功率。将来,如果您的手机可以看到基站但无法再连接,应该首先检查噪声。你的配置仍然是100%正确和功能性的,但是无线电环境可能已经改变,阻止了通信。

如果您的基站无线电设置不包含频率双工器,上行链路上的头号噪声源实际上可能是下行链路信号。如果没有适当的双工滤波,下行链路信号通常是物理上和频率上最接近上行链路的能量源。有关双工器的更多信息,请参阅第46页的“更强,更清洁的信号”。即使没有双工器,也可以通过多种方法降低上行链路噪声。

一种快速双工器可以简单地对齐天线,使它们不容易相互馈入。如果您使用橡胶鸭式天线,请将它们倾斜成90度角。这些天线的辐射方向图将如图2-3所示垂直。

如果天线彼此平行,则信号可以有效地从发射机流向接收天线,但是当天线形成90度角时,信号在与接收天线不同的平面上发射。通过在调整前后运行噪音命令来观察更改。这种简单的调整可以将噪音降低多达10 dB。

上面的对齐步骤减少了从发射天线到接收天线的能量流。收到的能量可能仍然太高,无法使上行链路可用。降低下行链路传输功率将进一步清除上行链路。在实验室环境中,通过降低下行功率而损失的覆盖区域并不重要。清洁信号优于强信号。不带任何参数运行电源命令以查看当前级别。以衰减分贝报告功率:

OpenBTS> power 
current downlink power 0 dB wrt full scale

为了降低下行链路发射功率,例如减少20dB,输入以下内容:

OpenBTS> power 20 
current downlink power -20 dB wrt full scale

下行链路现在以20dB的功率发射。使用noise命令观察改进。

通过调整GSM.Radio.RSSITargetand和GSM.Radio.SNRTarget键,还可以告诉手机PowerHandsets使用更多的电源。在大多数情况下,这些键的默认值应该足够。但是,如果您遇到接收功率的大幅波动(例如,在地下矿井的角落四处走动),可能有必要增加这些值以提供更大的缓冲区以允许功率差异。提高所有手机的功耗将更快地耗尽电池电量,但上行链路信号更加可靠。总是存在权衡。如果您的噪声级别仍然过高,请返回第19页上的“启动网络”以将您的ARFCN更改为噪声较小的一个。

您现在已验证下行链路和上行链路。为了确保所有的设置都已经被应用,请发出以下命令来重新启动OpenBTS:

$ sudo stop openbts 
$ sudo start openbts

在实际连接到测试网络之前的唯一一步就是查找并隐藏手机的身份参数,以便将其接收到网络上。

您将要搜索的主要身份参数是国际移动用户身份(IMSI)。这是存储在SIM卡中的14-15位数字,与网络上的手机用户名类似。手机通常不会泄露其SIM卡的IMSI。它有时可能位于菜单中或通过现场测试模式,但是这种确定SIM的IMSI的方法很麻烦。幸运的是,还有其他方法。 OpenBTS也知道它与之交互过的IMSI,因为你掌控着网络端,所以你也可以访问这些信息。为了强制手机和测试网络之间的交互,你需要执行更新请求(LUR)操作网络,类似于注册。这不比从运营商选择列表中选择网络更复杂。在尝试任何LUR之前,您需要启动负责处理这些请求的SIPAuthServe守护进程:

$ sudo start sipauthserve 
sipauthserve start / running, process 7017

现在,再次按照第23页上的“搜索网络”中的步骤,调出载波选择列表并选择您的测试网络。在很短的时间之后,手机应报告注册失败。它也可能会从您的测试网络收到一条短信,指示注册失败。此消息自动包含IM-SI,因此您可以跳到第29页上的“添加订户”。但是,此功能在所有硬件上都不起作用,因此如果您未收到SMS,则继续操作. OpenBTS会按顺序记住这些LUR交互执行一些称为SIM /临时移动订户身份(TMSI)交换的功能。 IMSI / TMSI交换用于TMSI的用户可识别的IMSI,并用于增加网络上的用户隐私。交易所默认是禁用的(修改Control.LUR.SendTMSIs toenable);但是,信息仍然存在,可以使用tmsis命令进行检查。现在,请使用它查看与手持设备最近的LUR交互:

OpenBTS> tmsis 
IMSI TMSI IMEI AUTH CREATED ACCESSED TMSI_ASSIGNED 
214057715229963 - 012546629231850 0 78s 78s 0 001010000000002 - 
351771054186520 1 80h 95s 0 001010000000003 - 351771053005400 1 80h 108s 0

条目按时间排序,最上面的条目对应于最近的交互操作。您的手机应该是此列表中的首要条目 - 最近与AUTH设置为0的交互,因为LUR由于手机不是知识订阅者而失败。本例中的其他条目是成功执行LUR的附加测试手机,如AUTH列设置为1所示。

在繁忙的环境中,可能很难确定哪个手机硬件与此列表上的哪个条目相对应。要将IMSI与特定硬件匹配,可以使用国际移动设备标识符(IMEI)。这是手机物理无线电硬件的唯一标识符,类似于以太网接口上的MAC地址。手机的IMSI通常印在其电池盖下或非常靠近SIM本身的地方。在许多手机上,IMEI也可以通过在键盘上拨打以下内容来访问:*#06#.IMEI值通常仅用于在生产环境中报告和检测被盗硬件。这里可以作为确定哪个SIM卡在哪个手机中的便捷方式。 IMEI的最后一位可能与OpenBTS显示的不匹配。它是一个校验位,在OpenBTS中显示为零。

您现在应该拥有所有必要的信息以在您的测试网络上创建新的订户帐户。一些字段仍然需要,但可以自由选择:名称和移动台国际用户目录号码(MSISDN)。名称字段仅仅是该用户的友好名称,因此您可以记住与哪个手机或与哪个人相关联。 MSISDN字段并不比订户的电话号码复杂。由于您没有连接到公共电话网络,因此您可以选择任何号码。您需要添加订户的程序是nmcli.py。它是No-deManager API的简单客户端(更多内容参见第7章),并允许您通过JSON格式的命令更改配置参数,添加订阅者,监控活动等。 nmcli.py已经存在于你的开发目录中 - 现在移动它来访问它:

$ cd dev /NodeManager

有两种方法可以使用nmcli.py添加订阅者。第一个创建将使用缓存身份验证的订户:

$ ./nmcli.py sipauthserve subscribers create name imsi msisdn

第二个创建将使用完全身份验证的订户:

$ ./nmcli.py sipauthserve subscribers create name imsi msisdn ki

如果IMSI是“用户名”,手机的“密码”是第5页的“使用备用SIM卡”中讨论的Ki字段。如果您使用来自其他提供商的备用SIM卡,则无法使用Ki,并应使用第一个调用样式。如果你正在使用自己烧过的SIM,Ki会被你知道。使用nmcli.py的第二个调用样式将它包含在新订户中。在这个例子中,在iPhone 4中使用备用SIM卡,并在南达科他州(区号605)为其指定一个假号码:IMSI字段由数字IMSI组成,前缀为字符串“IMSI”。

$ ./nmcli.py sipauthserve subscribers create "iPhone 4" IMSI214057715229963 6055551234 
raw request: {"command":"subscribers","action":"create","fields": {"name":"iPhone 4","imsi":"IMSI214057715229963","msisdn":"6055551234","ki":""}} 
raw response: { "code" : 200, "data" : "both ok" }

使用您自己的信息执行相同的命令,将第一个用户添加到您的测试网络。

现在,当您在连接菜单中选择测试网络时,LUR应该成功。 这可以通过OpenBTS中的tmsis命令来确认。 “AUTH”列现在在对应于您的IMSI的条目中具有“1”:

OpenBTS> tmsis 
IMSI TMSI IMEI AUTH CREATED ACCESSED TMSI_ASSIGNED 
214057715229963 - 012546629231850 1 11m 56s 0 001010000000002 - 
351771054186520 1 80h 8m 0 001010000000003 - 351771053005400 1 80h 9m 0

恭喜,您已成功注册到您自己的私人移动网络! 在继续之前,请随时注册您想要使用的任何其他手机。

现在手机可以访问您的网络,您可以执行一些更有趣的测试。 首先是对网络SMS功能的快速测试。 负责接收,路由和安排SMS消息传送的组件是SMQueue。 必须在测试这些功能之前启动它; 执行以下命令来执行此操作:

$ sudo start smqueue 
smqueue start/running, process 21101

在手机上,编号为411的短信。这是SMQueue中的一个“短代码”处理程序,它只会回显接收到的任何内容以及有关使用的网络和用户帐户的其他信息。给411的消息的主体可以是任何你想要的,尽管对每个消息或连续的数字或字母使用独特的内容可能是有用的。这可以帮助您确定发生错误时正在响应的消息。一旦你的信息组成411,点击发送。几秒钟后,应该会出现一个回复(示例如下):

“1 queued, cell 0.1, IMSI214057715229963, phonenum 6055551234, at Sep 8 02:30:59, Ping pong" 

这表示以下内容: •有一条消息排队 •基站的负载因子为0.1 •从IMSI 214057715229963,MSISDN 6055551234接收到消息 •消息在9月8日02:30:59发送 •消息正文为“Ping pong”。 “

直接SMS SMS消息也可以通过使用sendms命令直接从OpenBTS进行测试。在OpenBTS CLI中,让我们看看如何使用help命令调用它:

OpenBTS> help sendsms 
sendsms IMSI src# message... 
-- send direct SMS to IMSI on this BTS, addressed from source number src#.

通过指定目标IMSI,消息应该看起来源于的源号码和消息主体本身来发送消息。 用您的订户帐户替代信息编写消息并按Enter键:

OpenBTS> sendsms 214057715229963 8675309 
direct SMS test message submitted for delivery

几秒钟后,您的手机应该显示来自假想号码8675309的新的传入消息,其中包含“直接短信测试”。 以这种方式创建的SMS消息根本不会路由SMQueue; 它们通过GSM空中接口直接发送到手机,因此不能重新安排时间。 如果手机离线或无法到达,这些信息就会丢失。 这就是SMQueue需要的原因 - 尝试和重新安排在固有不可预测的无线环境中的交付。

如果您配置了多个手机用于您的网络,请随时在它们之间来回发送一些消息。 验证接收消息时源号码是否正确,并将这些消息的回复路由回原始发件人。

另一项要测试的服务是语音。与SMS一样,OpenBTS不直接处理语音,并需要额外的服务才能运行,在这种情况下,Asterisk。立即启动Asterisk:

$ sudo start asterisk 
asterisk start/running, process 1809

使用您在SMS测试中使用的手机,您现在将验证语音服务的几个方面。这是通过使用rangeasterisk-configs软件包定义的一些测试扩展来完成的。分机是内部电话号码,从外面无法接通。

您将使用的第一个测试扩展会播放一个不变的音调。这听起来可能不太令人兴奋,但确实证实了有关网络的许多事情:

Asterisk正在运行并且可以访问。 呼叫路由按预期工作。 下行音频功能正常。 现在用手机拨打2602。 当你听到音调时,听音调的变化。音调的这些变化是由于丢失了下行链路语音流路径中的信息,类似于分组丢失。在现场,这是测试音调扩展的主要用途:测试下行链路质量。在生产网络中,下行链路损失3%是正常的,损失5%-7%仍然可以提供可理解的对话。 回声呼叫(2600) 下一个测试扩展会创建一个“回声呼叫”。基本上,Asterisk收到的所有音频将立即回送给发件人。除了确认列出的用于测试音调的项目之外,回声呼叫还会显示网络中存在的任何延迟或上行链路质量问题。 现在用手机拨打2600。 当你对着麦克风讲话时,你很快会听到自己在听筒里的声音。有点延迟是正常的,但更长的延迟会导致更像是使用对讲机的体验。人脑可以处理大约200毫秒的延迟而没有麻烦。除此之外,谈话开始瓦解,双方都停止说话,因为它变得不舒服。

如果您配置了多个手机用于您的网络,请随时在它们之间拨打一些电话。接收呼叫时验证来源号码是否正确。

此时,您应该了解OpenBTS CLI中可用的便捷工具chans命令。 该工具可用于客观量化链接质量,而不是基于用户感知。 要查看此命令有用的任何内容,必须有一个活动的呼叫。 在这个例子中,呼叫被放置到2602测试音调扩展,并且在10秒钟后执行chans命令(注意“时间”列)。 手机被移动了一米远离正在使用的无线电,另一个带有chans命令的样本被采集:

OpenBTS> chans 
CN TN chan transaction Signal SNR FER TA TXPWR RXLEV_DL BER_DL Time IMSI type id dB pct sym dBm dBm pct 
0 1 TCH/F T101 28 28.7 0.15 1.2 7 -61 0.00 0:10 2140... 
OpenBTS> chans 
CN TN chan transaction Signal SNR FER TA TXPWR RXLEV_DL BER_DL Time IMSI type id dB pct sym dBm dBm pct 
0 1 TCH/F T101 14 31.4 0.50 1.2 19 -73 0.00 0:26 2140...

这里有很多领域,他们都非常有用,但现在我们来关注信噪比(SNR),TXPWR和RXLEV_DL。在两次读数中,都有一个活动频道。 SNR列表示由基站测量的上行链路的SNR:越高越好。随着手机移开,这个数字实际上有所改善!怎么可能?答案在于TXPWR专栏。该列表示手机报告的上行链路发射功率。在二读中,这个数字已经从7跳到19 dBm,这意味着手机使用更多的功率将其信号传输到基站。这可以解释为什么在基站测得的信噪比更好。取决于基站接收其上行链路信号的程度,网络独立地指示手机以不同的功率电平进行发送。这是因为所有的信号都是在基地台以大约相同的强度接收到的,这使得它更容易解调。然而,基站在下行链路上对所有的手机使用相同的发射功率。这可以在RXLEV_DL列中观察到。该列表示手机报告的下行信号电平。在二读时,随着手机远离基站移动,这个数字从-61 dBm下降到-73 dBm。它正在接收较低强度的下行链路信号,因为它现在距离较远。这些字段的完整列表可以通过运行来检索:

OpenBTS> help chans

在本章中,您已经熟悉了几个OpenBTS命令,其中最重要的一个可能是配置。 在继续之前,我们将提供一些关于配置的最终细节,并且会向您介绍几位亲戚。

到目前为止,您使用config来搜索配置键并更改其值。 如果提供了完整的名称,它还可用于提供有关特定配置密钥的其他信息:

OpenBTS> config SIP.Proxy.SMS 
SIP.Proxy.SMS 127.0.0.1:5063 (default) 
- description: The hostname or IP address and port of the proxy to be used for text messaging. This is smqueue, for example. 
- type: hostname or IP address and port 
- default value: 127.0.0.1:5063 
- visibility level: customer warn 
- a warning will be presented and confirmation required before changing this sensitive setting 
- static: 0 
- scope: value must be the same across all nodes

devconfig命令的功能与config命令相同。 但是,它允许您操作更多类型的键。 每个键都有一个可视级别,用于标识键用于用户,开发人员或工厂的人员。 使用devconfig可以访问这些更敏感的键,例如协议定时器:

OpenBTS> config GSM.Timer 
GSM.Timer.Handover.Holdoff 10 [default] 
GSM.Timer.T3109 30000 [default] 
GSM.Timer.T3212 0 [default] 

OpenBTS> devconfig GSM.Timer 
GSM.Timer.Handove

标签: 3ad00传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台