[P4-dev] complex function like pattern matching

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


Hi,

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.

Thanks,

Antonin

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
>



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


More information about the P4-dev mailing list