Clone this wiki locally
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.
NetASM is analogous to an x86 or MIPS-like instructions set. However, unlike updating main memory and registers, it defines the layout (i.e., control-flow and states) of the data plane. Control-flow defines how the packet is traversed through the data plane, and state refers to the type of memory element (i.e. tables). These state elements have a well-defined data structure and type declaration in NetASM, which makes it easy to identify bugs early in the compilation process.
- Configuring NetASM Switch from Command Line
- Using NetASM Switch with Mininet Python API
- Controlling NetASM Switch using POX
- Understanding NetASM
- NetASM Instruction Set