⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 networkdiscovery.java

📁 Network Administration Visualized 网络管理可视化源码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
		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 + -