diff options
author | Isaku Yamahata <yamahata@valinux.co.jp> | 2012-02-10 11:43:22 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2012-02-10 16:45:22 +0900 |
commit | b4465af91a0bcfa12203b2b297a30fbf65cb08da (patch) | |
tree | 81392c8467ac2cad121fbd0f856d0906ad2335aa | |
parent | 2c018c6b999fa6a3bab9849ce0c835cc8f9d1228 (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.py | 7 | ||||
-rw-r--r-- | ryu/controller/network.py | 24 |
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 |