cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
1290
Views
0
Helpful
4
Replies

Questions regarding BPDU handling & MCP

suneq
Level 1
Level 1

Hi experts,

According to the design guide, Cisco ACI floods BPDUs only between the ports in the bridge domain that have the same encapsulation.

Please refer to the diagram below

suneq_0-1705493247979.png

1. As you may see, the incoming traffic to port A & B are untagged, incoming traffic to port C as tagged with VLAN 10 but all 3 ports are configured with port encap VLAN 10 (EPG static binding). Are the ports A, B, C considered as using the same encapsulation?  From design perspective, I just want to make sure that:

  • BPDU coming from Legacy switch #1 will reach Legacy switch #2 via ACI
  • BPDU coming from Legacy switch #1 will reach Legacy switch #3 via ACI

2. If MCP is enabled on port A & B and somehow STP stops working, from my understanding, ACI will detect the loop and block a port (A or B) with MCP. But which one will be blocked? Is there any documentation explaning with details how ACI identifies that port? Let's say if we have port A as primary port and port B as secondary port, is there any way to configure with MCP so that we will always block port B in case of loop?

Thanks for your help.

1 Accepted Solution

Accepted Solutions

RedNectar
VIP Alumni
VIP Alumni

Hi @suneq ,

Sorry it's taken so long to answer this. Required a bit of research


Firstly, thanks for the great diagram.  Let me repeat it here so people reading this on email can see it.

RedNectar_0-1705523205740.png

Now to your comments/questions


According to the design guide, Cisco ACI floods BPDUs only between the ports in the bridge domain that have the same encapsulation.

Almost correct - ACI floods BPDUs only between the ports in the bridge domain EPG that have the same VLAN encapsulation (and from the same VLAN Pool).

When a BPDU arrives at a port carrying a VLAN tag, the BPDU is flooded on a multicast tree using the VXLAN VNID of the FD_VLAN, this VNID is actually calculated from the VLAN pool that the VLAN was taken from.  So if, say VLAN 5 was used by two different tenants, and each tenant had its own VLAN Pool containing VLAN 5, each instance of VLAN 5 would use a different VNID, so there'd by no leaking of BPDUs from one instance of VLAN 5 to the other. (This reference explains this concept more fully)

In essence, this means that ACI floods BPDUs only between the ports in same EPG. Forget about the corner cases and keep that concept in mind.  And in your case, this is true since you are using one VLAN ID and one EPG.

1. As you may see, the incoming traffic to port A & B are untagged, incoming traffic to port C as tagged with VLAN 10 but all 3 ports are configured with port encap VLAN 10 (EPG static binding). Are the ports A, B, C considered as using the same encapsulation?  From design perspective, I just want to make sure that:

  • BPDU coming from Legacy switch #1 will reach Legacy switch #2 via ACI
  • BPDU coming from Legacy switch #1 will reach Legacy switch #3 via ACI

Yep - that will work. But keep in mind

  1. It's not usual to have switches connected via access ports
  2. You can't mix access and trunk ports for the same VLAN encap on an ACI switch, in other words, it would be OK for ports A & B to be on the same ACI switch, but port C (the trunk) could NOT be on the same switch as either port A or B. If you DO try, you'll get a fault
    F0467 Configuration failed for node xxx due to Different encap modes are not allowed for an encap on a given interface
2. If MCP is enabled on port A & B and somehow STP stops working, from my understanding, ACI will detect the loop and block a port (A or B) with MCP.

Thats not quite how MCP works. MCP is independent of STP and works by sending multicast packets with a unique source MAC address linked to the sending port.  If the port receives one of its own MCP packets, MCP operation assumes that a loop exists in the L2 network - which could indeed be the result of mis-configured STP, and shuts down the port.  And for the record, STP almost never stops working, its just that humans don't configure their switches to make STP work the way they intended.

Having said that, there is SOME STP consideration with MCP in that it waits a period of time to allow STP to converge before shutting down ports.

But which one will be blocked?

The one that receives its own MCP PDU. If there is a L2 loop in the external network, it is possible multiple ports will be blocked.

Is there any documentation explaning with details how ACI identifies that port?

Yes. A port that receives its own MCP PDU will be the port that blocks.

Let's say if we have port A as primary port and port B as secondary port, is there any way to configure with MCP so that we will always block port B in case of loop?

There is no concept of "primary port" and "secondary port" with MCP, or with spanning tree for that matter. And there is no guarantee that both ports A and B will detect the loop - potentially one of those ports will detect the loop quick enough that the other port does NOT shut down.  If you can figure out a way to make sure A detects the loop first, then "MCP ... will always block port B in case of loop".  Setting the root bridge in the right place will probably do it (so that the switch connected to port B is an STP Alternate port - i.e. blocking)

And one more thing. Keep in mind that this entire discussion ASSUMES you are using the Cisco Proprietary PVSTP (or some variation of) - not the IEEE standards based MST which sends BPDUs untagged always.  If you are using MST, then you need to create a special EPG, then configure all ports that connect to switches as either access ports (surely not) or 802.1p ports with the same dedicated VLAN ID associated (untagged) in each case, and placed in the special EPG you created to catch MST BPDUs.

 

RedNectar aka Chris Welsh.
Forum Tips: 1. Paste images inline - don't attach. 2. Always mark helpful and correct answers, it helps others find what they need.

View solution in original post

4 Replies 4

RedNectar
VIP Alumni
VIP Alumni

Hi @suneq ,

Sorry it's taken so long to answer this. Required a bit of research


Firstly, thanks for the great diagram.  Let me repeat it here so people reading this on email can see it.

RedNectar_0-1705523205740.png

Now to your comments/questions


According to the design guide, Cisco ACI floods BPDUs only between the ports in the bridge domain that have the same encapsulation.

Almost correct - ACI floods BPDUs only between the ports in the bridge domain EPG that have the same VLAN encapsulation (and from the same VLAN Pool).

When a BPDU arrives at a port carrying a VLAN tag, the BPDU is flooded on a multicast tree using the VXLAN VNID of the FD_VLAN, this VNID is actually calculated from the VLAN pool that the VLAN was taken from.  So if, say VLAN 5 was used by two different tenants, and each tenant had its own VLAN Pool containing VLAN 5, each instance of VLAN 5 would use a different VNID, so there'd by no leaking of BPDUs from one instance of VLAN 5 to the other. (This reference explains this concept more fully)

In essence, this means that ACI floods BPDUs only between the ports in same EPG. Forget about the corner cases and keep that concept in mind.  And in your case, this is true since you are using one VLAN ID and one EPG.

1. As you may see, the incoming traffic to port A & B are untagged, incoming traffic to port C as tagged with VLAN 10 but all 3 ports are configured with port encap VLAN 10 (EPG static binding). Are the ports A, B, C considered as using the same encapsulation?  From design perspective, I just want to make sure that:

  • BPDU coming from Legacy switch #1 will reach Legacy switch #2 via ACI
  • BPDU coming from Legacy switch #1 will reach Legacy switch #3 via ACI

Yep - that will work. But keep in mind

  1. It's not usual to have switches connected via access ports
  2. You can't mix access and trunk ports for the same VLAN encap on an ACI switch, in other words, it would be OK for ports A & B to be on the same ACI switch, but port C (the trunk) could NOT be on the same switch as either port A or B. If you DO try, you'll get a fault
    F0467 Configuration failed for node xxx due to Different encap modes are not allowed for an encap on a given interface
2. If MCP is enabled on port A & B and somehow STP stops working, from my understanding, ACI will detect the loop and block a port (A or B) with MCP.

Thats not quite how MCP works. MCP is independent of STP and works by sending multicast packets with a unique source MAC address linked to the sending port.  If the port receives one of its own MCP packets, MCP operation assumes that a loop exists in the L2 network - which could indeed be the result of mis-configured STP, and shuts down the port.  And for the record, STP almost never stops working, its just that humans don't configure their switches to make STP work the way they intended.

Having said that, there is SOME STP consideration with MCP in that it waits a period of time to allow STP to converge before shutting down ports.

But which one will be blocked?

The one that receives its own MCP PDU. If there is a L2 loop in the external network, it is possible multiple ports will be blocked.

Is there any documentation explaning with details how ACI identifies that port?

Yes. A port that receives its own MCP PDU will be the port that blocks.

Let's say if we have port A as primary port and port B as secondary port, is there any way to configure with MCP so that we will always block port B in case of loop?

There is no concept of "primary port" and "secondary port" with MCP, or with spanning tree for that matter. And there is no guarantee that both ports A and B will detect the loop - potentially one of those ports will detect the loop quick enough that the other port does NOT shut down.  If you can figure out a way to make sure A detects the loop first, then "MCP ... will always block port B in case of loop".  Setting the root bridge in the right place will probably do it (so that the switch connected to port B is an STP Alternate port - i.e. blocking)

And one more thing. Keep in mind that this entire discussion ASSUMES you are using the Cisco Proprietary PVSTP (or some variation of) - not the IEEE standards based MST which sends BPDUs untagged always.  If you are using MST, then you need to create a special EPG, then configure all ports that connect to switches as either access ports (surely not) or 802.1p ports with the same dedicated VLAN ID associated (untagged) in each case, and placed in the special EPG you created to catch MST BPDUs.

 

RedNectar aka Chris Welsh.
Forum Tips: 1. Paste images inline - don't attach. 2. Always mark helpful and correct answers, it helps others find what they need.

Hi @RedNectar 

Thank you for your detailed answers.

Regarding your comments:

 


It's not usual to have switches connected via access ports

That's what I tried to explain to my client but as I could not give them a concrete example / scenario in which the design is not valid, they prefer to keep the access ports.

 


But which one will be blocked?

The one that receives its own MCP PDU. If there is a L2 loop in the external network, it is possible multiple ports will be blocked.

Sorry it may seem straightforward but I just want to make sure I understand correctly. In my scenario, can we say that we know that port(s) will be blocked to break the loop but we cannot know in advance which port, may be A, may be B, may be both, right?


And one more thing. Keep in mind that this entire discussion ASSUMES you are using the Cisco Proprietary PVSTP (or some variation of) - not the IEEE standards based MST which sends BPDUs untagged always.  If you are using MST, then you need to create a special EPG, then configure all ports that connect to switches as either access ports (surely not) or 802.1p ports with the same dedicated VLAN ID associated (untagged) in each case, and placed in the special EPG you created to catch MST BPDUs.

It's a great remark. Thanks a lot.

Hi @suneq ,

Re: "we cannot know in advance which port, may be A, may be B, may be both, right?"

Correct - PROBABLY only one port, whichever one is the active port, but if it flips you could end ip with both ports err-disabled.

And I'll modify one of my earlier statements slightly - adding a 802.1p reference for clarity

If you are using MST, then you need to create a special EPG, then configure all ports that connect to switches as either access ports (surely not) or 802.1p ports with the same dedicated VLAN ID associated 802.1p (untagged) in each case, and placed in the special EPG you created to catch MST BPDUs.

RedNectar aka Chris Welsh.
Forum Tips: 1. Paste images inline - don't attach. 2. Always mark helpful and correct answers, it helps others find what they need.

ph
Level 1
Level 1

Hi,

did this work?

How the legacy switches behaved? (any errdisable cause or bpdu guard messages?)

 

I am asking because of a little detail what is not clear to me:

Switch 3 generated BDPU incl. VLAN TAG 10 (dot1q) AND also add the STP PVID (Originating VLAN) information.
On ingress ACI will probably already remove the VLAN tag 10 (dot1q) and flood this BPDU too all other ports, but as the encapsulation towards Switch 1 and 2 is "access" ACI will not add any dot1q-tag. So if ACI doesn't modify the BDPU as such (so let's assume the Originating VLAN information is still there), Switch 1 and Switch 2 get an untagged (native) BDPU, but with an Originating VLAN information, what in fact is against the rules, isn't it? Shouldn't the switch react due to a malformed BPDU? Or Inconsistency of something? Normally it is like dot1q-Native = no PVID information, dot1q-tagged = PVID Information in STP.

If not, so if it works fine, good for you, but what is the reason then for this information in the STP?

Guess answer is easy if someone know it, else I will try it next days and will let you know.

Review Cisco Networking for a $25 gift card

Save 25% on Day-2 Operations Add-On License