top | item 11903478

P4: open-source programming language for high-performance packet switching

98 points| throwaway000002 | 9 years ago |p4.org

19 comments

order
[+] neopallium|9 years ago|reply
Someone has started working on P4 support [0] for Snabb Switch [1].

I think a language like P4 will be great for sharing switching logic. I hope we will see re-usable modules written in P4 that can be shared.

0. https://github.com/esbullington/snabbp4 1. https://github.com/snabbco/snabb

[+] mino|9 years ago|reply
Snabb is a great project. Current P4 support is [0]:

  a working lexer and parser for the full p4 language (version 1.1: working
  release).  There are plenty of unit tests, but I'm sure there are
  still bugs (not yet a lot of p4 v1.1 code to test out at this point,
  most existing p4 code is v1.0 which has some significant differences).
Also, P4 support in OpenVSwitch is coming too.

0. https://groups.google.com/d/msg/snabb-devel/GkWONJcuF4E/Tc8P...

[+] throwaway000002|9 years ago|reply
I posted this after reading the various posts regarding Barefoot Networks exiting stealth⁰.

They've (jointly?) developed P4 and have tooling to compile it down to their new switch silicon, Tofino.

Hard to say exactly how impressive all this is considering how price sensitive and competitive merchant silicon is.

They could, for example, have glued a large FPGA to a huge amount of network I/O and then developed a P4 compiler to their FPGA fabric. Who knows?

P4 seems to be attempting to be a CUDA for switching, except more open. Barefoot, I presume, is betting on producing the most efficient, by whatever metric, hardware implementation of it.

https://hn.algolia.com/?query=barefoot%20networks&sort=byDat...

[+] d08ble|9 years ago|reply
P4 syntax like ACPUL, but ACPUL started up as more generic minimalistic algorithmic language. It can be easy compiled to multiple target VMs & hardware also as P4. I think how to use ACPUL for Nginx frontend module, but found some issues in network using, like IPv4/v6 addresses formats, strings, etc. ACPUL is currently using in ACPU iPad IDE (Codea like). Here is sample code https://github.com/d08ble/acpul-demo/blob/master/dota/contro...
[+] shanemhansen|9 years ago|reply
I took a quick look at github, didn't see an option to compile to iptables. That would be an interesting use case for me.
[+] readams|9 years ago|reply
One of the key advantages of p4 is that you don't have to use iptables. Instead p4 would compile down to a binary packet processor in either machine language, something like eBPF, or directly onto a hardware coprocessor on your NIC.

Compiling to iptables would be incredibly slow and miss the advantages. Plus, p4 is more general than iptables so many p4 programs could not be expressed as iptables.

[+] signa11|9 years ago|reply
> ... didn't see an option to compile to iptables.

did you mean bpf ?

[+] unsignedqword|9 years ago|reply
Not a great choice in name, considering "P4" is the command line utility/common abbreviation for Perforce SCM
[+] tyleo|9 years ago|reply
Agreed. We use Perforce at work. I have typed P4 so many times that it will essentially always mean Perforce to me.

For those who don't use P4, imagine if this project were named git (though that might not be as fair since git is much more popular).

[+] salmonfamine|9 years ago|reply
This is true, but I would hope context should be enough to distinguish between the two in most cases. Could get confusing if one were to use P4 for their P4 repo, though.