[P4-dev] complex function like pattern matching

Antonin Bas antonin at barefootnetworks.com
Thu Apr 6 14:52:42 EDT 2017


Yes you can add your code to primitives.cpp. There are many examples you
can look at so this shouldn't be too hard. Don't forget to call the
REGISTER_PRIMITIVE macro. Note that after you modify the simple_switch
code, it will not be the "standard" simple_switch any more. It will be your
own version of it, which supports one extra primitive.

In order to have the p4c-bm compiler support your new primitive, you will
need to add your primitive description to
https://github.com/p4lang/p4c-bm/blob/master/p4c_bm/primitives.json. Once
again, there are many examples there that you can look at, but if you need
help you can send an email to the list.

Finally, I just want to stress out what Andy already said. Just because it
runs on bmv2 simple_switch doesn't mean it will run on other
P4-programmable targets.



On Thu, Apr 6, 2017 at 1:01 AM, yunchen chang <y2924uki at gmail.com> wrote:

> Hello Andy,
> Thanks for your response.
> 1) I am using mininet(simple_switch.cpp) to be my environment,
>     so I want to know where should I implement my C/C++ code? (
> primitives.cpp?)
> 2) Is there anything I should pay special attention to? ( like:
> restrictions of compiler )
> Thank you.
> Best regards,
> Abbie
> On Mon, Apr 3, 2017 at 8:35 AM, Andy Fingerhut <andy.fingerhut at gmail.com>
> wrote:
>> The P4 language is focused on parsing and manipulating packet headers,
>> not payloads.
>> One could write a custom extension that could search for patterns in a
>> payload, but it would be non-portable, and would have to be implemented in
>> a target-specific language, e.g. C/C++ for a software model, Verilog for an
>> ASIC or FPGA, etc.  It would be similar to having a library written in
>> assembler and calling it from C, with the assembler implemented anew for
>> each target processor.
>> Andy
>> On Mon, Mar 27, 2017 at 9:13 AM, yunchen chang <y2924uki at gmail.com>
>> wrote:
>>> Hello everyone,
>>> I am doing an experiment for DPI in P4.
>>> (detect packet label in data plane, not in controller)
>>> I need some complex funtcions like lookup the host name of payload.
>>> Example:
>>> host_name: tw.yahoo.com
>>> mtach_key: .yahoo.
>>> I plan to write function in "primitives.cpp" at first.
>>> But after I read this posted : [http://lists.p4.org/pipermail
>>> /p4-dev_lists.p4.org/2016-August/000449.html], it pointed that P4 can't
>>> implement "pattern matching".
>>> I want to know is there any solution in current P4?
>>> (or any suggestion)
>>> Thank you.
>>> Best regards,
>>> Abbie
>>> _______________________________________________
>>> P4-dev mailing list
>>> P4-dev at lists.p4.org
>>> http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org
> _______________________________________________
> P4-dev mailing list
> P4-dev at lists.p4.org
> http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.p4.org/pipermail/p4-dev_lists.p4.org/attachments/20170406/43f5e370/attachment.html>

More information about the P4-dev mailing list