RECO User Guide
User Manual: Pdf
Open the PDF directly: View PDF
.
Page Count: 44
| Download | |
| Open PDF In Browser | View PDF |
Table of Contents Abstract 1. Introduction 1.1. Architecture Overview 1.2. Dynamic Linking Framework for RECO MME 1.2.1. RECO MME 1.2.2. Dynamic Linking Framework 2. Environment Setup 2.1. Core Network 2.1.1. Setup IP Architecture 2.1.1.1. Network Sockets and NICs 2.1.1.2. NICs and Virtual NICs 2.1.1.3. Virtual NICs and NICs in VMs 2.1.1.4. NICs in VMs and IPs 2.1.2. Auto Installation Script 2.1.2.1. MME 2.1.2.1.1. Download RECO and Other Tools 2.1.2.1.2. Run The Script 2.1.2.1.3. Run The MME 2.1.2.2. HSS 2.1.2.2.1. Download RECO and Other Tools 2.1.2.2.2. Run The Script 2.1.2.2.3. Run The HSS 2.1.2.3. S/P-GW 2.1.2.3.1. Download RECO and Other Tools 2.1.2.3.2. Run The Script 2.1.2.3.3. Run The S/P-GW 2.1.3. Manual Installation 2.1.3.1. MME 2.1.3.1.1. Update 2.1.3.1.2. Download RECO and Other Tools 2.1.3.1.3. Copy Configuration Files 2.1.3.1.4. File Settings 2.1.3.1.5. Install libgtpnl 2.1.3.1.6. Build The MME 2.1.3.1.7. Check The Certification 2.1.3.1.8. Install Packet python-tk 2.1.3.1.9. Run The MME 2.1.3.2. HSS 2.1.3.2.1. Update 2.1.3.2.2. Download RECO and Other Tools 2.1.3.2.3. Copy Configuration Files 2.1.3.2.4. File Settings 2.1.3.2.5. Database Import 2.1.3.2.6. Check The Certification 2.1.3.2.7. Build The HSS 2.1.3.2.8. Run The HSS 1 2.1.3.2.9. Phpmyadmin 2.1.3.3. S/P-GW 2.1.3.3.1. Update 2.1.3.3.2. Download RECO and Other Tools 2.1.3.3.3. Copy Configuration Files 2.1.3.3.4. File Settings 2.1.3.3.5. Build The SPGW 2.1.3.3.6. Run The SPGW 2.1.4 Example of IP Settings 2.1.4.1 Architecture Overview with IPs 2.1.4.2 IP Settings of HSS 2.1.4.2.1 Network Interface Settings 2.1.4.3 IP Settings of MME 2.1.4.3.1 Network Interface Settings 2.1.4.3.2 Configuration File Settings 2.1.4.4 IP Settings of S/P-GW 2.1.4.4.1 Network Interface Settings 2.1.4.4.2 Configuration File Settings 2.2. RAN 2.2.1. SIM Card 2.2.2. eNodeB 2.2.2.1. Commercial eNodeB - Wistron NeWeb OSQ4G-01E2 2.2.2.2. OAI eNodeB 2.2.2.2.1. USRP B210 2.2.2.2.1.1. USRP driver installation 2.2.2.2.1.2. Build OAI executables from source 2.2.2.2.1.3. Start the eNodeB with USRP B210 2.2.2.2.2. ExpressMimo2 2.2.2.2.2.1. ExpressMimo2 card setup 2.2.2.2.2.2. Building OAI executables from source 2.2.2.2.2.3. Start the eNodeB with ExpressMimo2 3. Conclusion 2 Abstract It is envisioned in the future that not only smartphones will connect to cellular networks, but also all kinds of different wearable devices, sensors, vehicles, home appliances, VR headsets, and robots etc. However, since the characteristics of these different devices differ largely, people argue that future 5G communication systems should be designed to elastically accommodate these different scenarios. We propose a reconfigurable core network called RECO that demonstrates how to implement customized virtual network entities efficiently to suit for different types of users with different characteristics. We then implement a reconfigurable MME called RECO MME which verifies our proposed RECO architecture. Besides, we particularly focuses on the dynamic linking framework used in our RECO MME. 1. Introduction 1.1. Architecture Overview Reconfigurable Core (RECO) Figure 1 shows the architecture to build a flexible 5G core efficiently, and we call it Reconfigurable Core (RECO). RECO has three key components: Modularized virtual network entities (VNFs) designed by object-oriented programming language: Inside each virtual network entity or so-called virtual network function (VNF), we split the code into modules and compile them into shared libraries (.so). We then separate the modules into two groups: (i) common modules which are the same among different types of users, and (ii) customized modules which differ between different types of users. As shown in Figure 1, the MME common libraries are the common modules and GTP.so, NAS.so, S1AP.so, and S6A.so are the customized modules. The common modules can be implemented in any programming language since they are only treated as libraries for customized modules. Also, different types of customized VNFs share the same copy of common modules. For example, the human MME VNF, the IOT MME VNF and the vehicle MME VNF all use the same copy of common modules stored inside memory and disk. On the other hand, customized modules differ between different user types and should be implemented in object-oriented programming languages. The major benefit of implementing customized modules like this is that it can highly reuse already written code and enhance the process of creating a new customized VNF. For example, suppose we have already implemented a human MME VNF. To implement a high-mobility vehicle MME VNF, we can directly inherit most of the classes within the human MME VNF and just override particular mobility related member functions to build a high-mobility vehicle MME VNF. Dynamic linking framework which links customized modules during run-time: For each virtual network entity, there is a dynamic linking framework inside it. The framework's major job is to link customized modules during run-time according to the configuration file the identifier provides to form a customized virtual network entity. The reason we choose to use dynamic linking is because it highly increases the flexibility to create a new network slice. When needing to 3 form a new virtual network entity, all we need to do is to create new corresponding customized modules for the particular type of user and the dynamic linking framework will then compose everything together to form a new network entity. This is somewhat similar to adding a plugin into the Chrome browser to generate a customized browser. An identifier which generates a configuration file for a particular network slice: When a new user first tries to attach to the core network, the identifier inside the load balancer will try to identify the user’s type by parsing some “user type tag” in the attach request packet. If this kind of user type has never attached to the core network before, the identifier will generate a configuration file including information about what customized modules it needs to form a particular network slice and pass it to the dynamic linking framework. Then the dynamic linking framework will compose these modules together and form customized virtual network entities to serve the user. The identifier also records a hash table with user types as the key and which VNFs are for that particular user type as the value. In this way, subsequent packets of the same user type can go through the hash table and find out which VNFs it should route its packets to. Figure 1. Reconfigurable Core 1.2. Dynamic Linking Framework for RECO MME We choose first to implement the MME entity so that we can verify that our reconfigurable architecture is feasible and has the benefits we expect. In the following subsections, we first give an overview of our reconfigurable virtual MME (RECO MME) and show its architecture, then we focus on how the dynamic linking framework is implemented in RECO MME. 4 1.2.1. RECO MME We built a reconfigurable virtual MME to demonstrate the proposed reconfigurable architecture. It is mainly modified from the MME inside openair-cn, a simple core network developed by EURECOM. We followed the code architecture of openair-cn but to separate the highly bundled mme executable linked with many static libraries into a dynamic linking framework linked with shared libraries. Figure 3 shows the architecture of our RECO MME. It is composed of four main components listed below: Common modules We recompiled the static libraries used in openair-cn’s MME into two kinds of shared libraries: (i) load-time dynamic linking shared libraries which share among different types of users, and (ii) run-time dynamic linking shared libraries which differ between different types of users. The load-time dynamic linking shared libraries are common modules which can be shared among different customized MME. When the mme executable (the dynamic linking framework) is executed and loaded into memory, these common modules will also be loaded into memory. We purposely built these common modules into load-time dynamic linking shared libraries because when there are tons of different customized MMEs (human MME, eHealth MME, high mobility MME etc.) serving different types of users simultaneously on a machine, the storage and memory device will only need to store one copy of these common modules. This highly reduces disk space and memory usage. In practice, we compiled the static libraries (.a) 3GPP_TYPES, BSTR, CN_UTILS, HASHTABLE, SECU_CN, UDP_SERVER, SCTP_SERVER, GTPV2C, ITTI inside openair-cn into load-time dynamic linking shared libraries for our RECO MME to get the benefits of saving storage and memory space. Customized Object-oriented modules We refactored MME_APP, NAS, S1AP, S11_MME and S6A inside openair-cn from C-based static libraries into C++ based run-time dynamic linking shared libraries. Building these customized modules into run-time dynamic linking shared libraries enables the MME to load and unload shared libraries during run-time. By doing so, the dynamic linking framework can load different customized modules according to a configuration file and form a customized MME. For example, to form a high-security MME that serves eHealth users, the dynamic linking framework would load customized high-security modules according to the configuration file during run-time and link them into a customized high-security MME used particularly by eHealth users. In addition, the source code inside these five modules (MME_APP, NAS, S1AP, S11_MME and S6A) are all refactored by C++ object-oriented programming language. This was done by composing related functions and variables inside each module into classes. By doing so, when a programmer wants to customize an already written module (base module) into a totally new module (such as a high-security module or a high-mobility module), he/she does not need to rewrite the whole module again. Instead, he/she can inherit classes inside the base module and override particular member functions with new functionalities into a new customized module. This highly reuses already written 5 code and increases the development process. Pseudo Identifier Currently, we simply implemented a checkbox list shown in Figure 3. The checkbox list enables the programmer to manually choose particular modules for a type of user and then generate the corresponding configuration file and pass it to the dynamic linking framework. The configuration file generated by the pseudo identifier is shown in Figure 2. We can see that for a human user, we should choose MME_APP, NAS, S11_MME , S1AP and S6A as the customized modules to be loaded by the dynamic linking framework. And for a high-mobility user such as a user taking the high-speed rail, we should choose high-mobility modules HMB_MME_APP, HMB_NAS and HMB_S11_MME with customized high mobility classes implemented inside these modules and S1AP and S6A which are the same modules as the human users since these modules do not differ from a human user. As for an eHealth user which requires special high-security authentication methods, we should choose high-security modules HS_NAS and HS_S6A which are implemented with new security algorithms and the other three modules the same as a human user. Figure 2. Configuration file for RECO MME Dynamic linking framework The dynamic linking framework is used for linking customized modules at run-time according to the configuration file the pseudo identifier provides to form a customized MME. Its main functionalities include provide an interface for customized modules, parse the configuration file, load and initialize corresponding modules according to the configuration file, and help resolve dependency relationships among customized modules. We will describe each of these functionalities clearly in the next subsection. 6 Figure 3. RECO MME Architecture Figure 4 illustrates an example to form a high-speed rail (HSR) high-mobility MME inside our RECO MME. (1) We manually choose the high mobility 1 modules HMB_MME_APP, HMB_NAS and HMB_S11_MME and base modules S1AP and S6A. (2) The pseudo identifier will generate a corresponding configuration file for the dynamic linking framework. (3) The framework will load and initialize the corresponding modules to form a customized MME for HSR. (4) The MME for HSR along with other core network entities form a HSR network slice. Figure 4. High mobility MME example 1.2.2. Dynamic Linking Framework In this subsection, we describe how the dynamic linking framework is implemented in our RECO MME. The framework has four main functionalities, (1) provide an interface for customized modules (2) parse the configuration file (3) load and initialize corresponding modules according to the configuration file, and Note that we did not modify the source code for mobility related modules. We just renamed these modules’ names to HMB_MME_APP, HMB_NAS and HMB_S11_MME to demonstrate our reconfigurable concept. The same is for high security modules. 1 7 (4) help resolve dependency relationships among customized modules. Module-framework interface First, we provide an interface class named module inside the dynamic linking framework shown in Figure 5. This interface class includes a pure virtual function named init which forces every class that inherits module to implement its own initialization function. Figure 5. Interface class “module” in the dynamic linking framework Next, in every customized module, we implement a class named after its module name and inherits the “module” interface class. Besides, we create two class factory functions which helps the module to create/destroy an instance of its own. For example, Figure 6 shows the implementation of a class named nas inside the NAS.so module. We can see that class nas inherits interface module and implements the init virtual function. In addition, it implements two class factory functions named create and destroy. Function create helps create a nas instance, and function destroy frees the created nas instance. The dynamic linking framework will use dlsym to access the symbol address of create and destroy and use these addresses to create or destroy the nas instance. Figure 6. nas.cpp 8 Parse configuration file The dynamic linking framework is also responsible for parsing the configuration file for the MME. The configuration file includes a module list which lists the customized modules that the framework should load and link during run-time as listed in Figure 2. Line 10 in Figure 7 shows the function called to parse the configuration file. After parsing the configuration file, the framework will store the list of customized modules in a global variable named mod_list shown in line 5 in Figure 7. This variable will be used later for loading and initializing customized modules. Load and initialize customized modules We can see in line 18 ~ line 34 in Figure 7 that how the dynamic linking framework loads and initializes customized modules. It uses a for loop to iterate through the mod_list. Moreover, for every customized module, the framework uses dlopen to load the customized modules into memory and then uses dlsym to access the symbol address of the class factory function create and calls it to create an instance of that module. Later in line 32, it calls the init function of every module to initialize that module. Resolve dependency relationships among customized modules Note that in line 20 in Figure 7, we set the RTLD_GLOBAL flag in dlopen. This flag tells the dynamic linker to merge the symbol table of each module into a global symbol table which enables subsequently loaded shared libraries to access symbols defined in previously loaded shared libraries. In other words, by setting RTLD_GLOBAL, customized modules can access symbols defined in other modules easily as if they were defined in their own module. 9 Figure 7. “main” function for the dynamic linking framework 10 2. Environment Setup The example of network architecture is like the picture below. We can follow it when setting IP addresses to run the RECO. And there is an example of how to set IP addresses in chapter 2.1.1. Notice that: HSS and MME still need the Internet when installing some application tools. And there are some particular colors to show different meanings: Commands Items Important points 2.1. Core Network Notice that: The S/P-GW require a Linux kernel version equal to 3.19 or greater than 4.7. 2.1.1. Setup IP Architecture We use ubuntu 16.04 with VMware Workstation 12.5.7 for example. Notice that: We have to snapshot the VMs before shutdown. Then we have to load the snapshot every time to avoid the problems occurred when rebooting. The architecture is like the picture below. 11 Notice that: We need at least two NICs (Network Interface Card) on the host device. 2.1.1.1. Network Sockets and NICs We have to know the relationship between network sockets and NICs. This step is on the host device. 12 The simplest way to ensure the relationship is that attach one of the network socket to the Internet through an Internet wire. After that, click the Internet settings at the upper right corner. There will be a 'wired connect', remember this wired connection. Then click the 'Edit connections'. 13 Click the wired connection we find in the previous step. See the 'Ethernet' page, remember the device address. Then command 'ifconfig', find the NIC which has the same physical address, that is the one the network socket mapped. 14 Finally, set the internet well. So, in this step, we know the relationship between NICs and network sockets! 2.1.1.2. NICs and Virtual NICs We have to know the relationship between NICs and virtual NICs. This step is between the host device and VMware. To use the custom mode in the VMware, we have to bridge NICs to virtual NICs. Choose Edit -> Virtual Network Editor -> key in the host password -> remove all settings. 15 Then Add Network -> choose bridge mode -> Add -> select the particular NIC to bridge, and that is the NIC we bridge to the virtual NIC. So, in this step, we know the relationship between NICs and virtual NICs! 2.1.1.3. Virtual NICs and NICs in VMs We have to know the relationship between virtual NICs and NICs in VMs. This step is between VMs and VMware. To bridge NICs in the VM to the particular host NICs, we have to use the custom mode. Right-click the VM -> Settings -> Add -> Network Adapter -> Next -> Finish , that is the way to add a NIC into the VM. Use this method to fit the request of each VM. 16 HSS requires two NICs in the VM. Choose the first NIC in the VM to connect to the Internet, and it needs the real IP because we use the custom mode. Right-click the VM -> Settings -> click the first NIC in the VM-> Custom mode -> choose virtual NIC (Which one 17 maps the host NIC that can attach the Internet) -> Save. Choose the second NIC in the VM as the LAN interface, and set it at the first time. Right-click the VM -> Settings -> Click the second NIC in the VM-> LAN mode -> (for the first time we set LAN: Add -> Rename it as you want (For example is RECO) -> Close -> click the choose list ->) Save. Notice that: If we only have one or two real IPs can be used, we have to remove it after all the HSS installation process. The way to remove it is that right click the VM -> Settings -> click the first (which one connect to the Internet) NIC in the VM -> Remove -> Save. MME requires three NICs in the VM. Choose the first NIC in the VM to connect to Internet, and it needs the real IP because we use the custom mode. Right-click the VM -> Settings -> click the first NIC in the VM -> Custom mode -> choose virtual NIC (Which one map the host NIC that can attach the Internet) -> Save. Choose the second NIC in the VM as the LAN interface, and set it at the first time. Right-click the VM -> Settings -> Click the second NIC in the VM -> LAN mode -> (for the first time we set LAN: Add -> Rename it as you want (For example is RECO) -> Close -> click the choose list ->)Save. Choose the third NIC in the VM to connect to the eNB. Right-click the VM -> Settings -> click the third NIC in the VM -> Custom mode -> choose virtual NIC (Which one map the host NIC that can attach the eNB) -> Save. 18 Notice that: If we only have one or two real IPs can be used, we have to remove the NIC in the VM after all the HSS installation process. The way to remove it is that: right-click the VM -> Settings -> click the first (which one connect to the Internet) NIC in the VM -> Remove -> Save. S/P-GW requires three NICs in the VM. Choose the first NIC in the VM to connect to Internet, and it needs the real IP because we use the custom mode. Right-click the VM -> Settings -> click the first NIC in the VM -> Custom mode -> choose virtual NIC (Which one map the host NIC that can attach the Internet) -> Save. Choose the second NIC in the VM as the LAN interface, and set it at the first time. Right-click the VM -> Settings -> Click the second NIC in the VM -> LAN mode -> (for the first time we set LAN: Add -> Rename it as you want (For example is RECO) -> Close -> click the choose list ->) Save. Choose the third NIC in the VM to connect to the eNB. Right-click the VM -> Settings -> click the third NIC in the VM-> Custom mode -> choose virtual NIC (Which one map the host NIC that can attach the eNB) -> Save. 2.1.1.4. NICs in VMs and IPs We have to know the relationship between NICs in VMs and IPs. This step is at VMs. The relationship between NICs in the VM and settings of the VM will follow the same order. In other words, the first NIC in the VM maps to the first VM interface, the second NIC in the VM maps to the second VM interface. 19 After that, it is not a problem to set the IP now. Set the real IP to the VM interface that finally connects to the network socket which attaches to the Internet. Set the IP to eNB to the VM interface that finally connects to the network socket which attaches to the eNB, and set the IP to the LAN we defined. The problem now is that what is the command to set the IP to the VM interface? The command is that: $ sudo ifconfig Notice that: We have to stop the auto connection because it will remove IPs we have set. Edit connections -> Wired connection x -> General -> delete the check of “Automatically connect to this network when it is available” -> Save. 20 The final problem is that: Why we do not connect to the Internet even we have set the IP to the VM interface? It is because we have to set more things like the default gateway and the DNS server. The command to set the default gateway is that: $ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw . The command to set the DNS server is that: $ sudo chmod 777 /etc/resolvconf/resolv.conf.d/base $ sudo echo "nameserver 8.8.8.8" > /etc/resolvconf/resolv.conf.d/base $ sudo resolvconf -u It should connect to the Internet now! Notice that: If the LAN mode NIC in VMs not work, reboot all the VMs. 2.1.2. Auto Installation Script Notice that: If we can not install RECO by this script successfully, we can follow the manual installation steps in the later chapters to install RECO. Notice that: If we use the same real IP between the host device and the VM, please disconnect the Internet at the host side to ensure the quality of installation. 21 2.1.2.1. MME 2.1.2.1.1. Download RECO and Other Tools Download the git tool to download RECO. $ sudo apt-get update -y $ sudo apt-get install subversion git -y Then download RECO. $ git clone https://github.com/RECONet/RECO.git 2.1.2.1.2. Run The Script Get into the scripts file. $ cd ./RECO/SCRIPTS Run the auto installation script. $ sudo ./install_RECO MME Key in the IP architecture. (We use the example IP architecture for example) For the connection to eNB NIC name of MME: ens38 IP address of MME (with mask): 192.168.4.99/24 For the connection to SPGW NIC name of MME: ens37 IP address of MME (with mask): 10.0.0.2/8 IP address of SPGW (with mask): 10.0.0.3/8 For the connection to HSS IP address of HSS (without mask): 10.0.0.1 Then press 'Enter' to go to the next state. Key in the MySQL password, but it is useless in MME. Key in the password again. 22 Should non-superusers be able to capture packets? Yes 2.1.2.1.3. Run The MME Run the pseudo identifier to start the MME. $ sudo python ./pseudo_identifier.py Check the items in the first column as below and click ‘run’. Then the MME is running! Congratulations! If the MME connects to the active HSS, there will be a log as below. 2.1.2.2. HSS 2.1.2.2.1. Download RECO and Other Tools Download the git tool to download RECO. $ sudo apt-get update -y $ sudo apt-get install subversion git -y 23 Then download RECO. $ git clone https://github.com/RECONet/RECO.git 2.1.2.2.2. Run The Script Get into the scripts file. $ cd ./RECO/SCRIPTS Run the auto installation script. $ sudo ./install_RECO HSS Key in the MySQL password you want to use. (We use ‘123’ for example) For MySQL database Password: 123 Then press 'Enter' to go to the next state. Key in the MySQL password as same as the previous one (‘123’ for example). This password is important in HSS. Key in the password again. Select the web server: apache2 24 Configure the database with dbconfig-common? No 2.1.2.2.3. Run The HSS Run the script to start the HSS. $ sudo ./run_hss Then the HSS is running! Congratulations! If the HSS connect to the active MME, there will be a log. 2.1.2.3. S/P-GW 2.1.2.3.1. Download RECO and Other Tools Download the git tool to download RECO. $ sudo apt-get update -y $ sudo apt-get install subversion git -y Then download RECO. $ git clone https://github.com/RECONet/RECO.git 2.1.2.3.2. Run The Script Get into the scripts file. $ cd ./RECO/SCRIPTS 25 Run the auto installation script. $ sudo ./install_RECO SPGW Key in the IP architecture. (We use the example IP architecture for example) For the connection to MME NIC name of SPGW: ens37 IP address of SPGW (with mask): 10.0.0.3/8 For the connection to eNB NIC name of SPGW: ens38 IP address of SPGW (with mask): 192.168.4.98/24 For the connection to Internet NIC name of SPGW: ens33 For UE IP address of UE (with mask): 192.168.0.0/16 Then press 'Enter' to go to the next state. Key in the MySQL password, but it is useless in SPGW. Key in the password again. Should non-superusers be able to capture packets? Yes 26 2.1.2.3.3. Run The S/P-GW Run the script to start the S/P-GW. $ sudo ./run_spgw There seems to have some problems, press to stop it. $ Then rerun the script. The S/P-GW is running! Congratulations! 2.1.3. Manual Installation 2.1.3.1. MME 2.1.3.1.1. Update $ sudo apt-get update $ sudo apt-get upgrade 2.1.3.1.2. Download RECO and Other Tools Download RECO source code from 'github'. $ git clone https://github.com/RECONet/RECO.git Download some tools will be used later. $ cd ./RECO/SCRIPTS $ sudo ./build_hss -i $ sudo ./build_mme -i 27 Notice that: If there is any asking during the process, choose 'yes' for safety. 2.1.3.1.3 Copy configuration files Copy configuration files to the particular locations. $ cd .. $ cd ./ETC $ sudo cp mme.conf /usr/local/etc/oai $ sudo cp mme_fd.conf /usr/local/etc/oai/freeDiameter $ sudo chmod 777 /usr/local/etc/oai/mme.conf $ sudo chmod 777 /usr/local/etc/oai/freeDiameter/mme_fd.conf 2.1.3.1.4. File settings Modify the hostname to 'ubuntu'. $ sudo vim /etc/hostname Modify hosts as the picture below. $ sudo vim /etc/hosts Set the 'mme_fd.conf' file. $ sudo vim /usr/local/etc/oai/freeDiameter/mme_fd.conf Set 'ubuntu.openair4G.eur' to 'Identity'. Set 'ConnectTo' as the IP of HSS. Notice that: If we have no idea about how to set the IP addresses, see the example in chapter 2.1.4. Set the 'mme.conf' file. $ sudo vim ./mme.conf Notice that: This file will be copied to '/usr/local/etc/oai' by running 'pseudo_identifier.py'. 28 Set 'MME_INTERFACE_NAME_FOR_S1_MME', which is the network interface that MME used to connect to the eNB, and set 'MME_IPV4_ADDRESS_FOR_S1_MME', which is the IP with the mask of the network interface. Set 'MME_INTERFACE_NAME_FOR_S11_MME', which is the network interface that MME used to connect to the S/P-GW, and set 'MME_IPV4_ADDRESS_FOR_S11_MME', which is the IP with the mask of the network interface. Set 'SGW_IPV4_ADDRESS_FOR_S11', which is the IP with the mask of S/P-GW. 2.1.3.1.5. Install libgtpnl $ cd .. $ cd .. $ sudo apt-get install libmnl-dev $ git clone git://git.osmocom.org/libgtpnl $ cd ./libgtpnl $ autoreconf -fi $ ./configure $ make $ sudo make install 2.1.3.1.6. Build the MME $ cd .. $ cd ./RECO/SCRIPTS $ sudo ./build_mme -c 2.1.3.1.7. Check the certification $ sudo ./check_mme_s6a_certificate /usr/local/etc/oai/freeDiameter/ ubuntu.openair4G.eur 29 2.1.3.1.8. Install packet python-tk $ sudo apt-get install python-tk 2.1.3.1.9. Run the MME Run the script to simulate the identifier to perform dynamic linking. $ sudo python ./pseudo_identifier.py Notice that: In the latest version, we suggest checking the items in the first column. Click 'Run' to start the MME. When the MME connects to the HSS, there will be a log. 30 Notice that: The HSS must be active to connect to the MME. Notice that: If we want to rerun the MME, type commands below to release sources. Find the 'pid' of the process. It is '59457' in the picture below for example. $ ps aux | grep python Then kill the process with the 'pid' we have found. $ sudo kill -9 2.1.3.2. HSS 2.1.3.2.1. Update $ sudo apt-get update $ sudo apt-get upgrade 2.1.3.2.2. Download RECO and other tools Download RECO source code from 'github'. $ git clone https://github.com/RECONet/RECO.git Download some tools will be used later. $ cd ./RECO/SCRIPTS $ sudo ./build_hss -i Notice that: The password we set when running the 'build_hss -i' at the first time will be used to log in the MySQL database, and we set '123' to it for example. Notice that: If there is any asking during the process, choose 'yes' for safety. 2.1.3.2.3 Copy configuration files Copy configuration files to the particular locations. $ cd .. $ cd ./ETC $ sudo cp hss.conf /usr/local/etc/oai $ sudo cp hss_fd.conf /usr/local/etc/oai/freeDiameter $ sudo cp acl.conf /usr/local/etc/oai/freeDiameter $ sudo chmod 777 /usr/local/etc/oai/hss.conf $ sudo chmod 777 /usr/local/etc/oai/freeDiameter/hss_fd.conf $ sudo chmod 777 /usr/local/etc/oai/freeDiameter/acl.conf 2.1.3.2.4 File settings Modify the hostname to 'ubuntu'. $ sudo vim /etc/hostname 31 Modify hosts as the picture below. $ sudo vim /etc/hosts Set the 'hss.conf' file. $ sudo vim /usr/local/etc/oai/hss.conf Set 'MYSQL_user' and 'MYSQL_pass' as same as the database. Set serial '1's to 'OPERATOR_key'. Notice that: The 'MYSQL_user' is 'root', and the 'MYSQL_pass' is the password we set in the previous step, for example, that is '123'. 2.1.3.2.5 Database import Create database 'oai_db'. $ mysql -u root -p mysql > CREATE DATABASE oai_db; mysql > exit Notice that: The password is the one we set in the previous step, for example is '123'. Import data to 'oai_db'. $ mysql -u root -p oai_db < ~/RECO/SRC/OAI_HSS/db/oai_db.sql $ mysql -u root -p mysql > USE oai_db; mysql > select * from mmeidentity; mysql > UPDATE mmeidentity SET mmehost = 'ubuntu.openair4G.eur' WHERE idmmeidentity = '4'; mysql > exit 32 2.1.3.2.6 Check the certification $ cd .. $ cd ./SCRIPTS $ sudo ./check_hss_s6a_certificate /usr/local/etc/oai/freeDiameter/ hss.openair4G.eur 2.1.3.2.7 Build the HSS $ sudo ./build_hss -c 2.1.3.2.8 Run the HSS $ sudo ./run_hss When the HSS connect to the MME, there will be a log. Notice that: MME must be active to connect to HSS. 33 2.1.3.2.9 Phpmyadmin It provides the GUI for database operations. $ sudo apt-get install phpmyadmin $ sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf $ sudo a2enconf phpmyadmin $ sudo /etc/init.d/apache2 reload $ sudo reboot We can operate data by accessing 'http://127.0.0.1/phpmyadmin'. Insert data of the SIM card into the database 'oai_db'. Notice that: If we do not insert SIM card data, we will fail to connect to the Internet. 2.1.3.3. S/P-GW 2.1.3.3.1. Update $ sudo apt-get update $ sudo apt-get upgrade 2.1.3.3.2. Download RECO and other tools Download RECO source code from 'github'. $ git clone https://github.com/RECONet/RECO.git Download some tools will be used later. $ cd ./RECO/SCRIPTS $ sudo ./build_hss -i $ sudo ./build_mme -i $ sudo ./build_spgw -i Notice that: If there is any asking during the process, choose 'yes' for safety. 34 2.1.3.3.3 Copy configuration files Copy configuration files to the particular locations. $ cd .. $ cd ./ETC $ sudo cp spgw.conf /usr/local/etc/oai $ sudo chmod 777 /usr/local/etc/oai/spgw.conf 2.1.3.3.4 File settings Set the 'spgw.conf' file. $ sudo vim /usr/local/etc/oai/spgw.conf Set 'SGW_INTERFACE_NAME_FOR_S11', which is the network interface S/P-GW used to connect to the MME and set 'SGW_IPV4_ADDRESS_FOR_S11', which is the IP with the mask of the network interface. Set 'SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP', which is the network interface S/P-GW used to connect to the eNB and set 'SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP', which is the IP with the mask of the network interface. Notice that: If we have no idea about how to set the IP addresses, see the example in chapter 2.1.4. Set 'PGW_INTERFACE_NAME_FOR_SGI', which is the network interface S/P-GW used to connect to the internet. Set 'yes' to 'PGW_MASQUERADE_SGI' and 'UE_TCP_MSS_CLAMPING' to avoid failure. Set 'IPV4_LIST', which is a scope of IPs distributed to UEs connecting to the S/P-GW. 35 2.1.3.3.5 Build the SPGW $ cd .. $ cd ./SCRIPTS $ sudo ./build_spgw -c 2.1.3.3.6 Run the SPGW $ sudo ./run_spgw 36 2.1.4. Example of IP Settings 2.1.4.1. Architecture Overview with IPs Notice that: '140.113.215.193' is the IP address of the default gateway. Notice that: The IPs may be different from the IP architecture at the chapter 2.1.1. 2.1.4.2. IP Settings of HSS 2.1.4.2.1. Network Interface Settings Notice that: We need at least one network interface card (NIC). Find the name of the NIC. $ ifconfig Set IP Address to the NIC. $ sudo ifconfig 10.0.0.1 Notice that: is the name of the NIC. 2.1.4.3. IP Settings of MME 2.1.4.3.1. Network Interface Settings Notice that: We need at least two network interface cards (NICs). Find the names of the NICs. $ ifconfig Set IP Addresses to the NICs. $ sudo ifconfig 10.0.0.2 $ sudo ifconfig 192.168.4.99 37 Notice that: is the name of the first NIC. is the name of the second NIC. 2.1.4.3.2. Configuration File Settings mme_fd.conf: ConnectTo = "10.0.0.1" mme.conf: MME_INTERFACE_NAME_FOR_S1_MME = " " MME_IPV4_ADDRESS_FOR_S1_MME = "192.168.4.99/24" MME_INTERFACE_NAME_FOR_S11_MME = " " MME_IPV4_ADDRESS_FOR_S11_MME = "10.0.0.2/8" SGW_IPV4_ADDRESS_FOR_S11 = "10.0.0.3/8" Notice that: Here we only set the part of IPs and NICs names. As for other settings, please follow the previous chapters. 2.1.4.4. IP Settings of S/P-GW 2.1.4.4.1. Network Interface Settings Notice that: We need at least three network interface cards (NICs). Find the names of the NICs. $ ifconfig Set IP Addresses to the NICs. $ sudo ifconfig 10.0.0.3 $ sudo ifconfig 192.168.4.98 $ sudo ifconfig 140.113.215.2083 Notice that: is the name of the first NIC. is the name of the second NIC. is the name of the third NIC. Notice that: If ping google.com failed, type commands below to connect to the Internet. $ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 140.113.215.193 $ sudo chmod 777 /etc/resolvconf/resolv.conf.d/base $ sudo echo "nameserver 8.8.8.8" >> /etc/resolvconf/resolv.conf.d/base $ sudo resolvconf -u Notice that: '140.113.215.193' is the IP address of the default gateway. 38 2.1.4.4.2. Configuration File Settings spgw.conf: SGW_INTERFACE_NAME_FOR_S11 = " " SGW_IPV4_ADDRESS_FOR_S11 = "10.0.0.3/8" SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP = " " SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP = "192.168.4.98/24" PGW_INTERFACE_NAME_FOR_SGI = " " IPV4_LIST = "192.168.0.0/16" Notice that: Here we only set the part of IPs and NICs names. As for other settings, please follow the previous chapters. 2.2. Radio Access Network 2.2.1. SIM Card The SIM card we use: sysmoUSIM-SJS1 (with ADM keys) You can buy it at the following link: http://shop.sysmocom.de/products/sysmousim-sjs1 We can use PySIM to program the SIM card. Install packages: $ sudo apt-get install pcscd pcsc-tools libccid python-dev swig python-setuptools python-pip libpcsclite-dev $ sudo pip install pycrypto Download PySIM from git: $ git clone git://git.osmocom.org/pysim.git Also need Pyscard: Download from https://sourceforge.net/projects/pyscard/files/pyscard/pyscard%201.9.5/pyscar d-1.9.5.tar.gz/download Install command: $ cd $ sudo /usr/bin/python setup.py build_ext install Use the following command to check whether card reader is ready: $ sudo pcsc_scan If you see this picture, you are ready to program the SIM card: 39 Read SIM card information: $ cd $ ./pySim-read.py -p 0 Program SIM card: You need to prepare the following information: -x MCC :M obile Country Code, the first 3 letter of IMSI -y MNC:Mobile Network Code, the 4th and 5th letter of IMSI -i IMSI:International Mobile Subscriber Identity, presented as a 15 digit number op OP:Operator Code, presented as a 32 digit number -k KI:Subscriber Authentication Key, presented as a 32 digit number -s ICCID:Integrated Circuit Card Identifier, presented as a 20 digit number -a ADM1:The password uses to programming SIM card, presented as a 8 digit number Programming commands: $ cd $ ./pySim-prog.py -p 0 -x 466 -y 86 -t sysmoUSIM-SJS1 -i 466862054321003 --op=97A167DED889B6DFA92D985D77E5C088 -k 808182888485868788898A8B8C8D8E8F -s 8988211000000088313 -a 23605945 40 Verification: $ ./pySim-read.py -p 0 If the IMSI changed, done! 2.2.2. eNodeB 2.2.2.1. Commercial eNodeB - Wistron NeWeb OSQ4G-01E2 First, connect to the eNB from the MME. $ telnet Then log in the eNB as a root user. $ root Edit the configuration file. (Here are the examples) $ vi /mnt/flash/etc/fsm/xml/provisioning.xml → After rebooting the eNodeB, it can connect to MME through WAN port. Notice that: The 's1SigLinkServerList' is the IP of MME used to connect to the eNB. Notice that: The 'plmnId' is the same value as the PLMN ID of the SIM card. 2.2.2.2. OAI eNodeB 2.2.2.2.1. USRP B210 41 ※It is recommend to use the USB3.0 port. 2.2.2.2.1.1. USRP driver installation ◎UHD binary installation $ sudo add-apt-repository ppa:ettusresearch/uhd $ sudo apt-get update $ sudo apt-get install libuhd-dev libuhd003 uhd-host ◎Building and Installing UHD from source $ sudo apt-get install libboost-all-dev libusb-1.0-0-dev python-mako doxygen python-docutils cmake build-essential $ git clone --recursive git://github.com/EttusResearch/uhd.git $ cd /host $ mkdir build $ cd build $ cmake ../ $ make $ make test $ sudo make install $ sudo ldconfig 2.2.2.2.1.2. Building OAI executables from source $ git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git $ cd YOUR_openairinterface5g_DIRECTORY $ source oaienv # Very important. It sets the correct environment variables $ cd cmake_targets $ ./build_oai -I -w USRP # Package installation + USRP Driver installation $ ./build_oai --eNB -c -w USRP 2.2.2.2.1.3. Start the eNodeB with USRP B210 Here we use the configuration file: enb.band7.tm1.usrpb210.conf (Remember to check the configuration of PLMN ID and the interface between MME and eNodeB.) $ cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build $ sudo -E ./lte-softmodem -O $OPENAIR_DIR/targets/PROJECT/GENERIC-LTE-EPC/CONF/enb.band7.t m1.usrpb210.conf You can see some messages of s1ap_setup on your MME machine after the connection established. 2.2.2.2.2. ExpressMimo2 2.2.2.2.2.1. ExpressMimo2 card setup Initialize express MIMO card $ cd openairinterface5g $ . oaienv $ cd cmake_targets/tools/ 42 $ . init_exmimo2 You should see the following output on the console loading openair_rf Using firware version 10 Running “dmesg”, you should see something ending with [782979.116663] [openair][IOCTL] ok asked Leon to set stack and start execution (addr 0x40000000, stackptr 43fffff0) [782979.116782] [LEON card0]: FWINIT: Will start execution @ 40000000, stack @ 43fffff0 [782979.228844] [LEON card0]: pcie_initialize_interface_bot(): firmware_block_ptr 3200100, printk_buffer_ptr 3240100, pci_interface_ptr 3240500, exmimo_id_ptr 3240700 [782979.229321] [LEON card0]: System Info: [782979.229464] [LEON card0]: Bitstream: SVN Revision: 5307, Build date (GMT): Wed 2014-03-19 15:55:01, User ID: 0x0001 [782979.229600] [LEON card0]: Software: SVN Revision: 5541, Build date (GMT): Wed 2014-03-19 08:45:08 [782979.229691] [LEON card0]: ExpressMIMO-2 SDR! (Built on Nov 7 2014 15:14:44) [782979.229819] [LEON card0]: Initialized LIME. [782979.229935] [LEON card0]: Initializing RF Front end chain0 (to TVWS_TDD). [782979.230209] [LEON card0]: ready. 2.2.2.2.2.2. Building OAI executables from source $ git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git $ cd YOUR_openairinterface5g_DIRECTORY $ source oaienv # Very important. It sets the correct environment variables. $ cd cmake_targets $ ./build_oai -I # Package installation + EXMIMO Driver installation $ ./build_oai --eNB -w EXMIMO -c -s # eNodeB + EXMIMO + test 2.2.2.2.2.3. Start the eNodeB with ExpressMimo2 Here we use the configuration file: enb.band7.tm1. exmimo2.conf (Remember to check the configuration of PLMN ID and the interface between MME and eNodeB.) $ cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build $ sudo -E ./lte-softmodem -O $OPENAIR_DIR/targets/PROJECT/GENERIC-LTE-EPC/CONF/enb.band7.t m1.exmimo2.conf You can see some messages of s1ap_setup on your MME machine after the connection established. 43 3. Conclusion We have presented a reconfigurable core network architecture called RECO to efficiently implement customized core network entities for a heterogeneous 5G environment. We also built a reconfigurable MME (RECO MME) to verify our RECO concept. We specifically introduced the implementation of how the dynamic linking framework is implemented in RECO MME and show that our RECO MME has the benefits of (1) reduce disk space and memory usage (2) easy to update and deploy (3) flexibility to link certain modules to form a customized MME (4) Object-oriented code structure which allows programmers to reuse code when forming a customized MME. Finally, we expect and hope the research community would like to join us in this research project. 44
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.5 Linearized : Yes Producer : Skia/PDF m63 Page Count : 44EXIF Metadata provided by EXIF.tools