IGMP

IGMP overview

Internet Group Management Protocol (IGMP) is used by IPv4 hosts and routers to report their IP multicast group memberships to neighboring multicast routers. A multicast router keeps a list of multicast group memberships for each attached network, and a timer for each membership.

Multicast group memberships include at least one member of a multicast group on a specific attached network, not a list of all the members. With respect to each of its attached networks, a multicast router can assume one of two roles, querier or non-querier. There is normally only one querier per physical network.

A querier issues two types of queries, a general query and a group-specific query. General queries are issued to solicit membership information with regard to any multicast group. Group-specific queries are issued when a router receives a leave message from the node it perceives as the last group member remaining on that network segment.

Hosts wanting to receive a multicast session issue a multicast group membership report. These reports must be sent to all multicast enabled routers.

IGMP versions and interoperability requirements

If routers run different versions of IGMP, they negotiate the lowest common version of IGMP that is supported on their subnet and operate in that version.

  • Version 1

    Specified in RFC 1112, Host extensions for IP Multicasting, was the first widely deployed version and the first version to become an Internet standard.

  • Version 2

    Specified in RFC 2236, Internet Group Management Protocol, Version 2, added support for ‟low leave latency”, that is, a reduction in the time it takes for a multicast router to learn that there are no longer any members of a particular group present on an attached network.

  • Version 3

    Specified in RFC 3376, Internet Group Management Protocol, Version 3, adds support for source filtering; that is, the ability for a system to report interest in receiving packets only from specific source addresses, as required to support SSM, or from all but specific source addresses, sent to a particular multicast address.

    IGMPv3 must keep state per group per attached network. This group state consists of a filter-mode, a list of sources, and various timers. For each attached network running IGMP, a multicast router records the needed reception state for that network.

IGMP version transition

Nokia’s routers are capable of interoperating with routers and hosts running IGMPv1, IGMPv2, and, or IGMPv3. RFC 5186, Internet Group Management Protocol Version 3 (IGMPv3)/Multicast Listener Discovery Version 2 (MLDv2) and Multicast Routing Protocol Interaction explores some of the interoperability issues and how they affect the various routing protocols.

IGMP version 3 specifies that if at any point a router receives an older version query message on an interface that it must immediately switch into a compatibility mode with that earlier version. Because none of the previous versions of IGMP are source aware, should this occur and the interface switch to Version 1 or 2 compatibility mode, any previously learned group memberships with specific sources (learned via the IGMPv3 specific INCLUDE or EXCLUDE mechanisms) must be converted to non-source specific group memberships. The routing protocol then treats this as if there is no EXCLUDE definition present.

Source-specific multicast groups

IGMPv3 allows a receiver to join a group and specify that it only wants to receive traffic for a group if that traffic comes from a particular source. If a receiver does this, and no other receiver on the LAN requires all the traffic for the group, then the designated router (DR) can omit performing a (*,G) join to set up the shared tree, and instead issue a source-specific (S,G) join only.

The range of multicast addresses from 232.0.0.0 to 232.255.255.255 is currently set aside for source-specific multicast in IPv4. For groups in this range, receivers should only issue source-specific IGMPv3 joins. If a PIM router receives a non-source-specific join for a group in this range, it should ignore it.

A Nokia router PIM router must silently ignore a received (*,G) PIM join message where G is a multicast group address from the multicast address group range that has been explicitly configured for SSM. This occurrence should generate an event. If configured, the IGMPv2 request can be translated into IGMPv3. The router allows for the conversion of an IGMPv2 (*,G) request into a IGMPv3 (S,G) request based on manual entries. A maximum of 32 SSM ranges is supported.

IGMPv3 also allows a receiver to join a group and specify that it only wants to receive traffic for a group if that traffic does not come from a specific source or sources. In this case, the DR performs a (*,G) join as normal, but can combine this with a prune for each of the sources the receiver does not want to receive.

Query messages

The IGMP query source address is configurable at two hierarchal levels. It can be configured globally at each router instance IGMP level and can be configured at individual at the group-interface level. The group-interface level overrides the src-ip address configured at the router instance level.

By default, subscribers with IGMP policies send IGMP queries with an all zero SRC IP address (0.0.0.0). However, some systems only accept and process IGMP query messages with non-zero SRC IP addresses. This feature allows the BNG to inter-operate with such systems.

Configuring IGMP with CLI

This section provides information to configure IGMP using the command line interface.

IGMP configuration overview

The routers use IGMP to manage membership for a multicast session. IGMP is not enabled by default. When enabled, at least one interface must be specified in the IGMP context as IGMP is an interface function. Creating an interface enables IGMP. Traffic can only flow away from the router to an IGMP interface and to and from a PIM interface. A router directly connected to a source must have PIM enabled on the interface to that source. The traffic travels in a network from PIM interface to PIM interface and arrives finally on an IGMP enabled interface.

The IGMP CLI context allows you to specify an existing IP interface and modify the interface-specific parameters. Static IGMP group memberships can be configured to test multicast forwarding without a receiver host. When IGMP static group membership is enabled, data is forwarded to an interface without receiving membership reports from host members.

When static IGMP group entries on point-to-point links that connect routers to a rendezvous point (RP) are configured, the static IGMP group entries do not generate join messages toward the RP. When a host wants to receive multicast sessions it sends a join message for each multicast group it wants to join. Then, a leave message may be sent for each multicast group it no longer needs to participate with.

A multicast router keeps a list of multicast group memberships for each attached network, and an interval timer for each membership. Hosts issue a Multicast Group Membership Report when they want to receive a multicast session. The reports are sent to all multicast routers.

Basic IGMP configuration

Perform the following basic multicast configuration tasks:

  1. Required: Enable IGMP.
  2. Required: Configure IGMP interfaces.
  3. Optional: Specify the IGMP version on the interface.
  4. Optional: Configure static (S,G)/(*,G).
  5. Optional: Configure SSM translation.

Configuring IGMP parameters

Enabling IGMP

Use the following CLI syntax to enable IGMP:

config>router# igmp

The following example displays the detailed output when IGMP is enabled:

A:LAX>>config>router# info detail
...
#------------------------------------------
echo "IGMP Configuration"
#------------------------------------------
        igmp
            query-interval 125
            query-last-member-interval 1
            query-response-interval 10
            robust-count 2
            no shutdown
        exit
#------------------------------------------
A:LAX>>config>system#

Configuring an IGMP interface

To configure an IGMP interface:

config>router# igmp
        — interface ip-int-name
            — max-groups value
            — import policy-name
            — version version
            — no shutdown

Use the following CLI syntax to configure IGMP interfaces:

config>router#
    — config>router>igmp# interface "lax-vls"
    — config>router>igmp>if? no shutdown
    — config>router>igmp>if# exit
    — config>router>igmp# interface "p1-ix" 
    — config>router>igmp>if? no shutdown
    — config>router>igmp>if# exit
    — config>router>igmp# interface "lax-sjc" 
    — config>router>igmp>if? no shutdown
    — config>router>igmp>if# exit

The following example displays the IGMP configuration:

A:LAX>config>router>igmp# info
----------------------------------------------
        interface "lax-sjc"
        exit
        interface "lax-vls"
        exit
        interface "p1-ix"
        exit
----------------------------------------------
A:LAX>config>router>igmp# exit

Configuring static parameters

  1. To add an IGMP static multicast source:
    config>router# igmp
            — interface ip-int-name
                — no shutdown
                — static
                    — group grp-ip-address
                        — source ip-address
    

    Use the following CLI syntax to configure static group addresses and source addresses for the SSM translate group ranges:

    config>router>igmp# interface lax-vls
        — config>router>igmp>if# static
        — config>router>igmp>if>static# group 239.255.0.2
        — config>router>igmp>if>static>group# source 172.22.184.197
        — config>router>igmp>if>static>group# exit
        — config>router>igmp>if>static# exit
        — config>router>igmp>if# exit
    

    The following example displays the configuration:

    A:LAX>config>router>igmp# info
    ----------------------------------------------
            interface "lax-sjc"
            exit
            interface "lax-vls"
                static
                    group 239.255.0.2
                        source 172.22.184.197
                    exit
                exit
            exit
            interface "p1-ix"
            exit
    ----------------------------------------------
    A:LAX>config>router>igmp#
    
  2. To add an IGMP static starg entry:
    config>router# igmp
            — interface ip-int-name
                — no shutdown
                — static
                    — group grp-ip-address
                        — starg
    

    Use the following CLI syntax to configure static group addresses and add a static (*,G) entry:

    config>router>igmp# interface lax-sjc
        — config>router>igmp>if# static
        — config>router>igmp>if>static# group 239.1.1.1
        — config>router>igmp>if>static>group# starg
        — config>router>igmp>if>static>group# exit
        — config>router>igmp>if>static# exit
        — config>router>igmp>if# exit
        — config>router>igmp#
    

    The following example displays the configuration:

    A:LAX>config>router>igmp# info
    ----------------------------------------------
            interface "lax-sjc"
                static
                    group 239.1.1.1
                        starg
                    exit
                exit
            exit
            interface "lax-vls"
                static
                    group 239.255.0.2
                        source 172.22.184.197
                    exit
                exit
            exit
            interface "p1-ix"
            exit
    ----------------------------------------------
    A:LAX>config>router>igmp#
    

Configuring SSM translation

To configure IGMP parameters:

config>router# igmp
        — ssm-translate
            — grp-range start end
                — source ip-address

The following example displays the command usage to configure IGMP parameters:

config>router# igmp
    — config>router>igmp# ssm-translate
    — config>router>igmp>ssm# grp-range 239.255.0.1 239.2.2.2
    — config>router>igmp>ssm>grp-range# source 10.1.1.1

The following example displays the SSM translation configuration:

A:LAX>config>router>igmp# info
----------------------------------------------
        ssm-translate
            grp-range 239.255.0.1 239.2.2.2
                source 10.1.1.1
            exit
        exit
        interface "lax-sjc"
            static
                group 239.1.1.1
                    starg
                exit
            exit
        exit
        interface "lax-vls"
            static
                group 239.255.0.2
                    source 172.22.184.197
                exit
            exit
        exit
        interface "p1-ix"
        exit
----------------------------------------------
A:LAX>config>router>igmp# exit

Disabling IGMP

Use the following CLI syntax to disable IGMP.

config>router# 
        — igmp
            — shutdown

The following example displays the command usage to disable multicast:

config>router# igmp
    — config>router>igmp# shutdown
    — config>router>igmp# exit

The following example displays the configuration output:

A:LAX>config>router# info
----------------------------------------------
...
#------------------------------------------
echo "IGMP Configuration"
#------------------------------------------
        igmp
            shutdown
            ssm-translate
                grp-range 239.255.0.1 239.2.2.2
                    source 10.1.1.1
                exit
            exit
            interface "lax-sjc"
                static
                    group 239.1.1.1
                        starg
                    exit
                exit
            exit
            interface "lax-vls"
                static
                    group 239.255.0.2
                        source 172.22.184.197
                    exit
                exit
            exit
            interface "p1-ix"
            exit
        exit
#------------------------------------------