secchan: Fix behavior when a network device is renamed.
authorBen Pfaff <blp@nicira.com>
Wed, 5 Aug 2009 21:47:16 +0000 (14:47 -0700)
committerBen Pfaff <blp@nicira.com>
Thu, 6 Aug 2009 23:57:06 +0000 (16:57 -0700)
commitc874dc6d6b892a7697c0c83a070a5b0a564be55f
treec3442857a68ceae9cf87e1138f2f823cf966bc85
parent0515ceb3e82ecc6160a141017c20ca26ec1a7a5f
secchan: Fix behavior when a network device is renamed.

update_port() deals with the case where we have been notified that a
network device with a given name, that is part of the datapath, has changed
in some way.  In particular it breaks the problem space up into ports that
have been added, deleted, or modified.

But the code here deals badly with the case where the only change is that
the network device associated with a port has been renamed (which is
reported to it with 'devname' as the network device's new named): it
looks up devname in the ofproto's index by name and doesn't find it, then
it looks up the port number assigned to the netdev in the ofproto's index
by datapath index and sees that there already is one.  This makes it
think that it's a new port, but with a port number that conflicts with an
existing port (under the old name for the port), which makes it discard
the notification and keep the old netdev name, and so afterward nothing
on the netdev will work since it still has the old netdev name.

This rewrite fixes the problem and simplifies the code.
secchan/ofproto.c