[ovs-dev] [PATCH V5 0/2] Do not rewrite fields with the same values as matched
Eli Britstein
elibr at mellanox.com
Mon Feb 25 19:42:08 UTC 2019
On 2/25/2019 7:31 PM, Ben Pfaff wrote:
> On Sun, Feb 24, 2019 at 09:45:21AM +0000, Eli Britstein wrote:
>> On 2/22/2019 6:42 PM, Ben Pfaff wrote:
>>> On Sun, Feb 17, 2019 at 09:18:46AM +0000, Eli Britstein wrote:
>>>> This patch set avoids unnecessary rewrite actions to fields with the
>>>> same values as matched on.
>>>>
>>>> Patch 1 is a pre-step of generating ovs key fields macros
>>>> Patch 2 avoids the unnecessary rewrites and adapts the tests accordingly
>>> Thanks for the revision.
>>>
>>> Do you foresee other uses of OVS_KEY_FIELD in the future? As is,
>>> there's a lot of duplication here from the numerous declarations like
>>>
>>> struct ovs_key_field_properties ovs_key_nd_extensions_properties[] = {
>>> #define OVS_KEY_FIELD(type, name) {offsetof(struct ovs_key_nd_extensions, name), sizeof(type)},
>>> OVS_KEY_ND_EXTENSIONS_FIELDS
>>> {0, 0}
>>> #undef OVS_KEY_FIELD
>>> };
>>>
>>> If this is the only currently foreseen use, it would be better to have
>>> the code generator just generate the declarations directly instead of
>>> forcing these later duplications.
>> Please note the definitions are not exactly duplicated - each define
>> refers to a different struct. Currently I don't know what other uses
>> will be needed/done in the future. However, I think we should remain
>> with more generic and flexible code, that will allow easier use of those
>> macros in the future rather than specific macros.
> What uses do you foresee in the future?
I don't foresee the future. I just think we should keep the code as
generic as possible, so future implementations are easier to reuse the
same infrastructure.
Just for example, I can think of a log/debug implementation to print a
struct:
suppose there is a function: void print_hex(char *buf, int len)
and you want to print a struct ovs_key_ipv4 ip:
#define OVS_KEY_FIELD(type, name) print_hex(((char*)ip)+offsetof(struct
ovs_key_ipv4, name), sizeof(type))
OVS_KEY_IPV4_FIELDS - will print all the fields, and you can also add a
title etc.
More information about the dev
mailing list