igmp Provider
The igmp provider provides probes for tracing the IGMP protocol.
This provider is under development and is not yet available
Probes
The igmp probes are described in the table below.
igmp Probes
Probe | Description |
---|---|
send | Probe that fires whenever IGMP sends a message. |
receive | Probe that fires whenever IGMP receives a message. |
Arguments
The argument types for the igmp probes are listed in the table below. The arguments are described in the following section.
igmp Probe Arguments
Probe | args[0] | args[1] | args[2] | args[3] | args[4] |
---|---|---|---|---|---|
send | pktinfo_t * | csinfo_t * | ipinfo_t * | ifinfo_t * | igmpinfo_t * |
receive | pktinfo_t * | csinfo_t * | ipinfo_t * | ifinfo_t * | igmpinfo_t * |
pktinfo_t structure
The pktinfo_t structure is where packet ID info can be made available for deeper analysis if packet IDs become supported by the kernel in the future.
The pkt_addr member is currently always NULL.
typedef struct pktinfo { uintptr_t pkt_addr; /* currently always NULL */ } pktinfo_t;
csinfo_t structure
The csinfo_t structure is where connection state info is made available. For IGMP, the connection ID and process ID fields are unused since IGMP events are not tied to particular processess/connections.
typedef struct csinfo { uintptr_t cs_addr; uint64_t cs_cid; pid_t cs_pid; zoneid_t cs_zoneid; } csinfo_t;
csinfo_t Members
cs_addr | Address of translated ill_t *. |
cs_cid | Connection id. Unused for IGMP. |
cs_pid | Process ID. Unused for IGMP. |
cs_zoneid | Zone ID associated with the connection. |
ipinfo_t structure
The ipinfo_t structure contains common IP info for both IPv4 and IPv6.
typedef struct ipinfo { uint8_t ip_ver; /* IP version (4, 6) */ uint16_t ip_plength; /* payload length */ string ip_saddr; /* source address */ string ip_daddr; /* destination address */ } ipinfo_t;
ipinfo_t Members
ip_ver | IP version number. Currently either 4 or 6. For IGMP, it will always be 4 since it is an IPv4-only protocol. |
ip_plength | Payload length in bytes. This is the length of the packet at the time of tracing, excluding the IP header. |
ip_saddr | Source IP address, as a string. For IPv4 this is a dotted decimal quad. |
ip_daddr | Destination IP address, as a string. For IPv4 this is a dotted decimal quad. |
ifinfo_t structure
The ifinfo_t structure contains interface.
typedef struct ifinfo { string if_name; /* interface name */ uintptr_t if_addr; /* pointer to raw ill_t */ } ifinfo_t;
ifinfo_t Members
if_name | IP interface name. |
if_addr | Pointer to raw ill_t. |
igmpinfo_t structure
The igmpinfo_t structure is a DTrace translated version of the information contained in the various forms of IGMP header.
typedef struct igmpinfo { uint8_t igmp_type; uint8_t igmp_code; uint16_t igmp_checksum; string igmp_group_addr; uint8_t igmp_query_version; uint8_t igmp_v3_query_max_response_time; uint16_t igmp_v3_query_num_sources; uintptr_t igmp_v3_query_sources; uint16_t igmp_v3_report_num_records; struct grphdr *igmp_v3_report_records; struct igmp *igmp_hdr; } igmpinfo_t;
igmpinfo_t Members
igmp_type | IGMP message type. |
igmp_code | IGMP message code. |
igmp_checksum | Checksum of IGMP header and payload. |
igmp_group_addr | String representation of IGMP multicast group address. Not valid for IGMPv3 membership reports. |
igmp_query_version | For an IGMP membership query, this field is set to 1, 2, or 3. Otherwise 0. |
igmp_v3_query_max_response_time | Valid for an IGMPv3 membership query. |
igmp_v3_query_num_sources | Number of IPv4 addresses specifying sources for group-and-source queries. |
igmp_v3_query_sources | Array of IPv4 addresses specifying sources for group-and-source queries. |
igmp_v3_report_num_records | Number of IGMPv3 group records specifying sources for group-and-source queries. |
igmp_v3_report_records | Array of IGMPv3 group records specifying group and sources for group-and-source reports. |
igmp_hdr | Pointer to raw IGMP header at time of tracing. |
See RFCs 1112, 2236, 3376 for a detailed explanation of the various IGMP message header formats.
Examples
Some simple examples of igmp provider usage follow.
IGMP traffic by zone.
This DTrace one-liner monitors IGMP traffic sent and received by type.
# dtrace -n 'igmp:::send,igmp:::receive { @[igmp_type_string[args[4]->igmp_type], probename, args[1]->cs_zoneid] = count(); }' dtrace: description 'igmp:::send,igmp:::receive ' matched 3 probes ^C membership query receive 0 1 v1 membership report receive 0 1 v1 membership report send 0 1
We see above that in the global zone (zoneid 0) we received one membership query and one membership report, and sent one membership report.
igmp Stability
The igmp provider uses DTrace's stability mechanism to describe its stabilities, as shown in the following table. For more information about the stability mechanism, see Chapter 39, Stability.
Element | Name stability | Data stability | Dependency class |
---|---|---|---|
Provider | Evolving | Evolving | ISA |
Module | Private | Private | Unknown |
Function | Private | Private | Unknown |
Name | Evolving | Evolving | ISA |
Arguments | Evolving | Evolving | ISA |