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. By default, a channel is represented by the multicast group. For example, each multicast group is a channel. When source-specific accounting is used, each multicast source becomes a channel as well. For example, if there are three multicast groups and two multicast sources for each, there are six channels:
-
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
The multicast bundle defines multicast channels as per the preceding description. A channel can only be part of one bundle. Source-specific accounting can also be specified at the bundle level. At this level, there is the ability to turn on source-specific accounting only at the bundle level, disable it for a particular bundle, or just follow the default configuration specified at the policy level.
-
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
----------------------------------------------