MCAC

MCAC overview

Multicast Connection Admission Control (MCAC) allows a router to limit bandwidth used by multicast channels, either on a router, on access links, or by an ESM subscriber, by controlling the number of channels that are accepted. When a pre-configured limit is reached, the router prevents receivers from joining any new channels not currently established. By rejecting new channel establishment during an overload condition, the degradation of the quality of the existing multicast service offering is avoided. However, as result, running the MCAC function may cause some channels to be temporarily unavailable to receivers under overload.

You can configure one or more MCAC bundle policies to specify multicast channel admission rules and then reference a required MCAC bundle policy on multicast-enabled IPv4 and IPv6 interfaces or group-interfaces. In addition, you can configure per-interface MCAC behavior.

Use the commands in the following context to configure a MCAC bundle policy:

  • MD-CLI
    configure mcac policy
  • classic CLI
    configure router mcac policy

MCAC is supported on ESM subscriber interfaces as well as multicast interfaces in the base router instance, VPLS, and in MVPNs. MCAC is supported for IGMP, IGMP-snooping, MLD, and PIM.

The amount of bandwidth multicast channels can consume is limited by operator-configured unconstrained and mandatory bandwidth values. Those values can be configured on a per-MCAC bundle policy, per subscriber, per interface, and per MCAC interface policy. The bandwidth limits configured for a subscriber or interface limit multicast bandwidth for that particular subscriber or that interface only. The bandwidth limits configured for an MCAC interface policy limit multicast bandwidth across a set of interfaces that share the same interface policy. If bandwidth limits are defined on multiple levels, all level limits must be satisfied for a channel to be admitted. See MCAC algorithm for more information.

MCAC is not applicable to PIM snooping and MLD snooping.

MCAC bundle policy overview

MCAC bundle policy (shortened here to ‟MCAC policy” or ‟policy”) is used to define MCAC rules to be applied on an MCAC interface when receivers are trying to join multicast channels. Within each policy, an operator can define:

  • multicast channel

    A channel can be defined using multicast group address only or both source and group addresses. Ranges can be used to group multiple multicast channels into a single MCAC channel. When ranges are used, each multicast channel within range uses the same channel bandwidth (bandwidth), class, and priority configuration.

    • channel bandwidth

      This is the bandwidth value to be used for a channel in MCAC.

    • channel type (mandatory or optional)

      Mandatory channels have bandwidth pre-reserved on interfaces as soon as they are defined in MCAC policy, while optional channels consume bandwidth on-demand; only when there are active receivers for that channel and the remaining bandwidth allows for channels to be admitted.

    • channel class

      High and low channel classes are supported. For LAG interfaces, the class parameter allows further prioritizing of the mandatory or optional channels. This brings the number of priority levels to four during reshuffles of the joined channels when LAG ports are changing state.

    Note: Multicast channels not specified in an MCAC policy applicable on a specific interface are not subject to MCAC. Treatment of such channels is configurable as either accept or discard.
  • multicast channel bundle

    Multicast bundle defines multicast channels as per the preceding description. A channel can only be part of one bundle.

    • maximum bundle bandwidth

      This is the maximum bandwidth the channels forming a bundle can consume on an interface.

    • MCAC constraints

      This set of rules governs available bandwidth for multicast channels over LAG as LAG ports are changing state.

MCAC algorithm

It is important to point out that the MCAC algorithm is based on configured BW values. The configured channel BW based on MCAC policy is CAC-ed against pre-configured maximum bundle BW and pre-configured subscriber, interface, or MCAC interface-policy multicast BW limits. A channel must pass all levels of CAC before it is accepted. The statements describe the CAC algorithm for a multicast channel defined in MCAC policy.

A join for a particular multicast channel is allowed under the following conditions:

  • mandatory channels

    A sufficient bandwidth exists on the interface according to the policy settings for the interface (Interface-level MCAC and MCAC-interface-policy-level MCAC) and BW setting for a channel (Bundle-level MCAC). There is always sufficient BW available on the bundle level because mandatory channels get pre-reserved bandwidth.

  • optional channels

    A sufficient BW exists on both interface (Interface-level MCAC and MCAC-interface-policy-level MCAC) and bundle level (Bundle-Level MCAC) based on channel configured BW and currently available BW on both interface and bundle.

When a policy is evaluated over a set of existing channels (applicable for MCAC on LAG when the number of ports in the LAG changes and applicable to subscribers when the submac policy is enabled on a subscriber), the channels are evaluated and admitted/dropped based on the following priority order: mandatory-high, mandatory-low, optional-high, optional-low.

This method does not guarantee that all bundles are fully allocated. However, this method does ensure that all mandatory-high channels are allocated before any mandatory-low channels are allocated.

When a new MCAC bundle policy is applied, the algorithm is forced to admit all currently joined channels to prevent any drops. This can result in an oversubscription until some of the joined channels disconnect. The same behavior applies when adding a new MCAC interface policy: all the joined channels are admitted, without dropping anything.

Interface-level MCAC details

Interface-level MCAC constraints are applied to the interface on which the join was received. Mandatory and optional channels are allowed under the following conditions:

  • mandatory channels

    The bandwidth for the already-accepted mandatory channels plus the bandwidth of this channel cannot be greater than the configured mandatory bandwidth on this interface.

  • optional channels

    The bandwidth for the already-accepted optional channels plus the bandwidth of this channel cannot be greater than the configured amount of unconstrained bandwidth less the configured amount of mandatory bandwidth on this interface.

MCAC-interface-policy-level MCAC details

MCAC interface policies are defined system wide and used on MCAC interfaces via assignment of the policy to one or more interfaces to, for example, limit multicast BW across a group of interfaces/ports, across a line card or across a system. If an MCAC interface policy is assigned to an interface with Interface-level constraints configured, then both Interface-level MCAC as described above and MCAC-interface-policy-level MCAC must be satisfied for a channel to be admitted.

Mandatory and optional channels are allowed under the following conditions:

  • mandatory channels

    The bandwidth for the already-accepted mandatory channels on this and any other interface using this MCAC interface policy plus the bandwidth of this channel cannot be greater than the configured mandatory bandwidth for this MCAC interface policy.

  • optional channels

    The bandwidth for the already-accepted optional channels on this and any other interface using this MCAC interface policy plus the bandwidth of this channel cannot be greater than the configured amount of unconstrained bandwidth less the configured amount of mandatory bandwidth for this MCAC interface policy.

Thus, when MCAC interface policy is used, admitting a channel on one interface affects all interfaces sharing the same MCAC interface policy.

Bundle-level MCAC details

Bundle-level CAC is applied to the bundle to which the channel that triggered the MCAC algorithm belongs.

Mandatory and optional channels are allowed under the following conditions:

  • mandatory channels

    Mandatory channels are always allowed.

  • optional channels

    The allocated bundle bandwidth cannot exceed the configured bandwidth. The allocated bandwidth equals the bandwidth of all the mandatory channels belonging to that bundle plus the bandwidth of the optional channels already accepted plus the bandwidth of this optional channel.

MCAC on Link Aggregation Group interfaces

When MCAC enabled interfaces reside on a LAG, SR OS allows operators to change MCAC behavior when the number of active ports in a LAG changes. Both MCAC policy bundle and MCAC interface allows operators to define multiple MCAC levels per LAG based on the number of active ports in the LAG. For each level, operators can configure corresponding BW limits.

When MCAC LAG constraints are enabled, the level to use is selected automatically based on the configuration and a currently active number of LAG ports. In a case of the available bandwidth reduction (for example, a LAG link failure causes change to a level with smaller BW configured), MCAC attempts first to fit all mandatory channels (in an arbitrary order). If there is no sufficient capacity to carry all mandatory channels in the degraded mode, some channels are dropped and all optional channels are dropped. If after evaluation of mandatory channels, there remains available bandwidth, then all optional channels are re-evaluated (in an arbitrary order). Channel re-evaluation employs the above-described MCAC algorithm applied at the interface and bundle levels that use the constraints for the degraded mode of operation.

Configuring MCAC with CLI

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

Basic MCAC configuration

Perform the following basic MCAC policy configuration tasks:

  • Configure the policy name.

  • Configure the bundle for the policy.

  • Specify the default action.

Use the commands in the following contexts to configure MCAC policies:

  • MD-CLI
    configure mcac policy
  • classic CLI
    configure router mcac policy

The following example shows an MCAC configuration:

MD-CLI

[ex:/configure mcac]
A:admin@node-2# info
    policy "btv_fr" {
        description "foreign TV offering"
        bundle "FOR" {
            admin-state enable
            bandwidth 30000
            channel start 239.0.3.1 end 239.0.3.1 source 232.252.0.1/24  {
                bandwidth 4000
            }
            channel start 239.0.3.2 end 239.0.3.2 source 232.252.0.2/24  {
                bandwidth 4000
            }
            channel start 239.0.4.1 end 239.0.4.1 source 232.252.0.3/24 {
                bandwidth 3500
                priority-class high
                type mandatory
            }
            channel start 239.0.4.2 end 239.0.4.2 source 232.252.0.5/24 {
                bandwidth 3500
                priority-class high
            }
            channel start 239.0.4.3 end 239.0.4.3 source 232.252.0.100/24 {
                bandwidth 2800
                type mandatory
            }
            channel start 239.0.4.4 end 239.0.4.4 source 232.252.0.200/24 {
                bandwidth 2800
            }
            mc-constraints {
                level 1 {
                    bandwidth 20000
                }
                level 2 {
                    bandwidth 20000
                }
                level 3 {
                    bandwidth 20000
                }
                level 4 {
                    bandwidth 20000
                }
                level 5 {
                    bandwidth 20000
                }
                level 6 {
                    bandwidth 20000
                }
                lag-port-down "lag-1" number-down 1 {
                    level 1
                }
                lag-port-down "lag-1" number-down 2 {
                    level 3
                }
                lag-port-down "lag-1" number-down 3 {
                    level 5
                }
                lag-port-down "lag-2" number-down 1 {
                    level 1
                }
                lag-port-down "lag-2" number-down 2 {
                    level 3
                }
                lag-port-down "lag-2" number-down 3 {
                    level 5
                }
            }
        }
    }
    policy "btv_v1" {
        description "eastern TV offering"
        bundle "VRT" {
            admin-state enable
            bandwidth 120000
            channel start 239.1.2.0 end 239.1.2.4 source 232.252.0.1/24 {
                bandwidth 4000
                priority-class high
                type mandatory
            }
            channel start 239.1.2.5 end 239.1.2.5 source 232.252.0.2/24 {
                bandwidth 20000
                type mandatory
            }
            channel start 239.1.2.10 end 239.1.2.10 source 232.252.0.5/24 {
                bandwidth 8000
                type mandatory
            }
            channel start 239.2.2.0 end 239.2.2.4 source 232.252.0.10/24 {
                bandwidth 4000
            }
            channel start 239.2.2.5 end 239.2.2.5 source 232.252.0.20/24 {
                bandwidth 10000
                priority-class high
            }
            channel start 239.2.2.6 end 239.2.2.6 source 232.252.0.30/24 {
                bandwidth 10000
                priority-class high
            }
            channel start 239.2.2.7 end 239.2.2.7 source 232.252.0.100/24 {
                bandwidth 10000
            }
            channel start 239.2.2.8 end 239.2.2.8 source 232.252.0.200/24 {
                bandwidth 10000
            }
            mc-constraints {
                level 1 {
                    bandwidth 60000
                }
                level 2 {
                    bandwidth 50000
                }
                level 3 {
                    bandwidth 40000
                }
                level 4 {
                    bandwidth 30000
                }
                level 5 {
                    bandwidth 20000

                level 6 {
                    bandwidth 10000
                }
                lag-port-down "lag-1" number-down 1 {
                    level 1
                }
                lag-port-down "lag-1" number-down 2 {
                    level 3
                }
                lag-port-down "lag-1" number-down 3 {
                    level 5
                }
                lag-port-down "lag-2" number-down 1 {
                    level 1
                }
                lag-port-down "lag-2" number-down 2 {
                    level 3
                }
                lag-port-down "lag-2" number-down 3 {
                    level 5
                }
            }
        }
    }

classic CLI

A:node-2>config>router>mcac# info
----------------------------------------------
        policy "btv_fr"
            description "foreign TV offering"
            bundle "FOR" create
                bandwidth 30000
                channel 239.0.3.1 239.0.3.1 bw 4000
                channel 239.0.3.2 239.0.3.2 bw 4000
                channel 239.0.4.1 239.0.4.1 bw 3500 class high type mandatory
                channel 239.0.4.2 239.0.4.2 bw 3500 class high
                channel 239.0.4.3 239.0.4.3 bw 2800  type mandatory
                channel 239.0.4.4 239.0.4.4 bw 2800
                mc-constraints
                    level 1 bw 20000
                    level 2 bw 20000
                    level 3 bw 20000
                    level 4 bw 20000
                    level 5 bw 20000
                    level 6 bw 20000
                    lag-port-down 1 number-down 1 level 1
                    lag-port-down 1 number-down 2 level 3
                    lag-port-down 1 number-down 3 level 5
                    lag-port-down 2 number-down 1 level 1
                    lag-port-down 2 number-down 2 level 3
                    lag-port-down 2 number-down 3 level 5
                exit
                no shutdown
            exit
        exit
        policy "btv_vl"
            description "eastern TV offering"
            bundle "VRT" create
                bandwidth 120000
                channel 239.1.2.0 239.1.2.4 bw 4000 class high type mandatory
                channel 239.1.2.5 239.1.2.5 bw 20000  type mandatory
                channel 239.1.2.10 239.1.2.10 bw 8000  type mandatory
                channel 239.2.2.0 239.2.2.4 bw 4000
                channel 239.2.2.5 239.2.2.5 bw 10000 class high
                channel 239.2.2.6 239.2.2.6 bw 10000 class high
                channel 239.2.2.7 239.2.2.7 bw 10000
                channel 239.2.2.8 239.2.2.8 bw 10000
                mc-constraints
                    level 1 bw 60000
                    level 2 bw 50000
                    level 3 bw 40000
                    level 4 bw 30000
                    level 5 bw 20000
                    level 6 bw 10000
                    lag-port-down 1 number-down 1 level 1
                    lag-port-down 1 number-down 2 level 3
                    lag-port-down 1 number-down 3 level 5
                    lag-port-down 2 number-down 1 level 1
                    lag-port-down 2 number-down 2 level 3
                    lag-port-down 2 number-down 3 level 5
                exit
                no shutdown
            exit
        exit
----------------------------------------------

Configuring MCAC

You can add MCAC policies to the following configurations:

  • a SAP
  • a spoke-SDP
  • a mesh-SDP
  • an IGMP interface
  • a PIM interface

The following example displays an enabled IGMP and PIM configurations.

MD-CLI

[ex:/configure router "2" igmp]
A:admin@node-2# info
    ...
    admin-state enable
    query-interval 125
    query-last-member-interval 1
    query-response-interval 10
    robust-count 2
    interface "lax-vls" {
        admin-state enable
        version 3 
        mcac {
            policy "btv_fr"
        }
    }
    interface "p1-ix" 
        admin-state enable
        version 3 
    }
[ex:/configure router "Base" pim]
A:admin@node-2# info
    admin-state enable
    apply-to none
    interface "lax-sjc" {
        admin-state enable
        hello-interval 30
        priority 1
        tracking-support false
        bsm-check-rtr-alert true
        multicast-senders auto
    }
    interface "lax-vls" {
        admin-state enable
        hello-interval 30
        priority 1
        tracking-support false
        bsm-check-rtr-alert true
        multicast-senders auto
        mcac {
            policy "btv_fr"
        }
    }
    interface "pl-ix" {
        admin-state enable
        hello-interval 30
        priority 1
        tracking-support false
        bsm-check-rtr-alert true
        multicast-senders auto
    }
    interface "system" {
        admin-state enable
        hello-interval 30
        priority 1
        tracking-support false
        bsm-check-rtr-alert true
        multicast-senders auto
    }
    rp {
        bootstrap {
            import ["pim-import"]
        }
        ipv4 {
            bsr-candidate {
                admin-state disable
                priority 0
                hash-mask-len 30
            }
            rp-candidate {
                admin-state disable
                holdtime 150
                priority 192
            }
            static {
                address 10.22.187.237 {
                    group-prefix 239.24.24.24/32 { }
                }
            }
        }

classic CLI

----------------------------------------------
A:node-2>config>router>igmp# info
----------------------------------------------
        interface "lax-vls"
            mcac
                policy "btv_fr"
            version 3
            no shutdown
        exit
        interface "p1-ix"
            version 3
            no shutdown
        exit
        query-interval 125
        query-last-member-interval 1
        query-response-interval 10
        robust-count 2
        no shutdown
----------------------------------------------
A:node-2>config>router>igmp# exit
A:node-2>config>router# pim
----------------------------------------------
A:node-2>config>router>pim# info
----------------------------------------------
            no import join-policy
            no import register-policy
            interface "system"
                priority 1
                hello-interval 30
                multicast-senders auto
                no tracking-support
                bsm-check-rtr-alert
                no shutdown
            exit
            interface "lax-vls"
                priority 1
                hello-interval 30
                multicast-senders auto
                no tracking-support
                bsm-check-rtr-alert
                mcac
                    policy "btv_fr"
                exit
                no shutdown
            exit
            interface "lax-sjc"
                priority 1
                hello-interval 30
                multicast-senders auto
                no tracking-support
                bsm-check-rtr-alert
                no shutdown
            exit
            interface "p1-ix"
                priority 1
                hello-interval 30
                multicast-senders auto
                no tracking-support
                bsm-check-rtr-alert
                no shutdown
            exit
            apply-to none
            rp
                no bootstrap-import
                no bootstrap-export
                static
                    address 10.22.187.237
                        no override
                        group-prefix 239.24.24.24/32
                    exit
                exit
                bsr-candidate
                    shutdown
                    priority 0
                    hash-mask-len 30
                    no address
                exit
                rp-candidate
                    shutdown
                    no address
                    holdtime 150
                    priority 192
                exit
            exit
            no shutdown
----------------------------------------------