[ovs-dev] [PATCH 1/2] datapath: Improve net-namespace compat code.

Pravin Shelar pshelar at nicira.com
Thu Jul 11 19:25:05 UTC 2013


On Wed, Jul 10, 2013 at 3:52 PM, Jesse Gross <jesse at nicira.com> wrote:
> On Mon, Jul 1, 2013 at 3:28 PM, Pravin B Shelar <pshelar at nicira.com> wrote:
>> diff --git a/datapath/linux/compat/net_namespace.c b/datapath/linux/compat/net_namespace.c
>> index 4e8a891..39b4a28 100644
>> --- a/datapath/linux/compat/net_namespace.c
>> +++ b/datapath/linux/compat/net_namespace.c
>>  int rpl_register_pernet_##PNET_TYPE(struct rpl_pernet_operations *rpl_pnet)    \
>>  {                                                                              \
>>         pnet_##PNET_TYPE = rpl_pnet;                                            \
>> -       return register_pernet_##PNET_TYPE(pnet_##PNET_TYPE->id, &pnet_compat_##PNET_TYPE); \
>> +       rpl_pnet->ops = pnet_compat_##PNET_TYPE;                                \
>> +       return register_pernet_##PNET_TYPE(pnet_##PNET_TYPE->id, &rpl_pnet->ops); \
>>  }
>
> I think this works for initializing the device for existing namespaces
> but if a new namespace is brought up then it will have problems. In
> that case, it will call the registration function for the last device
> repeatedly.
>
right.

> We could avoid this issue if we just used contain_of instead of a set
> of global variables to recover the original ops. That might also allow
> us to significantly reduce the amount of token pasting, which would
> also make this easier to read.
I am not sure what are you suggesting.
problem is compat-per-net-init function has net as parameter and it
need id to get private net obj. but there is no way to get
net_id/net-obj for this compat function without global pointer, but
that does not work as you explained.

I can think of some more macro tricks to hide this compat code, that
will involve moving this code to header and using file-name (and may
be line no) to build specific compat functions rather than sharing
same functions for multiple net-ops.



More information about the dev mailing list