package es.tid.pce.parentPCE.management; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Inet4Address; import java.net.Socket; import java.util.Enumeration; import java.util.Hashtable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import es.tid.pce.computingEngine.RequestDispatcher; import es.tid.pce.computingEngine.RequestProcessorThread; import es.tid.pce.computingEngine.algorithms.ComputingAlgorithmManager; import es.tid.pce.parentPCE.ChildPCERequestManager; import es.tid.pce.parentPCE.MultiDomainTopologyUpdater; import es.tid.pce.parentPCE.MDLSPDB.MultiDomainLSPDB; import es.tid.pce.pcepsession.PCEPSessionsInformation; import es.tid.tedb.ITMDTEDB; import es.tid.tedb.MDTEDB; import es.tid.tedb.ReachabilityManager; import es.tid.tedb.SimpleTEDB; public class ParentPCEManagementSession extends Thread { private boolean started = false; private Socket socket; private Logger log; private ChildPCERequestManager cprm; private RequestDispatcher requestDispatcher; private PrintStream out; private MDTEDB mdtedb; private SimpleTEDB simpleTedb; private ITMDTEDB ITmdtedb; private ReachabilityManager rm; private boolean isITcapable=false; private PCEPSessionsInformation pcepSessionManager; private MultiDomainTopologyUpdater mdtu; private MultiDomainLSPDB multiDomainLSPDB; public ParentPCEManagementSession(Socket s, ChildPCERequestManager cprm, RequestDispatcher requestDispatcher, MDTEDB mdtedb,SimpleTEDB simpleTedb, ReachabilityManager rm, PCEPSessionsInformation pcepSessionManager,MultiDomainTopologyUpdater mdtu, MultiDomainLSPDB multiDomainLSPDB){ this.socket=s; this.cprm=cprm; this.requestDispatcher=requestDispatcher; this.mdtedb=mdtedb; this.rm=rm; log=LoggerFactory.getLogger("PCEServer"); isITcapable=false; this.pcepSessionManager=pcepSessionManager; this.mdtu=mdtu; this.simpleTedb=simpleTedb; this.multiDomainLSPDB=multiDomainLSPDB; } public ParentPCEManagementSession(Socket s, ChildPCERequestManager cprm, RequestDispatcher requestDispatcher, ITMDTEDB ITmdtedb, ReachabilityManager rm, PCEPSessionsInformation pcepSessionManager,MultiDomainTopologyUpdater mdtu){ this.socket=s; this.cprm=cprm; this.requestDispatcher=requestDispatcher; this.ITmdtedb=ITmdtedb; this.rm=rm; log=LoggerFactory.getLogger("PCEServer"); isITcapable=true; this.pcepSessionManager=pcepSessionManager; this.mdtu=mdtu; } public void run(){ log.info("Starting Management session"); boolean running=true; try { out=new PrintStream(socket.getOutputStream()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return; } try { //out.print("-------------\n"); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); while (running) { if (!started) { out.print("\n"); out.print(" --- ,\r\n"); out.print(" | P | ,\r\n"); out.print(" | C | |'. ,\r\n"); out.print(" | E | | '-._ / )\r\n"); out.print(" | | .' .._ ', /_'-,\r\n"); out.print(" | P | ' / _'.'_\\ /._)')\r\n"); out.print(" | A | : / '_' '_' / _.'\r\n"); out.print(" | R | |E | |Q| |Q| / /\r\n"); out.print(" | E | .' _\\ '-' '-' /\r\n"); out.print(" | N | .'--.(S ,__` ) /\r\n"); out.print(" | T | '-. _.' /\r\n"); out.print(" | | __.--'----( /\r\n"); out.print(" | C | _.-' : __\\ /\r\n"); out.print(" | O | ( __.' :' :Y\r\n"); out.print(" | N | '. '._, : :|\r\n"); out.print(" | T | '. ) :.__:|\r\n"); out.print(" | R | \\ \\______/\r\n"); out.print(" | O | '._L/_H____]\r\n"); out.print(" | L | /_ /\r\n"); out.print(" | L | / '-.__.-')\r\n"); out.print(" | E | : / /\r\n"); out.print(" | R | : / /\r\n"); out.print(" --- ,/_____/----;\r\n"); out.print(" '._____)----'\r\n"); out.print(" / / /\r\n"); out.print(" / / /\r\n"); out.print(" .' / \\\r\n"); out.print(" (______(-.____)\r\n"); out.print("***********************************************\n"); started = true; } out.print("\nAvailable commands:\r\n\n"); out.print("\t1)show child pces\r\n"); out.print("\t2)show algorithms list\r\n"); out.print("\t3)show topology\r\n"); out.print("\t4)show reachability\r\n"); out.print("\t5)show mdlspdb\r\n"); out.print("\t6)queue size\r\n"); out.print("\t7)show sessions\r\n"); // out.print("\t8)show lsas\r\n"); // out.print("\t9)show lsas short\r\n"); // out.print("\t10)show number lsas\r\n"); out.print("\t8)show capabilities\r\n"); out.print("\t9)show peers\r\n"); out.print("\t10)show peers detail\r\n"); out.print("\t11)set traces on\r\n"); out.print("\t12)set traces off\r\n"); // out.print("\t16)set ospf traces off\r\n"); out.print("\n\tENTER) quit\r\n"); out.print("PCE:>"); String command = null; try { command = br.readLine(); if (command==null){ try { out.close(); } catch (Exception e){ e.printStackTrace(); } try { br.close(); return; } catch (Exception e){ e.printStackTrace(); } } } catch (IOException ioe) { out.print("IO error trying to read your command"); log.warn("IO error trying to read your command"); return; } if (command.equals("quit") || command.equals("")) { log.info("Ending Management Session"); out.println("bye!"); try { out.close(); } catch (Exception e){ e.printStackTrace(); } try { br.close(); } catch (Exception e){ e.printStackTrace(); } return; } if (command.equals("show child pces") || command.equals("1")) { Enumeration<Inet4Address> pceIds= cprm.getDomainIdpceId().elements(); Enumeration<Inet4Address> domains = cprm.getDomainIdpceId().keys(); while (pceIds.hasMoreElements()){ out.print("PCE Id: "+pceIds.nextElement()+ " Domain Id: "+domains.nextElement()+"\r\n"); } } else if (command.equals("show algorithms list")||command.equals("show algo list") || command.equals("2") ) { RequestProcessorThread[] threads=requestDispatcher.getThreads(); String info=""; if (threads.length>0){ Hashtable<Integer, ComputingAlgorithmManager> htcaSingle= threads[0].getSingleAlgorithmList(); Enumeration<Integer> keys = htcaSingle.keys(); while (keys.hasMoreElements()){ Integer inte=keys.nextElement(); info=info+"OF ="+inte+"; "; } Hashtable<Integer, ComputingAlgorithmManager> htcaSvec= threads[0].getSvecAlgorithmList(); Enumeration<Integer> keys2 = htcaSvec.keys(); while (keys2.hasMoreElements()){ Integer inte=keys2.nextElement(); info=info+"OF ="+inte+"and SVEC; "; } } out.print(info+"\r\n"); } else if ((command.equals("show topology")&&(!isITcapable))||(command.equals("3")&&(!isITcapable))){ out.print(mdtedb.printMDTopology()); if (simpleTedb != null){ out.print("\nSIMPLE TEDB1:\n"); out.print(simpleTedb.printTopology()); } }else if ((command.equals("show topology")&&(isITcapable)) ||(command.equals("3")&&(!isITcapable))){ out.print(ITmdtedb.printTopology()); if (simpleTedb != null){ out.print("\nSIMPLE TEDB2:\n"); out.print(simpleTedb.printTopology()); } }else if ((command.equals("show reachability"))||(command.equals("4"))){ out.print( rm.printReachability()); }else if ((command.equals("show mdlspdb"))||(command.equals("5"))){ if (this.multiDomainLSPDB!=null) { out.print( this.multiDomainLSPDB.toString()); } }else if ((command.equals("queue size"))||(command.equals("6"))){ out.print("num pets "+requestDispatcher.queueSize()); }else if ((command.equals("show sessions"))||(command.equals("7"))){ out.print(pcepSessionManager.toString()); out.print("\r\n"); // }else if ((command.equals("show lsas"))||(command.equals("8"))){ // out.print(mdtu.printLSAList()); // out.print("\r\n"); // }else if ((command.equals("show lsas short"))||(command.equals("9"))){ // out.print(mdtu.printLSAShortList()); // out.print("\r\n"); // }else if ((command.equals("show number lsas"))||(command.equals("10"))){ // out.print(mdtu.sizeLSAList()); // out.print("\r\n"); }else if ((command.equals("show capabilities"))||(command.equals("8"))){ out.print(pcepSessionManager.getLocalPcepCapability().toString()); out.print("\r\n"); }else if ((command.equals("show peers"))||(command.equals("9"))){ out.print(pcepSessionManager.printPeersInfo()); out.print("\r\n"); }else if ((command.equals("show peers detail"))||(command.equals("10"))){ out.print(pcepSessionManager.printFullPeersInfo()); out.print("\r\n"); } // else if (command.equals("help")){ // out.print("Available commands:\r\n"); // out.print("show child pces\r\n"); // out.print("show topology\r\n"); // out.print("show sessions\r\n"); // out.print("show lsas short\r\n"); // out.print("show number lsas\r\n"); // out.print("quit\r\n"); // // } else if ((command.equals("set traces on"))||(command.equals("11"))) { // log.setLevel(Level.ALL); // Logger log2=LoggerFactory.getLogger("PCEPParser"); // log2.setLevel(Level.ALL); // Logger log3= LoggerFactory.getLogger("OSPFParser"); // log3.setLevel(Level.ALL); out.print("traces on!\r\n"); } else if ((command.equals("set traces off"))||(command.equals("12"))) { // log.setLevel(Level.SEVERE); // Logger log2=LoggerFactory.getLogger("PCEPParser"); // log2.setLevel(Level.SEVERE); // Logger log3= LoggerFactory.getLogger("OSPFParser"); // log3.setLevel(Level.SEVERE); out.print("traces off!\r\n"); } // else if ((command.equals("set ospf traces off"))||(command.equals("16"))) { // Logger log3= LoggerFactory.getLogger("OSPFParser"); // log3.setLevel(Level.SEVERE); // out.print("ospf traces off!\r\n"); // } else{ out.print("invalid command\n"); //out.print("\n"); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return; } } }