IGMP Querier Functions

emulation igmp querier config

Execute Tester Command ${rt_handle} command=test_control <additional key=value arguments>

Purpose:

The emulation_igmp_querier_config command configures an IGMP router on the specified test port.

Querier is a multicast router that maintains a list of multicast group memberships for each attached network. There is normally only one querier per physical network. The querier sends out Query messages to determine the multicast group memberships for hosts on the attached network.

The Internet Group Management Protocol (IGMP) is a protocol that provides a way for a host computer to report its multicast group membership to adjacent routers. A multicast group is configured to receive voice, video, or data traffic sent from a multicast server. IGMP is a stateful protocol. The router sends periodic queries to the receivers to verify that the hosts want to continue to participate in the multicast groups. These queries are transmitted to a wellknown multicast address (224.0.0.1) that is monitored by all systems. If the receivers are still interested in that particular multicast group, they respond with a Membership Report message. When the router stops seeing responses to queries, it deletes the appropriate group from its forwarding table. For more details on IGMP, please refer to RFC 1112, RFC 2236, or RFC 3376.

Synopsis:

Note: M indicates the argument is `Mandatory`.

      emulation igmp querier config
              mode= {create|modify|delete} M
              port_handle= <port_handle>
              handle= <device_handle>|<igmp_host_handle>
              count= <1-65535>
              intf_ip_addr= <a.b.c.d>
              intf_ip_addr_step= <a.b.c.d>
              intf_prefix_len= <1-32>
              source_mac= <aa:bb:cc:dd:ee:ff>
              source_mac_step= <aa:bb:cc:dd:ee:ff>
              neighbor_intf_ip_addr= <a.b.c.d>
              neighbor_intf_ip_addr_step= <a.b.c.d>
              igmp_version= {v1 | v2 | v3}
              ignore_v1_reports= {true | false}
              ipv4_dont_fragment= {true | false}
              ipv4_tos= <0-255>
              last_member_query_count= <0-255>
              last_member_query_interval= <0-4294967295>
              qinq_incr_mode= {inner | outer | both}
              query_interval= <0-4294967295>
              query_response_interval= <0-4294967295>
              robustness_variable= <2-255>
              startup_query_count= <2-255>
              tos_type= {tos | diffserv}
              use_partial_block_state= {true | false}
              vlan_cfi= {0 1}
              vlan_id= <0-4095>
              vlan_id_mode= {fixed | increment}
              vlan_id_step= <0-32767>
              vlan_id_count= <1-4095>
              vlan_user_priority= <0-7>
              vlan_outer_cfi= {0 1}
              vlan_id_outer= <0-4095>
              vlan_id_outer_mode= {fixed | increment}
              vlan_id_outer_step= <0-32767>
              vlan_id_outer_count= <1-4095>
              vlan_outer_user_priority= <0-7>

Arguments:

mode
                Specifies the action to perform. Possible values are create,
                modify, and delete. This argument is `Mandatory`. The modes are
                described below::


                 create - Starts emulating IGMP routers on the specified port
                        or handle.

                 modify - Changes the configuration parameters for the IGMP
                        router identified by the handle argument.

                 delete - Clears all IGMP group sessions information on the
                        port and restarts the connection.


port_handle
                The handle of the port on which to create the emulated IGMP
                session. When mode is set to create, it is `Mandatory` that
                you specify port_handle or -handle, but not both.

handle
                The handle of the IGMP host configured on the port to
                use. You must specify handle when -mode is set to modify
                or delete. When you use mode create, it is `Mandatory` that
                you specify port_handle or -handle, but not both. If you define
                handle and -mode create, Spirent HLTAPI creates an IGMP
                device on the given device.

count
                Defines the number of IGMP routers to create on the interface.
                Applicable only in mode create. Possible values range from 1 to
                65535. The default value is 1

intf_ip_addr
                Specifies the starting IPv4 address of the emulated devices.
                The default value is 0.0.0.0.

intf_ip_addr_step
                Specifies the difference between interface IP addresses of
                consecutive routers when multiple IGMP hosts are created.
                Applicable only in mode create. The value must be in IPv4 format.
                The default value is 0.0.0.1.

intf_prefix_len
                Specifies the address prefix length on the emulated host.
                Possible values range from 1 to 32. The default value is 24.

source_mac
                Defines the first MAC address to use when emulating IGMP routers.
                Each client must have a unique source MAC address. The value must
                be in MAC format. The default value is 00:10:94:00:00:02

source_mac_step
                Specifies the increment by which to generate additional MAC
                addresses for IGMP routers. Applicable only in mode create. The
                default value is 00:00:00:00:00:01

neighbor_intf_ip_addr
                Specifies the IP address of the interface for the IGMP
                neighbor (next hop) that will establish an adjacency with
                the DUT. The value must be in IPv4 format. The default value is
                192.85.1.1

neighbor_intf_ip_addr_step
                Specifies the difference between the IP
                addresses of IGMP neighbor's interfaces when creating multiple
                IGMP routers. Applicable only in create mode.
                The value must be in IPv4 format. The default value is 0.0.0.0.

igmp_version
                Specifies the version of IGMP to use for the querier. Possible
                values are::


                 v1 - The second version of IGMP (supercedes IGMPv0),
                      specified in RFC 1112.

                 v2 - IGMP version specified in RFC 2236. Improved IGMP
                      version that adds "leave" messages, shortening the
                      amount of time `Mandatory` for a router to determine
                      that no stations are in a particular group. This
                      version includes the ability for the receivers to
                      gracefully exit from a multicast group.

                 v3 - Specified in RFC 3376, this major revision of the
                      IGMP protocol adds the ability to specify the
                      source(s) to which a receiver is willing to
                      listen. Sources can be stipulated with "include"
                      filters in the "join" and "report" messages, or
                      sources can be specifically rejected with
                      "exclude" filters.

                The default value is v2.

ignore_v1_reports
                Specifies whether to ignore IGMPv1 messages on the interface.
                This argument is only valid for IGMPv2. Possible values are true
                and false. The default value is false.

ipv4_dont_fragment
                Determines whether to use fragment the IP packets larger than the
                MTU (Maximum Transmission Unit) size. Possible values are true
                and false. The default value is false.

ipv4_tos
                Specifies the value of the TOS field in the IPv4 header. Possible
                values range from 0 to 255. The default value is 192.

last_member_query_count
                Value for the Max Response Time field (in milliseconds) that is
                inserted in to GroupSpecific and Group-andSourceSpecific Query
                messages in response to Leave Group messages. Possible values
                range from 0 to 255. The default value is 2. Note that this
                argument does not work for IGMPv1.

last_member_query_interval
                Maximum amount of time between groupspecific query messages,
                including those sent in response to leavegroup messages.
                Possible values range from 0 to 4294967295. The default value is
                1000. Note that this argument does not work for IGMPv1.

query_interval
                Specifies the duration (in seconds) between transmissions of
                General Query messages. General Query messages are used to learn
                which multicast groups have members on a connected network.
                Possible values range from 0 to 4294967295. The default value is
                125.

query_response_interval
                Specifies the value for the Max Response Time field (in
                milliseconds), which is inserted into the General Query messages.
                This time is the maximum amount allowed for a host to send a
                responding report to the General Query message. The interval must
                be less than the Query Interval. This argument does not apply to
                IGMPv1. Possible values range from 0 to 4294967295. The default
                value is 10000.

qinq_incr_mode
                Determines which VLAN ID to increment first. Possible values
                are::


                 inner - Increments the inner VLAN ID before the outer VLAN ID

                 outer - Increments the outer VLAN ID before the inner VLAN ID

                 both - Increment both the inner and outer VLAN ID at the
                        same time.

                The default value is both. Applicable only in mode create.

robustness_variable
                Specifies the variable used in the calculation of default values
                for various timers and counters. Possible values range from 2 to
                255. The default value is 2. Note that this argument does not
                work for IGMPv1.

startup_query_count
                Number of queries sent out on startup, separated by the Startup
                Query Interval. Possible values range from 2 to 255. The default
                value is 2.

tos_type
                Specifies the formatting of the TOS value. Possible values are::


                 tos - Type of Service

                 diffserv - Differentiated services

                The default value is tos.

use_partial_block_state
                Determines whether to use partial block state. Possible values
                are true and false. The default value is false.

vlan_cfi
                Sets the Canonical Format Indicator (CFI) field in VLAN for the
                emulated router node. Possible values are 0 (Ethernet) and 1
                (Token Ring). If it is set to 0, it indicates Token Ring and
                packets are dropped by Ethernet ports. If set to 0, it indicates
                the network is Ethernet. The default value is 0.
vlan_id
                Defines the VLAN ID of the first VLAN subinterface.
                Possible values range from 0 to 4095.
                The default value is 100.

vlan_id_mode
                Specifies the VLAN generating method when you configure more than
                one interface on Spirent HLTAPI with VLAN. You can choose to
                either automatically increment the VLAN tag (mode increment) or
                leave it idle for each interface (mode fixed), in which case the
                VLAN ID is the same for all packets. If you set this argument to
                increment, you can specify the vlan_id_step argument to
                indicate the step size. The default value is fixed. Applicable
                only in mode create.

vlan_id_step
                Defines the step size by which the VLAN value is incremented when
                you set vlan_id_mode to increment. Possible values range from 0
                to 32767. The default value is 1. Applicable only in create mode.

vlan_id_count
                `Spirent Extension (for Spirent HLTAPI only).`

                Specifies the number of VLAN IDs to use when generating IGMP
                sessions. Possible values range from 1 to 4096. The default value
                is 1. Applicable only in mode create.

vlan_user_priority
                Defines the VLAN priority for the VLANs on this port.
                Possible values range from 0 to 7. The default value is 7.

vlan_outer_cfi
                `Spirent Extension (for Spirent HLTAPI only).`

                Specifies whether to set the CFI value for the VLAN outer
                header. Possible values are 0 and 1. If you set it to 1, a CFI
                value will be automatically assigned. The default value is 0.

vlan_id_outer
                `Spirent Extension (for Spirent HLTAPI only).`

                Specifies the VLAN ID for a particular outer header. Possible
                values range from 0 to 4095. The default value is 100.

vlan_id_outer_mode
                `Spirent Extension (for Spirent HLTAPI only).`

                Specifies how Spirent HLTAPI will assign VLAN tags to
                packets in the specified outer header. Possible values are::


                 fixed - The outer VLAN ID is the same for all packets

                 increment - For all packets, the outer VLAN tag ID
                            increments by the step specified in the
                            vlan_id_outer_step argument.

                The default value is fixed. Applicable only in mode create.

vlan_id_outer_step
                The amount by which to increment the specified outer VLAN ID
                (vlan_id_outer) for subsequent packets. Possible values range
                from 0 to 32767. The default value is 1. Applicable only in
                mode create.

vlan_id_outer_count
                `Spirent Extension (for Spirent HLTAPI only).`

                The number of outer VLAN IDs to use when generating IGMP routers.
                Possible values range from 1 to 4096. The default value is 1.
                Applicable only in create mode.

vlan_outer_user_priority
                `Spirent Extension (for Spirent HLTAPI only).`

                Specifies the VLAN priority to assign to the outer VLAN header.
                Possible values range from 0 to 7. The default value is 7.

Arguments Unsupported by Save as HLTAPI:

The following Spirent HLTAPI arguments are currently not supported by the Save as
HLTAPI function::


   qinq_incr_mode

Vendor Specific Arguments Processed by Spirent HLTAPI Wrapper:

igmp_querier_type

The version of IGMP to be used. Valid for mode create. Possible values are:

v1   Version 1
v2   Version 2
v3   Version 3

Vendor Specific Arguments Ignored by Spirent HLTAPI Wrapper:

     device_type

Note: For more information about Spirent HLTAPI Wrapper, refer to Chapter 4
          Spirent HLTAPI Wrapper in Spirent HLTAPI Programmer's Reference.
Return Values:

Depending on the specific language that HLTAPI uses, the function returns a keyed list/dictionary/hash (See Introduction for more information on return value formats) using the following keys (with corresponding data):

handle         The IGMP router handle

status          Success (1) or failure (0) of the operation.

log             An error message (if the operation failed).
Description

The emulation igmp querier config function creates, modifies, or deletes IGMP routers for the specified Spirent HLTAPI port or handle. Use the mode argument to specify the action to perform. (See the mode argument description for information about the actions.)

When you create an IGMP router, use the port_handle argument to specify the Spirent HLTAPI port that the emulated IGMP router will use for IGMP communication. (The port handle value is contained in thekeyed list returned by the connect function.)

Spirent HLTAPI supports the use of IGMPv1, V2 and V3. For details of the IGMP protocal, see RFC 1112, RFC 2236 and RFC 3376.

Examples:

The following example creates and configures an IGMP router:

set returnedString [emulation igmp querier config
                mode=                       "create"
                port_handle=              $hltPort
                count=                      1
                igmp_version=               v2
                intf_ip_addr=               1.1.1.40
                intf_ip_addr_step=          "0.0.0.1"
                neighbor_intf_ip_addr=      1.1.1.10
                neighbor_intf_ip_addr_step= "0.0.0.1"
                vlan_id=                    111
                vlan_id_count=              3
                vlan_id_step=               2
                vlan_id_mode=               increment
                vlan_id_outer=              101
                vlan_id_outer_count=        5
                vlan_id_outer_step=         2
                vlan_id_outer_mode=         increment
                ignore_v1_reports=          true
                last_member_query_count=    10
                query_interval=             5]

The following example modifies the created IGMP router:

set returnedString [emulation igmp querier config
                  mode=                       "modify"
                  handle=                     $igmpQuerierRouter
                  vlan_id=                    222
                  vlan_id_outer=              333
                  ignore_v1_reports=          true
                  last_member_query_count=    10
                  query_interval=             5]

The following example deletes emulated IGMP routers:

set returnedString [emulation igmp querier config
                     mode= delete
                     handle= $igmpQuerierRouterList]

Sample Output:

{handle {router1}} {status 1}

emulation igmp querier control

Execute Tester Command ${rt_handle} command=test_control <additional key=value arguments>

Purpose:
Starts or stops sending Query messages from the selected queriers to attached hosts on the specified port.

Synopsis:

Note: M indicates the argument is `Mandatory`.

         emulation igmp querier control
             mode= {start|stop} M
             port_handle= <port_handle_list>
             handle= <handle_list>

Arguments:

mode
                Specifies the action to perform on the specified handle. If you
                provide a handle (handle), this argument performs the specified
                action on all groups on this session. If you do not provide a
                handle, this argument performs the specified action on all groups
                on all sessions. Possible values are::


                 start - Starts sending Query message from the selected queriers
                        to attached hosts..

                 stop - Stops sending Query message from the selected queriers to
                    attached hosts. The queriers also stop responding to Report
                    and Leave messages from attached hosts.

                This argument is `Mandatory`.

port_handle
                Identifies a list of ports on which to perform the
                action. This is the port on which IGMP emulation has been
                configured. This value is returned by the
                ``emulation igmp querier config`` function. This argument is
                `Mandatory` when handle is not used.

handle
                Specifies a list of devices on which to perform the action. You
                must specify port_handle or handle, but not both.

Vendor Specific Arguments Processed by Spirent HLTAPI Wrapper:

action

Stops or starts the protocol. This argument is Mandatory. The modes are described below:

start          Enable the IGMP Querier session
stop           Disable the IGMP Querier session

Vendor Specific Arguments Ignored by Spirent HLTAPI Wrapper:

    query_type

Note: For more information about Spirent HLTAPI Wrapper, refer to Chapter 4
          Spirent HLTAPI Wrapper in Spirent HLTAPI Programmer's Reference.
Return Values:

Depending on the specific language that HLTAPI uses, the function returns a keyed list/dictionary/hash (See Introduction for more information on return value formats) using the following keys (with corresponding data):

status             Success (1) or failure (0) of the operation.
log                An error message (if the operation failed).
Description:

The emulation igmp querier control function starts or stops sending Query message from the selected queriers to attached hosts on the specified port.

When you call emulation igmp querier control, you must specify either a port handle or a device handle, on which Spirent HLTAPI applies the specified action.

Examples:

The following example starts the IGMP Queriers on port $portHandle:

set returnedString [  emulation_igmp_querier_control
                    port_handle=    $portHandle
                    action=         start]

The following example stops the IGMP Queriers just started:

set returnedString [  emulation_igmp_querier_control
                     port_handle=    $portHandle
                     action=         stop]

Sample Output:

{status 1}

emulation igmp querier info

Execute Tester Command ${rt_handle} command=test_control <additional key=value arguments>

Purpose:
Retrieves statistics for the IGMP Routers configured on the specified test ports.

Synopsis:

Note: M indicates the argument is `Mandatory`.

       emulation igmp querier info
          port_handle= <port_handle>
          handle= <handle>

Arguments:

 port_handle
                 Specifies the port on which to retrieve statistics.

 handle
                 Specifies the handle of the device on which to retrieve
                 statistics.

Note: Both handle and port_handle are optional, but at least one should be
      specified. If both are specified, then handle is prioritized.
Return Values:

Depending on the specific language that HLTAPI uses, the function returns a keyed list/dictionary/hash (See Introduction for more information on return value formats) using the following keys (with corresponding data):

status      Success (1) or failure (0) of the operation.
log         An error message (if the operation failed).

host_state
            State of the IGMP/MLD host block[JOINING, LEAVING, MEMBER,
            NON_MEMBER, UNDEFINED]

if_handle
            IL interface handle

mcast_compatiblity_mode
            IGMP version the router block is currently operating as.[V1, V2, V3]

router_state
            State of the IGMP/MLD querier block.[NOT_STARTED, UNDEFINED, UP]

frame_count_rx
            Total number of IGMP frames received

igmp_check_sum_error_count_rx
            Total number of IGMP messages received with checksum errors

igmp_length_error_count_rx
            Total number of IGMP messages received with length errors

unknown_type_count_rx
            Total number of frames of unknown type received

time_stamp
            Timestamp, in seconds, of last statistic update

frame_count_tx
            Total number of IGMP frames transmitted
Description:
The emulation igmp querier info function returns statistics of the IGMP router on the specified port. Statistics include the router status and number and type of messages sent and received from the specified port.

Examples:

The following example retrieves statistics on port $portHandle:

set returnedString [  emulation_igmp_querier_info
                  port_handle=    $portHandle]

Sample Output:

{status 1} {results {{router1 {{igmp_check_sum_error_count_rx 0}
{unknown_type_count_rx 0} {mcast_compatiblity_mode V2}
{igmp_length_error_count_rx 0} {router_state NOT_STARTED} {if_handle 0}
{time_stamp 0} {frame_count_rx 0} {host_state NON_MEMBER} {frame_count_tx 0}}}}}

End of Procedure Header