Reclaiming the Brain: Useful OpenFlow Functions in the Data Plane
Liron Schiff (Tel Aviv Uni, Israel) Michael Borokhovich (UT Austin, United States) Stefan Schmid (TU Berlin & T-Labs, Germany)
1
Reclaiming the Brain: Useful OpenFlow Functions in the Data Plane - - PowerPoint PPT Presentation
Reclaiming the Brain: Useful OpenFlow Functions in the Data Plane Liron Schiff (Tel Aviv Uni, Israel) Michael Borokhovich (UT Austin, United States) Stefan Schmid (TU Berlin & T-Labs, Germany) 1 My Talk in One Slide Separation of the
1
2
2
2
2
Actions Match Set VLAN = 11 Forward port 3 IP.src=10.0.*.* Drop TCP.port = 23 Send Controller IP.dst=192.*.*.* and VLAN=13 … …
…
3
Table 1
…
Table 2
…
Table n
…
4
Table 1
…
Table 2
…
Table n
…
Failover Group
Action1 Port-1 Action2 Port-2 … … Action-k Port-k
Table 1
… …
4
Table 1
…
Table 2
…
Table n
…
Failover Group
Action1 Port-1 Action2 Port-2 … … Action-k Port-k
Table 1
… …
Round Robin Group
Action1 Action2 … Action-k 4
Failover Group
Fwd Port 1 Fwd Port 3 … … Action-k Port-k 5
Failover Group
Fwd Port 1 Fwd Port 3 … … Action-k Port-k 5
Failover Group
Fwd Port 1 Fwd Port 3 … … Action-k Port-k
Tag
5
Failover Group
Fwd Port 1 Fwd Port 3 … … Action-k Port-k
Tag
5
Failover Group
Fwd Port 1 Fwd Port 3 … … Action-k Port-k
Tag
5
6
7
payload
par, cur par, cur par, cur
payload
par, cur par, cur par, cur
8
Algorithm 1 Algorithm SmartSouth – Template
Input: current node: vi, input port: in, packet global params: pkt.start, packet tag array: {pkt.vj}j∈[n] Output: output port: out 1: if pkt.start = 0 then 2: pkt.start ← 1 3:
4: else 5: if pkt.vi.cur = 0 then 6: pkt.vi.par ← in; out ← 1; First visit() 7: else if in = pkt.vi.cur then 8:
9: else 10:
11: goto 26 12: if out = ∆i + 1 then 13:
14: goto 22 15: while out failed or out = pkt.vi.par do 16:
17: if out = ∆i + 1 then 18:
19: goto 22 20: Send next neighbor() 21: goto 23 22: Send parent() 23: pkt.vi.cur ← out 24: if out = 0 then 25: Finish() 26: return out
payload
par, cur par, cur par, cur
if pkt.vi.cur = 0 then pkt.vi.par ← in; out ← 1; Fi else if in = pkt.vi.cur then
else
∆i 1 ∆i 1 ∆i Table C ⇤ ⇤ pkt.vi.par in, Table 1 1 1 ⇤ Table 2 2 2 ⇤ Table 3 3 3 ⇤ Table 4 . . . . . . . . . . . . Flow Table B Match Instructions in pkt.vi.cur pkt.vi.par
9
payload
par, cur par, cur par, cur
if pkt.vi.cur = 0 then pkt.vi.par ← in; out ← 1; Fi else if in = pkt.vi.cur then
else
∆i 1 ∆i 1 ∆i Table C ⇤ ⇤ pkt.vi.par in, Table 1 1 1 ⇤ Table 2 2 2 ⇤ Table 3 3 3 ⇤ Table 4 . . . . . . . . . . . . Flow Table B Match Instructions in pkt.vi.cur pkt.vi.par
9
15: while out failed 16:
h i Gr 1 hsb 1, pkt.vi.cur 1, pkt.start 1, Fwd 1i Gr 2 hsb 1, pkt.vi.cur 2, pkt.start 1, Fwd 2i . . . . . . Group Actions Gr 0.1 hsb 1, Fwd Route(1)i
Flow Table 1 Match Instructions sb Gr 1, Table 2 1 Drop Flow Table 2 Match Instructions sb Gr 2, Table 3 1 Drop
10
snapshot data
par, next par, next par, next
10
11
11
TTL
par, next par, next par, next
11
Round Robin Group
Action1 Action2 … Action-k
Table 1
…
Table 2 1
…
K
.
12
13
13
14
14
14
gid
par, next par, next par, next
payload
15
gid
par, next par, next par, next
payload
15
gid=5 gid=5 gid=8 gid=8
gid
par, next par, next par, next
payload
gid, highest_prio
15
gid=5 gid=5 prio=1 prio=2 gid=8 gid=8
16
17
17