Fortinet white logo
Fortinet white logo

Administration Guide

IPv6 multicast routing BSR support New

IPv6 multicast routing BSR support New

FortiGate supports BSR (Bootstrap Router) for IPv6 multicast, enabling dynamic RP discovery and aligning IPv6 multicast capabilities with existing IPv4 PIM-SM deployments. BSR is a mechanism in PIM-SM that automates the discovery and advertisement of Rendezvous Points (RPs), simplifying configuration and improving scalability for large-scale multicast environments.

Commands to support multicast flows for IPv6 to be used for static-group in PIM6 interface:

config router multicast6-flow
    edit <name>
        config flows
            edit <id>
                set *group-addr <IPv6 addr>
            next
        end 
    next
end

Command or option

Description

config router multicast6-flow

Configure IPv6 multicast-flow.

config flows

IPv6 multicast-flow entries.

id

Flow ID.

*group-addr <IPv6 addr>

Multicast group IP address.

Commands to support PIM6 RP configurations for PIM6 interface:

config router multicast6
    config interface
        edit <name>
            set rp-candidate {enable | disable}
            set static-group <string>
            set rp-candidate-group <string>
            set rp-candidate-priority <value>
            set rp-candidate-interval <integer>
        next
    end
end

Command or option

Description

config interface

Protocol Independent Multicast (PIM) interfaces.

rp-candidate {enable | disable}

Enable/disable compete to become RP in elections:

  • enable: Compete for RP elections.

  • disable: Do not compete for RP elections.

static-group <string>

Statically set IPv6 multicast groups to forward out.

rp-candidate-group <string>

Multicast groups managed by this RP.

rp-candidate-priority <value>

Router's priority as RP (0 - 255, default = 192).

rp-candidate-interval <integer>

RP candidate advertisement interval (1 - 16383 sec, default = 60).

Commands to support PIM6 BSR configurations without VRF:

config router multicast6
    config pim-sm-global
        set bsr-candidate {enable | disable}  
        set bsr-interface <string>
        set bsr-priority <integer>
        set bsr-hash <integer>
        set bsr-allow-quick-refresh {enable | disable}
        set cisco-crp-prefix {enable | disable}
        set cisco-ignore-rp-set-priority {enable | disable}
        set spt-threshold {enable | disable}
        set spt-threshould-group <string>
        config rp-address
            edit <id>
                set *ip6-address <IPv6 addr>
                set group <string>
            next
        end
    end
end

Command or option

Description

config pim-sm-global

PIM sparse-mode global settings.

bsr-candidate {enable | disable}

Enable/disable allowing this router to become a bootstrap router (BSR).

bsr-interface <string>

Interface to advertise as candidate BSR.

bsr-priority <integer>

BSR priority (0 - 255, default = 0).

bsr-hash <integer>

BSR hash length (0 - 32, default = 10).

bsr-allow-quick-refresh {enable | disable}

Enable/disable accept BSR quick refresh packets

from neighbors.

cisco-crp-prefix {enable | disable}

Enable/disable making candidate RP compatible with old Cisco IOS:

  • enable: Do not allow sending group prefix of zero.

  • disable: Allow sending group prefix of zero.

cisco-ignore-rp-set-priority {enable | disable}

Use only hash for RP selection (compatibility with old Cisco IOS):

  • enable: Ignore RP-SET priority value.

  • disable: Do not ignore RP-SET priority value.

spt-threshold {enable | disable}

Enable/disable switching to source specific tree:

  • enable:Switch to Source tree when available.

  • disable: Do not switch to Source tree when available.

spt-threshould-group <string>

Groups allowed to switch to source tree.

config rp-address

Statically configure RP addresses.

*ip6-address <IPv6 addr>

RP router IPv6 address.

group <string>

Groups to use this RP.

Commands to support PIM6 BSR configurations per VRF:

config router multicast6
    config pim-sm-global-vrf
        edit <id>
            set bsr-candidate {enable | disable}  
            set bsr-interface <string>
            set bsr-priority <integer>
            set bsr-hash <integer>
            set bsr-allow-quick-refresh {enable | disable}
            set cisco-crp-prefix {enable | disable}
            config rp-address
                edit <id>
                    set *ip6-address <IPv6 addr>
                    set group <string>
                next
            end
        next
    end
end

Command or option

Description

config pim-sm-global-vrf

Per-VRF PIM sparse-mode global settings.

bsr-candidate {enable | disable}

Enable/disable allowing this router to become a bootstrap router (BSR).

bsr-interface <string>

Interface to advertise as candidate BSR.

bsr-priority <integer>

BSR priority (0 - 255, default = 0).

bsr-hash <integer>

BSR hash length (0 - 32, default = 10).

bsr-allow-quick-refresh {enable | disable}

Enable/disable accept BSR quick refresh packets

from neighbors.

cisco-crp-prefix {enable | disable}

Enable/disable making candidate RP compatible with old Cisco IOS:

  • enable: Do not allow sending group prefix of zero.

  • disable: Allow sending group prefix of zero.

config rp-address

Statically configure RP addresses.

*ip6-address <IPv6 addr>

RP router IPv6 address.

group <string>

Groups to use this RP.

Example

This example about large-scale deployments shows how BSR (Bootstrap Router) can be used to dynamically learn the RP info and avoid mis-configurations.

In this example, three FortiGates are configured to support IPv6 multicast routing using PIM-SM. FGT1 and FGT2 are configured as RP and BSR candidates for IPv6 multicast groups, while port4 on FGT3 is connected to a multicast receiver:

  • FGT1:

    config router access-list6
        edit "list6"
            config rule
                edit 1
                    set prefix6 ff05::10/128
                next
            end
        next
        edit "list11"
            config rule
                edit 1
                    set prefix6 ff05::11/128
                next
            end
        next
    end
    config router multicast6
        set multicast-routing enable
        config interface
            edit "port1"
                set rp-candidate enable
                set rp-candidate-group "list11"
            next
            edit "port2"
                set rp-candidate enable
                set rp-candidate-group "list6"
                set rp-candidate-priority 200
            next
            edit "fortilink"
            next
        end
        config pim-sm-global
            set bsr-candidate enable
            set bsr-interface "port1"
        end
    end
  • FGT2

    config router access-list6
        edit "list6"
            config rule
                edit 1
                    set prefix6 ff05::10/128
                next
            end
        next
    end
    config router multicast6
        set multicast-routing enable
        config interface
            edit "port1"
                set rp-candidate enable
                set rp-candidate-group "list6"
            next
            edit "npu0_vlink0"
            next
        end
        config pim-sm-global
            set bsr-candidate enable
            set bsr-interface "port1"
        end
    end
  • FGT3

    config router multicast6
        set multicast-routing enable
        config interface
            edit "npu0_vlink1"
            next
            edit "port4"        
            next
        end
    end

Verification of BSR Election and RP Mapping in IPv6 PIM Sparse Mode Across FortiGates:

  • FGT1:

    # get router info6 multicast pim sparse-mode bsr-router
    PIMv2 Bootstrap information for VRF 0
      BSR address: 2000:172:16:200::4
      Uptime:      02:02:12, BSR Priority: 0, Hash mask length: 126
      Expires:     00:01:12
      Role: Candidate BSR
      State: Candidate BSR
    
      Candidate RP: 2000:172:16:205::1(port2)
        Advertisement interval 60 seconds
        Next Cand_RP_advertisement in 00:00:15
    
      Candidate RP: 2000:172:16:200::1(port1)
        Advertisement interval 60 seconds
        Next Cand_RP_advertisement in 00:00:02
    # get router info6 multicast pim sparse-mode rp mapping
    PIM Group-to-RP Mappings for VRF 0
    Group(s): ff05::10/128
      RP: 2000:172:16:200::4
        Info source: 2000:172:16:200::4, via bootstrap, priority 192
             Uptime: 00:54:11, expires: 00:02:19
      RP: 2000:172:16:205::1
        Info source: 2000:172:16:200::4, via bootstrap, priority 200
             Uptime: 00:55:18, expires: 00:02:19
    Group(s): ff05::11/128
      RP: 2000:172:16:200::1
        Info source: 2000:172:16:200::4, via bootstrap, priority 192
             Uptime: 00:55:18, expires: 00:02:19
    # get router info6 multicast pim sparse-mode rp-hash ff05::11
        VRF 0 RP: 2000:172:16:200::1
        Info source: 2000:172:16:200::4, via bootstrap
    # get router info6 multicast pim sparse-mode rp-hash ff05::10
        VRF 0 RP: 2000:172:16:200::4
        Info source: 2000:172:16:200::4, via bootstrap
    # get router info6 multicast pim sparse-mode nexthop
    Flags: N = New, R = RP, S = Source, U = Unreachable
    VRF Destination          Type  Nexthop   Nexthop              Nexthop  Nexthop Metric Pref  Refcnt
                                     Num     Addr                 Ifindex  Name
    ______________________________________________________________________________________________
      0 2000:172:16:200::1   .R..  1         2000:172:16:200::1   7                0      0     1
      0 2000:172:16:200::4   .RS.  1         2000:172:16:200::4   7                0      0     3
      0 2000:172:16:205::11  ..S.  1         2000:172:16:205::11  8                0      0     1
    # get router info6 multicast pim sparse-mode mroute
    IP Multicast Routing Table
    
    (*,*,RP) Entries: 0
    (*,G) Entries: 1
    (S,G) Entries: 1
    (S,G,rpt) Entries: 0
    FCR Entries: 0
    
    VRF 0 (2000:172:16:205::11, ff05::10)
    RPF nbr: ::
    RPF idx: None
    SPT bit: 1
    Upstream State: JOINED
     Local:
     Joined:
         port1
     Asserted:
     Outgoing:
         port1
    
    VRF 0 (*, ff05::11)
    RP: 2000:172:16:200::1
    RPF nbr: ::
    RPF idx: None
    Upstream State: JOINED
     Local:
     Joined:
         port1
     Asserted:
    FCR:
  • FGT2

    # get router info6 multicast pim sparse-mode bsr-router
    PIMv2 Bootstrap information for VRF 0
    This system is the Bootstrap Router (BSR)
      BSR address: 2000:172:16:200::4
      Uptime:      00:55:37, BSR Priority: 0, Hash mask length: 126
      Next bootstrap message in 00:00:28
      Role: Candidate BSR
      State: Elected BSR
    
      Candidate RP: 2000:172:16:200::4(port1)
        Advertisement interval 60 seconds
        Next Cand_RP_advertisement in 00:00:25
    # get router info6 multicast pim sparse-mode rp mapping
    PIM Group-to-RP Mappings for VRF 0
    This system is the Bootstrap Router (v2)
    Group(s): ff05::10/128
      RP: 2000:172:16:200::4
        Info source: 2000:172:16:200::4, via bootstrap, priority 192
             Uptime: 00:55:51, expires: 00:01:39
      RP: 2000:172:16:205::1
        Info source: 2000:172:16:205::1, via bootstrap, priority 200
             Uptime: 00:57:36, expires: 00:01:54
    Group(s): ff05::11/128
      RP: 2000:172:16:200::1
        Info source: 2000:172:16:200::1, via bootstrap, priority 192
             Uptime: 00:57:49, expires: 00:01:41
  • FGT3

    # get router info6 multicast pim sparse-mode bsr-router
    PIMv2 Bootstrap information for VRF 0
      BSR address: 2000:172:16:200::4
      Uptime:      02:04:31, BSR Priority: 0, Hash mask length: 126
      Expires:     00:01:53
      Role: Non-candidate BSR
      State: Accept Preferred
    # get router info6 multicast pim sparse-mode rp mapping
    PIM Group-to-RP Mappings for VRF 0
    Group(s): ff05::10/128
      RP: 2000:172:16:200::4
        Info source: 2000:172:16:200::4, via bootstrap, priority 192
             Uptime: 00:56:21, expires: 00:02:09
      RP: 2000:172:16:205::1
        Info source: 2000:172:16:200::4, via bootstrap, priority 200
             Uptime: 00:57:28, expires: 00:02:09
    Group(s): ff05::11/128
      RP: 2000:172:16:200::1
        Info source: 2000:172:16:200::4, via bootstrap, priority 192
             Uptime: 00:57:28, expires: 00:02:09

IPv6 multicast routing BSR support New

IPv6 multicast routing BSR support New

FortiGate supports BSR (Bootstrap Router) for IPv6 multicast, enabling dynamic RP discovery and aligning IPv6 multicast capabilities with existing IPv4 PIM-SM deployments. BSR is a mechanism in PIM-SM that automates the discovery and advertisement of Rendezvous Points (RPs), simplifying configuration and improving scalability for large-scale multicast environments.

Commands to support multicast flows for IPv6 to be used for static-group in PIM6 interface:

config router multicast6-flow
    edit <name>
        config flows
            edit <id>
                set *group-addr <IPv6 addr>
            next
        end 
    next
end

Command or option

Description

config router multicast6-flow

Configure IPv6 multicast-flow.

config flows

IPv6 multicast-flow entries.

id

Flow ID.

*group-addr <IPv6 addr>

Multicast group IP address.

Commands to support PIM6 RP configurations for PIM6 interface:

config router multicast6
    config interface
        edit <name>
            set rp-candidate {enable | disable}
            set static-group <string>
            set rp-candidate-group <string>
            set rp-candidate-priority <value>
            set rp-candidate-interval <integer>
        next
    end
end

Command or option

Description

config interface

Protocol Independent Multicast (PIM) interfaces.

rp-candidate {enable | disable}

Enable/disable compete to become RP in elections:

  • enable: Compete for RP elections.

  • disable: Do not compete for RP elections.

static-group <string>

Statically set IPv6 multicast groups to forward out.

rp-candidate-group <string>

Multicast groups managed by this RP.

rp-candidate-priority <value>

Router's priority as RP (0 - 255, default = 192).

rp-candidate-interval <integer>

RP candidate advertisement interval (1 - 16383 sec, default = 60).

Commands to support PIM6 BSR configurations without VRF:

config router multicast6
    config pim-sm-global
        set bsr-candidate {enable | disable}  
        set bsr-interface <string>
        set bsr-priority <integer>
        set bsr-hash <integer>
        set bsr-allow-quick-refresh {enable | disable}
        set cisco-crp-prefix {enable | disable}
        set cisco-ignore-rp-set-priority {enable | disable}
        set spt-threshold {enable | disable}
        set spt-threshould-group <string>
        config rp-address
            edit <id>
                set *ip6-address <IPv6 addr>
                set group <string>
            next
        end
    end
end

Command or option

Description

config pim-sm-global

PIM sparse-mode global settings.

bsr-candidate {enable | disable}

Enable/disable allowing this router to become a bootstrap router (BSR).

bsr-interface <string>

Interface to advertise as candidate BSR.

bsr-priority <integer>

BSR priority (0 - 255, default = 0).

bsr-hash <integer>

BSR hash length (0 - 32, default = 10).

bsr-allow-quick-refresh {enable | disable}

Enable/disable accept BSR quick refresh packets

from neighbors.

cisco-crp-prefix {enable | disable}

Enable/disable making candidate RP compatible with old Cisco IOS:

  • enable: Do not allow sending group prefix of zero.

  • disable: Allow sending group prefix of zero.

cisco-ignore-rp-set-priority {enable | disable}

Use only hash for RP selection (compatibility with old Cisco IOS):

  • enable: Ignore RP-SET priority value.

  • disable: Do not ignore RP-SET priority value.

spt-threshold {enable | disable}

Enable/disable switching to source specific tree:

  • enable:Switch to Source tree when available.

  • disable: Do not switch to Source tree when available.

spt-threshould-group <string>

Groups allowed to switch to source tree.

config rp-address

Statically configure RP addresses.

*ip6-address <IPv6 addr>

RP router IPv6 address.

group <string>

Groups to use this RP.

Commands to support PIM6 BSR configurations per VRF:

config router multicast6
    config pim-sm-global-vrf
        edit <id>
            set bsr-candidate {enable | disable}  
            set bsr-interface <string>
            set bsr-priority <integer>
            set bsr-hash <integer>
            set bsr-allow-quick-refresh {enable | disable}
            set cisco-crp-prefix {enable | disable}
            config rp-address
                edit <id>
                    set *ip6-address <IPv6 addr>
                    set group <string>
                next
            end
        next
    end
end

Command or option

Description

config pim-sm-global-vrf

Per-VRF PIM sparse-mode global settings.

bsr-candidate {enable | disable}

Enable/disable allowing this router to become a bootstrap router (BSR).

bsr-interface <string>

Interface to advertise as candidate BSR.

bsr-priority <integer>

BSR priority (0 - 255, default = 0).

bsr-hash <integer>

BSR hash length (0 - 32, default = 10).

bsr-allow-quick-refresh {enable | disable}

Enable/disable accept BSR quick refresh packets

from neighbors.

cisco-crp-prefix {enable | disable}

Enable/disable making candidate RP compatible with old Cisco IOS:

  • enable: Do not allow sending group prefix of zero.

  • disable: Allow sending group prefix of zero.

config rp-address

Statically configure RP addresses.

*ip6-address <IPv6 addr>

RP router IPv6 address.

group <string>

Groups to use this RP.

Example

This example about large-scale deployments shows how BSR (Bootstrap Router) can be used to dynamically learn the RP info and avoid mis-configurations.

In this example, three FortiGates are configured to support IPv6 multicast routing using PIM-SM. FGT1 and FGT2 are configured as RP and BSR candidates for IPv6 multicast groups, while port4 on FGT3 is connected to a multicast receiver:

  • FGT1:

    config router access-list6
        edit "list6"
            config rule
                edit 1
                    set prefix6 ff05::10/128
                next
            end
        next
        edit "list11"
            config rule
                edit 1
                    set prefix6 ff05::11/128
                next
            end
        next
    end
    config router multicast6
        set multicast-routing enable
        config interface
            edit "port1"
                set rp-candidate enable
                set rp-candidate-group "list11"
            next
            edit "port2"
                set rp-candidate enable
                set rp-candidate-group "list6"
                set rp-candidate-priority 200
            next
            edit "fortilink"
            next
        end
        config pim-sm-global
            set bsr-candidate enable
            set bsr-interface "port1"
        end
    end
  • FGT2

    config router access-list6
        edit "list6"
            config rule
                edit 1
                    set prefix6 ff05::10/128
                next
            end
        next
    end
    config router multicast6
        set multicast-routing enable
        config interface
            edit "port1"
                set rp-candidate enable
                set rp-candidate-group "list6"
            next
            edit "npu0_vlink0"
            next
        end
        config pim-sm-global
            set bsr-candidate enable
            set bsr-interface "port1"
        end
    end
  • FGT3

    config router multicast6
        set multicast-routing enable
        config interface
            edit "npu0_vlink1"
            next
            edit "port4"        
            next
        end
    end

Verification of BSR Election and RP Mapping in IPv6 PIM Sparse Mode Across FortiGates:

  • FGT1:

    # get router info6 multicast pim sparse-mode bsr-router
    PIMv2 Bootstrap information for VRF 0
      BSR address: 2000:172:16:200::4
      Uptime:      02:02:12, BSR Priority: 0, Hash mask length: 126
      Expires:     00:01:12
      Role: Candidate BSR
      State: Candidate BSR
    
      Candidate RP: 2000:172:16:205::1(port2)
        Advertisement interval 60 seconds
        Next Cand_RP_advertisement in 00:00:15
    
      Candidate RP: 2000:172:16:200::1(port1)
        Advertisement interval 60 seconds
        Next Cand_RP_advertisement in 00:00:02
    # get router info6 multicast pim sparse-mode rp mapping
    PIM Group-to-RP Mappings for VRF 0
    Group(s): ff05::10/128
      RP: 2000:172:16:200::4
        Info source: 2000:172:16:200::4, via bootstrap, priority 192
             Uptime: 00:54:11, expires: 00:02:19
      RP: 2000:172:16:205::1
        Info source: 2000:172:16:200::4, via bootstrap, priority 200
             Uptime: 00:55:18, expires: 00:02:19
    Group(s): ff05::11/128
      RP: 2000:172:16:200::1
        Info source: 2000:172:16:200::4, via bootstrap, priority 192
             Uptime: 00:55:18, expires: 00:02:19
    # get router info6 multicast pim sparse-mode rp-hash ff05::11
        VRF 0 RP: 2000:172:16:200::1
        Info source: 2000:172:16:200::4, via bootstrap
    # get router info6 multicast pim sparse-mode rp-hash ff05::10
        VRF 0 RP: 2000:172:16:200::4
        Info source: 2000:172:16:200::4, via bootstrap
    # get router info6 multicast pim sparse-mode nexthop
    Flags: N = New, R = RP, S = Source, U = Unreachable
    VRF Destination          Type  Nexthop   Nexthop              Nexthop  Nexthop Metric Pref  Refcnt
                                     Num     Addr                 Ifindex  Name
    ______________________________________________________________________________________________
      0 2000:172:16:200::1   .R..  1         2000:172:16:200::1   7                0      0     1
      0 2000:172:16:200::4   .RS.  1         2000:172:16:200::4   7                0      0     3
      0 2000:172:16:205::11  ..S.  1         2000:172:16:205::11  8                0      0     1
    # get router info6 multicast pim sparse-mode mroute
    IP Multicast Routing Table
    
    (*,*,RP) Entries: 0
    (*,G) Entries: 1
    (S,G) Entries: 1
    (S,G,rpt) Entries: 0
    FCR Entries: 0
    
    VRF 0 (2000:172:16:205::11, ff05::10)
    RPF nbr: ::
    RPF idx: None
    SPT bit: 1
    Upstream State: JOINED
     Local:
     Joined:
         port1
     Asserted:
     Outgoing:
         port1
    
    VRF 0 (*, ff05::11)
    RP: 2000:172:16:200::1
    RPF nbr: ::
    RPF idx: None
    Upstream State: JOINED
     Local:
     Joined:
         port1
     Asserted:
    FCR:
  • FGT2

    # get router info6 multicast pim sparse-mode bsr-router
    PIMv2 Bootstrap information for VRF 0
    This system is the Bootstrap Router (BSR)
      BSR address: 2000:172:16:200::4
      Uptime:      00:55:37, BSR Priority: 0, Hash mask length: 126
      Next bootstrap message in 00:00:28
      Role: Candidate BSR
      State: Elected BSR
    
      Candidate RP: 2000:172:16:200::4(port1)
        Advertisement interval 60 seconds
        Next Cand_RP_advertisement in 00:00:25
    # get router info6 multicast pim sparse-mode rp mapping
    PIM Group-to-RP Mappings for VRF 0
    This system is the Bootstrap Router (v2)
    Group(s): ff05::10/128
      RP: 2000:172:16:200::4
        Info source: 2000:172:16:200::4, via bootstrap, priority 192
             Uptime: 00:55:51, expires: 00:01:39
      RP: 2000:172:16:205::1
        Info source: 2000:172:16:205::1, via bootstrap, priority 200
             Uptime: 00:57:36, expires: 00:01:54
    Group(s): ff05::11/128
      RP: 2000:172:16:200::1
        Info source: 2000:172:16:200::1, via bootstrap, priority 192
             Uptime: 00:57:49, expires: 00:01:41
  • FGT3

    # get router info6 multicast pim sparse-mode bsr-router
    PIMv2 Bootstrap information for VRF 0
      BSR address: 2000:172:16:200::4
      Uptime:      02:04:31, BSR Priority: 0, Hash mask length: 126
      Expires:     00:01:53
      Role: Non-candidate BSR
      State: Accept Preferred
    # get router info6 multicast pim sparse-mode rp mapping
    PIM Group-to-RP Mappings for VRF 0
    Group(s): ff05::10/128
      RP: 2000:172:16:200::4
        Info source: 2000:172:16:200::4, via bootstrap, priority 192
             Uptime: 00:56:21, expires: 00:02:09
      RP: 2000:172:16:205::1
        Info source: 2000:172:16:200::4, via bootstrap, priority 200
             Uptime: 00:57:28, expires: 00:02:09
    Group(s): ff05::11/128
      RP: 2000:172:16:200::1
        Info source: 2000:172:16:200::4, via bootstrap, priority 192
             Uptime: 00:57:28, expires: 00:02:09