controlplane — controlplane — the half that decides, kept off the half that does
controlplane [--converge] [--offline] [--drain] INTENT controlplane --install ROUTE >/dev/dataplane decide_time >> forward_time
controlplane holds the map, the policy, and the intent. It computes where traffic should go and installs that decision into the data plane, which forwards accordingly and asks nothing. The rule is architectural: the deciding may be rich, consistent, and slow; the doing must be fast, simple, and incurious.
The two halves fail differently. When controlplane dies the data plane keeps forwarding on its last installed rules — stale, but moving. When the data plane dies there is nothing left to decide about. A system that cannot tell which half it is currently standing on will, given time, discover the answer during an outage.
controlplane never touches a packet. It has no throughput, no hot path, and no excuse. Everything it produces is advice the data plane is not permitted to question.
The separation predates computing: telephone exchanges split call signalling from the voice circuit, deciding the route on a different path than the one that carried the call. IP routers inherited it, running BGP and OSPF in a slow control plane while a dedicated forwarding chip moved packets. OpenFlow and SDN made the split physical in 2008 by pulling the decider into a central controller; Kubernetes and service meshes later shipped the terminology to everyone. The phrase 'control plane' is borrowed telecom jargon, not an excavated old word.
When the controller is offline the data plane keeps delivering, which convinces operators nothing is wrong until they change intent and nothing changes.
--converge has no upper time bound. Documented as 'eventual'. Users read 'eventual' as 'soon'.
The data plane cannot report that it is following a wrong rule, only that it is following it very quickly.
backpressure(3), idempotent(1), livelock(8). The living exhibit demonstrates the word in motion:
▸ operate controlplane