[P4-dev] storing metadata while parsing header stacks

Antoine Kaufmann antoinek at cs.washington.edu
Mon Jul 20 03:58:22 EDT 2015


I spent a while thinking about similar tricks to play in P4, so let me
add my 2 cents. Feel free to tear those apart if I overlooked something.

On Mon, Jul 20 09:11, Salvatore Signorello wrote:
> Caveat: I think that we cannot use ternary matches on a single table,
> because the mask we need is defined at run-time by the number of xyz
> headers parsed. Please point me wrong, if I'm mistaken.

I think you can use ternary matches if you also match on the valid bits
of the headers. So if you match on the second header, your matching key
would also set the correspondign valid bit in the matching key for the
entry to one (and the later valid bits can be "don't care". If you had a
large maximal depth it might make sense to create multiple ternary match
tables (at least 0, at least 32, ...) to reduce the entry size at the
cost of using multiple stages.

Hope this helps!

> 
> Thank you in advance,
> best,
> Salvatore
> 
> 
> On Fri, 2015-07-17 at 18:16 +0200, Salvatore Signorello wrote:
> 
> > Thank you a lot, Mihai,
> > 
> > This trick works smoothly for the simple MPLS example I've used to
> > illustrate the issue. I hope I can exploit such workaround into a
> > different workflow I'm working on too.
> > 
> > Best,
> > Salvatore
> > On Fri, 2015-07-17 at 08:24 -0700, Mihai Budiu wrote: 
> > 
> > > The valid bits of the header stack can be interpreted as a base 1
> > > encoding of the number you are looking for. If you want it in base 2
> > > you can use a table for converting it.
> > > 
> > > Mihai
> > > 
> > > ____________________________________________________________________
> > > 
> > > From: Salvatore Signorello
> > > Sent: ‎7/‎17/‎2015 0:56
> > > To: p4-dev at p4.org
> > > Subject: [P4-dev] storing metadata while parsing header stacks
> > > 
> > > 
> > > Hi all,
> > > any advice for the following:
> > > 
> > > Suppose to have an MPLS stack parsed as follows:
> > > 
> > > #define MPLS_DEPTH 5
> > > header mpls_t mpls[MPLS_DEPTH];
> > > 
> > > parser parse_mpls{
> > >     extract(mpls[next]){
> > >         return select(latest.bos){
> > >             0 : parse_mpls;
> > >             1 : parse_mpls_bos;
> > >         }
> > >     }
> > > }
> > > 
> > > and that you would like to know (and to store somewhere, like into a
> > > metadata block) how many MPLS headers (a number that is likely lower
> > > than MPLS_DEPTH) have been parsed at the end of the parsing process.
> > > What to do?
> > > Could metadata be used like a kind of counter?
> > > Could register be indexed somehow during the parsing and set through
> > > the set_metadata?
> > > 
> > > Thank you in advance,
> > > best,
> > > Salvatore Signorello

-- 
Antoine Kaufmann
<antoinek at cs.washington.edu>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://lists.p4.org/pipermail/p4-dev_lists.p4.org/attachments/20150720/b0d24607/attachment.asc>


More information about the P4-dev mailing list