Skip to content

Commit f6dbda7

Browse files
committed
add decision table
1 parent 4e8df73 commit f6dbda7

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

doc/dualtor/active_active_hld.md

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@ This document provides the high level design of SONiC dual toR solution, support
1515
For active-active setup, some complexity is transferred from smart y-cable to server side. Each server will have a Network Interface Card (NIC) connected to 2 x 100Gbps uplinks. These uplinks will be connected to 2 different ToRs with Direct Attach Copper (DAC) Cable. No Y-cable is needed any more.
1616

1717
For active-active setup, the requirements for server side are:
18-
1. Server NIC is responsible to deliver traffic up the stack once receiving sourthbound (tier 0 device to server) traffic.
18+
1. Server NIC is responsible to deliver southbound (tier 0 device to server) traffic from either uplinks to applications running on server host.
1919
1. Server NIC is responsible to dispense northbound (server to tier 0) traffic between two active links: at IO stream (5 tuples) level. Each stream will be dispatched to one of the 2 uplinks until link state changes.
20-
1. Each ToR has a well-known IP. For northbound traffic, server should dispatch IO towards these IPs to the corresponding uplinks.
2120
1. Server should provide support for ToR to control traffic forwarding, and follow this control when dispensing traffic.
21+
* gRPC is introduced for this requirement.
22+
* Each ToR will have a well-known IP. Server NIC should dispatch gRPC replies towards these IPs to the corresponding uplinks.
2223
1. Server should replicate the northbound traffic to both ToRs:
2324
* Specified ICMP replies (for probing link health status)
24-
* ARP
25+
* ARP propagation
2526
* Neighbor advertisements
2627

2728

@@ -130,18 +131,7 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use.
130131
When link is down, linkmgrd will receive notification from SWSS based on kernel message from netlink. This notification will be used to determine if ToR is healthy.
131132

132133
* Admin Forwarding State
133-
ToRs will signal NIC if the link is active / standby, we will call this active / standby state as admin forwarding state. It's up to NIC to determine which link to use if both are active, but it should never choose to use a standby link. This logic provides ToR more control over traffic forwarding.
134-
135-
* Cable Control through gRPC
136-
In active-active design, we will use gRPC to do cable control and signal NIC if ToRs is up active. SoC will run a gRPC server. Linkmgrd will determine server side forwarding state based on link prober status and link state. Then linkmgrd can invoke transceiver daemon to update NIC if ToRs are active through gRPC calls.
137-
138-
Current defined gRPC services between SoC and ToRs related with linkmgrd cable controlling:
139-
* DualToRActive
140-
1. Query forwarding state of ports for both peer and self ToR;
141-
1. Query server side link state of ports for both peer and self ToR;
142-
1. Set forwarding states of ports for both peer and self ToR;
143-
* GracefulRestart
144-
1. Shutdown / restart notification from SoC to ToR.
134+
ToRs will signal NIC if the link is active / standby, we will call this active / standby state as admin forwarding state. It's up to NIC to determine which link to use if both are active, but it should never choose to use a standby link. This logic provides ToR more control over traffic forwarding.
145135

146136
* Acitve-Active State Machine
147137
Active-acitve state transition logics are simplified compared to active-standby. In active-standby, linkmgrd makes mux toggle decisions based on y-cable direction, while for active-active, two links are more independent. Linkmgrd will only make state transition decisions based on healthy indicators.
@@ -150,12 +140,25 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use.
150140

151141
![active_active_self](./image/active_active_self.png)
152142

153-
Linkmgrd also provides rescue mechanism when peer can't switch to standby for some , i.e. link failures. If link prober doesn't receive peer's heartbeat response AND self ToR is in healthy active state, linkmgrd should determine peer link to be standby.
143+
Linkmgrd also provides rescue mechanism when peer can't switch to standby for some reason, i.e. link failures. If link prober doesn't receive peer's heartbeat response AND self ToR is in healthy active state, linkmgrd should determine peer link to be standby.
154144
![active_active_peer](./image/active_active_peer.png)
155145

156146
When control channel is unreachable, ToR won't block the traffic forwarding, but it will periodically check gRPC server's healthiness. It will make sure server side's admin forwarding state aligns with linkmgrd's decision.
157147
![grpc_failure](./image/gRPC_failure.png)
158148

149+
* Cable Control through gRPC
150+
In active-active design, we will use gRPC to do cable control and signal NIC if ToRs is up active. SoC will run a gRPC server. Linkmgrd will determine server side forwarding state based on link prober status and link state. Then linkmgrd can invoke transceiver daemon to update NIC if ToRs are active through gRPC calls.
151+
152+
Current defined gRPC services between SoC and ToRs related with linkmgrd cable controlling:
153+
* DualToRActive
154+
1. Query forwarding state of ports for both peer and self ToR;
155+
1. Query server side link state of ports for both peer and self ToR;
156+
1. Set forwarding states of ports for both peer and self ToR;
157+
* GracefulRestart
158+
1. Shutdown / restart notification from SoC to ToR.
159+
160+
To summarize the state transition decision we talk about, and the corresponding gRPC action to take, we have this decision table below:
161+
![icmp_payload](./image/decision_table.png)
159162

160163
### Incremental Featrues
161164
* Default gateway to T1
19.4 KB
Loading

0 commit comments

Comments
 (0)