ABSTRACT
This paper presents P4FPGA, a new tool for developing and
evaluating data plane applications. P4FPGA is an open-source
compiler and runtime. The compiler extends the P4.org reference
compiler with a custom backend that generates FPGA
code. P4FPGA supports different architecture configurations,
depending on the needs of the particular application.
We have benchmarked several representative P4 programs,
and our experiments show that code generated by P4FPGA
runs at line-rate at all packet sizes with latencies comparable
to commercial ASICs. By combining high-level programming
abstractions offered by P4 with a flexible and powerful hardware
target, P4FPGA allows developers to rapidly prototype
and deploy new data plane applications.
Если у вас дома жарко, и вы считаете, что dpdk это удел байточеляди; посмотрите на YANFF https://github.com/intel-go/yanff
GitHub
intel-go/yanff
yanff - NFF-Go -Network Function Framework for GO (former YANFF)
you have opinions on SDN, NFV, and whatever other acronyms telcos are using to describe a shell noscript these days
you have tried to design a continuous dynamical system for routing, and got it wrong at least twice
The example noscript filter_hyperscan.lua demonstrates the basics of Hyperscan and our wrapper API. It receives packets from a port, filters them, and forwards them to a port dropping all packets that match filters given in a file. Moreover, it can generate test traffic by replaying a pcap file on a different port
local pktLib = require "packet"
local ffi = require "ffi"
local eth = require "proto.ethernet"
local ip = require "proto.ip4"
-- Checks if a UDP packet's payload begins with "EXAMPLE".
-- You can do arbitrary complex stuff here, e.g., attach a DPI library like nDPI.
return function(pkt)
local udpPkt = pktLib.getUdp4Packet(pkt)
if udpPkt.eth:getType() == eth.TYPE_IP
and udpPkt.ip4:getProtocol() == ip.PROTO_UDP then
local data = ffi.string(udpPkt.payload.uint8, #"EXAMPLE")
return data == "EXAMPLE"
end
return false
end