Description

There is a behavior change in Apstra release 4.1.1 as shown in the following release notes link:
https://supportportal.juniper.net/s/article/Juniper-Apstra-Software-Release-Notification-for-Juniper-Apstra-Version-4-1-1?language=en_US

# RN 4.1.1 : Change RSTP configuration of Junos leaf devices

Made configuration change to default design for Junos leaf devices to render edge command on server-facing interfaces. This chance protects users from introducing a data plane loop in the data center if someone inadvertently connected two leaf devices together.

=== Sample config in 4.1.0 === 

protocols {
    replace: rstp {
        bridge-priority 0;
        interface ae4;
        interface ae5;
        interface ae6;
        bpdu-block-on-edge;
    }
}

=== Sample config in 4.1.1 === 

protocols {
    replace: rstp {
        bridge-priority 0;
        interface ae4 {
            edge;
        }
        interface ae5 {
            edge;
        }
        interface ae6 {
            edge;
        }
        bpdu-block-on-edge;
    }
}
 

Solution

Notes: "edge" port will go down when BDPU is received. If you have a switch device connected to server-port (e.g. generic system) on leaf devices, you MUST remove "edge" config from the above protocol rstp interface configuration. 

=== if you want to remove the change from e.g. xe-0/0/1, use configlet (see example below) === 

As an example, this is a static configlet applied on a specific port:

protocols {
rstp {
interface xe-0/0/1 {
delete: edge;
}
}
}

If you'd like to dynamically remove it from all the AE and physical ports, you could make use of jinja2 based templates inside the configlet, this is an example:

protocols { 
replace: rstp { 
{% for if_name, if_param in interface.items() %} 
{% if if_param.get('role') in ['l2edge', 'l2_router'] and ('ae' in if_param['intfName'] or not if_param.get('part_of')) %} 
interface {{if_param['intfName']}} { 

{% endif %} 
{% endfor %} 
}
}

Modification History

06-11-2024: Added options for configlet.