Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

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

Multicast Snooping
      Configure bridge br0 to enable multicast snooping:
 
             ovs-vsctl set Bridge br0 mcast_snooping_enable=true
 
      Set the multicast snooping aging time br0 to 300 seconds:
 
             ovs-vsctl   set  Bridge  br0  other_config:mcast-snooping-aging-
             time=300
 
      Set the multicast snooping table size br0 to 2048 entries:
 
             ovs-vsctl  set  Bridge  br0   other_config:mcast-snooping-table-
             size=2048
 
      Disable  flooding  of unregistered multicast packets to all ports. When
      set to true, the switch will send unregistered multicast  packets  only
      to  ports  connected to multicast routers. When it is set to false, the
      switch will send them to all ports. This command disables the flood  of
      unregistered packets on bridge br0.
 
             ovs-vsctl  set  Bridge  br0 other_config:mcast-snooping-disable-
             flood-unregistered=true
 
      Enable flooding of multicast packets (except  Reports)  on  a  specific
      port.
 
             ovs-vsctl set Port eth1 other_config:mcast-snooping-flood=true
 
      Enable flooding of Reports on a specific port.
 
             ovs-vsctl   set   Port  eth1  other_config:mcast-snooping-flood-
             reports=true
 
      Deconfigure multicasting snooping from above:
 
             ovs-vsctl set Bridge br0 mcast_snooping_enable=false

IGMP Examples

Qualcomm Router

default-version 3
snooping_enabled: true
snooping_bridge: br-home
static_mrouter_port: br-home - ovs-vsctl   set   Port  br-home  other_config:mcast-snooping-flood-reports=true
mcast_group_exceptions: 239.255.255.251/32
unknown_mcast_group flood (ovs-vsctl set Port br-home other_config:mcast-snooping-flood=true)
Proxy_enabled: true
Proxy_upstream_if: eth0
Proxy_dowstream_if: br-home

Qualcomm Bridge

default-version 3
Snooping_enabled: true
Snooping_bridge: br-home
mrouter_port: eth0 - ovs-vsctl   set   Port  br-home  other_config:mcast-snooping-flood-reports=true
mcast_exceptions: 239.255.255.251/32
unknow_mcast_group flood (ovs-vsctl set Port br-home other_config:mcast-snooping-flood=true)
Proxy_enabled: false
Proxy_upstream_if: 
Proxy_dowstream_if:

Broadcom Router

default-version 3
Snooping_enabled: true
Snooping_bridge: br-home
mrouter_port: br-home - ovs-vsctl   set   Port  br-home  other_config:mcast-snooping-flood-reports=true
mcast_exceptions: 239.255.255.251/32
unknow_mcast_group flood (ovs-vsctl set Port br-home other_config:mcast-snooping-flood=true)
proxy_enabled: true
proxy_upstream_if: eth1.201
proxy_dowstream_if: br-home 
other_config:
- mcast-iface eth1.201

Broadcom Bridge

default-version 3
Snooping_enabled: true
Snooping_bridge: br-home
mrouter_port: eth0.201 - ovs-vsctl   set   Port  br-home  other_config:mcast-snooping-flood-reports=true
mcast_exceptions: 239.255.255.251/32
unknow_mcast_group flood (ovs-vsctl set Port br-home other_config:mcast-snooping-flood=true)
Proxy_enabled: false
Proxy_upstream_if:  
Proxy_dowstream_if: 
other_config:
- mcast-iface br-home/eth0.201
- uplink-vid 201

Logic

Possible Table Configurations

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

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

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

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

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

  • No labels