SDN Multicast Solution to Support Various Chip Vendors

Design

HW acceleration settings differ significantly between chip vendors. Also, OVS is missing certain multicast features. Therefore, chip vendors create their own APIs/daemons.

The goals of this feature are:

  • A single table for multicast (lower footprint of OpenSync, reduced complexity, easier support, lower controller usage, better scalability)

  • Ability to support various chip vendor HW acceleration settings

  • Easier and faster development with controller-based IPTV managing

  • Ability to tailor solution for ISPs with controller support

This feature has been designed in accordance with IGMP RFC:

https://tools.ietf.org/html/rfc2236

Nortbound API

OVSDB Schema Changes

####################################### # Two tables: IGMP_Config, MLD_Config # #######################################   ############# IGMP_Config ############# igmp_version: enum (1,2,3) - Default IGMP version # Snooping snooping_enabled: Boolean (true) - Enable|Disable Snooping behavior on specified bridge. snooping_bridge: String (br-home) - Bridge where snooping should be used. static_mrouter_port: String (router=br-home, bridge=uplink_port) - Specify Port where IGMP reports should be sent explicitly. Even if querier is not learned on that port. mcast_group_exceptions: Masked IP address array (239.255.255.251/32) - Multicast groups that should bypass snooping behavior. unknown_mcast_group_behavior: Enum (flood, drop) - Default forwarding behavior for mcast groups that are not learned in snooping table. query_robustness_value: Integer (2) - bcm -  The Robustness Variable allows tuning for the expected packet loss on a subnet. maximum_groups: Integer (25) - bcm|ovs - Max multicast groups that can be learned. fast_leave_enable: Boolean (false) - bcm - Imediatly drop the stream when IGMP leave is received maximum_sources: Integer (10) - bcm,qca - Max sources allowed. # Proxy proxy_enabled: Boolean (true) - Enable|Disable IGMP Proxy behavior proxy_upstream_if: String (eth0) - Interface where IGMP reports are proxied, and where multicast stream is expected proxy_dowstream_if: String (br-home) - Interface where Proxy is listening for IGMP reports proxy_group_exceptions: IP address array (239.255.255.251/32) - mcproxy - Do not proxy specifed multicast groups proxy_allowed_subnets: Masked IP address array (192.168.40.0/24) - Proxy only Mcast groups for the specified source IP subnet. # Querier querier_enabled: Boolean - native  - Enable or disable IGMP Querier query_interval: Integer (125s) - bcm,native - The Query Interval is the interval between General Queries sent by the Querier.  Default: 125 seconds. query_response_interval: Integer (10) - bcm,native - The Max Response Time inserted into the periodic General Queries. last_member_query_interval: Integer (30) - bcm,native - The Last Member Query Interval is the Max Response Time inserted into Group-Specific Queries sent in response to Leave Group messages, and is also the amount of time between Group-Specific Query messages- # Platform specific other_config: #BCM - mcast-interface: String - Mcast Uplink interface. Mandatory for HW acceleration on BCM devices. - uplink-vid: Integer - Vlan id on uplink interface. Mandatory for HW acceleration on BCM devices. - maximum_members: Integer (25) - bcm - Max members allowed subscribed. # If controller needs to be aware of an other_config value, move it to OVSDB scheme   ############# MLD_Config ############## mld_version: enum (1,2) - Default MLD version # Snooping snooping_bridge: String (br-home) - Bridge where snooping should be used. snooping_enabled: Boolean (true) - Enable|Disable Snooping behavior on specified bridge. static_mrouter_port: String (router=br-home, bridge=uplink_port) - Specify Port where MLD reports should be sent explicitly. Even if querier is not learned on that port. mcast_group_exceptions: Masked IPv6 address array (ff02::2/128) - Multicast groups that should bypass snooping behavior. unknown_mcast_group_behavior: Enum (flood, drop) - Default forwarding behavior for mcast groups that are not learned in snooping table. query_robustness_value: Integer (2) - bcm -  The Robustness Variable allows tuning for the expected packet loss on a subnet. maximum_groups: Integer (25) - bcm|ovs - Max multicast groups that can be learned. fast_leave_enable: Boolean (false) - bcm - Imidiatly drop the stream when MLD leave is received maximum_sources: Integer (10) - bcm,qca - Max sources allowed. # Proxy proxy_enabled: Boolean (true) - Enable|Disable MLD Proxy behavior proxy_upstream_if: String (eth0) - Interface where MLD reports are proxied, and where multicast stream is expected. proxy_dowstream_if: String (br-home) - Interface where Proxy is listening for MLD reports, and where multicast stream is sent. proxy_group_exceptions: IP address array (FF02::C/128) - mcproxy - Do not proxy specifed multicast groups proxy_allowed_subnets: Masked IPv6 address array (::) - Proxy only Mcast groups for the specified source IP subnet. # Querier querier_enabled: Boolean - native  - Enable or disable MLD Querier query_interval: Integer (125s) - bcm,native - The Query Interval is the interval between General Queries sent by the Querier.  Default: 125 seconds. query_response_interval: Integer (10) - bcm,native - The Max Response Time inserted into the periodic General Queries. last_member_query_interval: Integer (30) - bcm,native - The Last Member Query Interval is the Max Response Time inserted into Group-Specific Queries sent in response to Leave Group messages, and is also the amount of time between Group-Specific Query messages # Platform specific other_config: #BCM - mcast-interface: String - Mcast Uplink interface. Mandatory for HW acceleration on BCM devices. - uplink-vid: Integer - Vlan id on uplink interface. Mandatory for HW acceleration on BCM devices. - maximum_members: Integer (25) - bcm - Max members allowed subscribed. # If controller needs to be aware of an other_config value, move it to OVSDB scheme

Southbound API

Broadcom Multicast Proxy Daemon (MCPD) Config Options

#Begin IGMP configuration igmp-default-version 2 igmp-query-interval 125 igmp-query-response-interval 10 igmp-last-member-query-interval 10 igmp-robustness-value 2 igmp-lan-to-lan-multicast 0 igmp-max-groups 25 igmp-max-sources 10 igmp-max-members 25 igmp-fast-leave 1 igmp-join-immediate 0 igmp-proxy-enable 1 igmp-proxy-interfaces atm0 ptm0.1 eth4.1 igmp-snooping-enable 1 igmp-snooping-interfaces br0 br0:0 br0:1 # #End IGMP configuration # # #Begin MLD configuration # mld-default-version 2 mld-query-interval 125 mld-query-response-interval 10 mld-last-member-query-interval 10 mld-robustness-value 2 mld-lan-to-lan-multicast 0 mld-max-groups 10 mld-max-sources 10 mld-max-members 10 mld-fast-leave 1 mld-proxy-enable 0 mld-proxy-interfaces mld-snooping-enable 1 mld-snooping-interfaces br0 br0:0 br0:1

Native Bridge Config Options

-rw-r--r--    1 root     root          4096 Apr 29 12:08 multicast_last_member_count -rw-r--r--    1 root     root          4096 Apr 29 12:08 multicast_last_member_interval -rw-r--r--    1 root     root          4096 Apr 29 12:08 multicast_membership_interval -rw-r--r--    1 root     root          4096 Apr 29 12:08 multicast_querier -rw-r--r--    1 root     root          4096 Apr 29 12:08 multicast_querier_interval -rw-r--r--    1 root     root          4096 Apr 29 12:08 multicast_query_interval -rw-r--r--    1 root     root          4096 Apr 29 12:08 multicast_query_response_interval -rw-r--r--    1 root     root          4096 Apr 29 12:08 multicast_query_use_ifaddr -rw-r--r--    1 root     root          4096 Apr 29 12:08 multicast_router -rw-r--r--    1 root     root          4096 Apr 29 12:08 multicast_snooping -rw-r--r--    1 root     root          4096 Apr 29 12:08 multicast_startup_query_count -rw-r--r--    1 root     root          4096 Apr 29 12:08 multicast_startup_query_interval

OVS Config Options

IGMP Examples

Qualcomm Router

Qualcomm Bridge

Broadcom Router

Broadcom Bridge

Logic

Possible Table Configurations

These two tables are applicable when VLAN services are NOT enabled:

BRIDGE

Qualcomm

Broadcom

BRIDGE

Qualcomm

Broadcom

igmp_version

IGMPv3

IGMPv3

snooping_enabled

true

true

snooping_bridge

"br-home"

"br-home"

static_mrouter_port

uplink interface (eth0, g-bhaul)

uplink interface (eth0, g-bhaul)

mcast_group_exceptions

UPnP, NDP

UPnP, NDP

unknown_mcast_group_behavior

"FLOOD"

"FLOOD"

fast_leave_enable

 false

false

maximum_groups

0

0

maximum_sources

0

0

 

 

 

proxy_enabled

false

false

proxy_upstream_if

""

""

proxy_dowstream_if

""

""

proxy_group_exceptions

""

""

proxy_allowed_subnets

""

""

query_robustness_value

0

0

 

 

 

querier_enabled

false

false

query_interval

0

0

query_response_interval

0

0

last_member_query_interval

0

0

 

 

 

other_config

 

 

*mcast_bridge

 

true

*mcast_interface

 

uplink interface

*uplink_vid

 

 

maximum_members

 

 

[BRIDGE]---------eth---------[BRIDGE]     )))) (((((     [BRIDGE]     

ROUTER

Qualcomm

Broadcom

ROUTER

Qualcomm

Broadcom

igmp_version

IGMPv3

IGMPv3

snooping_enabled

true

true

snooping_bridge

"br-home"

"br-home"

static_mrouter_port

"br-home"

"br-home"

mcast_group_exceptions

UPnP, NDP

UPnP, NDP

unknown_mcast_group_behavior

"FLOOD"

"FLOOD"

fast_leave_enable

 false

false

maximum_groups

0

0

maximum_sources

0

0

 

 

 

proxy_enabled

true

true

proxy_upstream_if

uplink interface

uplink interface

proxy_dowstream_if

"br-home"

"br-home"

proxy_group_exceptions

""

""

proxy_allowed_subnets

""

""

query_robustness_value

0

0

 

 

 

querier_enabled

false

false

query_interval

0

0

query_response_interval

0

0

last_member_query_interval

0

0

 

 

 

other_config

 

 

*mcast_bridge

 

false

*mcast_interface

 

uplink interface

*uplink_vid

 

 

maximum_members

 

 

[ROUTER]---------eth---------[BRIDGE]     )))) (((((     [BRIDGE]     

Location in router mode with bridged IPTV service enabled:

GATEWAY (gw == eth uplink)

Qualcomm

Broadcom

GATEWAY (gw == eth uplink)

Qualcomm

Broadcom

igmp_version

IGMPv3

IGMPv3

snooping_enabled

true

true

snooping_bridge

"br-home"

"br-home"

static_mrouter_port

vlan uplink interface (eth0.200)

vlan uplink interface (eth0.200)

mcast_group_exceptions

UPnP, NDP

UPnP, NDP

unknown_mcast_group_behavior

"FLOOD"

"FLOOD"

fast_leave_enable

 false

false

maximum_groups

0

0

maximum_sources

0

0

 

 

 

proxy_enabled

false

false

proxy_upstream_if

""

""

proxy_dowstream_if

""

""

proxy_group_exceptions

""

""

proxy_allowed_subnets

""

""

query_robustness_value

0

0

 

 

 

querier_enabled

false

false

query_interval

0

0

query_response_interval

0

0

last_member_query_interval

0

0

 

 

 

other_config

 

 

*mcast_bridge

 

true

*mcast_interface

 

vlan uplink interface

*uplink_vid

 

 

maximum_members

 

 

[Bridged IPTV GW]---------eth---------[Bridged IPTV GW]     )))) (((((     [BRIDGE]     

Location in router mode with routed IPTV service enabled:

GATEWAY

Qualcomm

Broadcom

GATEWAY

Qualcomm

Broadcom

igmp_version

IGMPv3

IGMPv3

snooping_enabled

true

true

snooping_bridge

"br-home"

"br-home"

static_mrouter_port

"br-home"

"br-home"

mcast_group_exceptions

UPnP, NDP

UPnP, NDP

unknown_mcast_group_behavior

"FLOOD"

"FLOOD"

fast_leave_enable

 false

false

maximum_groups

0

0

maximum_sources

0

0

 

 

 

proxy_enabled

true

true

proxy_upstream_if

vlan uplink interface

vlan uplink interface

proxy_dowstream_if

"br-home"

"br-home"

proxy_group_exceptions

""

""

proxy_allowed_subnets

""

""

query_robustness_value

0

0

 

 

 

querier_enabled

false

false

query_interval

0

0

query_response_interval

0

0

last_member_query_interval

0

0

 

 

 

other_config

 

 

*mcast_bridge

 

false

*mcast_interface

 

vlan uplink interface

*uplink_vid

 

 

maximum_members

 

 

[Routed IPTV GW]---------eth---------[BRIDGE]     )))) (((((     [BRIDGE] 

Config Selection Logic

When setting the multicast configuration, both IGMP and MLD are set at the same time. These are the prerequisites:

  1. Snooping must be enabled.

  2. Location is in bridge mode: always use BRIDGE config.

  3. Location is in router mode: check if VLAN service is enabled.

    1. VLAN service is NOT enabled

      1. Proxy is disabled: not applicable

      2. Proxy is enabled: gateway using ROUTER configuration, leaf nodes using BRIDGE configuration

    2. VLAN service is enabled

      1. is_mcast == true

        1. Bridged: gateway and Ethernet nodes using bridged IPTV gateway configuration, other leaf nodes are using normal BRIDGE configuration (works as described here)

        2. Routed: gateway nodes are using routed IPTV gateway configuration, leaf nodes are using normal BRIDGE configuration (works as described here)

      2. is_mcast == false, unicast configuration

        1. Bridged: NO multicast config

        2. Routed: NO multicast config