diff options
-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 |