📄 networkdiscovery.java
字号:
rs = Database.query("SELECT swportid,netboxid,link,speed,duplex,ifindex,portname,to_netboxid,trunk,hexstring FROM swport JOIN module USING(moduleid) LEFT JOIN swportallowedvlan USING (swportid) ORDER BY netboxid,ifindex"); ResultSetMetaData rsmd = rs.getMetaData(); while (rs.next()) { HashMap hm = getHashFromResultSet(rs, rsmd); String link = rs.getString("link"); if (link == null || link.toLowerCase().equals("y")) swport.add(hm); String key = rs.getString("netboxid")+":"+rs.getString("ifindex"); swrecMap.put(key, hm); swrecSwportidMap.put(rs.getString("swportid"), hm); } if (DEBUG_OUT) outl("boksMp listing....<br>"); iter = boksMp.entrySet().iterator(); while (iter.hasNext()) { Map.Entry me = (Map.Entry)iter.next(); String key = (String)me.getKey(); //Integer boksbak = (Integer)me.getValue(); BoksMpBak bmp = (BoksMpBak)me.getValue(); StringTokenizer st = new StringTokenizer(key, ":"); String boksid; String ifindex; try { boksid = st.nextToken(); ifindex = st.nextToken(); } catch (Exception e) { errl("Exception: " + e.getMessage() + " Key: " + key + " bmp: " + bmp); e.printStackTrace(System.err); return; } //outl(boksNavn.get(new Integer(boksid)) + " Modul: " + modul + " Port: " + port + " Link: " + boksNavn.get(boksbak) + "<br>"); if (swrecMap.containsKey(key)) { // Record eksisterer fra før, sjekk om oppdatering er nødvendig HashMap swrec = (HashMap)swrecMap.get(key); //swrecMap.remove(key); swrec.put("deleted", null); String link = (String)swrec.get("link"); if (link != null) link = link.toLowerCase(); if ("n".equals(link)) continue; // Ignore non-up links String idbak = (String)swrec.get("to_netboxid"); if (idbak == null || idbak != null && Integer.parseInt(idbak) != bmp.boksbak.intValue()) { // Oppdatering nødvendig updcnt++; // swport { String[] updateFields = { "to_netboxid", bmp.boksbak.toString() }; String[] condFields = { "swportid", (String)swrec.get("swportid") }; Database.update("swport", updateFields, condFields); } String vlan = "non-s"; /* if (swrec.get("static").equals("t")) { if (swrec.get("trunk").equals("t")) { // Vi har en static trunk, prøv å finn record for andre veien Boks b = (Boks)bokser.get(boksbak); Mp uplinkMp = b.getMpTo(new Integer(boksid)); if (uplinkMp != null) { // Port funnet, men eksisterer denne porten i tabellen fra før? String keyBak = boksbak+":"+uplinkMp; if (swrecMap.containsKey(keyBak)) { // Eksisterer fra før, sjekk om det er en trunk HashMap swrecBak = (HashMap)swrecMap.get(keyBak); if ("t".equals(swrecBak.get("trunk"))) { // Trunk, sjekk om vi må oppdatere swportallowedvlan String allowedVlan = (String)swrec.get("hexstring"); String allowedVlanBak = (String)swrecBak.get("hexstring"); if (!allowedVlan.equals(allowedVlanBak)) { // Oppdatering nødvendig String[] updateFields = { "hexstring", allowedVlan }; String[] condFields = { "swportid", (String)swrec.get("swportid") }; Database.update("swportallowedvlan", updateFields, condFields); if (DEBUG_OUT) outl("Updated swportallowedvlan, swportid: " + condFields[0] + " hexstring: " + allowedVlan + "<br>"); } } } } vlan = "trunk"; } else { // swportvlan if (boksWithTrunk.contains(boksbak.toString())) { // Boksen i andre enden har trunk, da må vi bruke vårt eget vlan vlan = (String)boksVlan.get(boksid); } else { vlan = (String)boksVlan.get(boksbak.toString()); } if (vlan != null) { String[] updateFields = { "vlan", vlan, "retning", "s" }; String[] condFields = { "swportid", (String)swrec.get("swportid") }; Database.update("swportvlan", updateFields, condFields); } } } */ swrec.put("to_netboxid", bmp.boksbak.toString()); swrec.put("change", "Updated ("+vlan+")"); } // Så må vi sjekke om swportbak skal oppdateres boolean swportbakOK = false; if (bmp.toIfindex != null) { // OK, slå opp i swportMap for å finne riktig swportid Map swrecBak = (Map)swrecMap.get(bmp.hashKey()); if (swrecBak != null) { swportbakOK = true; String new_swportbak = (String)swrecBak.get("swportid"); String cur_swportbak = (String)swrec.get("to_swportid"); if (cur_swportbak == null || !cur_swportbak.equals(new_swportbak)) { String[] updateFields = { "to_swportid", new_swportbak }; String[] condFields = { "swportid", (String)swrec.get("swportid") }; Database.update("swport", updateFields, condFields); } } else { // Feilsitasjon! outl("<font color=\"red\">ERROR:</font> Could not find record in swport, boks("+bmp.boksbak+"): <b>" + boksNavn.get(bmp.boksbak) + "</b> Ifindex: <b>" + bmp.toIfindex + "</b> boksbak: <b>" + boksNavn.get(new Integer(boksid)) + "</b> ("+bmp.hashKey()+")<br>"); } } /* if (!swportbakOK) { outl("Removing deleted for swportid " + swrec.get("swportid") + "<br>"); swrec.remove("deleted"); } */ // Så må vi sjekke om vi har en trunk der vi mangler allowedvlan if ("t".equals(swrec.get("trunk")) && (swrec.get("hexstring") == null || swrec.get("hexstring").equals("")) ) { // Vi har en trunk som er static eller mangler hexstring, da tar vi rett og slett bare hexstringen fra andre siden og setter inn Boks b = (Boks)bokser.get(bmp.boksbak); //Mp mpBak = b.getMpTo(Integer.parseInt(boksid), modul, port); String toIfindex = b.getIfindexTo(Integer.parseInt(boksid), ifindex); if (toIfindex != null) { // Port på andre siden funnet, men eksisterer denne porten i tabellen? String keyBak = bmp.boksbak+":"+toIfindex; if (swrecMap.containsKey(keyBak)) { // Eksisterer, sjekk om det er en trunk HashMap swrecBak = (HashMap)swrecMap.get(keyBak); if ("t".equals(swrecBak.get("trunk"))) { // Trunk, sjekk om vi må oppdatere swportallowedvlan String allowedVlan = (String)swrec.get("hexstring"); String allowedVlanBak = (String)swrecBak.get("hexstring"); if (allowedVlan == null || allowedVlan.length() == 0) { if (allowedVlanBak == null || allowedVlanBak.length() == 0) { // Feilsituasjon! Nå er vi i virkelig trøbbel, da det er static trunk på begge sider... outl("<font color=\"red\">ERROR:</font> Link is trunk with no swportallowedvlan on either side! boks: " + boksNavn.get(new Integer(boksid)) + " Ifindex: " + ifindex+ " boksBak: " + boksNavn.get(bmp.boksbak) + " ToIfindex: " + swrecBak.get("ifindex") + "<br>"); } else { // Nå må vi sette inn en ny record i swportallowedvlan String[] fields = { "swportid", (String)swrec.get("swportid"), "hexstring", allowedVlanBak }; if (DEBUG_OUT) outl("Inserting new record in swportallowedvlan, swportid: " + swrec.get("swportid") + " new hexstring: " + allowedVlanBak + "<br>"); boolean update = false; try { Database.insert("swportallowedvlan", fields); } catch (SQLException e) { // Wops, prøv å oppdatere i steden update = true; } if (update) try { outl("<font color=\"red\">ERROR:</font> swportallowedvlan seems to already have an empty record! Trying to update instead...<br>"); Database.update("UPDATE swportallowedvlan SET hexstring='"+allowedVlanBak+"' WHERE swportid='"+swrec.get("swportid")+"'"); } catch (SQLException e) { outl("<font color=\"red\">ERROR:</font> Cannot update swportallowedvlan, SQLException: " + e.getMessage() + "<br>"); } } } else if (!allowedVlan.equals(allowedVlanBak)) { // Oppdatering nødvendig String[] updateFields = { "hexstring", allowedVlanBak }; String[] condFields = { "swportid", (String)swrec.get("swportid") }; Database.update("swportallowedvlan", updateFields, condFields); if (DEBUG_OUT) outl("Updated swportallowedvlan, swportid: " + condFields[0] + " old hexstring: " + allowedVlan + " new hexstring: " + allowedVlanBak + "<br>"); } } else { // Feilsituasjon, trunk<->non-trunk! outl("<font color=\"red\">ERROR:</font> Link is trunk / non-trunk: boks: " + boksNavn.get(new Integer(boksid)) + " Ifindex: " + ifindex + " boksBak: " + boksNavn.get(bmp.boksbak) + " ToIfindex: " + swrecBak.get("ifindex") + "<br>"); } } } } } else { // Dette er nå en feilsituasjon som ikke bør skje! :-) outl("<font color=\"red\">ERROR:</font> Could not find record for other side of link! boks("+boksid+"): <b>" + boksNavn.get(new Integer(boksid)) + "</b> Ifindex: <b>" + ifindex + "</b> boksBak: <b>" + boksNavn.get(bmp.boksbak) + "</b><br>"); } /* else { // Record eksister ikke, og må derfor settes inn // Først må vi sjekke om andre siden er en trunk String vlan; String trunk = "f"; String allowedVlan = null; { Boks b = (Boks)bokser.get(boksbak); Mp uplinkMp = b.getMpTo(new Integer(boksid)); if (uplinkMp != null) { // Port funnet, men eksisterer denne porten i tabellen fra før? String keyBak = boksbak+":"+uplinkMp; if (swrecMap.containsKey(keyBak)) { // Eksisterer fra før, sjekk om det er en trunk HashMap swrecBak = (HashMap)swrecMap.get(keyBak); if ("t".equals(swrecBak.get("trunk"))) { // Trunk, da må vi også sette inn i swportallowedvlan trunk = "t"; allowedVlan = (String)swrecBak.get("hexstring"); } } } if (trunk.equals("t")) { vlan = "t"; } else if (boksWithTrunk.contains(boksbak.toString())) { // Boksen i andre enden har trunk, da må vi bruke vårt eget vlan vlan = (String)boksVlan.get(boksid); } else { vlan = (String)boksVlan.get(boksbak.toString()); } if (vlan != null) { // Vi setter kun inn i swport hvis vi vet vlan eller det er en trunk det er snakk om // swport String ifind = mpToIfindex(modul, port); if (ifind != null) { String[] insertFields = { "boksid", boksid, "ifindex", ifind, "status", "up", "trunk", trunk, "static", "t", "modul", modul, "port", port, "boksbak", boksbak.toString() }; if (!Database.insert("swport", insertFields)) { outl("<font color=\"red\">Error with insert, boksid=" + boksid + " trunk="+trunk+" ifindex=" + insertFields[1] + " modul="+modul+" port="+port+" boksbak="+boksbak+"</font><br>"); } else { if (DEBUG_OUT) outl("Inserted row, boksid=" + boksid + " trunk="+trunk+" ifindex="+insertFields[1]+" modul="+modul+" port="+port+" boksbak="+boksbak+"<br>"); //Database.commit(); newcnt++; } } } } // Hvis trunk setter vi inn i swportallowedvlan, ellers rett inn i swportvlan if (trunk.equals("t")) { // swportallowedvlan String sql = "INSERT INTO swportallowedvlan (swportid,hexstring) VALUES ("+ "(SELECT swportid FROM swport WHERE boksid='"+boksid+"' AND modul='"+modul+"' AND port='"+port+"' AND boksbak='"+boksbak+"'),"+ "'"+allowedVlan+"')"; Database.update(sql); if (DEBUG_OUT) outl("swportallowedvlan: "+sql+"<br>"); } else if (vlan != null) { // swportvlan // Hvilket vlan går over linken? Vi henter vlanet boksbak er på // Siden vi ikke vet fremmednøkkelen må vi bruke sub-select her String sql = "INSERT INTO swportvlan (swportid,vlan,retning) VALUES ("+ "(SELECT swportid FROM swport WHERE boksid='"+boksid+"' AND modul='"+modul+"' AND port='"+port+"' AND boksbak='"+boksbak+"'),"+ "'"+vlan+"',"+ "'s')"; Database.update(sql); if (DEBUG_OUT) outl("swportvlan: "+sql+"<br>"); } // Lag swrec HashMap swrec = new HashMap(); swrec.put("swportid", "N/A"); swrec.put("boksid", boksid); swrec.put("status", "up"); swrec.put("speed", null); swrec.put("duplex", null); swrec.put("modul", modul); swrec.put("port", port);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -