Changeset 187 for etherws/trunk


Ignore:
Timestamp:
07/30/12 19:12:37 (12 years ago)
Author:
atzm
Message:
  • refactoring
File:
1 edited

Legend:

Unmodified
Added
Removed
  • etherws/trunk/etherws.py

    r186 r187  
    179179    def register_port(self, interface): 
    180180        try: 
    181             interface._switch_portnum = self._next  # XXX 
     181            self._set_privattr('portnum', interface, self._next)  # XXX 
    182182            self._table[self._next] = SwitchPort(self._next, interface) 
    183183            return self._next 
     
    186186 
    187187    def unregister_port(self, interface): 
    188         self._fdb.delete(self._table[interface._switch_portnum]) 
    189         del self._table[interface._switch_portnum] 
    190         del interface._switch_portnum 
     188        portnum = self._get_privattr('portnum', interface) 
     189        self._del_privattr('portnum', interface) 
     190        self._fdb.delete(self._table[portnum]) 
     191        del self._table[portnum] 
    191192 
    192193    def send(self, dst_interfaces, frame): 
    193         ports = sorted((self._table[i._switch_portnum] for i in dst_interfaces 
    194                         if not self._table[i._switch_portnum].shut), 
    195                        cmp=SwitchPort.cmp_by_number) 
     194        portnums = (self._get_privattr('portnum', i) for i in dst_interfaces) 
     195        ports = (self._table[n] for n in portnums) 
     196        ports = (p for p in ports if not p.shut) 
     197        ports = sorted(ports, cmp=SwitchPort.cmp_by_number) 
    196198 
    197199        for p in ports: 
     
    207209 
    208210    def receive(self, src_interface, frame): 
    209         port = self._table[src_interface._switch_portnum] 
     211        port = self._table[self._get_privattr('portnum', src_interface)] 
    210212 
    211213        if not port.shut: 
     
    225227                    return 
    226228 
    227             ports = set(self._table.itervalues()) - set([src_port]) 
     229            ports = set(self.portlist) - set([src_port]) 
    228230            self.send((p.interface for p in ports), frame) 
    229231 
    230232        except:  # ex. received invalid frame 
    231233            traceback.print_exc() 
     234 
     235    def _privattr(self, name): 
     236        return '_%s_%s_%s' % (self.__class__.__name__, id(self), name) 
     237 
     238    def _set_privattr(self, name, obj, value): 
     239        return setattr(obj, self._privattr(name), value) 
     240 
     241    def _get_privattr(self, name, obj, defaults=None): 
     242        return getattr(obj, self._privattr(name), defaults) 
     243 
     244    def _del_privattr(self, name, obj): 
     245        return delattr(obj, self._privattr(name)) 
    232246 
    233247 
Note: See TracChangeset for help on using the changeset viewer.