A Network Assembly Language for Programmable Data Planes

View on GitHub »

What is NetASM?

NetASM is a network assembler that takes high-level SDN languages (NetKAT, P4, etc.) and maps the primitives to device-specific directives in FPGAs and various chipsets. It's a nascent work on building a network assembly language for programmable network devices (e.g., FPGAs, RMT, Intel’s FlexPipe, NPUs). NetASM provides assembly instructions that directly reflect the capabilities of the underlying device, thus providing either a human programmer or compiler precise, fine-grained control over the device’s resources. It exposes the details in the language such as creating tables and defining layouts of the processing pipeline. It's a glimpse into the future of hardware support for software-defined networking (SDN), where the data plane is no longer a fixed-function device, but rather a fully programmable device whose behavior is dictated by the programmer, with the ability to reconfigure it on-demand.

Overview of NetASM

Pre-installed VM

Most recommended way to get hands-on with NetASM is through our pre-built VirtualBox VMs. Click below to download our VMs.

NetASM-python 64-bit VM »

NetASM-haskell 64-bit VM »

Tutorial and Documentation

For more documentation and tutorial on how to build and run NetASM programs, click below:

Python Runtime »   Haskell Runtime »


Project Lead: Muhammad Shahbaz
Email: mshahbaz at

View other members »