[P4-dev] P4 variable fields

Andy Fingerhut andy.fingerhut at gmail.com
Sat Jul 22 14:03:43 EDT 2017


The only way that P4 programs can extract a variable-length field from a
packet is if there is some field in the packet before that variable-length
field, from which the length of the variable-length field can be calculated.

If the variable-length field you want is "the rest of the packet, all the
way to the end", I don't see any advantage to extract'ing it -- any header
you do not extract in P4 is considered part of the payload, automatically,
and the payload will automatically be copied from the received packet to
the transmitted packet, after the headers your program emit's.

Andy

On Fri, Jul 21, 2017 at 5:33 AM, shubham bhardwaj <
bhardwajshubham2011 at gmail.com> wrote:

> Adding on, this length can go up to 40 - 1440 but my main question is if
> there is no header length field is present in the header. Then, is there
> any way to form an expression for the variable length. For example, in the
> above case there is no header field in Ethernet and its payload i.e.
> Profinet.
>
> Thanks & Regards
>
> On Wed, Jul 19, 2017 at 10:10 PM, shubham bhardwaj <
> bhardwajshubham2011 at gmail.com> wrote:
>
>> Yeah, this is wrong. I found out that the length should be the (packet
>> length - fixed fields length). Right now the packet i am parsing is of 46
>> bytes and fixed fields are of 6 bytes. I am not sure that the fields in
>> this header contain any details about the header length (like IHL in IPv4).
>> This is the screenshot of the packet, header fields, and the parsed output.
>> I am using length as 40 bytes (which is probably wrong) and also i am not
>> getting any result for the variable field from this value.
>>
>> [image: Inline image 1]
>>
>> fields {
>> frameID: 16;
>>         cyclecounter: 16;
>> datastatus: 8;
>> transferstatus: 8;
>>         profinetcyclic: *;
>>        }
>> length: 40;
>> max_length: 80;
>> }
>>
>> [image: Inline image 2]
>>
>> On Wed, Jul 19, 2017 at 6:31 PM, Andy Fingerhut <andy.fingerhut at gmail.com
>> > wrote:
>>
>>> The length expression 'frameID * 20' can be much larger than 512, since
>>> frameID is 16 bits in size.  I don't know if that is causing any issues for
>>> you.
>>>
>>> What is going wrong when you try to compile/run the program you shared?
>>>
>>> Andy
>>>
>>> On Wed, Jul 19, 2017 at 6:05 AM, shubham bhardwaj <
>>> bhardwajshubham2011 at gmail.com> wrote:
>>>
>>>> Hello Andy,
>>>>
>>>> Thanks for your reply, its really helpful. But i am facing another
>>>> issue in initializing the variable length. I am able to initialize variable
>>>> length of the field options for IPv4, as already explained by Antonin.
>>>> However, I am not able to do the same for Profinet RT header, which is a
>>>> low-level protocol. I am not sure if i am doing something wrong or is there
>>>> any other issue.
>>>>
>>>> //Ethernet header
>>>> header_type ethernet_t {
>>>>     fields {
>>>>         dstAddr: 48;
>>>>         srcAddr: 48;
>>>>         etherType: 16;
>>>>      }
>>>> }
>>>>
>>>> //Profinet header
>>>> header_type Profinet_RT_t {
>>>>     fields {
>>>> frameID: 16;
>>>>         profinetcyclic: *;
>>>>    }
>>>> length: frameID * 20;
>>>> max_length: 512;
>>>> }
>>>>
>>>>
>>>> On Tue, Jul 18, 2017 at 4:57 PM, Andy Fingerhut <
>>>> andy.fingerhut at gmail.com> wrote:
>>>>
>>>>> The only ways I know of in P4 programs to fill in the values of
>>>>> variable-length fields of headers is to extract() them from a packet being
>>>>> parsed.  From there, they can be copied (without any modifications) to
>>>>> other instances of the same type of header, by copy_header() in P4_14, or
>>>>> in P4_16 simply assigning the value of one header to another of the same
>>>>> type.
>>>>>
>>>>> I believe it would be nice if P4_16 were extended to include ways to
>>>>> copy parts of varbit fields and copy them into fixed-width
>>>>> fields/variables, or vice versa, and I have suggested such a language
>>>>> addition on this Github issue: https://github.com/p4la
>>>>> ng/p4-spec/issues/264   It will probably be some time before
>>>>> significant-sized changes will be made to the P4_16 spec, and there is no
>>>>> consensus yet on whether such a change is of interest to a wider audience.
>>>>>
>>>>> Andy
>>>>>
>>>>> On Tue, Jul 18, 2017 at 6:07 AM, shubham bhardwaj <
>>>>> bhardwajshubham2011 at gmail.com> wrote:
>>>>>
>>>>>> Dear All,
>>>>>>
>>>>>> I am working on a case where a single field in a header can vary in
>>>>>> length. In that case, is it possible to initialize it using variable fields.
>>>>>>
>>>>>> --
>>>>>> Thanks & Regards
>>>>>> Shubham Bhardwaj
>>>>>> *Technical University of Darmstadt*
>>>>>> +49 17643686394 <+49%20176%2043686394>
>>>>>>
>>>>>> _______________________________________________
>>>>>> P4-dev mailing list
>>>>>> P4-dev at lists.p4.org
>>>>>> http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Thanks & Regards
>>>> Shubham Bhardwaj
>>>> *Technical University of Darmstadt*
>>>> +49 17643686394 <+49%20176%2043686394>
>>>>
>>>
>>>
>>
>>
>> --
>> Thanks & Regards
>> Shubham Bhardwaj
>> *Technical University of Darmstadt*
>> +49 17643686394 <+49%20176%2043686394>
>>
>
>
>
> --
> Thanks & Regards
> Shubham Bhardwaj
> *Technical University of Darmstadt*
> +49 17643686394 <+49%20176%2043686394>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.p4.org/pipermail/p4-dev_lists.p4.org/attachments/20170722/2f1404fe/attachment-0002.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 12505 bytes
Desc: not available
URL: <http://lists.p4.org/pipermail/p4-dev_lists.p4.org/attachments/20170722/2f1404fe/attachment.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 39008 bytes
Desc: not available
URL: <http://lists.p4.org/pipermail/p4-dev_lists.p4.org/attachments/20170722/2f1404fe/attachment-0001.png>


More information about the P4-dev mailing list