Control Plane IO¶
Open/R is peer-to-peer (P2P) connected. Neighboring instances exchanges the packets over connected links to make routing happen. This documentation provides overview of the packets and their signatures. Also highlights how Operators can ensure reliable Open/R communication in the network.
Control Plane Packets¶
Every data packet that is exchanged between Open/R instances is termed as
Control Plane Packet
in this context. There are two types of communication
channels between neighboring Open/R instances, namely Neighbor Discovery
and
KvStore Synchronization
.
Neighbor Discovery Packets¶
Spark
is a neighbor discovery module of Open/R. It exchanges packets with
neighboring Spark instances to discover and main neighbors. The packets
exchanged have following characteristics
Internet Protocol is IPv6
Source address is IPv6 link-local address of source interface
Destination address is
ff02::1
(IPv6 Link-Local Multicast)TOS = 0xc0
(192) akaDSCP = 48
(Can be altered by OpenrConfig)
Transport Protocol is UDP
Source port is
6666
(Can be altered by OpenrConfig)Destination port is
6666
(Can be altered by OpenrConfig)
Sample packets headers¶
11:30:26.223517 IP6 (class 0xc0, hlim 255, next-header UDP (17) payload length: 48) fe80::d8c4:97ff:fed0:5b14.6666 > ff02::1.6666: [udp sum ok] UDP, length 40
11:30:26.472102 IP6 (class 0xc0, hlim 255, next-header UDP (17) payload length: 148) fe80::d8c4:97ff:fece:2f5b.6666 > ff02::1.6666: [udp sum ok] UDP, length 140
11:30:26.963406 IP6 (class 0xc0, hlim 255, next-header UDP (17) payload length: 48) fe80::d8c4:97ff:fece:2f5b.6666 > ff02::1.6666: [udp sum ok] UDP, length 40
KvStore Synchronization Packets¶
KvStore
is a distributed-replicated database. It communicates with neighboring
KvStore instances to ensure consistency of data across all nodes within an area.
The packets exchanged between KvStore have following characteristics
Internet Protocol is IPv6
Source address is IPv6 link-local address of source interface
Destination address is IPv6 link-local address of neighbor interface
TOS = 0xc0
(192) akaDSCP = 48
(Can be altered by OpenrConfig)
Transport Protocol is TCP
Source port is system generated by
connect()
syscallDestination port is
2018
, Thrift Server. (Can be altered by OpenrConfig)
Sample Packet headers¶
11:30:57.520356 IP6 (class 0xc0, hlim 64, next-header TCP (6) payload length: 73) fe80::d8c4:97ff:fed0:5b14.33642 > fe80::d8c4:97ff:fece:2f5b.2018: Flags [P.], cksum 0x8f05 (correct), seq 4248320327:4248320368, ack 3582705193, win 296, options [nop,nop,TS val 3417356247 ecr 3550908423], length 41
11:30:57.520788 IP6 (class 0xc0, hlim 64, next-header TCP (6) payload length: 76) fe80::d8c4:97ff:fece:2f5b.2018 > fe80::d8c4:97ff:fed0:5b14.33642: Flags [P.], cksum 0x013d (correct), seq 1:45, ack 41, win 239, options [nop,nop,TS val 3550928086 ecr 3417356247], length 44
11:30:57.520804 IP6 (class 0xc0, hlim 64, next-header TCP (6) payload length: 32) fe80::d8c4:97ff:fed0:5b14.33642 > fe80::d8c4:97ff:fece:2f5b.2018: Flags [.], cksum 0x851d (correct), seq 41, ack 45, win 296, options [nop,nop,TS val 3417356248 ecr 3550928086], length 0
Prioritizing Control Plane IO¶
Underlying Hardware or ASIC will be responsible for forwarding both Data Plane
and Control Plane
packets. Under stressful situations, high load of data plane
packets may leads to drop of control plane packets. This can disrupt the core
routing operations within network, making situation even worse with packet
blackholing or routing loops.
Hence, is is important to prioritize
the Control Plane
packets over
Data Plane
packets in HW/ASIC, to ensure reliable delivery of Control Plane
packets. This is usually achieved by introducing multiple priority queues.
Special ACL rules in HW match the packets with control plane packet signature
and re-directs them to the highest priority queue.
To facilitate the easy matching, every packet exchanged between Open/R instances
is marked with specific TOS
(or DSCP
) value as described above. This value
can be configured via OpenrConfig.
Client Packets¶
Open/R exposes Thrift RPC APIs for remote network operations e.g. retrieving
network state or issuing drain/undrain commands. These are miscellaneous packets
and not Open/R specific. Internet Protocol
can be IPv4 or IPv6.
FBOSS’s SwitchAgent - Control Plane IO & WARM boot¶
FBOSS is an open-sourced switch operating system. Open/R is natively supported
on FBOSS. FBOSS’s SwitchAgent
is a core service that supports Control Plane IO
so that protocols such as Open/R can talk to peer Open/R instances inband for
their functioning. SwitchAgent
does so by creating a TUN interface on Linux
corresponding to each VLAN of the host. The VLAN status (UP/DOWN) is reflected
on this Linux interface as well. The interfaces are named with the fboss
prefix e.g. fboss4001
. FBOSS’s SwitchAgent
holds an FD to these VLAN so that
it can multiplex packets between physical VLANs & their Linux counterpart.
Open/R uses the netlink
protocol to subscribe links from Linux. And creates
UDP/TCP sockets to send/receive packets to/from these interfaces.
This means Open/R can function if and only if SwitchAgent is functioning on the system. Both Open/R & SwitchAgent support WARM mode for service upgrades, we term it as Graceful Restart (GR). However, when SwitchAgent is undergoing restart the Open/R GR would be broken because all Linux interfaces would go down and Control Plane IO will be halted. To overcome this, we first intend to wrap SwitchAgent WARM restart with Open/R’s Graceful restart.
This is achieved by systemd
’s BindsTo
, After
, and WantedBy
directives of
Open/R’s service spec. This will automatically bring down Open/R before
SwitchAgent goes down and brings up Open/R after SwitchAgent comes up. In rare
cases when SwitchAgent is crashing in a loop, you may also see Open/R restarting
in a loop. In such cases systemd
logs from /var/log/messages
would be
helpful in identifying service restart sequence & possible cause.