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.
Operators can configure one or more MCAC bundle policies (config>router>mcac>policy) 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, operators can configure per-interface MCAC behavior.
MCAC is supported on ESM subscriber interfaces as well as multicast interfaces in 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 BW (bandwidth), class, and priority configuration.
-
channel BW
This is a bandwidth value to be used for a channel in MCAC.
-
channel type (mandatory or optional)
Mandatory channels have BW pre-reserved on interfaces as soon as they are defined in MCAC policy, while optional channels consume BW on-demand; only when there are active receivers for that channel and the remaining BW allows for channels to be admitted.
-
channel class
High and low 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 described above. A channel can only be part of one bundle.
maximum bundle BW
The maximum bandwidth the channels forming a bundle can consume on an interface.
MCAC constraints
This is a set of rules governing available BW 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 configuration tasks:
Configure the policy name.
Configure the bundle parameters.
Specify the default action.
The following example displays the enabled IGMP and PIM configurations:
A:LAX>config>router>igmp# info
----------------------------------------------
interface "lax-vls"
exit
interface "p1-ix"
exit
----------------------------------------------
A:LAX>config>router>igmp# info detail
----------------------------------------------
interface "lax-vls"
no import
version 3
no shutdown
exit
interface "p1-ix"
no import
version 3
no shutdown
exit
query-interval 125
query-last-member-interval 1
query-response-interval 10
robust-count 2
no shutdown
----------------------------------------------
A:LAX>config>router>igmp# exit
A:LAX>config>router# pim
A:LAX>config>router>pim# info
----------------------------------------------
interface "system"
exit
interface "lax-vls"
exit
interface "lax-sjc"
exit
interface "p1-ix"
exit
rp
static
address 10.22.187.237
group-prefix 239.24.24.24/32
exit
exit
bsr-candidate
shutdown
exit
rp-candidate
shutdown
exit
exit
----------------------------------------------
A:LAX>config>router>pim# info detail
----------------------------------------------
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
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
----------------------------------------------
A:LAX>config>router>pim#
Configuring MCAC parameters
The MCAC policies can be added to a SAP, spoke-SDP, mesh-SDP, an IGMP interface, and a PIM interface.
The following example displays the command usage to create MCAC policies.
config>router# mcac
— config>router>mcac# policy "btv_fr"
— config>router>mcac>policy# description "foreign TV offering"
— config>router>mcac>policy# bundle "FOR" create
— config>router>mcac>policy>bundle# bandwidth 30000
— config>router>mcac>policy>bundle# channel 239.0.3.1 239.0.3.1 bw 4000
— config>router>mcac>policy>bundle# channel 239.0.3.2 239.0.3.2 bw 4000
— config>router>mcac>policy>bundle# channel 239.0.4.1 239.0.4.1 bw 3500 class high type mandatory
— config>router>mcac>policy>bundle# channel 239.0.4.2 239.0.4.2 bw 3500 class high
— config>router>mcac>policy>bundle# channel 239.0.4.3 239.0.4.3 bw 2800 type mandatory
— config>router>mcac>policy>bundle# channel 239.0.4.4 239.0.4.4 bw 2800
— config>router>mcac>policy>bundle# mc-constraints
— config>router>mcac>policy>bundle>mc-constraints# level 1 bw 20000
— config>router>mcac>policy>bundle>mc-constraints# level 2 bw 20000
— config>router>mcac>policy>bundle>mc-constraints# level 3 bw 20000
— config>router>mcac>policy>bundle>mc-constraints# level 4 bw 20000
— config>router>mcac>policy>bundle>mc-constraints# level 5 bw 20000
— config>router>mcac>policy>bundle>mc-constraints# level 6 bw 20000
— config>router>mcac>policy>bundle>mc-constraints# lag-port-down 1 number-down 1 level 1
— config>router>mcac>policy>bundle>mc-constraints# lag-port-down 1 number-down 2 level 3
— config>router>mcac>policy>bundle>mc-constraints# lag-port-down 1 number-down 3 level 5
— config>router>mcac>policy>bundle>mc-constraints# lag-port-down 2 number-down 1 level 1
— config>router>mcac>policy>bundle>mc-constraints# lag-port-down 2 number-down 2 level 3
— config>router>mcac>policy>bundle>mc-constraints# lag-port-down 2 number-down 3 level 5
— config>router>mcac>policy>bundle>mc-constraints# exit
— config>router>mcac>policy>bundle# no shutdown
— config>router>mcac>policy>bundle# exit
— config>router>mcac>policy# exit
— config>router>mcac# policy "btv_vl"
— config>router>mcac>policy# description "eastern TV offering"
— config>router>mcac>policy# bundle "VRT" create
— config>router>mcac>policy>bundle# bandwidth 120000
— config>router>mcac>policy>bundle# channel 239.1.2.0 239.1.2.4 bw 4000 class high type mandatory
— config>router>mcac>policy>bundle# channel 239.1.2.5 239.1.2.5 bw 20000 type mandatory
— config>router>mcac>policy>bundle# channel 239.1.2.10 239.1.2.10 bw 8000 type mandatory
— config>router>mcac>policy>bundle# channel 239.2.2.0 239.2.2.4 bw 4000
— config>router>mcac>policy>bundle# channel 239.2.2.5 239.2.2.5 bw 10000 class high
— config>router>mcac>policy>bundle# channel 239.2.2.6 239.2.2.6 bw 10000 class high
— config>router>mcac>policy>bundle# channel 239.2.2.7 239.2.2.7 bw 10000
— config>router>mcac>policy>bundle# channel 239.2.2.8 239.2.2.8 bw 10000
— config>router>mcac>policy>bundle# mc-constraints
— config>router>mcac>policy>bundle>mc-constraints# level 1 bw 60000
— config>router>mcac>policy>bundle>mc-constraints# level 2 bw 50000
— config>router>mcac>policy>bundle>mc-constraints# level 3 bw 40000
— config>router>mcac>policy>bundle>mc-constraints# level 4 bw 30000
— config>router>mcac>policy>bundle>mc-constraints# level 5 bw 20000
— config>router>mcac>policy>bundle>mc-constraints# level 6 bw 10000
— config>router>mcac>policy>bundle>mc-constraints# lag-port-down 1 number-down 1 level 1
— config>router>mcac>policy>bundle>mc-constraints# lag-port-down 1 number-down 2 level 3
— config>router>mcac>policy>bundle>mc-constraints# lag-port-down 1 number-down 3 level 5
— config>router>mcac>policy>bundle>mc-constraints# lag-port-down 2 number-down 1 level 1
— config>router>mcac>policy>bundle>mc-constraints# lag-port-down 2 number-down 2 level 3
— config>router>mcac>policy>bundle>mc-constraints# lag-port-down 2 number-down 3 level 5
— config>router>mcac>policy>bundle>mc-constraints# exit
— config>router>mcac>policy>bundle# no shutdown
— config>router>mcac>policy>bundle# exit
— config>router>mcac>policy# exit
The following example displays the configuration:
*A:ALA-48>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
----------------------------------------------
*A:ALA-48>config>router>mcac#