diff options
author | Isaku Yamahata <yamahata@valinux.co.jp> | 2013-07-10 18:35:05 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2013-07-13 08:15:57 +0900 |
commit | 068020de3b1da72814a8ca07ae9a3dac254c7242 (patch) | |
tree | 392517025a36e8e69fcdf64326a7c774a7524c14 | |
parent | 93a2604f7743108332976092a51c164065959617 (diff) |
network: sort out order between event and actual deletion of network
And make Network.remove_network more robust.
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/controller/network.py | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/ryu/controller/network.py b/ryu/controller/network.py index e81bd3c8..f70da080 100644 --- a/ryu/controller/network.py +++ b/ryu/controller/network.py @@ -78,14 +78,15 @@ class Networks(dict): def remove_network(self, network_id): try: - network = self[network_id] + ports = self[network_id] except KeyError: raise NetworkNotFound(network_id=network_id) - for (dpid, port_no) in network: - self.send_event(EventNetworkPort(network_id, dpid, port_no, False)) - self.send_event(EventNetworkDel(network_id)) - del self[network_id] + while ports: + (dpid, port_no) = ports.pop() + self._remove_event(network_id, dpid, port_no) + if self.pop(network_id, None) is not None: + self.send_event(EventNetworkDel(network_id)) def list_ports(self, network_id): try: @@ -106,11 +107,14 @@ class Networks(dict): # self.add_raw(network_id, dpid, port_no) # self.add_event(network_id, dpid, port_no) + def _remove_event(self, network_id, dpid, port_no): + self.send_event(EventNetworkPort(network_id, dpid, port_no, False)) + def remove_raw(self, network_id, dpid, port_no): ports = self[network_id] if (dpid, port_no) in ports: ports.remove((dpid, port_no)) - self.send_event(EventNetworkPort(network_id, dpid, port_no, False)) + self._remove_event(network_id, dpid, port_no) def remove(self, network_id, dpid, port_no): try: |