summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorIsaku Yamahata <yamahata@valinux.co.jp>2012-02-10 11:43:22 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2012-02-10 16:45:22 +0900
commitb4465af91a0bcfa12203b2b297a30fbf65cb08da (patch)
tree81392c8467ac2cad121fbd0f856d0906ad2335aa
parent2c018c6b999fa6a3bab9849ce0c835cc8f9d1228 (diff)
controller/{mac_to_port, network}: add more methods to track port status change
These methods will be used to handle port status change message. 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/mac_to_port.py7
-rw-r--r--ryu/controller/network.py24
2 files changed, 24 insertions, 7 deletions
diff --git a/ryu/controller/mac_to_port.py b/ryu/controller/mac_to_port.py
index 32e61f49..f1db80f7 100644
--- a/ryu/controller/mac_to_port.py
+++ b/ryu/controller/mac_to_port.py
@@ -46,3 +46,10 @@ class MacToPortTable(object):
def port_get(self, dpid, mac):
# LOG.debug('dpid 0x%016x mac %s', dpid, haddr_to_str(mac))
return self.mac_to_port[dpid].get(mac)
+
+ def mac_list(self, dpid, port):
+ return [mac for (mac, port_) in self.mac_to_port.get(dpid).items()
+ if port_ == port]
+
+ def mac_del(self, dpid, mac):
+ del self.mac_to_port[dpid][mac]
diff --git a/ryu/controller/network.py b/ryu/controller/network.py
index 6aacd826..e800bf0e 100644
--- a/ryu/controller/network.py
+++ b/ryu/controller/network.py
@@ -97,7 +97,12 @@ class Network(object):
except ValueError:
raise PortNotFound(network_id=network_id, dpid=dpid, port=port)
- del self.dpids[dpid][port]
+ # self.dpids[dpid][port] can be already deleted by port_deleted()
+ self.dpids[dpid].pop(port, None)
+
+ #
+ # methods for simple_isolation
+ #
def same_network(self, dpid, nw_id, out_port, allow_nw_id_external=None):
assert nw_id != self.nw_id_unknown
@@ -128,14 +133,19 @@ class Network(object):
dpid = ofp_switch_features.datapath_id
ports = ofp_switch_features.ports
self.dpids.setdefault(dpid, {})
- dp = self.dpids[dpid]
for port_no in ports:
- if port_no == 0 or port_no >= datapath.ofproto.OFPP_MAX:
- # skip fake output ports
- continue
+ self.port_added(datapath, port_no)
+
+ def port_added(self, datapath, port_no):
+ if port_no == 0 or port_no >= datapath.ofproto.OFPP_MAX:
+ # skip fake output ports
+ return
+
+ dp = self.dpids[datapath.id]
+ dp.setdefault(port_no, self.nw_id_unknown)
- if port_no not in dp:
- dp[port_no] = self.nw_id_unknown
+ def port_deleted(self, dpid, port_no):
+ self.dpids[dpid].pop(port_no, None)
def filter_ports(self, dpid, in_port, nw_id, allow_nw_id_external=None):
assert nw_id != self.nw_id_unknown