ExtEthernetSocket¶
Package: inet.emulation.linklayer.ethernet
simple module ExtEthernetSocket
Provides a bidirectional connection to an Ethernet socket of the
host computer which is running the simulation. It writes the packets that arrive
on upperLayerIn gate to the specified real socket and sends out packets
that arrive from the real socket on the upperLayerOut gate.
The CAP_NET_RAW privilege is required for using ExtEthernetSocket.
The next commands add this privilege to opp_run, so all simulations have the CAP_NET_RAW privilege, and all simulations run with this privilege! This is dangerous because it enables a thousand other things for all running simulations; it becomes a big security hole.
$> sudo setcap cap_net_raw+ep /${your-omnetpp-root}/bin/opp_run_release $> sudo setcap cap_net_raw+ep /${your-omnetpp-root}/bin/opp_run_dbg
To remove extra privileges after running the simulation, use the following commands:
$> sudo setcap -r /${your-omnetpp-root}/bin/opp_run_release $> sudo setcap -r /${your-omnetpp-root}/bin/opp_run_dbg
Usage diagram¶
Inheritance diagram¶
Used in compound modules¶
Name |
Type |
Description |
|---|---|---|
compound module |
Provides an Ethernet network interface suitable for emulation. The lower part of the network interface is realized in the real world using a real Ethernet socket of the host computer which is running the simulation. |
Extends¶
Name |
Type |
Description |
|---|---|---|
simple module |
Base module for all INET simple modules. |
Parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
displayStringTextFormat |
string |
“device: {device}\nsnt:{numSent} rcv:{numReceived}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
device |
string |
Name of an existing real Ethernet device |
|
namespace |
string |
“” |
|
packetNameFormat |
string |
“Ext-%p-%t-%n” |
Name of received packets |
Properties¶
Name |
Value |
Description |
|---|---|---|
class |
ExtEthernetSocket |
|
display |
i=block/rxtx |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
upperLayerIn |
input |
||
upperLayerOut |
output |
Signals¶
Name |
Type |
Unit |
Description |
|---|---|---|---|
packetReceived |
|||
packetReceivedFromUpper |
|||
packetSent |
|||
packetSentToUpper |
Statistics¶
Name |
Title |
Source |
Record |
Unit |
Interpolation Mode |
Description |
|---|---|---|---|---|---|---|
packetReceived |
packets received |
packetReceived |
count,”sum(packetBytes)”,”vector(packetBytes)” |
none |
||
packetReceivedFromUpper |
packets received from higher layer |
packetReceivedFromUpper |
count,”sum(packetBytes)”,”vector(packetBytes)” |
none |
||
packetSent |
packets sent |
packetSent |
count,”sum(packetBytes)”,”vector(packetBytes)” |
none |
||
packetSentFromUpper |
packets sent to higher layer |
packetSentToUpper |
count,”sum(packetBytes)”,”vector(packetBytes)” |
none |
Source code¶
//
// Provides a bidirectional connection to an Ethernet socket of the
// host computer which is running the simulation. It writes the packets that arrive
// on `upperLayerIn` gate to the specified real socket and sends out packets
// that arrive from the real socket on the `upperLayerOut` gate.
//
// The CAP_NET_RAW privilege is required for using `ExtEthernetSocket`.
//
// The next commands add this privilege to opp_run, so all simulations
// have the CAP_NET_RAW privilege, and all simulations run with this privilege!
// This is dangerous because it enables a thousand other things for all
// running simulations; it becomes a big security hole.
//
// $> sudo setcap cap_net_raw+ep /${your-omnetpp-root}/bin/opp_run_release
// $> sudo setcap cap_net_raw+ep /${your-omnetpp-root}/bin/opp_run_dbg
//
// To remove extra privileges after running the simulation, use the following commands:
//
// $> sudo setcap -r /${your-omnetpp-root}/bin/opp_run_release
// $> sudo setcap -r /${your-omnetpp-root}/bin/opp_run_dbg
//
simple ExtEthernetSocket extends SimpleModule
{
parameters:
@class(ExtEthernetSocket);
string device; // Name of an existing real Ethernet device
string namespace = default("");
string packetNameFormat = default("Ext-%p-%t-%n"); // Name of received packets
displayStringTextFormat = default("device: {device}\nsnt:{numSent} rcv:{numReceived}");
@display("i=block/rxtx");
@signal[packetSentToUpper](type=Packet);
@signal[packetReceivedFromUpper](type=Packet);
@signal[packetSent](type=Packet);
@signal[packetReceived](type=Packet);
@statistic[packetSentFromUpper](title="packets sent to higher layer"; source=packetSentToUpper; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
@statistic[packetReceivedFromUpper](title="packets received from higher layer"; source=packetReceivedFromUpper; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
@statistic[packetSent](title="packets sent"; source=packetSent; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
@statistic[packetReceived](title="packets received"; source=packetReceived; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
gates:
input upperLayerIn;
output upperLayerOut @loose;
}
File: src/inet/emulation/linklayer/ethernet/ExtEthernetSocket.ned