[ovs-dev] sign-off (was: [PATCH v2] ofproto-dpif: Avoid creating OpenFlow ports for duplicate tunnels.)
Andy Zhou
azhou at nicira.com
Fri Jun 5 18:23:23 UTC 2015
Thank you for your kindness.
Signed-off-by: Andy Zhou <azhou at nicira.com>
On Fri, Jun 5, 2015 at 8:14 AM, Ben Pfaff <blp at nicira.com> wrote:
> Andy, I added you as co-author on this, can you give me a Signed-off-by
> for your contribution?
>
> On Fri, Jun 05, 2015 at 08:13:28AM -0700, Ben Pfaff wrote:
>> Until now, when two tunnels had an identical configuration, both of them
>> were assigned OpenFlow ports, but only one of those OpenFlow ports was
>> functional. With this commit, only one of the two (or more) identically
>> configured tunnels will be assigned an OpenFlow port number.
>>
>> Reported-by: Keith Holleman <hollemanietf at gmail.com>
>> Signed-off-by: Ben Pfaff <blp at nicira.com>
>> Co-authored-by: Andy Zhou <azhou at nicira.com>
>> ---
>> v1->v2: Fix reference counting and memory leak (from Andy Zhou).
>>
>> AUTHORS | 1 +
>> ofproto/ofproto-dpif.c | 10 ++++++++--
>> ofproto/tunnel.c | 14 ++++++++++----
>> ofproto/tunnel.h | 6 +++---
>> 4 files changed, 22 insertions(+), 9 deletions(-)
>>
>> diff --git a/AUTHORS b/AUTHORS
>> index f155105..28899a8 100644
>> --- a/AUTHORS
>> +++ b/AUTHORS
>> @@ -277,6 +277,7 @@ Joan Cirer joan at ev0.net
>> John Darrington john at darrington.wattle.id.au
>> John Galgay john at galgay.net
>> John Hurley john.hurley at netronome.com
>> +Keith Holleman hollemanietf at gmail.com
>> K 華 k940545 at hotmail.com
>> Kevin Mancuso kevin.mancuso at rackspace.com
>> Kiran Shanbhog kiran at vmware.com
>> diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
>> index c1daa1d..bd45305 100644
>> --- a/ofproto/ofproto-dpif.c
>> +++ b/ofproto/ofproto-dpif.c
>> @@ -1671,8 +1671,14 @@ port_construct(struct ofport *port_)
>>
>> if (netdev_get_tunnel_config(netdev)) {
>> atomic_count_inc(&ofproto->backer->tnl_count);
>> - tnl_port_add(port, port->up.netdev, port->odp_port,
>> - ovs_native_tunneling_is_on(ofproto), namebuf);
>> + error = tnl_port_add(port, port->up.netdev, port->odp_port,
>> + ovs_native_tunneling_is_on(ofproto), namebuf);
>> + if (error) {
>> + atomic_count_dec(&ofproto->backer->tnl_count);
>> + dpif_port_destroy(&dpif_port);
>> + return error;
>> + }
>> +
>> port->is_tunnel = true;
>> if (ofproto->ipfix) {
>> dpif_ipfix_add_tunnel_port(ofproto->ipfix, port_, port->odp_port);
>> diff --git a/ofproto/tunnel.c b/ofproto/tunnel.c
>> index 3ea0eb4..d2ac7c6 100644
>> --- a/ofproto/tunnel.c
>> +++ b/ofproto/tunnel.c
>> @@ -1,4 +1,4 @@
>> -/* Copyright (c) 2013, 2014 Nicira, Inc.
>> +/* Copyright (c) 2013, 2014, 2015 Nicira, Inc.
>> *
>> * Licensed under the Apache License, Version 2.0 (the "License");
>> * you may not use this file except in compliance with the License.
>> @@ -203,14 +203,20 @@ tnl_port_add__(const struct ofport_dpif *ofport, const struct netdev *netdev,
>>
>> /* Adds 'ofport' to the module with datapath port number 'odp_port'. 'ofport's
>> * must be added before they can be used by the module. 'ofport' must be a
>> - * tunnel. */
>> -void
>> + * tunnel.
>> + *
>> + * Returns 0 if successful, otherwise a positive errno value. */
>> +int
>> tnl_port_add(const struct ofport_dpif *ofport, const struct netdev *netdev,
>> odp_port_t odp_port, bool native_tnl, const char name[]) OVS_EXCLUDED(rwlock)
>> {
>> + bool ok;
>> +
>> fat_rwlock_wrlock(&rwlock);
>> - tnl_port_add__(ofport, netdev, odp_port, true, native_tnl, name);
>> + ok = tnl_port_add__(ofport, netdev, odp_port, true, native_tnl, name);
>> fat_rwlock_unlock(&rwlock);
>> +
>> + return ok ? 0 : EEXIST;
>> }
>>
>> /* Checks if the tunnel represented by 'ofport' reconfiguration due to changes
>> diff --git a/ofproto/tunnel.h b/ofproto/tunnel.h
>> index 6181762..b8415ab 100644
>> --- a/ofproto/tunnel.h
>> +++ b/ofproto/tunnel.h
>> @@ -1,4 +1,4 @@
>> -/* Copyright (c) 2013 Nicira, Inc.
>> +/* Copyright (c) 2013, 2015 Nicira, Inc.
>> *
>> * Licensed under the Apache License, Version 2.0 (the "License");
>> * you may not use this file except in compliance with the License.
>> @@ -33,8 +33,8 @@ void ofproto_tunnel_init(void);
>> bool tnl_port_reconfigure(const struct ofport_dpif *, const struct netdev *,
>> odp_port_t, bool native_tnl, const char name[]);
>>
>> -void tnl_port_add(const struct ofport_dpif *, const struct netdev *,
>> - odp_port_t odp_port, bool native_tnl, const char name[]);
>> +int tnl_port_add(const struct ofport_dpif *, const struct netdev *,
>> + odp_port_t odp_port, bool native_tnl, const char name[]);
>> void tnl_port_del(const struct ofport_dpif *);
>>
>> const struct ofport_dpif *tnl_port_receive(const struct flow *);
>> --
>> 2.1.3
>>
More information about the dev
mailing list