Simu5G - 5G NR and LTE/LTE-A user-plane simulation model for OMNeT++ & INET

Overview

Simu5G

5G NR and LTE/LTE-A user-plane simulation model, compatible with the INET Framework. Website: http://simu5g.org

Disclaimer

Simu5G is an open source simulator licensed under LGPL, and based on OMNeT framework which is available under the Academic Public License and a commercial license (see https://omnest.com/licensingfaq.php). You are solely responsible for obtaining the appropriate license for your use(s) of OMNeT. Intel is not responsible for obtaining any such licenses, nor liable for any licensing fees due in connection with your use of OMNeT. Neither the University of Pisa, nor the authors of this software, are responsible for obtaining any such licenses, nor liable for any licensing fees due in connection with your use of OMNeT.

Simu5G is based on 3GPP specifications, which may involve patented and proprietary technology. See https://www.3gpp.org/contact/3gpp-faqs#L5. You are solely responsible for determining if your use of Simu5G requires any additional licenses. Intel is not responsible for obtaining any such licenses, nor liable for any licensing fees due in connection with your use of Simu5G. Neither the University of Pisa, nor the authors of this software, are responsible for obtaining any such licenses, nor liable for any licensing fees due in connection with your use of OMNeT.

This software is provided on an "as is" basis, without warranties of any kind, either express or implied, including, but not limited to, warranties of accuracy, adequacy, validity, reliability or compliance for any specific purpose. Neither the University of Pisa, nor the authors of this software, are liable for any loss, expense or damage of any type that may arise in using this software.

If you use this software or part of it for your research, please cite our work:

G. Nardini, D. Sabella, G. Stea, P. Thakkar, A. Virdis, "Simu5G – An OMNeT++ Library for End-to-End Performance Evaluation of 5G Networks," in IEEE Access, vol. 8, pp. 181176-181191, 2020, doi: 10.1109/ACCESS.2020.3028550.

If you include this software or part of it within your own software, README and LICENSE files cannot be removed from it and must be included in the root directory of your software package.

Core contributors

Dependencies

This version requires:

  • OMNeT++ 5.6.2
  • INET 4.2.2
  • tested on:
    • Ubuntu 18.04 and 20.04
    • macOS Catalina
    • Windows 7

Simu5G Features

General

  • eNodeB, gNodeB and UE models
  • Full LTE and NR protocol stack
  • Simple PGW/UPF model implementing GTP protocol

PDCP-RRC

  • Header compression/decompression
  • Logical connection establishment and maintenance
  • E-UTRA/NR Dual connectivity
  • Split Bearer

RLC

  • Multiplexing/Demultiplexing of MAC SDUs
  • UM, (AM and TM testing) modes

MAC

  • HARQ functionalities
  • Allocation management
  • AMC
  • Scheduling Policies (MAX C/I, Proportional Fair, DRR)
  • Carrier Aggregation
  • Support to multiple numerologies
  • Flexible TDD/FDD

PHY

  • Channel Feedback management
  • Realistic 3GPP channel model with
    • inter-cell interference
    • path-loss
    • fast fading
    • shadowing
    • (an)isotropic antennas

Advanced features

  • X2 communication support
  • X2-based handover
  • CoMP Coordinated Scheduling support
  • Device-to-device communications
  • Support for vehicular mobility (integration with Veins 5.1)
  • Simplified model of Multi-access Edge Computing (MEC) Host

Applications

  • Voice-over-IP (VoIP)
  • Constant Bit Rate (CBR)
  • Trace-based Video-on-demand (VoD)

Limitations

  • User Plane only (Control Plane not modeled)
  • no EPS bearer support – note: a similar concept, "connections", has been implemented, but they are neither dynamic nor statically configurable via some config file
  • radio bearers not implemented, not even statically configured radio bearers (dynamically allocating bearers would need the RRC protocol, which is Control Plane so not implemented)
Comments
  • Simu5G build crash on Omnet++ 6.0, Build id: 220413-71d8fab425 and INET 4.3.9

    Simu5G build crash on Omnet++ 6.0, Build id: 220413-71d8fab425 and INET 4.3.9

    Hi guys,

    I'm trying to use Simu5G on my Omnet++ setup and the build crashes every time:

    Anybody have any ideas how to debug it?

    Thanks Bogdan

    Console: "fatal error: too many errors emitted, stopping now [-ferror-limit=] 12 warnings and 20 errors generated. make[1]: *** [Makefile:420: ../out/clang-debug/src/apps/mec/MecApps/MecRequestBackgroundGeneratorApp/MecRequestBackgroundGeneratorApp.o] Error 1 19 warnings and 20 errors generated. 12 warnings and 20 errors generated. make[1]: *** [Makefile:420: ../out/clang-debug/src/apps/mec/MecApps/MecRequestForegroundApp/MecRequestForegroundApp.o] Error 1 make[1]: *** [Makefile:420: ../out/clang-debug/src/apps/mec/WarningAlert/MECWarningAlertApp.o] Error 1 make[1]: Leaving directory '/c/Users/Bogda/Documents/omnetpp-6.0/samples/Simu5G-1.2.0/src' make: *** [Makefile:2: all] Error 2 "make MODE=debug -j12 all" terminated with exit code 2. Build might be incomplete.

    12:45:00 Build Failed. 141 errors, 194 warnings. (took 18s.841ms)"

    opened by B0GDAN 16
  • Transmission delay seems not like to increase with different numUEs?

    Transmission delay seems not like to increase with different numUEs?

    Hi there! I was trying to measure the transmission delay from UE to MEC with different UE numbers. Here is my environment below:

    • Windows 11
    • Omnet++ 6.0 Release Version
    • INET 4.3.9
    • Simu5G latest code(cloned on May 11) with minor change mentioned in https://github.com/Unipisa/Simu5G/issues/44#issuecomment-1123756115 to resolve the Invalid Signal ID issue

    And my simulation code is based on the given example under the directory simulations/NR/mec/singleMecHost I have modified the code in UEWarningAlertApp.cc with a function keeps sending Ping message with message creation timestamp after every defined time interval to the corresponding MECApp in MECHost, while the connection to MECApp is established:

    void UEWarningAlertApp::sendPingMessageToMECApp(){
    
        inet::Packet* pkt = new inet::Packet("WarningPing");
        auto pingMsg = inet::makeShared<WarningPingPacket>();
        pingMsg->setType(PING_MSG);
        // ueMsgCreateTime = simTime();
        pingMsg->setUeIndex(getParentModule()->getIndex());
        pingMsg->setUeCreateTime(simTime());
        pingMsg->setChunkLength(inet::B(1000));
        pkt->insertAtBack(pingMsg);
    
        if (logger) {
            log_notation("sendMessageToMECApp");
            logfile << "ping Message sent to the MEC app: " << mecAppAddress_ << ":" << mecAppPort_ << endl;
        }
    
        socket.sendTo(pkt, mecAppAddress_ , mecAppPort_);
    }
    

    When the MECApp received the packet, it'll record the timestamp on receiving the packet and reply a new packet with both UE's creation and MEC's receiving timestamps to one or more UE's WarningAlertApp:

    void MECWarningAlertApp::handleUeMessage(omnetpp::cMessage *msg)
    {
        // determine its source address/port
        auto pk = check_and_cast<Packet *>(msg);
        ueAppAddress = pk->getTag<L3AddressInd>()->getSrcAddress();
        ueAppPort = pk->getTag<L4PortInd>()->getSrcPort();
    
        auto mecPk = pk->peekAtFront<WarningAppPacket>();
    
        if(strcmp(mecPk->getType(), START_WARNING) == 0)
        {
          //...
        }
        else if (strcmp(mecPk->getType(), STOP_WARNING) == 0)
        {   
          //...
        }else if (strcmp(mecPk->getType(), PING_MSG) == 0) {
            if (logger) {
                log_notation("handleUeMessage");
                logfile << "WarningPingPacket arrived from: " << ueAppAddress << endl;
            }
    
            auto pingPk = dynamicPtrCast<const WarningPingPacket>(mecPk);
            if (pingPk == nullptr){
                throw cRuntimeError("MECWarningAlertApp::handleUeMessage - WarningPingPacket is null");
            } 
    
            if (address_book.size() == 0) {
                address_filling(pingPk->getUeIndex());
            }
    
            for (auto iter = address_book.begin(); iter != address_book.end(); iter ++){
                if (logger) {
                    log_notation("handleUeMessage");
                    logfile << "Sending Boardcasting Reply: " << **iter << endl;
                }
    
                sendPingReply(pingPk, **iter, ueAppPort);
            }
    
        }else{
            throw cRuntimeError("MECWarningAlertApp::handleUeMessage - packet not recognized");
        }
    }
    
    void MECWarningAlertApp::sendPingReply(inet::IntrusivePtr<const WarningPingPacket>& pingPk,const inet::L3Address& dest_addr,const int& ueAppPort){
    
        inet::Packet* pkt = new inet::Packet("WarningPing");
        auto pingMsg = inet::makeShared<WarningPingPacket>();
        msgReplyTime = simTime();
        pingMsg->setType(PING_MSG);
        pingMsg->setChunkLength(inet::B(1000));
        pingMsg->setUeCreateTime(pingPk->getUeCreateTime());
        pingMsg->setMecReceiveTime(msgReceivedTime); //Assigned with simTime() in handlemessage(){...}
        pingMsg->setMecReplyTime(msgReplyTime);
        
        pkt->insertAtBack(pingMsg);
    
        if (logger) {
            log_notation("handleUeMessage");
            logfile << "WarningPingPacket analysed, sending reply to UE app: " << dest_addr << endl;
        }    
    
        ueSocket.sendTo(pkt, dest_addr, ueAppPort);
    }
    
    void MECWarningAlertApp::address_filling(int UeIndex){
        if (logger) {
            log_notation("address_filling");
            logfile << ("Starting filling device address") << endl;
        }
    
        auto curr_index = UeIndex + 1;
        for(auto i = 0; i < ping_receiver_num; i ++){
            if (curr_index >= numUes) {
                curr_index = 0;
            }
            string simbolicAppAddressStr = "ue["+to_string(curr_index)+"]";
            address_book.insert(new inet::L3Address(inet::L3AddressResolver().resolve(simbolicAppAddressStr.c_str())));
    
            curr_index ++;        
        }
    }
    

    After the UEApp received the replied message, the time delay on UE->MEC, MEC processing, MEC->UE will be all calculated and recorded as signals:

    void UEWarningAlertApp::handleMessage(cMessage *msg)
    {
        ueMsgReceivedTime = simTime();
    
        // Sender Side
        if (msg->isSelfMessage())
        {
           //...
        }else{
           //...
          else if(!strcmp(mePkt->getType(), PING_MSG)){
                    if (logger) {
                        log_notation("handleMessage");
                        logfile << "Received reply from MEC message at " << simTime() << endl;
                    }
    
                    auto pingPk = dynamicPtrCast<const WarningPingPacket>(mePkt);
                    if (pingPk == nullptr){
                        throw cRuntimeError("MECWarningAlertApp::handleUeMessage - WarningPingPacket is null");
                    } 
    
                    ueMsgCreateTime = pingPk->getUeCreateTime();
                    mecMsgReceivedTime = pingPk->getMecReceiveTime();
                    mecMsgReplyTime = pingPk->getMecReplyTime();
                    
                    emit(uploadTimeSignal, mecMsgReceivedTime - ueMsgCreateTime);
                    emit(processTimeSignal, mecMsgReplyTime - mecMsgReceivedTime);
                    emit(downloadTimeSignal, ueMsgReceivedTime - mecMsgReplyTime);
    
                    if (logger) {
                        log_notation("handleMessage");
                        logfile << "Message Create Time is: [" << ueMsgCreateTime << "], Total Delay is [" << (ueMsgReceivedTime - ueMsgCreateTime) << "]" << endl; 
                    }
    
                    emit(totalTimeSignal, ueMsgReceivedTime - ueMsgCreateTime);
        }
    

    I have read the article from https://ieeexplore.ieee.org/abstract/document/9591605, and expect the trending of the time delay/numUE is kind of like Figure 21 in the article (Since the delay measured in article is RTT and my measurement is from UE1->MEC->UE2 only, without the reversed path, so the expected graph's differentiation should be close to half of the Figure 21's).

    However, no matter I have set the number of UEs from 3 to 450, the measurements of delay remains in a constant range, with the value keeps in between 0.0048s ~ 0.0052s, which consists of

    • 0.0037s from UE to MEC
    • 0.00125s from MEC to UE
    • 0.00s in MEC processing

    In my simulation, I have set the size of message to 1000B using pingMsg->setChunkLength(inet::B(1000));, and in omnetpp.ini, I have set the numerology to 2 and numBands to 25. The detail of the configuration is listed below:

    [General]
    image-path=../../../images
    cmdenv-express-mode = true
    cmdenv-autoflush = true
    
    ##########################################################
    #            Output Format Results                       #
    ##########################################################
    num-rngs = 3
    repeat = 15
    seed-set = ${repetition}
    output-scalar-file = ${resultdir}/${configname}/${configname}.sca
    output-vector-file = ${resultdir}/${configname}/${configname}.vec
    **.routingRecorder.enabled = false
    **.scalar-recording = false
    **.vector-recording = false
    
    
    
    ##########################################################
    #            Simulation parameters                       #
    ##########################################################
    debug-on-errors = false
    print-undisposed = true
    
    sim-time-limit = 38s
    warmup-period = 0s
    
    *.playgroundSizeX = 1100m
    *.playgroundSizeY = 800m
    *.playgroundSizeZ = 50m
    
    
    ############### IPv4 configurator config #################
    *.configurator.config = xmldoc("./demo.xml")
    
    
    ##########################################################
    #              NR specific parameters                   #
    ##########################################################
    *.gNodeB*.cellInfo.broadcastMessageInterval = 0.5s
    **.fbPeriod = 40   # reports CQI every 40ms
    **.amcType = "NRAmc"
    **.pilotMode = "ROBUST_CQI" 
    **.targetBler = 0.01
    **.blerShift = 5  
    
    #######################################################
    #        CA and channel model configuration           # 
    #######################################################
    *.carrierAggregation.numComponentCarriers = 1
    *.carrierAggregation.componentCarrier[0].numBands =  25 #${numBands=25}
    
    *.carrierAggregation.componentCarrier[0].numerologyIndex = 2
    
    *.*.cellularNic.LteChannelModelType = "NRChannelModel"
    *.gNodeB1.cellularNic.numCarriers = 1
    *.gNodeB1.cellularNic.channelModel[0].componentCarrierIndex = 0
    *.ue[*].cellularNic.numCarriers = 1
    *.ue[*].cellularNic.nrChannelModel[0].componentCarrierIndex = 0
    
    
    ##########################################################
    #                      Mobility                          #			
    ##########################################################		
    **.mobility.constraintAreaMinZ = 0m
    **.mobility.constraintAreaMaxZ = 0m
    
    *.ue[*].mobility.initFromDisplayString = false
    *.ue[*].mobility.typename = "LinearMobility"
    *.ue[*].mobility.updateInterval = 0.05s
    
    *.gNodeB1.mobility.initFromDisplayString = true
    
    **.numUes = 3
    
    **.ue[*].mobility.initialX = 180m
    **.ue[*].mobility.initialY = 50m
    **.ue[*].mobility.initialMovementHeading = 90deg
    **.ue[*].mobility.speed = 10mps
    
    **.ue[*].masterId = 1    
    **.ue[*].macCellId = 1   
    **.ue[*].nrMasterId = 1
    **.ue[*].nrMacCellId = 1
    **.gNodeB1.macCellId = 1
    **.gNodeB1.macNodeId = 1
    
    # tcp settings
    **.tcp.typename = "Tcp"
    **.tcp.advertisedWindow = 65535         # in bytes, corresponds with the maximal receiver buffer capacity (Note: normally, NIC queues should be at least this size)
    **.tcp.tcpAlgorithmClass = "TcpReno"    # TcpReno/TcpTahoe/TcpNewReno/TcpNoCongestionControl/DumbTcp
    **.tcp.sackSupport = true               # Selective Acknowledgment (RFC 2018, 2883, 3517) support (header option) (SACK will be enabled for a connection if both endpoints support it)
    
    **.hasRNISupport = true
    ##########################################################
    #                    App Layer                           #
    ##########################################################
    
    #########################_Car Side_#######################
    
    #------------UEWarningAlertApp---------------
    *.ue[*].numApps = 2
    *.ue[*].app[0].typename = "DeviceApp"
    *.ue[*].app[0].localPort = 4500
    *.ue[*].app[0].UALCMPAddress = "ualcmp"
    *.ue[*].app[0].UALCMPPort = 1000
    *.ue[*].app[0].appPackageSource = "ApplicationDescriptors/WarningAlertApp.json"
    
    *.ue[*].app[1].typename = "UEWarningAlertApp"
    #*.ue[*].app[1].positionY = 150
    
    *.ue[*].app[1].deviceAppAddress = "ue["+string(ancestorIndex(1))+"]"
    *.ue[*].app[1].deviceAppPort = 4500
    *.ue[*].app[1].startTime = 1s										#when sending start warning alert app									#period to sending messages
    *.ue[*].app[1].stopTime = 30s										#when sending stop MEC warning alert app
    
    #enable this for log output
    *.ue[*].app[1].logger = false
    
    #*.ue[*].app[0].requiredRam = 10MB
    #*.ue[*].app[0].requiredDisk = 10MB
    #*.ue[*].app[0].requiredCpu = 0.01
    #----------------------------------------
    
    ######################_ME Host Side_#####################
    # resources available
    *.mecHost.maxMECApps = 900												#max ME Apps to instantiate
    *.mecHost.maxRam = 32GB													#max KBytes of Ram Space 
    *.mecHost.maxDisk = 100TB												#max KBytes of Ram Space 
    *.mecHost.maxCpuSpeed = 600000											#max percentage of CPU
    #----------------------------------------
    
    *.mecHost.eNBList = "gNodeB1"
    
    
    #-------ETCI MES Services:---------------
    
    *.mecHost.mecPlatform.numMecServices = 1
    *.mecHost.mecPlatform.mecService[0].typename = "LocationService"
    *.mecHost.mecPlatform.mecService[0].localAddress = "mecHost.mecPlatform" #da cambiare!!
    *.mecHost.mecPlatform.mecService[0].localPort = 10020
    
    *.mecHost.mecPlatform.mecService[0].rng-0 = 0 # request service time
    *.mecHost.mecPlatform.mecService[0].rng-1 = 1 # subscription service time
    *.mecHost.mecPlatform.mecService[0].requestServiceTime = 100us
    *.mecHost.mecPlatform.mecService[0].subscriptionServiceTime = 11us
    
    *.mecHost.mecPlatform.serviceRegistry.localAddress = "mecHost.mecPlatform" #da cambiare!!
    *.mecHost.mecPlatform.serviceRegistry.localPort = 10021
    
    *.mecHost.mecPlatform.serviceRegistry.rng-0 = 0 # request service time
    *.mecHost.mecPlatform.serviceRegistry.rng-1 = 1 # subscription service time
    
    
    # ME Host connected
    **.gNodeB*.mecHost = "mecHost"
    # ----------------------------------------------------------------------------- #
    
    # ----------------------------------------------------------------------------- #
    
    [Config Uniforward_003]
    network = simu5g.simulations.NR.mec.singleMecHost.singleMecHost
    *.mecHost.mecPlatformManager.mecOrchestrator = "mecOrchestrator"
    **.mecOrchestrator.mecHostList = "mecHost"
    
    **.numUes = 3
    
    *.ue[*].app[1].**.scalar-recording = true
    *.ue[*].app[1].**.vector-recording = true
    
    **.ping_sender_num = 3
    **.ping_receiver_num = 1
    
    [Config Uniforward_030]
    network = simu5g.simulations.NR.mec.singleMecHost.singleMecHost
    *.mecHost.mecPlatformManager.mecOrchestrator = "mecOrchestrator"
    **.mecOrchestrator.mecHostList = "mecHost"
    
    **.numUes = 30
    
    **.ping_sender_num = 30
    **.ping_receiver_num = 1
    
    # ----------------------------------------------------------------------------- #
    #...#
    # ----------------------------------------------------------------------------- #
    

    I wonder if there is anything I got wrong in configuration or actual codes which makes the curve of the delay/numUEs so flat? I'm new to the telecommunication area so I could really not figure out where is the problem, any suggestion would be helpful to me!

    Thanks for your help!

    opened by monologconnor 13
  • Maximum number of vehicles that singleMecHost can support?

    Maximum number of vehicles that singleMecHost can support?

    I modified the number of cars by **.numCars = 100 in simulations\NR\mec\singleMecHost\omnetpp.ini. Then I face some error, since any value greater than 100 gives an error, I searched for 100, and adjusted *.mecHost.maxMECApps.

    Next, I tried to adjust the number of cars, I could reach 266, but then it would report an error, I began to suspect that it was the IP address, but since 266 is greater than 255, it might be another problem.

    could you please give me some advice? I want to run **.numCars = 400 by one station I also add **.hasRNISupport = false

    opened by daohu527 13
  • Multiple MEC applications recursively

    Multiple MEC applications recursively

    Hello,

    I'm testing an scenario with multiple MEC hosts and a couple of MEC Orchestrators and I need to instantiate a high amount of MEC applications. For a few number of Apps, I would just create an app descriptor in JSON with the characteristics of the App and then import it with the rest of the app's parameters:

    *.car[*].app[1].typename = "UEWarningAlertApp"
    *.car[*].app[1].deviceAppAddress = "car["+string(ancestorIndex(1))+"]"
    *.car[*].app[1].deviceAppPort = 4500
    *.car[*].app[1].startTime = 1s										
    *.car[*].app[1].stopTime = 30s										
    

    However, doing this for more than a handful of apps is tedious and error-prone. I was planning on doing it recursively, creating a loop cycle and changing the app parameters and start-stop time for each of the apps, but I don't think this can be done in the .ini file.

    Could you give me some advice on how to instantiate a high number of MEC apps recursively please?

    Thanks a lot for your time and answers.

    opened by juansebastiani2cat 11
  • Makefile error by building Simu5g

    Makefile error by building Simu5g

    Hello all,

    I am Building Simu5g on Windows10, OMNeT++6.0, and INET4.4.0. I have the same issue as #6 and #54. I tried the first two options to install Simu5g:

    1. Download and install Simu5G directly from the OMNeT++ IDE and
    2. Download the source code and build Simu5G manually I also tried to clone the code from the GitHub repository. But, I still have the makefile errors. Capture I have tried both solutions suggested in #6, but they didn't work.

    Thank you in advance for your help.

    Best regards, Parva

    opened by Parvaaaa 10
  • bandwidth parameter

    bandwidth parameter

    dear author I want to know where to set the subbandwidth parameters of the eNodeB and gNodeB; I want to set different bandwidth for two types of BS; for example, *.carrierAggregation.componentCarrier[0].carrierFrequency=2GHz *.carrierAggregation.componentCarrier[0].numBands=50 *.carrierAggregation.componentCarrier[1].carrierFrequency=28GHz *.carrierAggregation.componentCarrier[1].numBands=50 and Each vehicle(0) can obtain 10Mhz bandwidth; Each vehicle(1) can obtain 100Mhz bandwidth;

    opened by wggegshjg 9
  • Vector results of CBR Application contains only one value at each **.app[*]

    Vector results of CBR Application contains only one value at each **.app[*]

    Dear Authors,

    I have tried several times to get vector values by simulating "CbrSender" and "CbrReceiver" at my application layer. I was unable to get continuous values of cbrGeneratedThroughtput:vector and cbrReceivedThroughtput:vector. But cbrFrameDelay:vector has continues values. I am a new user of Simu5G therefore I cannot provide any detailed information. I have simulated CBR mentioned in: dualConnectivity_multicell demo

    Surya

    opened by suryapusapati 9
  • Make error in Simu5G Build

    Make error in Simu5G Build

    Hi, I've been trying to build simu5G over the OMNeT++ and INET Framework. I was able to successfully install those two but I'm having issues when I try to build Simu5G over them and I don't understand why those errors occur. Posting a screenshot here, please guide me with this. Screenshot 2022-03-24 at 3 16 13 AM

    There were about a lot of errors of the same nature. I'm doing this on a MAC OS 12.3 Intel Silicon Chip. I have also tried on windows 11 earlier, and was stuck at the same stage where SImu5G build was failing. Maybe not the same error though.

    opened by kattungakrish 9
  • MEC latency benchmark

    MEC latency benchmark

    Hi thanks for your good work. I recently tested 2 examples under simu5g, but I am not sure about the latency of 5G MEC is correct.

    Test

    I tested in the following two cases

    simulations\NR\mec\multiMecHost
    simulations\NR\mec\singleMecHost
    

    and the 5G MEC latency is Snipaste_2022-03-29_09-13-37

    In average, the upstream delay is 10ms, while the downstream is 5ms

    Question

    So my questions are

    1. Why are the delays different for upstream and downstream?
    2. Packet size doesn't seem to have a significant effect on latency, is this normal?
    3. When I adjust the message frequency, the MEC MAC layer will report an error, why is this happening?

    Any suggestions would be greatly appreciated!

    opened by daohu527 7
  • Couldn't make simu5G

    Couldn't make simu5G

    Whenever I make Simu5G, it always report error: unable to load'../out/clang-debug/src/libsimu5g_dbg.dll.a': No such file or directory,my omnetpp version is 6.0pre11 and inet version is 4.3.2. image

    opened by SOANykun 7
  • NR Multicast Not Working

    NR Multicast Not Working

    Hi All,

    First of all I realize that I'm probably making a mistake somewhere but I can't figure out why.

    I have the following simulation: omnetpp.ini

    [General]
    image-path=../../../images
    output-scalar-file-append = false
    sim-time-limit=20s
    **.routingRecorder.enabled = false
    
    ############### Statistics ##################
    output-scalar-file = ${resultdir}/${configname}/${repetition}.sca
    output-vector-file = ${resultdir}/${configname}/${repetition}.vec
    seed-set = ${repetition}
    **.vector-recording = false
    
    ################ Mobility parameters #####################
    # *
    
    **.mobility.constraintAreaMaxX = 1000m
    **.mobility.constraintAreaMaxY = 1000m
    **.mobility.constraintAreaMinX = 0m
    **.mobility.constraintAreaMinY = 0m
    **.mobility.constraintAreaMinZ = 0m
    **.mobility.constraintAreaMaxZ = 0m
    **.mobility.initFromDisplayString = false
    
    ############### Number of Resource Blocks ################
    **.numBands = 50 # this value should be kept equal to the number of RBs
    
    ############### Transmission Power ##################
    **.ueTxPower = 26
    **.eNodeBTxPower = 40
    **.targetBler = 0.01
    **.blerShift = 5  
    
    ############### IPv4 configurator config #################
    *.configurator.config = xmldoc("./demo.xml")
    
    
    #------------------------------------#
    # Config Standalone
    #
    # Topology configuration for the exemplary scenario for NR Standalone deployment
    #
    [Config Standalone]
    network = simu5g.simulations.NR.networks.SingleCell_Standalone
    sim-time-limit=20s
    
    ############### e/gNodeB configuration #################
    *.gnb.mobility.initialX = 450m
    *.gnb.mobility.initialY = 300m
    
    ############## UE configuration ##################
    *.numUe = 3
    
    # connect the UE's NIC to the corresponding serving eNB
    *.ue[*].macCellId = 1
    *.ue[*].masterId = 1
    *.ue[*].nrMacCellId = 1
    *.ue[*].nrMasterId = 1
    
    # UE position
    *.ue[*].mobility.initialX = 450m
    *.ue[*].mobility.initialY = 350m
    #------------------------------------#
    
    
    [Config UdpSend]
    extends=Standalone
    
    # one UDP application for each user
    *.ue[*].numApps = 1
    
    
    # the amount of UDP applications on server should be equal to (numUEs)*(ue[*].numApps) 
    *.server.numApps = 1
    
    #============= Application Setup =============
    *.server.app[0].typename = "inet.applications.udpapp.UdpEchoApp"
    *.server.app[0].localPort = 1000
    
    *.ue[1..2].app[0].typename = "inet.applications.udpapp.UdpEchoApp"
    *.ue[1..2].app[0].localPort = 1000
    
    *.ue[0].app[0].typename = "ether_tic_toc.apps.udp_send.UdpSendApp"
    *.ue[0].app[0].destAddress = "224.0.0.10" 
    *.ue[0].app[0].destPort = 1000
    #------------------------------------#
    

    With the following network config: demo.xml

    <config>
        <interface hosts='*' address='10.x.x.x' netmask='255.x.x.x'/>
        <multicast-group hosts="ue[*]" interfaces="cellular" address="224.0.0.10"/>
    </config>
    

    And ether_tic_toc.apps.udp_send.UdpSendApp is a UDP app that sends a single packet to the port and destination

    But When I run it it crashes at LteAmc::existTxParams() with cRuntimeError("LteAmc::existTxparams(): Unrecognized direction")

    Then I tried adding

    **.usePreconfiguredTxParams = true
    **.d2dCqi = 7
    **.amcMode = "D2D"
    

    to my config.ini But then it looks like the packet is never sent or received

    I'm using the latest commit of Simu5G, INET 4.4.0 and Omnet 6

    opened by JFrandon 6
  • get UserControlInfo at the application layer

    get UserControlInfo at the application layer

    Hello,

    I model a learning environment for UDP data transmission between dynamic UEs and a static server. I would like to be able to know the channel information at the application layer, i.e., inside my UDP app. As far as I could get, the only broadcasted statistics so far are CQI and SINR signals from LtePhyand LteNicmodules. However, to compute e.g., SINR in LteRealisticChannelModel, one needs to pass an LteAirFrame and UserControlInfo as parameters, which are obtained in handleAirFrame methods from LtePhy* modules via getting the LteAirFrame tag.

    Unfortunately, as one can see, this UserControlInfo object exists only within the scope of ::handleAirFrame and is published only in a form of CQI signal. I wonder if there is a way to get this object or at least its fields somehow without extending LtePhyUe module? Thanks!

    Best Nikita

    opened by gehirndienst 0
  • Use simu5g to obtain vehicle speed information, and there is a flash back phenomenon

    Use simu5g to obtain vehicle speed information, and there is a flash back phenomenon

    When I use this function to obtain the vehicle location information, it can operate normally: veins::VeinsInetMobility* vehiclemobility = dynamic_castveins::VeinsInetMobility*(getParentModule()->getSubmodule("mobility", 0)); When I add this function to obtain the vehicle speed information, the simulation flashback occurs: veins::TraCICommandInterface::Vehicle* vehicleCommand = vehiclemobility->getVehicleCommandInterface();

    opened by hezhongyi 2
  • Question about retransmission

    Question about retransmission

    Hello, I was debugging the source code when i found that the scheduler's method "scheduler->updateSchedulingInfo()" contains no code. As this method is called after scheduling scheduleRacRequests and scheduleRetransmissions, I guess Simu5g model retransmission in other bands which is not used by current carrier, Am I right?

    opened by Jiacheng188 1
  • 【NR Cars】Airframe can not be received by vehicle in v2v communication

    【NR Cars】Airframe can not be received by vehicle in v2v communication

    Hello, dear author. There occur some problems when i'm using the version 1.2.1 with the simulation-NR-car packet. I copied the code I rewrote in omnetpp.ini(Figure1). It works well in version 1.1. But the current phenomenon of vehiclesender is that a message can be emitted but it cannot reach the place where it is received(FIgure 2,3). multicast1 multicast2 multicast3 Something similar happened when I tried to broadcast a message. The frames are almostly the one in the Simulation examples (D2DMulticast). I change the destAddress to 10.255.255.255, and mask the Multicast part in Sender.cc and Receiver.cc. broadcast1 broadcast2 Hope you can kindly reply to the above two questions and provide some suggestions for implementing broadcast messages. Thank you very much.

    opened by sharon1996n 0
Releases(v1.2.1)
  • v1.2.1(Jul 19, 2022)

    5G NewRadio and LTE/LTE-A user-plane simulation model.

    Version: 1.2.1

    This release is compatible with OMNeT++ 6.0 and INET 4.4.0. Tested on Ubuntu 20.04.

    This minor release includes:

    • modifications to support the latest versions of OMNeT++ 6.0 and INET v4.4.0 (many thanks to Prof. Lars Wischhof, Munich University of Applied Sciences, for his contribution)
    • some refactoring of simulation and emulation folders
    • bug fixing
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Aug 30, 2021)

    5G NewRadio and LTE/LTE-A user-plane simulation model.

    Version: 1.2.0

    This release is compatible with OMNeT++ 6.0 (pre10 and pre11) and INET 4.3.2. Tested on:

    • Ubuntu 16.04, 18.04 & 20.04;
    • macOS Catalina;
    • Windows 7.

    This release includes:

    • Modelling of ETSI MEC entities (thanks to Alessandro Noferi, University of Pisa);
    • Support to real-time emulation capabilities (Linux OS only);
    • Modelling of background cells and background UEs for larger scale simulations and emulations;
    • Several bug fixes.
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Apr 16, 2021)

    5G NewRadio and LTE/LTE-A user-plane simulation model.

    Version: 1.1.0

    This release is compatible with OMNeT++ 5.6.2 and INET 4.2.2.

    Tested on:

    • Ubuntu 16.04, 18.04 & 20.04;
    • macOS Catalina;
    • Windows 7.
    Source code(tar.gz)
    Source code(zip)
Owner
Università di Pisa
https://unipisa.github.io/
Università di Pisa
Data Plane Development Kit

DPDK is a set of libraries and drivers for fast packet processing. It supports many processor architectures and both FreeBSD and Linux. The DPDK uses

DPDK 2.2k Dec 29, 2022
Client Server Simulation with FIFOs in C (Named Pipes)

Client-Server-Sim-in-C Client Server Simulation with FIFOs in C (Named Pipes) There are a number of ways to enable inter-process communication i.e Soc

Yusuf Ghodiwala 1 Nov 24, 2021
Login and send instagram direct message to any user ;)

DM-THIS-USER Very simple instagram tool,The idea is not in the tool, but in how to deal with the C language, especially with the openssl library and c

0xDADDY 6 May 14, 2022
SixtyFPS is a toolkit to efficiently develop fluid graphical user interfaces for any display: embedded devices and desktop applications

SixtyFPS is a toolkit to efficiently develop fluid graphical user interfaces for any display: embedded devices and desktop applications. We support multiple programming languages, such as Rust, C++, and JavaScript.

SixtyFPS 5.5k Jan 2, 2023
mTCP: A Highly Scalable User-level TCP Stack for Multicore Systems

README mTCP is a highly scalable user-level TCP stack for multicore systems. mTCP source code is distributed under the Modified BSD License. For more

null 1.8k Dec 27, 2022
GNOME Shell provides core user interface functions for the GNOME 3 desktop

GNOME Shell GNOME Shell provides core user interface functions for the GNOME 3 desktop, like switching to windows and launching applications. GNOME Sh

Muqtadir 3 Oct 18, 2021
libRocket - The HTML/CSS User Interface library

libRocket - The HTML/CSS User Interface Library http://librocket.com (!!! malicious domain !!!, last checked 23/feb/2020) libRocket is the C++ user in

null 1.1k Dec 31, 2022
Triton Python and C++ client libraries and example, and client examples for go, java and scala.

Triton Client Libraries and Examples To simplify communication with Triton, the Triton project provides several client libraries and examples of how t

Triton Inference Server 228 Jan 5, 2023
Encapsulates the two protocols of OpenVpn and Ikev2, you only need to enter the server IP and port number to realize the connection and status display, and the specific situation of the connection can be displayed at the same time。

NewVpnCore 封装了OpenVpn和Ikev2两种协议,只需要输入服务器IP和端口号即可实现连接和状态显示,同时可以显示连接的具体情况。 UniteVpn Core(第一版) 1. 模块说明 unitevpn:封装了vpn的操作和统一不同协议信息的模块 ikev2:IKEV2协议的源码 op

ZFashion 3 Jun 8, 2022
Like libevent and libuv, libhv provides event-loop with non-blocking IO and timer, but simpler api and richer protocols.

中文版 Intro Like libevent, libev, and libuv, libhv provides event-loop with non-blocking IO and timer, but simpler api and richer protocols. Features cr

ithewei 5k Jan 4, 2023
🌱Light and powerful C++ web framework for highly scalable and resource-efficient web application. It's zero-dependency and easy-portable.

Oat++ News Hey, meet the new oatpp version 1.2.5! See the changelog for details. Check out the new oatpp ORM - read more here. Oat++ is a modern Web F

Oat++ 6k Jan 4, 2023
Ole Christian Eidheim 741 Dec 27, 2022
A very simple, fast, multithreaded, platform independent HTTP and HTTPS server and client library implemented using C++11 and Boost.Asio.

A very simple, fast, multithreaded, platform independent HTTP and HTTPS server and client library implemented using C++11 and Boost.Asio. Created to be an easy way to make REST resources available from C++ applications.

Ole Christian Eidheim 2.4k Dec 23, 2022
Cross-platform, efficient, customizable, and robust asynchronous HTTP/WebSocket server C++14 library with the right balance between performance and ease of use

What Is RESTinio? RESTinio is a header-only C++14 library that gives you an embedded HTTP/Websocket server. It is based on standalone version of ASIO

Stiffstream 924 Jan 6, 2023
Ultra fast and low latency asynchronous socket server & client C++ library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and 10K connections problem solution

CppServer Ultra fast and low latency asynchronous socket server & client C++ library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and

Ivan Shynkarenka 958 Jan 3, 2023
DNS and Target HTTP History Local Storage and Search

dooked DNS and Target HTTP History Local Storage and Search Installation Download Boost Library from the official website Extract the library into any

Michael Skelton 60 Oct 31, 2022
ASN intelligence information (IP to ASN mapping) collected and distributed in open source and transparent way

ASN Intelligence The main goal of this project to retrieve information required to map IP address to ASN number in open source and transparent way. Wh

Pavel Odintsov 60 Jun 27, 2021
This repo contains Direct3D 9, Direct3D 10, a few Direct3D 11, and DirectSound C++ samples from the legacy DirectX SDK updated to build using the Windows 10 SDK and the Microsoft.DXSDK.D3DX NuGet package

DirectX SDK Legacy Samples This repo contains Direct3D 9, Direct3D 10, a few Direct3D 11, and DirectSound samples that originally shipped in the legac

Chuck Walbourn 44 Jan 2, 2023