summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorIsaku Yamahata <yamahata@valinux.co.jp>2013-07-10 18:35:05 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2013-07-13 08:15:57 +0900
commit068020de3b1da72814a8ca07ae9a3dac254c7242 (patch)
tree392517025a36e8e69fcdf64326a7c774a7524c14
parent93a2604f7743108332976092a51c164065959617 (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.py16
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: