igmp provider

Skip to end of metadata
Go to start of metadata

igmp Provider

The igmp provider provides probes for tracing the IGMP protocol.

This provider is under development and is not yet available

Top

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 *

Top

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;

Top

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.

Top

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.

Top

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.

Top

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.

Top

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.

Top

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
Labels:
None
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.

Sign up or Log in to add a comment or watch this page.


The individuals who post here are part of the extended Oracle community and they might not be employed or in any way formally affiliated with Oracle. The opinions expressed here are their own, are not necessarily reviewed in advance by anyone but the individual authors, and neither Oracle nor any other party necessarily agrees with them.