  Programmable switch hardware makes it possible to move fine-grained control
logic inside the network data plane, improving performance for a wide range of
applications. However, applications with integrated control are inherently hard
to write in existing data-plane programming languages such as P4. This paper
presents Lucid, a language that raises the level of abstraction for putting
control functionality in the data plane. Lucid introduces abstractions that
make it easy to write sophisticated data-plane applications with interleaved
packet-handling and control logic, specialized type and syntax systems that
prevent programmer bugs related to data-plane state, and an open-sourced
compiler that translates Lucid programs into P4 optimized for the Intel Tofino.
These features make Lucid general and easy to use, as we demonstrate by writing
a suite of ten different data-plane applications in Lucid. Working prototypes
take well under an hour to write, even for a programmer without prior Tofino
experience, have around 10x fewer lines of code compared to P4, and compile
efficiently to real hardware. In a stateful firewall written in Lucid, we find
that moving control from a switch's CPU to its data-plane processor using Lucid
reduces the latency of performance-sensitive operations by over 300X.
