Damjan, 

 

Thanks!

 

Best wishes,

 

Hemant  

 

From: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> On Behalf Of Damjan Marion via 
lists.fd.io
Sent: Wednesday, January 20, 2021 10:34 AM
To: hem...@mnkcg.com
Cc: bga...@cisco.com; ne...@graphiant.com; ayour...@gmail.com; 
vpp-dev@lists.fd.io
Subject: Re: [vpp-dev] classifier howto?

 

 

Please note that we also have fixed pool implementation which may be used if 
you want to prevent pool resizing…..

 

Another option is to make your entries cacheline aligned, and then convert 
pointer to heap offset shifted  right for LOG2_CACHELINE_SIZE.

That will give you working solution for HEAP sizes up to 256G. We do something 
similar in the buffer allocator.

 

— 

Damjan





On 20.01.2021., at 16:26, hemant via lists.fd.io <http://lists.fd.io>  
<hemant=mnkcg....@lists.fd.io <mailto:hemant=mnkcg....@lists.fd.io> > wrote:

 

Hi Ben,

Great, thanks for the pool info!  I am all set.  I will close the JIRA issue 
and also the code review.

Best wishes,

Hemant

-----Original Message-----
From: Benoit Ganne (bganne) < <mailto:bga...@cisco.com> bga...@cisco.com>
Sent: Wednesday, January 20, 2021 9:47 AM
To:  <mailto:hem...@mnkcg.com> hem...@mnkcg.com;  <mailto:ne...@graphiant.com> 
ne...@graphiant.com;  <mailto:ayour...@gmail.com> ayour...@gmail.com
Cc:  <mailto:vpp-dev@lists.fd.io> vpp-dev@lists.fd.io
Subject: RE: [vpp-dev] classifier howto?




No, a u64 suffices. See how the u64 works with a bihash for any value,
not just pkt_filter4_0_value, in the code example given below.


Ok thanks. So you use the u64 to store a pointer to your structure allocated 
on the heap.
The usual way to do this in VPP instead is to allocate your structure in a 
pool. You can then store the u32 index of your data in the bihash and use 
opaque_index directly.

value = pool_get(pkt_filter4_pool);
u32 index = value - pkt_filter4_pool;
memcpy(value, &val, sizeof(val));
kv.value = index;
clib_bihash_add_del_48_8 (&ump->hash_table_pkt_filter4_0, &kv, 1);

Then you can retrieve value using this index (either coming from bihash lookup 
or from opaque_index):
value = pool_elt_at_index(pkt_filter4_pool, index);

I am not convinced adding metadata in opaque or opaque2 is really needed here.

Best
ben




struct pkt_filter4_0_value val = {}, *value;

 val.action = permit4;

 val.u.permit4.abits = 130;

 val.u.permit4.ig_strip = 0;

 val.u.permit4.outer_desc = 1;

 val.u.permit4.teid = 5241;

 val.u.permit4.ip = 0x03030302;

 val.u.permit4.src_ip = 0x03030301;

 val.u.permit4.dstPort = 2152;

 val.u.permit4.filt_dir = 1;

 val.u.permit4.reflec_qos = 0;



 value = malloc(sizeof(val));

 memcpy(value, &val, sizeof(val));

 kv.value = (u64) value;

 clib_bihash_add_del_48_8 (&ump->hash_table_pkt_filter4_0, &kv, 1);



Hemant



-----Original Message-----
From: Benoit Ganne (bganne) <bga...@cisco.com <mailto:bga...@cisco.com> >
Sent: Wednesday, January 20, 2021 8:13 AM
To: hem...@mnkcg.com <mailto:hem...@mnkcg.com> ; ne...@graphiant.com 
<mailto:ne...@graphiant.com> ; ayour...@gmail.com <mailto:ayour...@gmail.com> 
Cc: vpp-dev@lists.fd.io <mailto:vpp-dev@lists.fd.io> 
Subject: RE: [vpp-dev] classifier howto?






A github link is included in the JIRA issue to articulate the use
case,





https://jira.fd.io/browse/VPP-1967
<https://jira.fd.io/browse/VPP-1967>





The github link has a value for a classifier entry shown:





https://github.com/FDio/vpp/pull/33

<https://github.com/FDio/vpp/pull/33>




The value is a value used in a 5G UPF.




Is the 64-bits value you refer to the "struct pkt_filter4_0_value"? It
looks much bigger than 64-bits to me...



Best

ben






 

Attachment: smime.p7s
Description: S/MIME cryptographic signature

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#18572): https://lists.fd.io/g/vpp-dev/message/18572
Mute This Topic: https://lists.fd.io/mt/79925983/21656
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to