Facebook
From Meraj, 1 Month ago, written in C++.
Embed
Download Paste or View Raw
Hits: 154
  1. //.ned
  2.  
  3. //IIUC_DWIP_ELITE
  4. // DATE: 11/02/2024
  5.  
  6. simple IIUC_DWIP_ELITE_node
  7. {
  8.     parameters:
  9.      @signal[arrival](type="long");
  10.   @statistic[hopCount](title="hop count"; source="arrival"; record=vector,stats; interpolationmode=none);
  11.   @display("i=block/routing");
  12.      
  13.     gates:
  14.         inout gate[];
  15. }
  16.  
  17. network IIUC_DWIP_ELITE_net
  18. {
  19.     parameters:
  20.         @figure[description](type=text; pos=5,20; font=,,bold;
  21.       text="Random routing example - displaying last hop count");
  22.      @figure[lasthopcount](type=text; pos=5,35; text="last hopCount: N/A");
  23.     types:
  24.         channel Delay extends ned.DelayChannel {
  25.             delay = 100ms;
  26.     }
  27.     submodules:
  28.         meraj[10]: IIUC_DWIP_ELITE_node {
  29.             @display("i=block/socket");
  30.         }
  31.     connections:
  32.         meraj[0].gate++ <-->   Delay <--> meraj[1].gate++;
  33.         meraj[1].gate++ <-->   Delay <--> meraj[2].gate++;
  34.         meraj[1].gate++ <-->   Delay <--> meraj[4].gate++;
  35.         meraj[3].gate++ <-->   Delay <--> meraj[4].gate++;
  36.         meraj[4].gate++ <-->   Delay <--> meraj[5].gate++;
  37.         meraj[5].gate++ <-->   Delay <--> meraj[6].gate++;
  38.         meraj[5].gate++ <-->   Delay <--> meraj[7].gate++;
  39.         meraj[6].gate++ <-->   Delay <--> meraj[7].gate++;
  40.         meraj[6].gate++ <-->   Delay <--> meraj[8].gate++;
  41.         meraj[7].gate++ <-->   Delay <--> meraj[9].gate++;
  42.         meraj[8].gate++ <-->   Delay <--> meraj[9].gate++;      
  43. }
  44.  
  45. //.cc
  46.  
  47. /* IIUC_DWIP_ELITE.cc
  48.    Created on: Feb 11, 2024
  49.    Author: DELL  */
  50.  
  51. #include <stdio.h>
  52. #include <string.h>
  53. #include <omnetpp.h>
  54. #include "IIUC_DWIP_ELITE_m.h"
  55. using namespace omnetpp;
  56.  
  57.     class IIUC_DWIP_ELITE_node : public cSimpleModule
  58.     {
  59.     private:
  60.         simsignal_t arrivalSignal;
  61.  
  62.       protected:
  63.         virtual IIUC_DWIP_ELITE *generateMessage();
  64.         virtual void forwardMessage(IIUC_DWIP_ELITE *msg);
  65.         virtual void initialize() override;
  66.         virtual void handleMessage(cMessage *msg) override;
  67.     };
  68.  
  69.     Define_Module(IIUC_DWIP_ELITE_node);
  70.  
  71.     void IIUC_DWIP_ELITE_node::initialize()
  72.     {
  73.         arrivalSignal = registerSignal("arrival");
  74.  
  75.         // Module 0 sends the first message
  76.  
  77.         if (getIndex() == 0) {
  78.  
  79.             // Boot the process scheduling the initial message as a self-message.
  80.             IIUC_DWIP_ELITE *msg = generateMessage();
  81.             scheduleAt(0.0, msg);
  82.         }
  83.     }
  84.  
  85.     void IIUC_DWIP_ELITE_node::handleMessage(cMessage *msg)
  86.     {
  87.         IIUC_DWIP_ELITE *ttmsg = check_and_cast<IIUC_DWIP_ELITE *>(msg);
  88.  
  89.         if (ttmsg->getDestination() == getIndex()) {
  90.             int hopcount = ttmsg->getHopCount();
  91.                        // send a signal
  92.               emit(arrivalSignal, hopcount);
  93.  
  94.  
  95.  
  96.  
  97.             if (hasGUI()) {
  98.                     char label[50];
  99.                     // Write last hop count to string
  100.                     sprintf(label, "last hopCount = %d", hopcount);
  101.                     // Get pointer to figure
  102.                     cCanvas *canvas = getParentModule()->getCanvas();
  103.                     cTextFigure *textFigure = check_and_cast<cTextFigure*>(canvas->getFigure("lasthopcount"));
  104.                     // Update figure text
  105.                     textFigure->setText(label);
  106.                 }
  107.  
  108.                 EV << "Message " << ttmsg << " arrived after " << hopcount << " hops.n";
  109.                 bubble("ARRIVED, starting new one!");
  110.  
  111.                 delete ttmsg;
  112.  
  113.                 // Generate another one.
  114.                 EV << "Generating another message: ";
  115.                 IIUC_DWIP_ELITE *newmsg = generateMessage();
  116.                 EV << newmsg << endl;
  117.                 forwardMessage(newmsg);
  118.         }
  119.  
  120.         else {
  121.             // We need to forward the message.
  122.             forwardMessage(ttmsg);
  123.         }
  124.     }
  125.  
  126.     IIUC_DWIP_ELITE *IIUC_DWIP_ELITE_node::generateMessage()
  127.     {
  128.         // Produce source and destination addresses.
  129.         int src = getIndex();  // our module index
  130.         int n = getVectorSize();  // module vector size
  131.         int dest = intuniform(0, n-2);
  132.         if (dest >= src)
  133.             dest++;
  134.  
  135.         char msgname[20];
  136.         sprintf(msgname, "tic-%d-to-%d", src, dest);
  137.  
  138.         // Create message object and set source and destination field.
  139.         IIUC_DWIP_ELITE *msg = new IIUC_DWIP_ELITE(msgname);
  140.         msg->setSource(src);
  141.         msg->setDestination(dest);
  142.         return msg;
  143.     }
  144.  
  145.     void IIUC_DWIP_ELITE_node::forwardMessage(IIUC_DWIP_ELITE *msg)
  146.     {
  147.         // Increment hop count.
  148.         msg->setHopCount(msg->getHopCount()+1);
  149.  
  150.         // Same routing as before: random gate.
  151.         int n = gateSize("gate");
  152.         int k = intuniform(0, n-1);
  153.  
  154.         EV << "Forwarding message " << msg << " on gate[" << k << "]n";
  155.         send(msg, "gate$o", k);
  156.     }
  157.  
  158. //.ini
  159. [General]
  160. network = IIUC_DWIP_ELITE_net
  161. record-eventlog = true
  162. #**.meraj[*].hopCount.result-recording-modes = +scala
  163. **.meraj[*].hopCount.result-recording-modes = +histogram
  164. **.meraj[*].hopCount.result-recording-modes = -vector
  165.  
  166. //.msg
  167. message IIUC_DWIP_ELITE
  168. {
  169.     int source;
  170.     int destination;
  171.     int hopCount = 0;
  172. }