faucet.valve_switch_stack module¶
Manage flooding/learning on stacked datapaths.
-
class
faucet.valve_switch_stack.
ValveSwitchStackManagerBase
(stack_manager, **kwargs)[source]¶ Bases:
faucet.valve_switch_standalone.ValveSwitchManager
Base class for dataplane based flooding/learning on stacked dataplanes.
-
edge_learn_port
(other_valves, pkt_meta)[source]¶ Find a port towards the edge DP where the packet originated from
- Parameters
other_valves (list) – All Valves other than this one.
pkt_meta (PacketMeta) – PacketMeta instance for packet received.
- Returns
port to learn host on, or None.
-
get_lacp_dpid_nomination
(lacp_id, valve, other_valves)[source]¶ Chooses the DP for a given LAG.
- The DP will be nominated by the following conditions in order:
Number of LAG ports
Root DP
Lowest DPID
- Parameters
lacp_id – The LACP LAG ID
other_valves (list) – list of other valves
- Returns
nominated_dpid, reason
-
-
class
faucet.valve_switch_stack.
ValveSwitchStackManagerNoReflection
(stack_manager, **kwargs)[source]¶ Bases:
faucet.valve_switch_stack.ValveSwitchStackManagerBase
Stacks of size 2 - all switches directly connected to root.
Root switch simply floods to all other switches.
Non-root switches simply flood to the root.
-
class
faucet.valve_switch_stack.
ValveSwitchStackManagerReflection
(stack_manager, **kwargs)[source]¶ Bases:
faucet.valve_switch_stack.ValveSwitchStackManagerBase
Stacks size > 2 reflect floods off of root (selective flooding).
Hosts |||| |||| +----+ +----+ +----+ ---+1 | |1234| | 1+--- Hosts ---+2 | | | | 2+--- Hosts ---+3 | | | | 3+--- ---+4 5+-------+5 6+-------+5 4+--- +----+ +----+ +----+ Root DP
Non-root switches flood only to the root. The root switch reflects incoming floods back out. Non-root switches flood packets from the root locally and to switches further away from the root. Flooding is entirely implemented in the dataplane.
A host connected to a non-root switch can receive a copy of its own flooded packet (because the non-root switch does not know it has seen the packet already).
A host connected to the root switch does not have this problem (because flooding is always away from the root). Therefore, connections to other non-FAUCET stacking networks should only be made to the root.
On the root switch (left), flood destinations are:
1: 2 3 4 5(s) 2: 1 3 4 5(s) 3: 1 2 4 5(s) 4: 1 2 3 5(s) 5: 1 2 3 4 5(s, note reflection)
On the middle switch:
1: 5(s) 2: 5(s) 3: 5(s) 4: 5(s) 5: 1 2 3 4 6(s) 6: 5(s)
On the rightmost switch:
1: 5(s) 2: 5(s) 3: 5(s) 4: 5(s) 5: 1 2 3 4