Changeset 198


Ignore:
Timestamp:
08/01/12 00:43:21 (12 years ago)
Author:
atzm
Message:
  • add ctl command "listfdb"
File:
1 edited

Legend:

Unmodified
Added
Removed
  • etherws/trunk/etherws.py

    r197 r198  
    101101        return 0 
    102102 
     103    @staticmethod 
     104    def format_mac(mac, sep=':'): 
     105        return sep.join(b.encode('hex') for b in mac) 
     106 
    103107 
    104108class FDB(DebugMixIn): 
     
    148152 
    149153    def get_vid_list(self): 
    150         return self._table.keys() 
     154        return sorted(self._table.iterkeys()) 
    151155 
    152156    def get_mac_list(self, vid): 
    153         return self._table[vid].keys() 
     157        return sorted(self._table[vid].iterkeys()) 
    154158 
    155159    def lookup(self, frame): 
     
    548552            self.finish({'result': None, 'error': {'message': msg}, 'id': id_}) 
    549553 
     554    def handle_listFdb(self, params): 
     555        list_ = [] 
     556        for vid in self._switch.fdb.get_vid_list(): 
     557            for mac in self._switch.fdb.get_mac_list(vid): 
     558                entry = self._switch.fdb.get_entry(vid, mac) 
     559                if entry: 
     560                    mac = EthernetFrame.format_mac(mac) 
     561                    list_.append([vid, mac, entry.port.number, int(entry.age)]) 
     562        return {'result': list_} 
     563 
    550564    def handle_listPort(self, params): 
    551565        list_ = [self._portstat(p) for p in self._switch.portlist] 
    552         return {'portlist': list_} 
     566        return {'result': list_} 
    553567 
    554568    def handle_addPort(self, params): 
     
    562576            portnum = interface.open() 
    563577            list_.append(self._portstat(self._switch.get_port(portnum))) 
    564         return {'portlist': list_} 
     578        return {'result': list_} 
    565579 
    566580    def handle_delPort(self, params): 
     
    570584            list_.append(self._portstat(port)) 
    571585            port.interface.close() 
    572         return {'portlist': list_} 
     586        return {'result': list_} 
    573587 
    574588    def handle_shutPort(self, params): 
     
    578592            port.shut = bool(p['shut']) 
    579593            list_.append(self._portstat(port)) 
    580         return {'portlist': list_} 
     594        return {'result': list_} 
    581595 
    582596    def _optparse_tap(self, opt): 
     
    778792        return request(args, 'listPort', []) 
    779793 
     794    def handle_ctl_listfdb(args): 
     795        return request(args, 'listFdb', []) 
     796 
    780797    res = locals()['handle_ctl_' + args.control_method](args) 
    781798 
     
    783800        print(res['error']['message']) 
    784801    else: 
    785         print(yaml.safe_dump(res['result']['portlist']).strip()) 
     802        print(yaml.safe_dump(res['result']).strip()) 
    786803 
    787804 
     
    837854    parser_c_lp = control_method.add_parser('listport') 
    838855 
     856    parser_c_lf = control_method.add_parser('listfdb') 
     857 
    839858    # -- go 
    840859    args = parser.parse_args() 
Note: See TracChangeset for help on using the changeset viewer.