Implementing A Very Simple Protocol
From ARL Wiki
Jump to navigationJump to searchVery Simple Virtual Circuit Protocol
Notes to the Writer
Goals
- Describe basic user procedure
- Begin to describe underlying architecture and components
- Talk about substrate concept
Sections
- xxx
Figures
- Application header format
- xxx
Links
Versions
- 0
- Protocol header chosen to work with iperf
- Words (4 bytes) in header
- Pkt ID (iperf UDP compatible)
- Timestamp tv_sec
- Timestamp tv_usec
- VCI
- Flow label (v1)
- VCI is globally unique
- 0.0
- Minimalistic example
- 1 router (R1), 2 hosts (H1, H2)
- 0.1
- Add monitoring daemon
- 0.2
- Like GEC 4, Part 1 but routes based on VCI
- 2 routers (R1, R2), 6 hosts (H1-H6)
- 1
- VCI can change during transit as part of pkt processing
- Add Flow Label field
Configuring R1.0.0
- Use 2 physical interfaces from GEC4
- Use 2 hosts H1 and H2
- Replace R2 in GEC4 with H2
- FP
- copt = 2
- bw = 205 Mb/s
- fltrs = xxx
- qs = xxx
- buffs = xxx
- stats = fltrs
- sram = xxx
- MIs
- m1 (to H1)
- bw = 100 Mb/s
- ipaddr = 10.1.1.1
- port = 20000
- i.e., socket s1 = (10.1.1.1, 20000)
- m2 (to H2)
- bw = 100 Mb/s
- ipaddr = 10.1.16.1
- port = 20000
- i.e., socket s2 = (10.1.16.1, 20000)
- m1 (to H1)
- Queues
- q48 (LD): threshold = 100 pkts, bw = 1 Mb/s, mi = 0
- q49 (EX): threshold = 100 pkts, bw = 1 Mb/s, mi = 0
- q1: threshold = 1000 pkts, bw = m0.bw = 100 Mb/s, mi = 1
- q2: threshold = 1000 pkts, bw = m1.bw = 100 mb/s, mi = 2
- q0: not used
- VCIs
- (R1, H1, H2) = (0, 1, 2) ==> Path (x,y) uses VCI 3*x+y
- (H1, H2) uses VCI 5 = 3*1 + 2
- Use 6 of 9 VCIs
- Communication matrix
- ( R1 (-, 1, 2), H1 (3, -, 5), H2 (6, 7, -) )
- Unused VCIs: 0, 4, 8
- (R1, H1, H2) = (0, 1, 2) ==> Path (x,y) uses VCI 3*x+y
- Filters (key = rxmi, vci)
- f1 (R1 to H1): (rxmi, vci) = (0, 1), s = (10.1.1.1, 20000), qid = 1, sindx = 1 # substrate only
- f2 (R1 to H2): (rxmi, vci) = (0, 2), s = (10.1.16.2, 20000), qid = 2, sindx = 2 # substrate only
- f3 (H1 to R1): (rxmi, vci) = (1, 3), s = (10.1.16.1, 5555), qid = 0, sindx = 3
- f4 (H1 to H2): (rxmi, vci) = (1, 5), s = (10.1.16.2, 20000), qid = 2, sindx = 4
- f5 (H2 to R1): (rxmi, vci) = (2, 6), s = (10.1.16.1, 5555), qid = 0, sindx = 5
- f6 (H2 to H1): (rxmi, vci) = (2, 7), s = (10.1.1.1, 20000), qid = 1, sindx = 6
User-space pkt
- Tunnel socket appears in UDP header
- VCI is first word of UDP payload
- Payload also has timestamp (for RTT and space-time diagram)
Substrate Implementation Concepts
- Physical interfaces
- Physical MIs
- Queues
- Filters
- Code option demultiplexor
- Parse, Lookup, Header Format
Slowpath Implementation
- Filters for local delivery
- User-space process to handle LD and EX traffic
- Has VCI-MI Socket map; i.e., M : VCI --> MI Socket
- Forwards pkt to socket M(pkt.VCI)
- Artifacts
- Tunnel-aware sender and receiver
- User-space process to handle monitoring data
- spp-config-sp-vsvc-XXX.sh (slowpath) configuration scripts
Fastpath Implementation
- Requires mods to Parse and Header Format
- Uses generic Lookup
- Additional artifacts
- spp-config-fp-vsvc-XXX.sh (fastpath) configuration scripts
- Monitoring
Interesting Demo
- xxx