Über die Wahl des Root Port

entscheidet, wenn zwei oder mehrere alternative BPDUs mit identischen Werten in den Feldern Root Path Cost, Root Bridge-ID und Bridge-ID vorliegen, schließlich der Wert im Feld Port-ID im BPDU. Meint man ;-)

Es war einmal

ein Gespräch unter Kollegen. Es gipfelte darin, daß beide entschlossenen Schrittes zum nächsten Rack liefen und mit einem Cross-Over Kabel zwei Ports eines Switches miteinander verbanden. Nach ein paar Sekunden hatte der eine ein triumphales Grinsen im Gesicht und der andere sah wohl ziemlich betreten aus; ich war dieser andere. Was war passiert? Nun, es ging um just diese Frage: Man verbindet Port 1 und Port 2 eines Switches; welcher Port wird blocken? Ich war felsenfest davon überzeugt, daß Port 1 blocken würde und zwar weil das am Port 1 empfangene BPDU im Feld Port-ID den Wert 2 hat, wohingegen das am Port 2 empfangene BPDU in diesem Feld den Wert 1 hat. 1 schlägt 2 und somit wird der Port an dem die Port-ID 2 empfangen wurde, geblockt. Und das ist nunmal der Port 1. Tja, nur zu dumm, daß der Switch das nicht genau so sah; er blockte Port 2.

Natürlich ließ mir das keine Ruhe, aber ich wurde auch nicht fündig. Egal wo ich suchte, immer laß ich das selbe (s. ersten Satz auf dieser Seite), was aber nicht stimmen konnte. Also tat ich das, was man immer in solchen Fällen tun sollte: den Standard lesen.

Und siehe da

In IEEE Std 802.1w-2001, Abschnitt 17.4.2.2 "Spanning tree priority vector type definitions", Seite 28, wurde ich fündig! Dort wird ein Port Priority Vector und ein Message Priority Vector unterschieden. Der Port Priority Vector ist der Spanning Tree Priority Vector des Ports:

port priority vector = {RootBridgeID : RootPathCost : DesignatedBridgeID : DesignatedPortID : BridgePortID}

Der Message Priority Vector ist der Spanning Tree Priority Vector, der in einem BPDU empfangen wurde. Für eine Bridge B, die an ihrem Port PB ein BPDU vom Designated Port PD der Bridge D, mit der Information daß RD die Root Bridge ist und sie mit Kosten von RPCD erreichbar ist, erhält, gilt:

message priority vector = {RD : RPCD : D : PD : PB}

Der Message Priority Vector überschreibt den Port Priority Vector nur dann, wenn er besser ist, oder die Werte für D und PD übereinstimmen.