e2sim: add support for Resource Status Request, Response, Update 31/1631/2
authorHarry Tran <tuyen@research.att.com>
Sun, 17 Nov 2019 00:43:38 +0000 (19:43 -0500)
committerHarry Tran <tuyen@research.att.com>
Tue, 19 Nov 2019 18:57:19 +0000 (13:57 -0500)
Change-Id: I8fd9c076576d6134fafd0f8f28f5a161689a3d98
Signed-off-by: Harry Tran <tuyen@research.att.com>
19 files changed:
simulators/e2sim/README.md
simulators/e2sim/build_e2sim
simulators/e2sim/docker/Dockerfile
simulators/e2sim/e2sim.cpp
simulators/e2sim/ricsim.cpp
simulators/e2sim/src/DEF/e2sim_defs.cpp
simulators/e2sim/src/DEF/e2sim_defs.h
simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml [new file with mode: 0644]
simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml [new file with mode: 0644]
simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml [new file with mode: 0644]
simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml [new file with mode: 0644]
simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml [new file with mode: 0644]
simulators/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml
simulators/e2sim/src/E2AP/e2ap_message_handler.cpp
simulators/e2sim/src/E2AP/e2ap_message_handler.hpp
simulators/e2sim/src/SCTP/e2sim_sctp.cpp
simulators/e2sim/test/Misc/test_asn1c.cpp
simulators/e2sim/test/WLG/ric_perf.cpp
simulators/e2sim/test/X2/x2term.cpp

index db93deb..ed260c3 100644 (file)
   $  $E2SIM_DIR/build/e2sim [SERVER IP] [PORT]
 
   By default, SERVER IP = 127.0.0.1, PORT = 36421
+  The RIC (i.e., E2 Manager) will need to setup X2 or E2 connection to e2sim on
+  this SERVER IP and PORT
 
 # DOCKER
-  Note: The commands in this section must be run from $E2SIM_DIR
-
-  * Build docker image
+  * Build docker image: run this command from $E2SIM_DIR
   $ sudo docker build -f docker/Dockerfile -t [DOCKER_IMAGE]:[TAG] .
 
   * Example how to run docker container
   $ sudo docker run --rm --net host -it [DOCKER_IMAGE]:[TAG] sh -c "./build/e2sim [SERVER IP] [PORT]"
+  ex: sudo docker run --rm --net host -it e2sim:1.0.0 sh -c "./build/e2sim 127.0.0.1 36422"
 
 # SUPPORTED MESSAGE FLOWS
+- RESOURCE STATUS REQUEST   (RIC -> RAN)    version 1.4.0   November 16, 2019
+- RESOURCE STATUS RESPONSE  (RAN -> RIC)
+- RESOURCE STATUS UPDATE    (RAN -> RIC)      
 
-- RIC INDICATION            (RAN -> RIC)      version 1.3.0   September 13, 2019
+- RIC INDICATION            (RAN -> RIC)    version 1.3.0   September 13, 2019
     SgNBAdditionRequest
 
-- RIC SUBSCRIPTION REQUEST  (RIC -> RAN)      version 1.2.0   May 24, 2019
+- RIC SUBSCRIPTION REQUEST  (RIC -> RAN)    version 1.2.0   May 24, 2019
 - RIC SUBSCRIPTION RESPONSE (RAN -> RIC)
 - RIC SUBSCRIPTION FAILURE  (RAN -> RIC)
 
  ./tools/install_asn1c
 
  2. Generate asn1c codes using e2ap, e2sm and x2ap specs
Download the following files into tools/asn_defs
This requires the following files in tools/asn_defs
   - e2ap-v031.asn
   - e2sm-gNB-X2-release-1-v041.asn
   - x2ap-no-desc-15-04.asn
 
 # Change logs:
-  03/12/2019: currently supports sending and receiving X2 SETUP messages
+  11/16/2019: - Switch back to using asn1c compiler
+              - add support to Resource Status Request, Response, and Update (over X2)
+  05/24/2019: add support for RIC SUBSCRIPTION REQUEST, RESPONSE, and FAILURE
   05/21/2019: add support for ENDC X2 SETUP   
               no longer use asn1c
               all X2AP and E2AP messages are encapsulated into E2AP-PDU
-  05/24/2019: add support for RIC SUBSCRIPTION REQUEST, RESPONSE, and FAILURE
+  03/12/2019: currently supports sending and receiving X2 SETUP messages
index ede61a7..80a53c6 100755 (executable)
@@ -20,7 +20,7 @@
 
 set -e
 
-E2SIM_VERSION='1.3.0'
+E2SIM_VERSION='1.4.0'
 export E2SIM_DIR=$PWD
 source $E2SIM_DIR/tools/build_helper.bash
 DOCKER_IMAGE='e2sim'
index 3bee1c0..1233a12 100644 (file)
@@ -40,6 +40,9 @@ RUN apt-get update \
        net-tools \
        nano \
        vim \
+       tcpdump \
+       net-tools \
+       nmap \
   && apt-get clean
 
 # Copy E2Sim sources into the container
index 77f6be1..e60a13f 100644 (file)
@@ -22,6 +22,7 @@
 #include <string>
 #include <iostream>
 
+
 #include "e2sim_defs.h"
 #include "e2sim_sctp.hpp"
 #include "e2ap_message_handler.hpp"
@@ -33,6 +34,7 @@ int main(int argc, char* argv[]){
 
   options_t ops = read_input_options(argc, argv);
 
+  //E2 Agent will automatically restart upon sctp disconnection
   int server_fd = sctp_start_server(ops.server_ip, ops.server_port);
   int client_fd = sctp_accept_connection(ops.server_ip, server_fd);
 
index e42e9d2..6bdc5b6 100644 (file)
@@ -38,7 +38,7 @@ void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd)
   sctp_buffer_t data;
 
   data.len = e2ap_asn1c_encode_pdu(pdu, &buf);
-  memcpy(data.buffer, buf, data.len);
+  memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER));
 
   sctp_send_data(client_fd, data);
 }
index f80977d..f1730d3 100644 (file)
 
 #include "e2sim_defs.h"
 #include <getopt.h>
+#include <sys/time.h>
+#include <time.h>
+
+char* time_stamp(void)
+{
+  timeval curTime;
+  gettimeofday(&curTime, NULL);
+  int milli = curTime.tv_usec / 1000;
+
+  char buffer [80];
+  strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", localtime(&curTime.tv_sec));
+
+  const int time_buffer_len = 84;
+  static char currentTime[time_buffer_len] = "";
+  snprintf(currentTime, time_buffer_len, "%s:%03d", buffer, milli);
+
+  return currentTime;
+}
 
 options_t read_input_options_old(int argc, char* argv[])
 {
index 74bf619..cf4a0d6 100644 (file)
 #define X2AP_PPID           (452984832) //27 = 1b, PPID = 1b000000(hex) -> 452984832(dec)
 #define X2AP_SCTP_PORT      36421
 #define RIC_SCTP_SRC_PORT   36422
-#define MAX_SCTP_BUFFER     1024
+#define MAX_SCTP_BUFFER     10000
 #define WORKDIR_ENV         "E2SIM_DIR" //environment variable
 
+char* time_stamp(void);
+
+// #define LOG_I(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");}
+// #define LOG_E(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");}
+// #define LOG_D(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");}
+
 #define LOG_I(...) {printf(__VA_ARGS__); printf("\n");}
 #define LOG_E(...) {printf(__VA_ARGS__); printf("\n");}
 #define LOG_D(...) {printf(__VA_ARGS__); printf("\n");}
@@ -54,4 +60,6 @@ typedef struct {
 
 options_t read_input_options(int argc, char *argv[]);
 
+#define min(a, b) ((a) < (b)) ? (a) : (b)
+
 #endif
diff --git a/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml
new file mode 100644 (file)
index 0000000..9898d55
--- /dev/null
@@ -0,0 +1,35 @@
+<E2AP-PDU>
+    <unsuccessfulOutcome>
+        <procedureCode>9</procedureCode>
+        <criticality><reject/></criticality>
+        <value>
+            <ResourceStatusFailure>
+                <protocolIEs>
+                    <ResourceStatusFailure-IEs>
+                        <id>39</id>
+                        <criticality><reject/></criticality>
+                        <value>
+                            <Measurement-ID>1</Measurement-ID>
+                        </value>
+                    </ResourceStatusFailure-IEs>
+                    <ResourceStatusFailure-IEs>
+                        <id>40</id>
+                        <criticality><reject/></criticality>
+                        <value>
+                            <Measurement-ID>74</Measurement-ID>
+                        </value>
+                    </ResourceStatusFailure-IEs>
+                    <ResourceStatusFailure-IEs>
+                        <id>5</id>
+                        <criticality><ignore/></criticality>
+                        <value>
+                            <Cause>
+                                <radioNetwork><unspecified/></radioNetwork>
+                            </Cause>
+                        </value>
+                    </ResourceStatusFailure-IEs>
+                </protocolIEs>
+            </ResourceStatusFailure>
+        </value>
+    </unsuccessfulOutcome>
+</E2AP-PDU>
diff --git a/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml
new file mode 100644 (file)
index 0000000..a807971
--- /dev/null
@@ -0,0 +1,85 @@
+<E2AP-PDU>
+    <initiatingMessage>
+        <procedureCode>9</procedureCode>
+        <criticality><reject/></criticality>
+        <value>
+            <ResourceStatusRequest>
+                <protocolIEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>39</id>
+                        <criticality><reject/></criticality>
+                        <value>
+                            <Measurement-ID>1</Measurement-ID>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>28</id>
+                        <criticality><reject/></criticality>
+                        <value>
+                            <Registration-Request><start/></Registration-Request>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>38</id>
+                        <criticality><reject/></criticality>
+                        <value>
+                            <ReportCharacteristics>
+                                11111110000000000000000000000000
+                            </ReportCharacteristics>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>29</id>
+                        <criticality><ignore/></criticality>
+                        <value>
+                            <CellToReport-List>
+                                <ProtocolIE-Single-Container>
+                                    <id>31</id>
+                                    <criticality><ignore/></criticality>
+                                    <value>
+                                        <CellToReport-Item>
+                                            <cell-ID>
+                                                <pLMN-Identity>13 30 23</pLMN-Identity>
+                                                <eUTRANcellIdentifier>
+                                                    0000001010110000001100001010
+                                                </eUTRANcellIdentifier>
+                                            </cell-ID>
+                                        </CellToReport-Item>
+                                    </value>
+                                </ProtocolIE-Single-Container>
+                            </CellToReport-List>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>30</id>
+                        <criticality><ignore/></criticality>
+                        <value>
+                            <ReportingPeriodicity><one-thousand-ms/></ReportingPeriodicity>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>64</id>
+                        <criticality><ignore/></criticality>
+                        <value>
+                            <PartialSuccessIndicator><partial-success-allowed/></PartialSuccessIndicator>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>109</id>
+                        <criticality><ignore/></criticality>
+                        <value>
+                            <ReportingPeriodicityRSRPMR><four-hundred-80-ms/></ReportingPeriodicityRSRPMR>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>145</id>
+                        <criticality><ignore/></criticality>
+                        <value>
+                            <ReportingPeriodicityCSIR><ms20/></ReportingPeriodicityCSIR>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                </protocolIEs>
+            </ResourceStatusRequest>
+        </value>
+    </initiatingMessage>
+</E2AP-PDU>
diff --git a/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml
new file mode 100644 (file)
index 0000000..6968e71
--- /dev/null
@@ -0,0 +1,85 @@
+<E2AP-PDU>
+    <initiatingMessage>
+        <procedureCode>9</procedureCode>
+        <criticality><reject/></criticality>
+        <value>
+            <ResourceStatusRequest>
+                <protocolIEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>39</id>
+                        <criticality><reject/></criticality>
+                        <value>
+                            <Measurement-ID>1</Measurement-ID>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>28</id>
+                        <criticality><reject/></criticality>
+                        <value>
+                            <Registration-Request><start/></Registration-Request>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>38</id>
+                        <criticality><reject/></criticality>
+                        <value>
+                            <ReportCharacteristics>
+                                00000000000000000000000000000000
+                            </ReportCharacteristics>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>29</id>
+                        <criticality><ignore/></criticality>
+                        <value>
+                            <CellToReport-List>
+                                <ProtocolIE-Single-Container>
+                                    <id>31</id>
+                                    <criticality><ignore/></criticality>
+                                    <value>
+                                        <CellToReport-Item>
+                                            <cell-ID>
+                                                <pLMN-Identity>02 07 9f</pLMN-Identity>
+                                                <eUTRANcellIdentifier>
+                                                    0010101100000000001100001010
+                                                </eUTRANcellIdentifier>
+                                            </cell-ID>
+                                        </CellToReport-Item>
+                                    </value>
+                                </ProtocolIE-Single-Container>
+                            </CellToReport-List>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>30</id>
+                        <criticality><ignore/></criticality>
+                        <value>
+                            <ReportingPeriodicity><one-thousand-ms/></ReportingPeriodicity>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>64</id>
+                        <criticality><ignore/></criticality>
+                        <value>
+                            <PartialSuccessIndicator><partial-success-allowed/></PartialSuccessIndicator>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>109</id>
+                        <criticality><ignore/></criticality>
+                        <value>
+                            <ReportingPeriodicityRSRPMR><four-hundred-80-ms/></ReportingPeriodicityRSRPMR>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                    <ResourceStatusRequest-IEs>
+                        <id>145</id>
+                        <criticality><ignore/></criticality>
+                        <value>
+                            <ReportingPeriodicityCSIR><ms20/></ReportingPeriodicityCSIR>
+                        </value>
+                    </ResourceStatusRequest-IEs>
+                </protocolIEs>
+            </ResourceStatusRequest>
+        </value>
+    </initiatingMessage>
+</E2AP-PDU>
diff --git a/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml
new file mode 100644 (file)
index 0000000..12542a8
--- /dev/null
@@ -0,0 +1,134 @@
+<E2AP-PDU>
+    <successfulOutcome>
+        <procedureCode>9</procedureCode>
+        <criticality><reject/></criticality>
+        <value>
+            <ResourceStatusResponse>
+                <protocolIEs>
+                    <ResourceStatusResponse-IEs>
+                        <id>39</id>
+                        <criticality><reject/></criticality>
+                        <value>
+                            <Measurement-ID>1</Measurement-ID>
+                        </value>
+                    </ResourceStatusResponse-IEs>
+                    <ResourceStatusResponse-IEs>
+                        <id>40</id>
+                        <criticality><reject/></criticality>
+                        <value>
+                            <Measurement-ID>75</Measurement-ID>
+                        </value>
+                    </ResourceStatusResponse-IEs>
+                    <ResourceStatusResponse-IEs>
+                        <id>65</id>
+                        <criticality><ignore/></criticality>
+                        <value>
+                            <MeasurementInitiationResult-List>
+                                <ProtocolIE-Single-Container>
+                                    <id>66</id>
+                                    <criticality><ignore/></criticality>
+                                    <value>
+                                        <MeasurementInitiationResult-Item>
+                                            <cell-ID>
+                                                <pLMN-Identity>13 30 23</pLMN-Identity>
+                                                <eUTRANcellIdentifier>
+                                                    0000001010110000001100001010
+                                                </eUTRANcellIdentifier>
+                                            </cell-ID>
+                                            <measurementFailureCause-List>
+                                                <ProtocolIE-Single-Container>
+                                                    <id>67</id>
+                                                    <criticality><ignore/></criticality>
+                                                    <value>
+                                                        <MeasurementFailureCause-Item>
+                                                            <measurementFailedReportCharacteristics>
+                                                                00000010000000000000000000000000
+                                                            </measurementFailedReportCharacteristics>
+                                                            <cause>
+                                                                <radioNetwork><measurement-temporarily-not-available/></radioNetwork>
+                                                            </cause>
+                                                        </MeasurementFailureCause-Item>
+                                                    </value>
+                                                </ProtocolIE-Single-Container>
+                                                <ProtocolIE-Single-Container>
+                                                    <id>67</id>
+                                                    <criticality><ignore/></criticality>
+                                                    <value>
+                                                        <MeasurementFailureCause-Item>
+                                                            <measurementFailedReportCharacteristics>
+                                                                00000100000000000000000000000000
+                                                            </measurementFailedReportCharacteristics>
+                                                            <cause>
+                                                                <radioNetwork><measurement-temporarily-not-available/></radioNetwork>
+                                                            </cause>
+                                                        </MeasurementFailureCause-Item>
+                                                    </value>
+                                                </ProtocolIE-Single-Container>
+                                                <ProtocolIE-Single-Container>
+                                                    <id>67</id>
+                                                    <criticality><ignore/></criticality>
+                                                    <value>
+                                                        <MeasurementFailureCause-Item>
+                                                            <measurementFailedReportCharacteristics>
+                                                                00001000000000000000000000000000
+                                                            </measurementFailedReportCharacteristics>
+                                                            <cause>
+                                                                <radioNetwork><measurement-temporarily-not-available/></radioNetwork>
+                                                            </cause>
+                                                        </MeasurementFailureCause-Item>
+                                                    </value>
+                                                </ProtocolIE-Single-Container>
+                                                <ProtocolIE-Single-Container>
+                                                    <id>67</id>
+                                                    <criticality><ignore/></criticality>
+                                                    <value>
+                                                        <MeasurementFailureCause-Item>
+                                                            <measurementFailedReportCharacteristics>
+                                                                00100000000000000000000000000000
+                                                            </measurementFailedReportCharacteristics>
+                                                            <cause>
+                                                                <radioNetwork><measurement-temporarily-not-available/></radioNetwork>
+                                                            </cause>
+                                                        </MeasurementFailureCause-Item>
+                                                    </value>
+                                                </ProtocolIE-Single-Container>
+                                                <ProtocolIE-Single-Container>
+                                                    <id>67</id>
+                                                    <criticality><ignore/></criticality>
+                                                    <value>
+                                                        <MeasurementFailureCause-Item>
+                                                            <measurementFailedReportCharacteristics>
+                                                                01000000000000000000000000000000
+                                                            </measurementFailedReportCharacteristics>
+                                                            <cause>
+                                                                <radioNetwork><measurement-temporarily-not-available/></radioNetwork>
+                                                            </cause>
+                                                        </MeasurementFailureCause-Item>
+                                                    </value>
+                                                </ProtocolIE-Single-Container>
+                                                <ProtocolIE-Single-Container>
+                                                    <id>67</id>
+                                                    <criticality><ignore/></criticality>
+                                                    <value>
+                                                        <MeasurementFailureCause-Item>
+                                                            <measurementFailedReportCharacteristics>
+                                                                10000000000000000000000000000000
+                                                            </measurementFailedReportCharacteristics>
+                                                            <cause>
+                                                                <radioNetwork><measurement-temporarily-not-available/></radioNetwork>
+                                                            </cause>
+                                                        </MeasurementFailureCause-Item>
+                                                    </value>
+                                                </ProtocolIE-Single-Container>
+                                            </measurementFailureCause-List>
+                                        </MeasurementInitiationResult-Item>
+                                    </value>
+                                </ProtocolIE-Single-Container>
+                            </MeasurementInitiationResult-List>
+                        </value>
+                    </ResourceStatusResponse-IEs>
+                </protocolIEs>
+            </ResourceStatusResponse>
+        </value>
+    </successfulOutcome>
+</E2AP-PDU>
diff --git a/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml
new file mode 100644 (file)
index 0000000..b5630bc
--- /dev/null
@@ -0,0 +1,66 @@
+<E2AP-PDU>
+    <initiatingMessage>
+        <procedureCode>10</procedureCode>
+        <criticality><ignore/></criticality>
+        <value>
+            <ResourceStatusUpdate>
+                <protocolIEs>
+                    <ResourceStatusUpdate-IEs>
+                        <id>39</id>
+                        <criticality><reject/></criticality>
+                        <value>
+                            <Measurement-ID>1</Measurement-ID>
+                        </value>
+                    </ResourceStatusUpdate-IEs>
+                    <ResourceStatusUpdate-IEs>
+                        <id>40</id>
+                        <criticality><reject/></criticality>
+                        <value>
+                            <Measurement-ID>75</Measurement-ID>
+                        </value>
+                    </ResourceStatusUpdate-IEs>
+                    <ResourceStatusUpdate-IEs>
+                        <id>32</id>
+                        <criticality><ignore/></criticality>
+                        <value>
+                            <CellMeasurementResult-List>
+                                <ProtocolIE-Single-Container>
+                                    <id>33</id>
+                                    <criticality><ignore/></criticality>
+                                    <value>
+                                        <CellMeasurementResult-Item>
+                                            <cell-ID>
+                                                <pLMN-Identity>13 30 23</pLMN-Identity>
+                                                <eUTRANcellIdentifier>
+                                                    0000001010110000001100001010
+                                                </eUTRANcellIdentifier>
+                                            </cell-ID>
+                                            <iE-Extensions>
+                                                <CellMeasurementResult-Item-ExtIEs>
+                                                    <id>42</id>
+                                                    <criticality><ignore/></criticality>
+                                                    <extensionValue>
+                                                        <CompositeAvailableCapacityGroup>
+                                                            <dL-CompositeAvailableCapacity>
+                                                                <cellCapacityClassValue>100</cellCapacityClassValue>
+                                                                <capacityValue>99</capacityValue>
+                                                            </dL-CompositeAvailableCapacity>
+                                                            <uL-CompositeAvailableCapacity>
+                                                                <cellCapacityClassValue>100</cellCapacityClassValue>
+                                                                <capacityValue>99</capacityValue>
+                                                            </uL-CompositeAvailableCapacity>
+                                                        </CompositeAvailableCapacityGroup>
+                                                    </extensionValue>
+                                                </CellMeasurementResult-Item-ExtIEs>
+                                            </iE-Extensions>
+                                        </CellMeasurementResult-Item>
+                                    </value>
+                                </ProtocolIE-Single-Container>
+                            </CellMeasurementResult-List>
+                        </value>
+                    </ResourceStatusUpdate-IEs>
+                </protocolIEs>
+            </ResourceStatusUpdate>
+        </value>
+    </initiatingMessage>
+</E2AP-PDU>
index 03682d9..af42d5b 100644 (file)
                         <criticality><reject/></criticality>
                         <value>
                             <GlobalENB-ID>
-                                <pLMN-Identity>02 F8 39</pLMN-Identity>
+                                <pLMN-Identity>13 30 23</pLMN-Identity>
                                 <eNB-ID>
                                     <macro-eNB-ID>
-                                        00000000111000110000
+                                        00000010101100000011
                                     </macro-eNB-ID>
                                 </eNB-ID>
                             </GlobalENB-ID>
                             <ServedCells>
                                 <SEQUENCE>
                                     <servedCellInfo>
-                                        <pCI>0</pCI>
+                                        <pCI>308</pCI>
                                         <cellId>
-                                            <pLMN-Identity>02 F8 39</pLMN-Identity>
+                                            <pLMN-Identity>13 30 23</pLMN-Identity>
                                             <eUTRANcellIdentifier>
-                                                0000000011100011000000000000
+                                                0000001010110000001100001010
                                             </eUTRANcellIdentifier>
                                         </cellId>
-                                        <tAC>00 01</tAC>
+                                        <tAC>64 03</tAC>
                                         <broadcastPLMNs>
-                                            <PLMN-Identity>02 F8 39</PLMN-Identity>
+                                            <PLMN-Identity>13 30 23</PLMN-Identity>
                                         </broadcastPLMNs>
                                         <eUTRA-Mode-Info>
                                             <fDD>
-                                                <uL-EARFCN>21400</uL-EARFCN>
-                                                <dL-EARFCN>3400</dL-EARFCN>
+                                                <uL-EARFCN>18650</uL-EARFCN>
+                                                <dL-EARFCN>650</dL-EARFCN>
                                                 <uL-Transmission-Bandwidth><bw50/></uL-Transmission-Bandwidth>
                                                 <dL-Transmission-Bandwidth><bw50/></dL-Transmission-Bandwidth>
                                             </fDD>
                                         </eUTRA-Mode-Info>
+                                        <iE-Extensions>
+                                            <ServedCell-Information-ExtIEs>
+                                                <id>41</id>
+                                                <criticality><ignore/></criticality>
+                                                <extensionValue>
+                                                    <Number-of-Antennaports><an2/></Number-of-Antennaports>
+                                                </extensionValue>
+                                            </ServedCell-Information-ExtIEs>
+                                            <ServedCell-Information-ExtIEs>
+                                                <id>55</id>
+                                                <criticality><ignore/></criticality>
+                                                <extensionValue>
+                                                    <PRACH-Configuration>
+                                                        <rootSequenceIndex>344</rootSequenceIndex>
+                                                        <zeroCorrelationIndex>12</zeroCorrelationIndex>
+                                                        <highSpeedFlag><false/></highSpeedFlag>
+                                                        <prach-FreqOffset>5</prach-FreqOffset>
+                                                    </PRACH-Configuration>
+                                                </extensionValue>
+                                            </ServedCell-Information-ExtIEs>
+                                            <ServedCell-Information-ExtIEs>
+                                                <id>160</id>
+                                                <criticality><ignore/></criticality>
+                                                <extensionValue>
+                                                    <FreqBandIndicatorPriority><not-broadcasted/></FreqBandIndicatorPriority>
+                                                </extensionValue>
+                                            </ServedCell-Information-ExtIEs>
+                                        </iE-Extensions>
                                     </servedCellInfo>
                                 </SEQUENCE>
                             </ServedCells>
@@ -56,8 +84,8 @@
                         <value>
                             <GUGroupIDList>
                                 <GU-Group-ID>
-                                    <pLMN-Identity>02 F8 39</pLMN-Identity>
-                                    <mME-Group-ID>00 00</mME-Group-ID>
+                                    <pLMN-Identity>13 30 23</pLMN-Identity>
+                                    <mME-Group-ID>80 00</mME-Group-ID>
                                 </GU-Group-ID>
                             </GUGroupIDList>
                         </value>
index d8f5e6b..39347a1 100644 (file)
@@ -46,6 +46,7 @@ void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data)
 \r
         case E2AP_PDU_PR_successfulOutcome: //successfulOutcome\r
           LOG_I("[E2AP] Received X2-SETUP-RESPONSE");\r
+          e2ap_handle_X2SetupResponse(pdu, socket_fd);\r
           break;\r
 \r
         case E2AP_PDU_PR_unsuccessfulOutcome:\r
@@ -138,6 +139,43 @@ void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data)
       }\r
       break;\r
 \r
+    case ProcedureCode_id_resourceStatusReportingInitiation: //9\r
+      switch(index)\r
+      {\r
+        case E2AP_PDU_PR_initiatingMessage: //initiatingMessage\r
+          LOG_I("[E2AP] Received RESOURCE-STATUS-REQUEST");\r
+          e2ap_handle_ResourceStatusRequest(pdu, socket_fd);\r
+          break;\r
+\r
+        case E2AP_PDU_PR_successfulOutcome: //successfulOutcome\r
+          LOG_I("[E2AP] Received RESOURCE-STATUS-RESPONSE");\r
+          break;\r
+\r
+        case E2AP_PDU_PR_unsuccessfulOutcome:\r
+          LOG_I("[E2AP] Received RESOURCE-STATUS-FAILURE");\r
+          break;\r
+\r
+        default:\r
+          LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU %d", index,\r
+                    (int)ProcedureCode_id_resourceStatusReportingInitiation);\r
+          break;\r
+      }\r
+      break;\r
+\r
+    case ProcedureCode_id_resourceStatusReporting: // 10\r
+      switch(index)\r
+      {\r
+        case E2AP_PDU_PR_initiatingMessage: //initiatingMessage\r
+          LOG_I("[E2AP] Received RESOURCE-STATUS-UPDATE");\r
+          break;\r
+\r
+        default:\r
+          LOG_E("[E2AP] Unable to process message index=%d in E2AP-PDU %d", index,\r
+                    (int)ProcedureCode_id_resourceStatusReporting);\r
+          break;\r
+      }\r
+      break;\r
+\r
     default:\r
       LOG_E("[E2AP] No available handler for procedureCode=%d", procedureCode);\r
       break;\r
@@ -160,7 +198,7 @@ void e2ap_handle_X2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd)
   sctp_buffer_t data;\r
 \r
   data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf);\r
-  memcpy(data.buffer, buf, data.len);\r
+  memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER));\r
 \r
   //send response data over sctp\r
   if(sctp_send_data(socket_fd, data) > 0) {\r
@@ -170,6 +208,30 @@ void e2ap_handle_X2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd)
   }\r
 }\r
 \r
+void e2ap_handle_X2SetupResponse(E2AP_PDU_t* pdu, int &socket_fd)\r
+{\r
+  E2AP_PDU_t* req_pdu = e2ap_xml_to_pdu("E2AP_ResourceStatusRequest.xml");\r
+  // E2AP_PDU_t* req_pdu = e2ap_xml_to_pdu("E2AP_ResourceStatusRequest_bad.xml");\r
+\r
+  LOG_D("[E2AP] Created RESOURCE-STATUS-REQUEST");\r
+\r
+  e2ap_asn1c_print_pdu(req_pdu);\r
+\r
+  uint8_t       *buf;\r
+  sctp_buffer_t data;\r
+\r
+  data.len = e2ap_asn1c_encode_pdu(req_pdu, &buf);\r
+  memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER));\r
+\r
+  //send response data over sctp\r
+  if(sctp_send_data(socket_fd, data) > 0) {\r
+    LOG_I("[SCTP] Sent RESOURCE-STATUS-REQUEST");\r
+  } else {\r
+    LOG_E("[SCTP] Unable to send RESOURCE-STATUS-REQUEST to peer");\r
+  }\r
+\r
+}\r
+\r
 /*\r
 Simply send back ENDCX2SetupResponse\r
 Todo: add more handling options (failure, duplicated request, etc.)\r
@@ -186,7 +248,7 @@ void e2ap_handle_ENDCX2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd)
   sctp_buffer_t data;\r
 \r
   data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf);\r
-  memcpy(data.buffer, buf, data.len);\r
+  memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER));\r
 \r
   //send response data over sctp\r
   if(sctp_send_data(socket_fd, data) > 0) {\r
@@ -212,7 +274,7 @@ void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd)
   sctp_buffer_t data;\r
 \r
   data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf);\r
-  memcpy(data.buffer, buf, data.len);\r
+  memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER));\r
 \r
   //send response data over sctp\r
   if(sctp_send_data(socket_fd, data) > 0) {\r
@@ -234,7 +296,7 @@ void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socke
   sctp_buffer_t data;\r
 \r
   data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf);\r
-  memcpy(data.buffer, buf, data.len);\r
+  memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER));\r
 \r
   //send response data over sctp\r
   if(sctp_send_data(socket_fd, data) > 0) {\r
@@ -252,10 +314,10 @@ void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socke
   uint8_t *buf1, *buf2;\r
   sctp_buffer_t data1, data2;\r
   data1.len = e2ap_asn1c_encode_pdu(indication_type1, &buf1);\r
-  memcpy(data1.buffer, buf1, data1.len);\r
+  memcpy(data1.buffer, buf1, min(data1.len, MAX_SCTP_BUFFER));\r
 \r
   data2.len = e2ap_asn1c_encode_pdu(indication_type2, &buf2);\r
-  memcpy(data2.buffer, buf2, data2.len);\r
+  memcpy(data2.buffer, buf2, min(data2.len, MAX_SCTP_BUFFER));\r
 \r
   while(1){\r
     sleep(1);\r
@@ -279,76 +341,48 @@ void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socke
 \r
 }\r
 \r
-// void e2ap_handle_RICSubscriptionRequest_old(e2ap_pdu_t* pdu, int &socket_fd)\r
-// {\r
-//   RICsubscription_params_t params;\r
-//   e2ap_parse_RICsubscriptionRequest(pdu, params);\r
-//\r
-//   /* Example handling logic\r
-//   - Accept if request id is even-numbered -> send back response\r
-//     in this case, accept every other actions\r
-//\r
-//   - Reject if request id is odd-numbered -> send back failure\r
-//   */\r
-//\r
-//   e2ap_pdu_t* res_pdu = new_e2ap_pdu();\r
-//   bool is_failure = false;\r
-//\r
-//   if(params.request_id % 2 == 0)\r
-//   {\r
-//     for(size_t i = 0; i < params.actionList.size(); i++)\r
-//     {\r
-//       if(i%2 == 0){\r
-//         params.actionList[i].isAdmitted = true;\r
-//       } else {\r
-//         params.actionList[i].isAdmitted = false;\r
-//         params.actionList[i].notAdmitted_cause = RICcause_radioNetwork;\r
-//         params.actionList[i].notAdmitted_subCause = 5;\r
-//       }\r
-//     }\r
-//\r
-//     e2ap_create_RICsubscriptionResponse(res_pdu, params);\r
-//     LOG_I("[E2AP] Created RIC-SUBSCRIPTION-RESPONSE");\r
-//   }\r
-//   else\r
-//   {\r
-//     is_failure = true;\r
-//\r
-//     for(size_t i = 0; i < params.actionList.size(); i++)\r
-//     {\r
-//       params.actionList[i].isAdmitted = false;\r
-//       params.actionList[i].notAdmitted_cause = RICcause_radioNetwork;\r
-//       params.actionList[i].notAdmitted_subCause = 5;\r
-//     }\r
-//\r
-//     e2ap_create_RICsubscriptionFailure(res_pdu, params);\r
-//     LOG_I("[E2AP] Created RIC-SUBSCRIPTION-FAILURE");\r
-//   }\r
-//\r
-//   e2ap_print_pdu(res_pdu);\r
-//\r
-//   //Encode into buffer\r
-//   sctp_buffer_t data;\r
-//   e2ap_encode_pdu(res_pdu, data.buffer, sizeof(data.buffer), data.len);\r
-//\r
-//   //send response data over sctp\r
-//   if(sctp_send_data(socket_fd, data) > 0)\r
-//   {\r
-//     if(is_failure) {\r
-//       LOG_I("[SCTP] Sent RIC-SUBSCRIPTION-FAILURE");\r
-//     }\r
-//     else {\r
-//       LOG_I("[SCTP] Sent RIC-SUBSCRIPTION-RESPONSE");\r
-//     }\r
-//   }\r
-//   else\r
-//   {\r
-//     if(is_failure) {\r
-//       LOG_I("[SCTP] Unable to send RIC-SUBSCRIPTION-FAILURE");\r
-//     }\r
-//     else {\r
-//       LOG_E("[SCTP] Unable to send RIC-SUBSCRIPTION-RESPONSE");\r
-//     }\r
-//   }\r
-//\r
-// }\r
+void e2ap_handle_ResourceStatusRequest(E2AP_PDU_t* pdu, int &socket_fd)\r
+{\r
+  //send back ResourceStatusResponse, followed by resource status update\r
+  E2AP_PDU_t* res_pdu = e2ap_xml_to_pdu("E2AP_ResourceStatusResponse.xml");\r
+\r
+  LOG_D("[E2AP] Created RESOURCE-STATUS-RESPONSE");\r
+\r
+  e2ap_asn1c_print_pdu(res_pdu);\r
+\r
+  uint8_t       *buf;\r
+  sctp_buffer_t data;\r
+\r
+  data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf);\r
+  memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER));\r
+\r
+  //send response data over sctp\r
+  if(sctp_send_data(socket_fd, data) > 0) {\r
+    LOG_I("[SCTP] Sent RESOURCE-STATUS-RESPONSE");\r
+  } else {\r
+    LOG_E("[SCTP] Unable to send RESOURCE-STATUS-RESPONSE to peer");\r
+  }\r
+\r
+\r
+  //send ResourceStatusUpdate periodically\r
+  E2AP_PDU_t* update_pdu = e2ap_xml_to_pdu("E2AP_ResourceStatusUpdate.xml");\r
+\r
+  uint8_t       *update_buf;\r
+  sctp_buffer_t update_data;\r
+\r
+  update_data.len = e2ap_asn1c_encode_pdu(update_pdu, &update_buf);\r
+  memcpy(update_data.buffer, update_buf, min(update_data.len, MAX_SCTP_BUFFER));\r
+\r
+  while(1) {\r
+    // e2ap_asn1c_print_pdu(update_pdu);\r
+\r
+    if(sctp_send_data(socket_fd, update_data) > 0) {\r
+      LOG_I("[SCTP] Sent RESOURCE-STATUS-UPDATE");\r
+    } else {\r
+      LOG_E("[SCTP] Unable to send RESOURCE-STATUS-UPDATE to peer");\r
+    }\r
+\r
+    sleep(1);\r
+\r
+  }\r
+}\r
index c7af948..f53cce1 100644 (file)
@@ -38,4 +38,6 @@ void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd);
 \r
 void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socket_fd);\r
 \r
+void e2ap_handle_ResourceStatusRequest(E2AP_PDU_t* pdu, int &socket_fd);\r
+\r
 #endif\r
index 15892d4..de68ec7 100644 (file)
@@ -84,6 +84,17 @@ int sctp_start_server(const char *server_ip_str, const int server_port)
     exit(1);
   }
 
+  //set send_buffer
+  // int sendbuff = 10000;
+  // socklen_t optlen = sizeof(sendbuff);
+  // if(getsockopt(server_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) {
+  //   perror("getsockopt send");
+  //   exit(1);
+  // }
+  // else
+  //   LOG_D("[SCTP] send buffer size = %d\n", sendbuff);
+
+
   if(bind(server_fd, server_addr, addr_len) == -1) {
     perror("bind");
     exit(1);
@@ -139,6 +150,15 @@ int sctp_start_client(const char *server_ip_str, const int server_port)
      exit(1);
   }
 
+  // int sendbuff = 10000;
+  // socklen_t optlen = sizeof(sendbuff);
+  // if(getsockopt(client_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) {
+  //   perror("getsockopt send");
+  //   exit(1);
+  // }
+  // else
+  //   LOG_D("[SCTP] send buffer size = %d\n", sendbuff);
+
   //--------------------------------
   //Bind before connect
   auto optval = 1;
index d10273c..690f767 100644 (file)
@@ -59,7 +59,7 @@ int main(int argc, char* argv[]){
   sctp_buffer_t data;
 
   data.len = e2ap_asn1c_encode_pdu(pdu, &buf);
-  memcpy(data.buffer, buf, data.len);
+  memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER));
 
   /* Test decoding */
   E2AP_PDU_t* pdu1 = new E2AP_PDU_t();
index ae140f8..9403283 100644 (file)
@@ -40,7 +40,7 @@ void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd)
   sctp_buffer_t data;
 
   data.len = e2ap_asn1c_encode_pdu(pdu, &buf);
-  memcpy(data.buffer, buf, data.len);
+  memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER));
 
   sctp_send_data(client_fd, data);
 }
index 9feccca..e325827 100644 (file)
@@ -38,7 +38,7 @@ void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd)
   sctp_buffer_t data;
 
   data.len = e2ap_asn1c_encode_pdu(pdu, &buf);
-  memcpy(data.buffer, buf, data.len);
+  memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER));
 
   // sctp_send_data(client_fd, data);
   sctp_send_data_X2AP(client_fd, data);
@@ -64,9 +64,10 @@ int main(int argc, char* argv[]){
   //Send X2 Setup Request
   E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_X2SetupRequest.xml");
   e2ap_asn1c_print_pdu(pdu_setup);
-
   encode_and_send_sctp_data(pdu_setup, client_fd);
 
   //wait to receive X2SetupResponse
-  wait_for_sctp_data(client_fd);
+  while(1){
+    wait_for_sctp_data(client_fd);
+  }
 }