=== Basic OAI Tutorial === [[TOC(noheading, Tutorials/g0WmLTE*, depth=3)]] Two nodes... ==== Objective ==== Primary objective is to establish the LTE connection between the SDR based UE and eNB. In order to that we need to prepare configuration files on two nodes: node9-1 and node6-20. ------------------------------ The code was compiled with USRP support i.e. with: {{{ cd trunk/targets/bin; build_oai.bash -l ENB -c -w USRP }}} More details on various build options are available on [https://twiki.eurecom.fr/twiki/bin/view/OpenAirInterface/AutoBuild OpenAirInterface build page]. In this tutorial we will use nodes with USRP b310 and have the basestation on node9-1 and modem on node6-20. ==== Prepare the nodes ==== 1. Load the image with the !OpenAirInterface code on the nodes that have USRP B210 attached. After imaging the nodes are '''turned off automatically'''. [[CollapsibleStart(omf load -t inventory:topo:B210 -i oai-master.ndz)]] [[Include(Documentation/Short/LoadImage)]][[CollapsibleEnd]] 1. Turn ON the nodes that successfully imaged (give them some time and check their status with '''omf stat''' before proceeding). [[CollapsibleStart(omf tell -a on -t system:topo:imaged)]][[Include(Documentation/Short/TellOn)]][[CollapsibleEnd]] ==== Execute the experiment ==== 1. '''ssh into nodes:''' Open the two ssh sessions from the console to the two nodes || [[Image(node9-1.png, width=200)]] || [[Image(node6-20.png, width=200)]] || 2. '''Prepare configuration files:''' Make sure to have correct parameters in oai.conf file in roots home directory on the node (/root) as follows: i. Operating frequency band parameters: a. E-UTRA band b. Corresponding duplex mode (e.g. FDD/TDD), c. Downlink frequency [Hz], uplink frequency offset [Hz] (which is given in reference to the downlink frequency). d. LTE bandwidth: N_RB_DL = {6,15,25,50,75,100} corresponding to bandwidth = {1.4,3,5,10,15,20} MHz For example: {{{ ////////// Physical parameters: component_carriers = ( { frame_type = "FDD"; eutra_band = 7; downlink_frequency = 2660000000L; uplink_frequency_offset = -120000000; N_RB_DL = 25; #N_RB_DL choice: 6,15,25,50,75,100 } ); }}} In this example, LTE operates in E-UTRA band 7 which allows the FDD mode. LTE operates at 5 MHz bandwidth around downlink and uplink center frequencies which are at 2660 MHz and 2540 MHz, respectively. Parameters in oai.conf can be varied as long as they are within predefined set of values which can be found in file ~/rel_0.1_26.10.2014/openair2/ENB_APP/enb_config.c or ~/trunk/openair2/ENB_APP/enb_config.c ii. Make sure to have correct IP address configuration for parameters "ENB_IPV4_ADDRESS_FOR_S1_MME" and "ENB_IPV4_ADDRESS_FOR_S1U" to match node numbers. For example, for nodeX-Y, these IP address parameters become as "10.10.X.Y/16". So for our basestation node the relevant sections in the oai.conf file in /root directory on the nodes we should look like (we don't want MME support and have to adjust the ip addresses to match what we have on the control interface of the node): {{{ ////////// MME parameters: mme_ip_address = ( { ipv4 = "10.10.0.100"; ipv6 = "10:10:0::100"; active = "no"; preference = "ipv4"; } ); NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "eth1"; ENB_IPV4_ADDRESS_FOR_S1_MME = "10.10.9.1/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth1"; ENB_IPV4_ADDRESS_FOR_S1U = "10.10.9.1/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; }}} 3. '''Run the lte-softmodem:''' Depending on whether you want to run it with or without mme, execute lte-softmodem on corresponding nodes: || || On the eNB node (node9-1) || On the UE node (node6-20) || || w/o MME || {{{ lte-softmodem-nomme -Ooai.conf -V}}} || {{{ lte-softmodem -U -Ooai.conf -C 2660000000 -V}}} || || w MME || {{{ lte-softmodem -Ooai.conf -V}}} || {{{ lte-softmodem -U -Ooai.conf -C 2660000000 -V}}} || If the above commands are executed with the "-d" flag and if X11 forwarding is enabled for the current ssh session, the signal tracer will pop out as shown in Figure 1 (not that this requires relatively high bandwidth). [[Image(Scope.png, width=300)]] || [[CollapsibleStart(The output on both consoles should look something like this:)]] {{{ [RRC][I][eNB 0] Init (UE State = RRC_IDLE)... [RRC][I][eNB 0] Checking release [RRC][I][eNB 0] Rel8 RRC [RRC][I][eNB 0] Configuration SIB2/3 [MAC][I][rrc_mac_config_req] [CONFIG][eNB 0] Configuring MAC/PHY [MAC][I][rrc_mac_config_req] [CONFIG]SIB2/3 Contents (partial) [MAC][I][rrc_mac_config_req] [CONFIG]pusch_config_common.n_SB = 1 [MAC][I][rrc_mac_config_req] [CONFIG]pusch_config_common.hoppingMode = 0 [MAC][I][rrc_mac_config_req] [CONFIG]pusch_config_common.pusch_HoppingOffset = 0 [MAC][I][rrc_mac_config_req] [CONFIG]pusch_config_common.enable64QAM = 0 [MAC][I][rrc_mac_config_req] [CONFIG]pusch_config_common.groupHoppingEnabled = 1 [MAC][I][rrc_mac_config_req] [CONFIG]pusch_config_common.groupAssignmentPUSCH = 0 [MAC][I][rrc_mac_config_req] [CONFIG]pusch_config_common.sequenceHoppingEnabled = 0 [MAC][I][rrc_mac_config_req] [CONFIG]pusch_config_common.cyclicShift = 1 [RRC][I][eNB 0] OPENAIR RRC IN.... [SCTP][I][sctp_handle_new_association_req] Setsockopt SOL_SOCKET socket bound to : eth1 [SCTP][I][sctp_handle_new_association_req] Converted ipv4 address 10.10.0.100 to network type [SCTP][I][sctp_handle_new_association_req] connectx assoc_id 1 in progress..., used 1 addresses [SCTP][I][sctp_handle_new_association_req] Inserted new descriptor for sd 56 in list, nb elements 1, assoc_id 1 [SCTP][I][sctp_eNB_flush_sockets] Found data for descriptor 56 [SCTP][I][sctp_eNB_read_from_socket] Received notification for sd 56, type 32769 [SCTP][I][sctp_eNB_read_from_socket] Client association changed: 0 [SCTP][I][sctp_get_peeraddresses] ---------------------- [SCTP][I][sctp_get_peeraddresses] Peer addresses: [SCTP][I][sctp_get_peeraddresses] - [10.10.0.100] [SCTP][I][sctp_get_peeraddresses] ---------------------- [SCTP][I][sctp_get_sockinfo] ---------------------- [SCTP][I][sctp_get_sockinfo] SCTP Status: [SCTP][I][sctp_get_sockinfo] assoc id .....: 1 [SCTP][I][sctp_get_sockinfo] state ........: 3 [SCTP][I][sctp_get_sockinfo] instrms ......: 8 [SCTP][I][sctp_get_sockinfo] outstrms .....: 64 [SCTP][I][sctp_get_sockinfo] fragmentation : 1452 [SCTP][I][sctp_get_sockinfo] pending data .: 0 [SCTP][I][sctp_get_sockinfo] unack data ...: 0 [SCTP][I][sctp_get_sockinfo] rwnd .........: 106496 [SCTP][I][sctp_get_sockinfo] peer info : [SCTP][I][sctp_get_sockinfo] state ....: 2 [SCTP][I][sctp_get_sockinfo] cwnd .....: 4380 [SCTP][I][sctp_get_sockinfo] srtt .....: 0 [SCTP][I][sctp_get_sockinfo] rto ......: 3000 [SCTP][I][sctp_get_sockinfo] mtu ......: 1500 [SCTP][I][sctp_get_sockinfo] ---------------------- [SCTP][I][sctp_eNB_read_from_socket] Comm up notified for sd 56, assigned assoc_id 1 [S1AP][I][s1ap_eNB_generate_s1_setup_request] 3584 -> 00e000 [SCTP][I][sctp_send_data] Successfully sent 53 bytes on stream 0 for assoc_id 1 [SCTP][I][sctp_eNB_flush_sockets] Found data for descriptor 56 [SCTP][I][sctp_eNB_read_from_socket] Received notification for sd 56, type 32777 [SCTP][I][sctp_eNB_flush_sockets] Found data for descriptor 56 [SCTP][I][sctp_eNB_read_from_socket] [1][56] Msg of length 27 received from port 36412, on stream 0, PPID 18 [S1AP][I][s1ap_decode_s1ap_s1setupresponseies] Decoding message S1ap_S1SetupResponseIEs (/root/trunk/targets/RT/USER/objs/openair-cn/S1AP/s1ap_decoder.c:3544) [ENB_APP][I][eNB_app_task] [eNB 0] Received S1AP_REGISTER_ENB_CNF: associated MME 1 Waiting for eNB application to be ready [HW][I][SCHED] eNB TX thread 0 started on CPU 5 [HW][I][SCHED][eNB] eNB RX thread 0 started on CPU 0 [HW][I][SCHED] eNB TX thread 1 started on CPU 0 [HW][I][SCHED][eNB] eNB RX thread 1 started on CPU 5 [HW][I][SCHED] eNB TX thread 2 started on CPU 2 [HW][I][SCHED][eNB] eNB RX thread 2 started on CPU 0 [HW][I][SCHED] eNB TX thread 3 started on CPU 5 [HW][I][SCHED][eNB] eNB RX thread 3 started on CPU 5 [HW][I][SCHED] eNB TX thread 4 started on CPU 4 [HW][I][SCHED][eNB] eNB RX thread 4 started on CPU 1 [HW][I][SCHED] eNB TX thread 5 started on CPU 4 [HW][I][SCHED][eNB] eNB RX thread 5 started on CPU 4 [HW][I][SCHED] eNB TX thread 6 started on CPU 0 [HW][I][SCHED][eNB] eNB RX thread 6 started on CPU 1 [HW][I][SCHED] eNB TX thread 7 started on CPU 1 [HW][I][SCHED][eNB] eNB RX thread 7 started on CPU 0 [HW][I][SCHED] eNB TX thread 8 started on CPU 1 [HW][I][SCHED][eNB] eNB RX thread 8 started on CPU 0 [HW][I][SCHED] eNB TX thread 9 started on CPU 0 [HW][I][SCHED][eNB] eNB RX thread 9 started on CPU 1 Creating main eNB_thread [SCHED][eNB] Started eNB main thread on CPU 4 eNB_thread: mlockall in ... eNB_thread: mlockall out ... waiting for sync (eNB_thread) TYPE TO TERMINATE Entering ITTI signals handler }}} [[CollapsibleEnd]] ==== The command line parameters of lte-softmodem ==== Relevant (i.e. for USRP command line parameters for the lte-softmodem command are: * -O file: eNB configuration file (this is the preferred way to pass basic parameters and there are several examples in $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE_EPC/CONF/ * -g LEVEL: set the level of debug for the log generation (-g7 is quite high and useful to trace bugs in the procedures/protocols, -g9 even dumps packets at all levels of the protocol stack) * -d: enables xforms signal tracer * -U: start as UE (default: eNB) * -C freq: set carrier frequency to f0 for all chains (extension to independent frequencies trivial) * -V: enables the VCD debugging tool (this is a temporal event tracer, which is useful for real-time debugging using GTKWave) * -K file: ITTI logfile. ITTI is an intertask tracing utility which helps debugging with an EPC. It can traces all exchanges between RRC<->S1AP, RRC<->PDCP, PDCP<->S1 * -S: do not exit for the missing slots, instead increment the counter. * --debug-ue-prach: only send prach but do not connect * --no-L2-connect: only runs rx, does not send prach More details on running lte-softmodem are available on [https://twiki.eurecom.fr/twiki/bin/view/OpenAirInterface/OpenAirLXRT OpenAirInterface real-time LTE softmodem page]. [[CollapsibleStart(If you intend to use graphical user interface please make sure to install appropriate tools on your local machine and configure X11 forwarding.)]] [[Include(Documentation/bAccountManagement/fRemoteX)]] [[CollapsibleEnd]] ------------------------ ==== Quickstart Option ==== We have an image available, named {{{oai-dev.ndz}}}. It has all the necessary driver and software pre-installed, and two scripts available to immediately boot up the eNB and UE. This quickstart assumes use of Sandbox1, nodes 1-1, and 1-2. 1. To proceed, after having a reservation, load the following image. * {{{omf load -t node1-1,node1-2 -i oai-dev.ndz}}} * The nodes will automatically turn off when imaging is completed. 1. Turn the nodes on. * {{{omf tell -a on -t node1-1,node1-2}}} 1. Open a terminal to each node. You must enable X11 Forwarding to see the GUI and statistics screens. 1. You will need at lease one terminal per node, for the statistics screens. Even more if you want to run additional commands. For details, refer to the Remote Graphical Access section. 1. On the first node, execute script {{{./CompandRuneNB}}} 1. On the second node, execute script {{{./CompandRunUE}}} 1. For subsequent runs, execute {{{./runeNB}}} or {{{./runUE}}} instead, to avoid recompiling. 1. These scripts will create interface {{{oai0}}} and assign an address. 1. Use {{{ifconfig}}} or {{{ip a}}} to see the address assigned. 1. By default the eNB has address 10.0.1.1, and the UE has addresss 10.0.1.9, but you should double check. 1. You should be able to ping from one node to the other on these addresses. 1. From UE, {{{ping 10.0.1.1}}} or to see live statistics {{{mtr 10.0.1.1}}} In your terminals, you will see the following screens upon successful script execution. [[Image(eNB.png, width=600)]] [[Image(UE.png, width=600)]] ==== OAI eNB in ORBIT UNDER DEVELOPMENT 1. Load image lte-edge.ndz to a node with a b210 1. This can be found from the status page 1. Turn the node on 1. SSH to the node 1. {{{ cd /opt }}} 1. Run {{{ ./setup.sh --build_enb_ue }}} 1. Edit the configuration file to match the needed IP using the editor of your choice (example vim) 1. {{{ vim ./conf/enb.band25.tm1.usrpb210.conf }}} 1. The MME ip address is on the line {{{ mme_ip_address = ( { ipv4 = "10.3.0.21"; }}} 1. Do not change this unless you are using a custom MME, rather than the ORBIT hosted one, or are tunneling. 1. Set the following four lines to match the interface you will use to connect to the MME. In this example it is set to use eth1 on node8-7.grid.orbit-lab.org. {{{ ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "10.40.4.5/16"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "10.40.4.5/16"; }}} 1. Run the eNB {{{ ./openairinterface5g/cmake_targets/lte_build_oai/build/lte-softmodem -O ./conf/enb.band25.tm1.usrpb210.conf }}} 1. Some options to append 1. -d : shows visual displays