Changeset 207


Ignore:
Timestamp:
08/03/12 12:41:05 (12 years ago)
Author:
atzm
Message:
  • refactoring
File:
1 edited

Legend:

Unmodified
Added
Removed
  • etherws/trunk/etherws.py

    r206 r207  
    136136                del self._table[vid] 
    137137 
    138     def get_entry(self, vid, mac): 
     138    def _get_entry(self, vid, mac): 
    139139        try: 
    140140            entry = self._table[vid][mac] 
     
    149149                     lambda: (entry.port.number, vid, mac.encode('hex'))) 
    150150 
    151     def get_vid_list(self): 
    152         return sorted(self._table.iterkeys()) 
    153  
    154     def get_mac_list(self, vid): 
    155         return sorted(self._table[vid].iterkeys()) 
     151    def foreach(self): 
     152        for vid in sorted(self._table.iterkeys()): 
     153            for mac in sorted(self._table[vid].iterkeys()): 
     154                entry = self._get_entry(vid, mac) 
     155                if entry: 
     156                    yield (vid, mac, entry) 
    156157 
    157158    def lookup(self, frame): 
    158159        mac = frame.dst_mac 
    159160        vid = frame.vid 
    160         entry = self.get_entry(vid, mac) 
     161        entry = self._get_entry(vid, mac) 
    161162        return getattr(entry, 'port', None) 
    162163 
     
    169170 
    170171    def delete(self, port): 
    171         for vid in self.get_vid_list(): 
    172             for mac in self.get_mac_list(vid): 
    173                 entry = self.get_entry(vid, mac) 
    174                 if entry and entry.port.number == port.number: 
    175                     self._del_entry(vid, mac) 
    176                     self.dprintf('deleted: port:%d; vid:%d; mac:%s\n', 
    177                                  lambda: (port.number, vid, mac.encode('hex'))) 
     172        for vid, mac, entry in self.foreach(): 
     173            if entry.port.number == port.number: 
     174                self._del_entry(vid, mac) 
     175                self.dprintf('deleted: port:%d; vid:%d; mac:%s\n', 
     176                             lambda: (port.number, vid, mac.encode('hex'))) 
    178177 
    179178 
     
    577576    def handle_listFdb(self, params): 
    578577        list_ = [] 
    579         for vid in self._switch.fdb.get_vid_list(): 
    580             for mac in self._switch.fdb.get_mac_list(vid): 
    581                 entry = self._switch.fdb.get_entry(vid, mac) 
    582                 if entry: 
    583                     list_.append({ 
    584                         'vid':  vid, 
    585                         'mac':  EthernetFrame.format_mac(mac), 
    586                         'port': entry.port.number, 
    587                         'age':  int(entry.age), 
    588                     }) 
     578        for vid, mac, entry in self._switch.fdb.foreach(): 
     579            list_.append({ 
     580                'vid':  vid, 
     581                'mac':  EthernetFrame.format_mac(mac), 
     582                'port': entry.port.number, 
     583                'age':  int(entry.age), 
     584            }) 
    589585        return {'entries': list_} 
    590586 
Note: See TracChangeset for help on using the changeset viewer.