If we only defined the semantics and were not building a system, a
packet would only be a record of headers. However, the runtime needs to
apply eval to packets contained in PACKET_IN mesages. For the runtime,
packets also carry a payload that is unmodified by eval.
val eval : packet ‑> Syntax.policy ‑> PacketSet.tval eval_pipes : packet ‑> Syntax.policy ‑> (string * packet) list * (string * packet) list * packet listval size : Syntax.policy ‑> intval queries_of_policy : Syntax.policy ‑> string listval switches_of_policy : Syntax.policy ‑> Syntax.switchId list