NetKAT without OpenFlow