I have made two different TCP Applications in Omnet++, one is TCPBasicClientApp
and other is TCPGenericServerApp
. TCP client application is successfully sending a GenericAppMsg
through TCP Protocol. Once the message is received on the Server Side (with a specific replyLength
) it is sending it back to the client side through SendBack()
method (also mentioned in the inet example application).
My question is, how to receive this message back on the client side?
Here is the omnet.ini file code, for this transfer,
The Client Side,
**.host[0].numTcpApps = 1
**.host[0].tcpApp[0].typename = "ReputationAlgorithmApplication"
**.host[0].tcpApp[0].localAddress = ""
**.host[0].tcpApp[0].localPort = -1
**.host[0].tcpApp[0].connectAddress = "host[3]"
**.host[0].tcpApp[0].connectPort = 2000
**.host[0].tcpApp[0].dataTransferMode = "object"
The Server Side,
**.host[3].numTcpApps = 1
**.host[3].tcpApp[*].typename = "ReputationServerApplication"
**.host[3].tcpApp[*].localAddress = "host[3]"
**.host[3].tcpApp[*].localPort = 2000
Here is the sendBack method on Server Side,
void ReputationServerApplication::sendBack(cMessage *msg) {
cPacket *packet = dynamic_cast<cPacket *>(msg);
if (packet) {
msgsSent++;
bytesSent += packet->getByteLength();
emit(sentPkSignal, packet);
EV_INFO << "sending \"" << packet->getName() << "\" to TCP, "
<< packet->getByteLength() << " bytes\n";
} else {
EV_INFO << "sending \"" << msg->getName() << "\" to TCP\n";
}
DummyMessageForReputation *msgDum =
dynamic_cast<DummyMessageForReputation *>(msg);
std::cout << "\n Tested: Message with the string "
<< msgDum->getMessageString() << " is sending back to "
<< msgDum->getNodeName();
send(msgDum, "tcpOut");
}
Any help would be appreciated.
--
You received this message because you are subscribed to the Google Groups "OMNeT++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to omnetpp+u...@googlegroups.com.
Visit this group at http://groups.google.com/group/omnetpp.
For more options, visit https://groups.google.com/d/optout.
IPv4ControlInfo it is used between IP and TCP/UDP.
The TCP applications use “callbacks”, the callback that process the received data in the client is socketDataArrived()
In the particular case of TCPBasicClientApp is the method
void TCPBasicClientApp::socketDataArrived(int connId, void *ptr, cPacket *msg, bool urgent)
Packet delay due to the buffer is, usually, in the models of inet, due to the buffers in the link layer.
You should change the buffers in the link layer.
De: omn...@googlegroups.com [mailto:omn...@googlegroups.com] En nombre de sarfara...@iqra.edu.pk
Enviado el: jueves, 17 de septiembre de 2015 16:46
Para: OMNeT++ Users <omn...@googlegroups.com>
CC: aari...@hotmail.com
Asunto: Re: [Omnetpp-l] Re: How to receive a message through TCPBasicClientApp in omnet++?
Hi Alfonso Ariza Quintana ,
I have to make a network of TCP and UDP based network ,....
I want to change the router buffer size and find jitter and end to end delay..
Kindly tell which inet example i may use..
Waiting ur reply..
Hi Alfonso Ariza,
I tried hard but I think I can't make a network.. network of TCP and UDP based communication ,....
I want to change the router buffer size and find jitter and end to end delay for only UDP voice and video traffic. and in same model TCP based traffic is flow.
Waiting ur reply..
In a wireless communication, the packets are, usually stored in the link layer mac buffers, the ip layer can send packets to the link layer with higher speed than the link layer, due to this, the packets are stored, mainly, in the link layer buffers. If you want to study the performance of the protocols in function of the buffer size in a wireless environment, you need to modify the buffer size in the link layer (wifi)
De: omn...@googlegroups.com [mailto:omn...@googlegroups.com] En nombre de Sarfaraz Ahmed
Enviado el: sábado, 19 de septiembre de 2015 6:19
Para: omn...@googlegroups.com
CC: aari...@hotmail.com
Asunto: Re: [Omnetpp-l] Re: How to receive a message through TCPBasicClientApp in omnet++?
Hi Alfonso Ariza,
--
I want to use fix network... not wireless network.
Even in fixed network, most of the packet are stored in the link layer queues
There are several types or routers, depending of the link layer technology, the packets are stored in different queues
If the link layer is optics with terabytes, the packets are stored in the IP layer because the link layer can send packets a higher speed than the ip layer can process.With other technologies, the IP layer can switch the packets the packets are stored in the link layer.
With de default configuration in the simulator, the process delay in the IP layer is 0, this implies than doesn’t matter the bit rate of the link layer, the packets will be stored in the link layer queues.
Thanks so much Alfonso.
Please tell which example, I have to take for both TCP and UDP traffic...
and how to make it.
waiting ur reply...
You can find several examples in inet framework
Directory examples/inet
Thanks again..
With this information it is difficult to determine the problem, usually the error message offer some information about the problem
De: omn...@googlegroups.com [mailto:omn...@googlegroups.com] En nombre de Sarfaraz Ahmed
Enviado el: miércoles, 30 de septiembre de 2015 17:35
Para: omn...@googlegroups.com
Asunto: Re: [Omnetpp-l] Re: How to receive a message through TCPBasicClientApp in omnet++?
Hi Alfonso Ariza Quintana and Osama ,
I have tried again and again..but I think I may not create a fix network of (TCP and UDP based traffic in one model),
and then find the affect on jitter and end to end delay by varying buffer size.
I took example of nclient, udp brust, tcp sack..they are working normal, but whenever i modify ini or ned file of any example they gave errors.
I am too confused who to remove error ...
Please Please give me complete idea so that i may make network without error..
I will remain thankful;
Thanks
Waiting ur reply..
Waiting ur reply..
On Tue, Sep 22, 2015 at 10:38 PM, <sarfara...@iqra.edu.pk> wrote:
Thanks so much....I appreciate ur help...
Thanks again..
--
You received this message because you are subscribed to the Google Groups "OMNeT++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to omnetpp+u...@googlegroups.com.
Visit this group at http://groups.google.com/group/omnetpp.
For more options, visit https://groups.google.com/d/optout.
##########################################################################
please suggest.... what will I do..
from where I have to start and end ...
please send steps... or any help...
I am thankful for ur help..
Please tell how to configure buffer size in link layer..
please send ini file example
Hi Alfonso Ariza Quintana ,I have to make a network of TCP and UDP based network ,....I want to change the router buffer size and find jitter and end to end delay..Kindly tell which inet example i may use..Waiting ur reply..
--
You received this message because you are subscribed to a topic in the Google Groups "OMNeT++ Users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/omnetpp/XoOSPs3RkJM/unsubscribe.
To unsubscribe from this group and all its topics, send an email to omnetpp+u...@googlegroups.com.
It depends of the mac interface that you use, in the basic Ethernet implementation is
**.mac.txQueueLimit = 100
For example, the value by default is 1000
https://github.com/aarizaq/inetmanet-2.0/blob/inetmanet-2.2/src/linklayer/ethernet/EtherMAC.ned
De: omn...@googlegroups.com [mailto:omn...@googlegroups.com] En nombre de Sarfaraz Ahmed
Enviado el: lunes, 12 de octubre de 2015 17:55
Para: omn...@googlegroups.com
CC: aari...@hotmail.com
Asunto: Re: [Omnetpp-l] Re: How to receive a message through TCPBasicClientApp in omnet++?
Please tell how to configure buffer size in link layer..
--
You received this message because you are subscribed to the Google Groups "OMNeT++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to omnetpp+u...@googlegroups.com.
TCP is a client/server protocol, you have clients but you don’t have servers
The clients can’t open sessions and if they cannot open sessions they cannot transmit
You use EthG1 to connect the host12, no etheline.
If you want to measure in both directions you need two, between sender and receiver.
The end to end delay is already recorded in the sca file
De: omn...@googlegroups.com [mailto:omn...@googlegroups.com] En nombre de Sarfaraz Ahmed
Enviado el: lunes, 26 de octubre de 2015 17:58
Para: omn...@googlegroups.com
Asunto: Re: [Omnetpp-l] Re: How to receive a message through TCPBasicClientApp in omnet++?
Dear Sir Alfonso Ariza .....
kindly tell how to connect throughput meter ..in TCP and UDP based applications..
is throughput meter connected between sender and receiver or two throughput meter connected..one for sender and one for receiver..
??
please guide ..I want to measure end to end delay ...throughput and jitters...by varying buffer size,...
Please tell also how to configure link layer buffer for sender host ans receiver host..
you are the only one who helped me ...now you kind help is needed again..
Kindly send NED and ini file of one throughput meter..
Please Please..
kindly help..
You need to include between udpapp and udp modules, but it is necessary to modify the source code of ThruputMeter
void ThruputMeter::handleMessage(cMessage *msg)
{
updateStats(simTime(), PK(msg)->getBitLength());
send(msg, "out");
}
To
void ThruputMeter::handleMessage(cMessage *msg)
{
cPacket *pkt = dynamic_cast<cPacket *>(msg);
if (pkt)
updateStats(simTime(), pkt->getBitLength());
send(msg, "out");
Packet delay due to the buffer is, usually, in the models of inet, due to the buffers in the link layer.
You should change the buffers in the link layer.
It depends of the mac interface that you use, in the basic Ethernet implementation is
**.mac.txQueueLimit = 100
For example, the value by default is 1000
https://github.com/aarizaq/inetmanet-2.0/blob/inetmanet-2.2/src/linklayer/ethernet/EtherMAC.ned
............................................................................................................................................................
[General]
network = Sarfaraz
sim-time-limit = 180s
seed-0-mt = 5
**.configurator.networkConfiguratorModule = "configurator"
########VOIP#########(03sender,,,,1,2,3) and three receiver(18,17,16)########
**.udpType = "UDP"
**.Host1.numUdpApps = 1
**.Host2.numUdpApps = 1
**.Host3.numUdpApps = 1
**.Host4.numUdpApps = 1
**.Host5.numUdpApps = 1
**.Host6.numUdpApps = 1
**.Host13.numUdpApps = 1
**.Host14.numUdpApps = 1
**.Host15.numUdpApps = 1
**.Host16.numUdpApps = 1
**.Host17.numUdpApps = 1
**.Host18.numUdpApps = 1
# udp app configuration
**.Host1.udpApp[0].typename = "UDPBasicBurst"
**.Host1.udpApp[0].localPort = 200
**.Host1.udpApp[0].destPort = 200
**.Host1.udpApp[0].messageLength = 125B
**.Host1.udpApp[0].sendInterval = 0.5s
**.Host1.udpApp[0].destAddresses = "Host18"
**.mgmt.frameCapacity = 10
**.mac.maxQueueSize = 14
**.mac.rtsThresholdBytes = 3000B
**.mac.basicBitrate = 6Mbps # 24Mbps
**.mac.retryLimit = 7
**.mac.cwMinData = 31
**.Host18.udpApp[0].typename = "UDPBasicBurst"
**.Host18.udpApp[0].localPort = 200
**.Host18.udpApp[0].destPort = 200
**.Host18.udpApp[0].messageLength = 125B
**.Host18.udpApp[0].sendInterval = 0.5s
**.Host18.udpApp[0].burstDuration = 10s
**.Host18.udpApp[0].sleepDuration = 2s
**.Host18.udpApp[0].chooseDestAddrMode = "perBurst"
**.Host18.udpApp[0].destAddresses = "Host1"
**.Host1.udpApp[0].burstDuration = 10s
**.Host1.udpApp[0].sleepDuration = 2s
**.Host1.udpApp[0].chooseDestAddrMode = "perBurst"
**.Host2.udpApp[0].typename = "UDPBasicBurst"
**.Host2.udpApp[0].localPort = 200
**.Host2.udpApp[0].destPort = 200
**.Host2.udpApp[0].messageLength = 1250B
**.Host2.udpApp[0].sendInterval = 0.5s
**.Host2.udpApp[0].destAddresses = "Host17"
**.Host17.udpApp[0].typename = "UDPBasicBurst"
**.Host17.udpApp[0].localPort = 200
**.Host17.udpApp[0].destPort = 200
**.Host17.udpApp[0].messageLength = 1250B
**.Host17.udpApp[0].sendInterval = 0.5s
**.Host17.udpApp[0].burstDuration = 10s
**.Host17.udpApp[0].sleepDuration = 2s
**.Host17.udpApp[0].chooseDestAddrMode = "perBurst"
**.Host17.udpApp[0].destAddresses = "Host2"
**.Host2.udpApp[0].burstDuration = 10s
**.Host2.udpApp[0].sleepDuration = 2s
**.Host2.udpApp[0].chooseDestAddrMode = "perBurst"
**.Host3.udpApp[0].typename = "UDPBasicBurst"
**.Host3.udpApp[0].localPort = 200
**.Host3.udpApp[0].destPort = 200
**.Host3.udpApp[0].messageLength = 1250B
**.Host3.udpApp[0].sendInterval = 0.5s
**.Host3.udpApp[0].destAddresses = "Host16"
**.Host16.udpApp[0].typename = "UDPBasicBurst"
**.Host16.udpApp[0].localPort = 200
**.Host16.udpApp[0].destPort = 200
**.Host16.udpApp[0].messageLength = 1250B
**.Host16.udpApp[0].sendInterval = 0.5s
**.Host16.udpApp[0].burstDuration = 10s
**.Host16.udpApp[0].sleepDuration = 2s
**.Host16.udpApp[0].chooseDestAddrMode = "perBurst"
**.Host16.udpApp[0].destAddresses = "Host3"
**.Host3.udpApp[0].burstDuration = 10s
**.Host3.udpApp[0].sleepDuration = 2s
**.Host3.udpApp[0].chooseDestAddrMode = "perBurst"
###;;;;VideoStreaming,,,[03 client(4,5,6....) and 03 server(13,14,15....) ,,,,]>>>>
**.Host4.udpApp[0].typename = "UDPVideoStreamCli"
**.Host4.udpApp[0].serverAddress = "Host13"
**.Host4.udpApp[0].localPort = 210
**.Host4.udpApp[0].serverPort = 210
**.Host4.udpApp[0].startTime = 5s # uniform(5s, 5.01s)
**.Host13.udpApp[0].typename = "UDPVideoStreamSvr"
**.Host13.udpApp[0].videoSize = 10MiB
**.Host13.udpApp[0].localPort = 210
**.Host13.udpApp[0].sendInterval = 10ms
**.Host13.udpApp[0].packetLen = 100B
**.Host5.udpApp[0].typename = "UDPVideoStreamCli"
**.Host5.udpApp[0].serverAddress = "Host14"
**.Host5.udpApp[0].localPort = 191
**.Host5.udpApp[0].serverPort = 171
**.Host5.udpApp[0].startTime = 5s # uniform(5s, 5.01s)
**.Host14.udpApp[0].typename = "UDPVideoStreamSvr"
**.Host14.udpApp[0].videoSize = 10MiB
**.Host14.udpApp[0].localPort = 191
**.Host14.udpApp[0].sendInterval = 10ms
**.Host14.udpApp[0].packetLen = 100B
**.Host6.udpApp[0].typename = "UDPVideoStreamCli"
**.Host6.udpApp[0].serverAddress = "Host15"
**.Host6.udpApp[0].localPort = 181
**.Host6.udpApp[0].serverPort = 163
**.Host6.udpApp[0].startTime = 5s# uniform(6s, 5.07s)
**.Host15.udpApp[0].typename = "UDPVideoStreamSvr"
**.Host15.udpApp[0].videoSize = 10MiB
**.Host15.udpApp[0].localPort = 181
**.Host15.udpApp[0].sendInterval = 10ms
**.Host15.udpApp[0].packetLen = 100B
##############TCP####three client( 7,8,9...) and three server( 10 11 12.)
**.tcpType = "TCP"
**.Host7.numTcpApps = 1
**.Host8.numTcpApps = 1
**.Host9.numTcpApps = 1
**.Host10.numTcpApps = 1
**.Host11.numTcpApps = 1
**.Host12.numTcpApps = 1
**.Host7.tcpApp[0].typename = "TCPSessionApp" # FTP
**.Host7.tcpApp[0].sendBytes = 1MiB
**.Host7.tcpApp[0].active = true
**.Host7.tcpApp[0].localPort = 10021
**.Host7.tcpApp[0].connectAddress = "Host10"
**.Host7.tcpApp[0].connectPort = 10025
**.Host7.tcpApp[0].tOpen = 0s
**.Host7.tcpApp[0].tSend = 0s
**.Host7.tcpApp[0].tClose = 0s
**.Host7.tcpApp[0].sendScript = ""
**.Host10.tcpApp[0].typename = "TCPSinkApp"
**.Host10.tcpApp[0].localPort = 10089
**.Host8.tcpApp[0].typename = "TCPSessionApp" # FTP
**.Host8.tcpApp[0].sendBytes = 1MiB
**.Host8.tcpApp[0].active = true
**.Host8.tcpApp[0].localPort = 10020
**.Host8.tcpApp[0].connectAddress = "Host11"
**.Host8.tcpApp[0].connectPort = 10021
**.Host8.tcpApp[0].tOpen = 0s
**.Host8.tcpApp[0].tSend = 0s
**.Host8.tcpApp[0].tClose = 0s
**.Host8.tcpApp[0].sendScript = ""
**.Host11.tcpApp[0].typename = "TCPSinkApp"
**.Host11.tcpApp[0].localPort = 10026
**.Host9.tcpApp[0].typename = "TCPSessionApp" # FTP
**.Host9.tcpApp[0].sendBytes = 1MiB
**.Host9.tcpApp[0].active = true
**.Host9.tcpApp[0].localPort = 10020
**.Host9.tcpApp[0].connectAddress = "Host12"
**.Host9.tcpApp[0].connectPort = 10021
**.Host9.tcpApp[0].tOpen = 0s
**.Host9.tcpApp[0].tSend = 0s
**.Host9.tcpApp[0].tClose = 0s
**.Host9.tcpApp[0].sendScript = ""
**.Host12.tcpApp[0].typename = "TCPSinkApp"
**.Host12.tcpApp[0].localPort = 10021
**.eth[*].numOutputHooks = 1
**.eth[*].outputHook[*].typename = "ThruputMeter"
**.eth[*].numInputHooks = 1
**.eth[*].inputHook[*].typename = "ThruputMeter"
**.eth[*].mac.promiscuous = false
**.eth[*].mac.address = "auto"
**.eth[*].mac.duplexMode = true
package sarfaraz.simulations;
import inet.linklayer.IOutputQueue;
import inet.linklayer.queue.DropTailQueue;
import inet.nodes.ethernet.Eth10G;
import inet.nodes.ethernet.Eth10M;
//import inet.nodes.ipv6.StandardHost6;
//import inet.linklayer.IOutputQueue;
//
// TODO auto-generated type
//
//import ned.datarateChannel.ethline;
import ned.DatarateChannel;
import inet.linklayer.ethernet.EtherMAC;
import inet.networklayer.autorouting.ipv4.IPv4NetworkConfigurator;
import inet.nodes.ethernet.Eth1G;
import inet.nodes.inet.Router;
import inet.nodes.inet.StandardHost;
import inet.util.ThruputMeter;
network Sarfaraz
{
submodules:
Host1: StandardHost {
@display("p=83,120");
}
Host2: StandardHost {
@display("p=83,187");
}
router1: Router {
@display("p=158,159");
}
configurator: IPv4NetworkConfigurator {
@display("p=83,24");
}
router2: Router {
@display("p=307,89");
}
router4: Router {
@display("p=307,246");
}
router5: Router {
@display("p=442,159");
}
router3: Router {
@display("p=307,159");
}
Host12: StandardHost {
@display("p=546,259");
}
Host3: StandardHost {
@display("p=122,246");
}
Host4: StandardHost {
@display("p=261,32");
}
Host5: StandardHost {
@display("p=307,24");
}
Host6: StandardHost {
@display("p=350,32");
}
Host7: StandardHost {
@display("p=268,324");
}
Host8: StandardHost {
@display("p=311,331");
}
Host9: StandardHost {
@display("p=358,324");
}
Host10: StandardHost {
@display("p=417,259");
}
Host11: StandardHost {
@display("p=481,272");
}
router6: Router {
@display("p=558,152");
}
router7: Router {
@display("p=657,120");
}
Host13: StandardHost {
@display("p=469,89");
}
Host14: StandardHost {
@display("p=529,63");
}
Host15: StandardHost {
@display("p=597,77");
}
Host16: StandardHost {
@display("p=741,175");
}
Host17: StandardHost {
@display("p=741,120");
}
Host18: StandardHost {
@display("p=721,63");
}
connections:
Host1.ethg++ <--> Eth1G <--> router1.ethg++;
router1.ethg++ <--> Eth1G <--> Host2.ethg++;
Host3.ethg++ <--> Eth1G <--> router1.ethg++;
Host4.ethg++ <--> Eth1G <--> router2.ethg++;
Host5.ethg++ <--> Eth1G <--> router2.ethg++;
Host6.ethg++ <--> Eth1G <--> router2.ethg++;
Host7.ethg++ <--> Eth1G <--> router4.ethg++;
Host8.ethg++ <--> Eth1G <--> router4.ethg++;
Host9.ethg++ <--> Eth1G <--> router4.ethg++;
Host10.ethg++ <--> Eth1G <--> router5.ethg++;
Host11.ethg++ <--> Eth1G <--> router5.ethg++;
Host12.ethg++ <--> Eth1G <--> router5.ethg++;
Host14.ethg++ <--> Eth1G <--> router6.ethg++;
Host15.ethg++ <--> Eth1G <--> router6.ethg++;
Host13.ethg++ <--> Eth1G <--> router6.ethg++;
Host18.ethg++ <--> Eth1G <--> router7.ethg++;
Host17.ethg++ <--> Eth1G <--> router7.ethg++;
Host16.ethg++ <--> Eth1G <--> router7.ethg++;
//#######################Throughputmeter#########9######
router1.ethg++ <--> Eth10M <--> router3.ethg++;
router2.ethg++ <--> Eth10M <--> router3.ethg++;
router3.ethg++ <--> Eth10M <--> router4.ethg++;
router3.ethg++ <--> Eth10M <--> router5.ethg++;
router5.ethg++ <--> Eth10M <--> router6.ethg++;
router6.ethg++ <--> Eth10M <--> router7.ethg++;
}
You can set in the ini file different sizes for every one
**.Node1.**.txQueueLimit = 10
**.Node2.**.txQueueLimit = 100
**.Node[0..10].**.txQueueLimit = 10
**.Node[11..20].**.txQueueLimit = 100
Try to run the simulation and you can check in the IDE if the values are correctly read
You need to include between udpapp and udp modules, but it is necessary to modify the source code of ThruputMeter
void ThruputMeter::handleMessage(cMessage *msg)
{
updateStats(simTime(), PK(msg)->getBitLength()); send(msg, "out");
}
To
void ThruputMeter::handleMessage(cMessage *msg)
{
cPacket *pkt = dynamic_cast<cPacket *>(msg);
if (pkt)
updateStats(simTime(), pkt->getBitLength());
send(msg, "out");
}
The meter is incorrectly connected,
It should be connected between UDP and UDPApp, or between UDP and networkLayer, in both cases you need to modify the file StandardHost.ned
if you want to measure individual source throughputs
thrUp [numUdpApps]: ThruputMeter{
}
thrDown [numUdpApps]: ThruputMeter{
}
for i=0..numUdpApps-1 {
udpApp[i].udpOut --> thrDown.in;
thrDown.out --> udp.appIn++;
udpApp[i].udpIn <-- thrUp.out;
thrUp.out <-- udp.appOut++;
}
If you want to measure the aggregate traffic.
thrUp : ThruputMeter if hasUdp{
}
thrDown: ThruputMeter if hasUdp{
}
udp.ipOut --> thrDown.in if hasUdp;
thrDown.out --> networkLayer.transportIn++ if hasUdp;
udp.ipIn <-- thrUp.out if hasUdp;
thrUp.in <-- networkLayer.transportOut++ if hasUdp;
To unsubscribe from this group and stop receiving emails from it, send an email to omnetpp+unsubscribe@googlegroups.com.
Visit this group at http://groups.google.com/group/omnetpp.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "OMNeT++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to omnetpp+unsubscribe@googlegroups.com.
Visit this group at http://groups.google.com/group/omnetpp.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "OMNeT++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to omnetpp+unsubscribe@googlegroups.com.