class Controller(object): def __init__(self): self.vlans = [] self.ports = {} self.vlan_filter = VlanFilter(self.vlans, self.ports) self.vlan_tagger = VlanTagger(self.vlans, self.ports, self.vlan_filter) self.learning_switch = LearningSwitch() def load_vlans(self, file_name): self.vlans[:] = [] for line in open(file_name): id, hosts = line.split(": ") self.vlans.append(Vlan(int(id), hosts.rstrip().split(", "))) self.vlan_tagger.update_policy() def add_host_to_vlan(self, vlan_id, host): for vlan in self.vlans: if vlan.id == vlan_id: vlan.hosts.append(host) break self.vlan_tagger.update_policy() def remove_host_from_vlan(self, vlan_id, host): for vlan in self.vlans: if vlan.id == vlan_id: vlan.hosts.remove(host) break self.vlan_tagger.update_policy() def add_vlan(self, vlan_id): self.vlans.append(Vlan(vlan_id, [])) self.vlan_tagger.update_policy() def remove_vlan(self, vlan_id): d = -1 for i in range(len(self.vlans)): if (self.vlans[i].id == vlan_id): d = i break if d != -1: del self.vlans[d] self.vlan_tagger.update_policy() def policy(self): return self.vlan_tagger >> self.learning_switch >> self.vlan_filter