def handle_read(self): data = self.recv(1024) if data == '': self.handle_close() return log.l.LogIt('RTC006', 'D', 'cmd i: %s', (data)) args = string.split(data) if len(args) == 0: return; self.mode = args[0] self.target = args[1] args = args[2:] log.l.LogIt('RTC007', '1', '%s', (str(args))) if len(args) == 0: return #-------------------- if args[0] == 'close': self.senddata.append(util.close(self.mode == 'router', self.target, args[1:])) #-------------------- elif args[0] == 'data': if self.mode == 'domain': self.senddata.append('command: '+args[0]+': address only to router') if self.mode == 'router': self.senddata.append(util.data(args[1:])) elif args[0] == 'dump': if self.mode == 'domain': self.senddata.append('command: '+args[0]+': address only to router') if self.mode == 'router': self.senddata.append(util.dump()) #-------------------- elif args[0] == 'event': if self.mode == 'domain': self.senddata.append('command: '+args[0]+': address only to router') if self.mode == 'router': self.senddata.append(util.event(args[1:])) #-------------------- elif args[0] == 'fb' or args[0] == 'fallback' or args[0] == 'secondary': if len(args) > 1 and args[1] == 'auto': auto = 1 else: auto = 0 if self.mode == 'domain': cfg.domain[self.target]['fallback'] = 1 self.senddata.append(util.switch_secondary(self.target, auto)) if self.mode == 'router': for i in cfg.domain.keys(): if cfg.domain[i]['apr'] == cfg.name: cfg.domain[i]['fallback'] = 1 self.senddata.append(i+' '+util.switch_secondary(i, auto)) #-------------------- elif args[0] == 'ff' or args[0] == 'fallforward' or args[0] == 'primary': if len(args) > 1 and args[1] == 'auto': auto = 1 else: auto = 0 if self.mode == 'domain': cfg.domain[self.target]['fallback'] = 0 self.senddata.append(util.switch_primary(self.target, auto)) if self.mode == 'router': for i in cfg.domain.keys(): if cfg.domain[i]['apr'] == cfg.name: cfg.domain[i]['fallback'] = 0 self.senddata.append(i+' '+util.switch_primary(i, auto)) #-------------------- elif args[0] == 'pvc': if self.mode == 'domain': self.senddata.append('command: '+args[0]+': address only to router') if self.mode == 'router': self.senddata.append(util.pvc(args[1:])) #-------------------- elif args[0] == 'refresh': evt_hdlr.refresh() self.senddata.append('status refreshed') #-------------------- elif args[0] == 'set': self.senddata = util.set(self.mode == 'router', self.target, args[1:]) #-------------------- elif args[0] == 'sna': if self.mode == 'domain': self.senddata.append('command: '+args[0]+': address only to router') if self.mode == 'router': self.senddata.append(util.sna(args[1:])) #-------------------- elif args[0] == 'status': if self.mode == 'domain': self.senddata.append(util.status(self.target)) if self.mode == 'router': for i in cfg.domain.keys(): if cfg.domain[i]['apr'] == cfg.name: self.senddata.append(i+' '+util.status(i)) if len(self.senddata) == 0: self.senddata.append('not active') #-------------------- elif args[0] == 'stop': if self.mode == 'domain': self.senddata.append('command: '+args[0]+': address only to router') if self.mode == 'router': log.l.LogIt('RTC008', 'I', 'command termination', ()) cfg.stopping = 1 msg = '%s terminating' % self.target self.senddata.append(msg) for i in cfg.domain.keys(): util.closeall(i) #-------------------- elif args[0] == 'trace': if self.mode == 'domain': self.senddata.append('command: '+args[0]+': address only to router') if self.mode == 'router': if len(args) > 1: log.l.SetTraceLevel(int(args[1])) self.senddata.append('trace level %s' % (args[1])) log.l.LogIt('RTC009', 'I', 'command trace %s', (args[1])) else: level = log.l.GetTraceLevel() self.senddata.append('trace level %d' % (level)) log.l.LogIt('RTC010', 'I', 'command get trace: %d', (level)) #-------------------- elif args[0] == 'version': msg = ver.getVersion() if cfg.snasrv_version != '': msg = msg + ' snasrv: ' + cfg.snasrv_version self.senddata.append(msg) #-------------------- else: self.senddata.append('command: '+args[0]+': not implemented')
def poll(): global lasttime_snasrv global lasttime_server global lasttime_event global lasttime_atmx25 global lasttime_refresh global lasttime_settime global lasttime_poll #--------------------------now now = int(time.time()) sys.stdout.flush() sys.stderr.flush() if now == lasttime_poll: return lasttime_poll = now #--------------------------shutdown drain = 0 if cfg.stopping: log.l.LogIt('RTP002', '1', 'stopping', ()) # close sna server channel if cfg.sna_hdlr: cfg.sna_hdlr.handle_close() drain = 1 # wait io if drain: return # close data and event channels (if open) if cfg.event_hdlr: cfg.event_ip = '' cfg.event_hdlr.handle_close() drain = 1 if cfg.data_hdlr: cfg.data_ip = '' cfg.data_hdlr.handle_close() drain = 1 # wait io if drain: return # close server channels for ip in cfg.servers.keys(): if cfg.servers[ip]['cmdchan']: cfg.servers[ip]['cmdchan'].handle_close() drain = 1 # wait io if drain: return # stop cmd listener if cfg.listeners.has_key('cmd'): cfg.listeners['cmd'].handle_close() drain = 1 # wait io if drain: return cfg.counter = cfg.counter - 1 if cfg.counter >= 0: log.l.LogIt('RTP003', '1', 'counter', ()) return print 'socket_map', sock.socket_map # to be found in init.log print 'router: cannot get here' sys.exit(0) #--------------------------check atm request timeouts for wsid in cfg.atm.keys(): if cfg.atm[wsid]['gastate'] == '=': log.l.LogIt('RTP004', '1', '%s: wait for config server', (wsid)) if (now - cfg.atm[wsid]['ga_conn']) > (routercfg.config): cfg.atm[wsid]['ga_conn'] = now ga_hdlr.getdomain_next(wsid) #--------------------------restart ga listeners # Listen for client GAs for port in routercfg.DomainPorts: if not cfg.listeners.has_key(port): ga_hdlr.ga(port) #--------------------------reconnect snasrv if (now - lasttime_snasrv) > routercfg.snasrv: lasttime_snasrv = now if cfg.sna_use: if not cfg.sna_hdlr: sna_hdlr.sna() #--------------------------reconnect cfg, bnmroutc, ga, stat if (now - lasttime_server) > routercfg.server: lasttime_server = now # check ports, attempt to reopen as necessary list = cfg.servers.keys() list.sort() for ip in list: if not cfg.servers[ip]['cmdchan']: srv_hdlr.srv(ip) if not cfg.servers[ip]['routc']: routc_hdlr.bnmroutc(ip) else: cfg.servers[ip]['routc'].routcHB() list = cfg.atm.keys() list.sort() for wsid in list: # check open ga's, attempt to connect bnm as necessary if cfg.atm[wsid]['gastate'] == 'o' and cfg.atm[wsid]['bnmstate'] != 'o': ga_hdlr.gaconnect(wsid, 0) if not cfg.stat_hdlr: cfg.stat_buf = [] evt_hdlr.stat() #--------------------------reconnect event and data if (now - lasttime_event) > routercfg.event: lasttime_event = now if not cfg.event_hdlr: if cfg.event_ip != '': evt_hdlr.event() else: if cfg.event_ip == '': cfg.event_hdlr.handle_close() if not cfg.data_hdlr: if cfg.data_ip != '': evt_hdlr.data() else: if cfg.data_ip == '': cfg.data_hdlr.handle_close() #--------------------------reconnect X25 ATMs if (now - lasttime_atmx25) > routercfg.atmx25: lasttime_atmx25 = now if cfg.sna_use: sna_hdlr.snapoll() #--------------------------refresh aprstat if routercfg.refresh: if (now - lasttime_refresh) > routercfg.refresh: lasttime_refresh = now evt_hdlr.refresh()