PcapRecorder

Package: inet.common.packet.recorder

PcapRecorder

simple module

Records PCAP traces of frames sent/received by other modules within the same host. By default, it records frames sent/received by L2 modules of StandardHost and Router. The output filename is expected in the pcapFile parameter. The PcapRecorder module can also print tcpdump-like textual information to on the log (EV); this functionality can be controlled by the verbose parameter.

Which modules to record: The list of modules can to be specified in the moduleNamePatterns parameter. It is a space-separated list of module names, which will be interpreted as children of the PcapRecorder's parent module. To record elements of a module vector, add "[*]" to the name (example: "eth[*]").

Operation: PcapRecorder adds signal listeners to the recorded modules. The signals subscribed to are "packetSentToLower" and "packetReceivedFromLower", but these names can be overridden with the sendingSignalNames and receivingSignalNames parameters. The packets themselves are expected as cPacket* signal values.

Supported packets: The module handles IPv4/IPv6 packets (Ipv4Header/ Ipv6Header classes), possibly encapsulated into other (L2, PHY, etc) frames at any depth. Packets not containing IP packets are discarded. The following higher layer protocol messages (inside IP packets) are recognized and dumped/recorded: Ipv4Header, SctpHeader, TcpHeader, IcmpHeader.

PcapRecorder

Used in compound modules

Name Type Description
EtherSwitch compound module

Model of an Ethernet switch.

LinkLayerNodeBase compound module (no description)

Parameters

Name Type Default value Description
verbose bool false

whether to log packets on the module output

pcapFile string ""

the PCAP file to be written

pcapLinkType int -1

the network type header field in the PCAP file, see http://www.tcpdump.org/linktypes.html (1=ethernet, 204=ppp, 105=IEEE 802.11, ...) (-1 means autodetect based on first recordable packet)

snaplen int 65535

maximum number of bytes to record per packet

dumpBadFrames bool true

enable dump of frames with hasBitError

moduleNamePatterns string "wlan[*] eth[*] ppp[*]"

space-separated list of sibling module names to listen on

sendingSignalNames string "packetSentToLower"

space-separated list of outbound packet signals to subscribe to

receivingSignalNames string "packetReceivedFromLower"

space-separated list of inbound packet signals to subscribe to

dumpProtocols string "ethernetmac ppp ieee80211mac"

space-separated list of protocol names as defined in the Protocol class

packetFilter string "*"

which packets are considered, matches all packets by default

packetDataFilter string "*"

which packets are considered based on the data they contain, matches all packets by default

helpers string ""

usable PcapRecorder::IHelper helpers for accept packettype and store/convert packet as specified linktype currently available: "inet::AckingMacToEthernetPcapRecorderHelper"

alwaysFlush bool false

flush the pcapFile after each write to ensure that all packets are captured in case of a crash

displayStringTextFormat string "rec: %n pks"

Properties

Name Value Description
display i=block/blackboard

Signals

Name Type Unit
packetRecorded Packet

Source code

//
// Records PCAP traces of frames sent/received by other modules within
// the same host. By default, it records frames sent/received by L2 modules
// of ~StandardHost and ~Router. The output filename is expected in the
// pcapFile parameter. The PcapRecorder module can also print tcpdump-like
// textual information to on the log (EV); this functionality can be
// controlled by the verbose parameter.
//
// <b>Which modules to record:</b> The list of modules can to be specified in
// the moduleNamePatterns parameter. It is a space-separated list of module
// names, which will be interpreted as children of the PcapRecorder's parent
// module. To record elements of a module vector, add "[*]" to the name
// (example: "eth[*]").
//
// <b>Operation:</b> PcapRecorder adds signal listeners to the recorded
// modules. The signals subscribed to are "packetSentToLower" and
// "packetReceivedFromLower", but these names can be overridden with the
// sendingSignalNames and receivingSignalNames parameters. The packets
// themselves are expected as cPacket* signal values.
//
// <b>Supported packets:</b> The module handles IPv4/IPv6 packets (~Ipv4Header/
// ~Ipv6Header classes), possibly encapsulated into other (L2, PHY, etc)
// frames at any depth. Packets not containing IP packets are discarded.
// The following higher layer protocol messages (inside IP packets) are
// recognized and dumped/recorded: ~Ipv4Header, ~SctpHeader, ~TcpHeader,
// ~IcmpHeader.
//
simple PcapRecorder
{
    parameters:
        bool verbose = default(false);  // whether to log packets on the module output
        string pcapFile = default(""); // the PCAP file to be written
        int pcapLinkType = default(-1); // the network type header field in the PCAP file, see http://www.tcpdump.org/linktypes.html (1=ethernet, 204=ppp, 105=IEEE 802.11, ...)
                                        // (-1 means autodetect based on first recordable packet)
        int snaplen = default(65535);  // maximum number of bytes to record per packet
        bool dumpBadFrames = default(true); // enable dump of frames with hasBitError
        string moduleNamePatterns = default("wlan[*] eth[*] ppp[*]"); // space-separated list of sibling module names to listen on
        string sendingSignalNames = default("packetSentToLower"); // space-separated list of outbound packet signals to subscribe to
        string receivingSignalNames = default("packetReceivedFromLower"); // space-separated list of inbound packet signals to subscribe to
        string dumpProtocols = default("ethernetmac ppp ieee80211mac"); // space-separated list of protocol names as defined in the Protocol class
        string packetFilter = default("*"); // which packets are considered, matches all packets by default
        string packetDataFilter = default("*"); // which packets are considered based on the data they contain, matches all packets by default
        string helpers = default("");    // usable PcapRecorder::IHelper helpers for accept packettype and store/convert packet as specified linktype
                                         // currently available: "inet::AckingMacToEthernetPcapRecorderHelper"
        bool alwaysFlush = default(false); // flush the pcapFile after each write to ensure that all packets are captured in case of a crash
        string displayStringTextFormat = default("rec: %n pks");
        @display("i=block/blackboard");
        @signal[packetRecorded](type=Packet);
}

File: src/inet/common/packet/recorder/PcapRecorder.ned