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

📄 ciscogw.java

📁 Network Administration Visualized 网络管理可视化源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package no.ntnu.nav.getDeviceData.deviceplugins.CiscoGw;import java.util.Arrays;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import java.util.regex.Matcher;import java.util.regex.Pattern;import no.ntnu.nav.ConfigParser.ConfigParser;import no.ntnu.nav.SimpleSnmp.SimpleSnmp;import no.ntnu.nav.SimpleSnmp.TimeoutException;import no.ntnu.nav.getDeviceData.Netbox;import no.ntnu.nav.getDeviceData.dataplugins.DataContainer;import no.ntnu.nav.getDeviceData.dataplugins.DataContainers;import no.ntnu.nav.getDeviceData.dataplugins.Gwport.GwModule;import no.ntnu.nav.getDeviceData.dataplugins.Gwport.Gwport;import no.ntnu.nav.getDeviceData.dataplugins.Gwport.GwportContainer;import no.ntnu.nav.getDeviceData.dataplugins.Gwport.Prefix;import no.ntnu.nav.getDeviceData.dataplugins.Gwport.Vlan;import no.ntnu.nav.getDeviceData.dataplugins.Module.Module;import no.ntnu.nav.getDeviceData.dataplugins.Module.ModuleContainer;import no.ntnu.nav.getDeviceData.dataplugins.Swport.SwportContainer;import no.ntnu.nav.getDeviceData.deviceplugins.DeviceHandler;import no.ntnu.nav.logger.Log;import no.ntnu.nav.util.MultiMap;import no.ntnu.nav.util.util;/** * <p> * DeviceHandler for collecting gwport data from Cisco routers. * </p> * * <p> * This plugin handles the following OID keys: * </p> * * <p> * <ui> *  <li>ipAdEntIfIndex</li> *  <li>...</li> * </ul> * </p> */public class CiscoGw implements DeviceHandler{	private static String[] canHandleOids = {		"ipAdEntIfIndex"	};	private static String[] supportedCatids = {		"GSW",		"GW",	};	private SimpleSnmp sSnmp;	public int canHandleDevice(Netbox nb) {		if (!new HashSet(Arrays.asList(supportedCatids)).contains(nb.getCat())) return NEVER_HANDLE;		int v = nb.isSupportedOids(canHandleOids) ? ALWAYS_HANDLE : NEVER_HANDLE;		Log.d("CGW_CANHANDLE", "CHECK_CAN_HANDLE", "Can handle device: " + v);		return v;	}	public void handleDevice(Netbox nb, SimpleSnmp sSnmp, ConfigParser cp, DataContainers containers) throws TimeoutException	{		Log.setDefaultSubsystem("CGW_DEVHANDLER");		ModuleContainer mc;		{			DataContainer dc = containers.getContainer("ModuleContainer");			if (dc == null) {				Log.w("NO_CONTAINER", "No ModuleContainer found, plugin may not be loaded");				return;			}			if (!(dc instanceof ModuleContainer)) {				Log.w("NO_CONTAINER", "Container is not a ModuleContainer! " + dc);				return;			}			mc = (ModuleContainer)dc;		}				GwportContainer gwc;		{			DataContainer dc = containers.getContainer("GwportContainer");			if (dc == null) {				Log.w("NO_CONTAINER", "No GwportContainer found, plugin may not be loaded");				return;			}			if (!(dc instanceof GwportContainer)) {				Log.w("NO_CONTAINER", "Container is not a GwportContainer! " + dc);				return;			}			gwc = (GwportContainer)dc;		}		SwportContainer sc;		{			DataContainer dc = containers.getContainer("SwportContainer");			if (dc == null) {				Log.w("NO_CONTAINER", "No SwportContainer found, plugin may not be loaded");				return;			}			if (!(dc instanceof SwportContainer)) {				Log.w("NO_CONTAINER", "Container is not an SwportContainer! " + dc);				return;			}			sc = (SwportContainer)dc;		}		gwc.copyTranslateFrom(mc);		String netboxid = nb.getNetboxidS();		String ip = nb.getIp();		String cs_ro = nb.getCommunityRo();		String type = nb.getType();		String sysName = nb.getSysname();		String cat = nb.getCat();		this.sSnmp = sSnmp;		boolean fetch = processCiscoGw(nb, netboxid, ip, cs_ro, type, mc, gwc, sc);					// Commit data		if (fetch) {			if (mc.isCommited()) gwc.setEqual(mc);			gwc.commit();		}	}	/*	 * CiscoGw	 *	 */	private boolean processCiscoGw(Netbox nb, String netboxid, String ip, String cs_ro, String type, ModuleContainer mc, GwportContainer gwc, SwportContainer sc) throws TimeoutException {		/*A) For hver ruter (kat=GW eller kat=GSW)-----------------------------------------1) Finn alle adresserom og deres mapping til ifindex   (.1.3.6.1.2.1.4.20.1.2). Legges i hash.2) I interfacetabellen ignorer alle ifindex som er adminstrativt ned,   dvs ifAdminStatus=Down.3) I interfacetabellen finn alle ifindex med ifAdminStatus=Up.   Av disse:   3.1   LAG GWPORT RECORD	 Lag gwport record dersom            a) * ifindex ligger i adresseromhash.                 (Her er har vi altså ip adresserom)               OG                  * interf NOT like 'EOBC%' AND interf <> 'Vlan0'                 (EOBC kommer med fra 6509 native, de ønsker vi ikke)           ELLER            b) interfacet er et masterinterface med subinterface               under seg. Se 3.2b) for indikasjon.              3.2   SETT MASTERINDEX         (Masterindex er kun et hjelpemiddel for å fortelle cricket         at den skal hente last fra masterinterface dersom det         ikke er octet-telling på subinterfacet)                       For en opprettet gwport, sett gwport.masterindex dersom:            a) ifInOctet=0          OG             b) ifdescr indikerer subinterface         Indikasjon på subinterface sees ved å splitte ut det         før punktum og se om man har funnet et annet interf.         F.eks:  GigabitEthernet1/0/1.9 er subinterface under                 GigabitEthernet1/0/1    3.3   LAG PREFIKS RECORD   Lag prefiksrecord når:            a) ny gwport lages          OG             b) denne har ip adresserom               (om ikke adresserom forblir gwport.prefiksid=NULL)         OG                       c) prefikset ikke allerede er opprettet               (sett uansett gwport.prefiksid)    3.4 SETT VLAN-verdi i prefiks - første forsøk        Sett prefiks.vlan basert på ruterdata om mulig:                 a) Dersom gwport.interf = 'Vlanx'            (vi har et virtuelt interface på en RSM/MSFC)          => sett prefiks.vlan = x        b) Dersom gwport.interf inneholder '.' (punktum)           (vi har et subinterface)          => hent vlan fra subintvlan-MIB og sett prefiks.vlan             (har ikke funnet en slik MIB...)   3.5  TOLK DESCRIPTION        Hent description-felt-streng fra ruterport (ifalias)                 3.5.1 Dersom konvensjon er forsøkt fulgt dvs at man              gjenkjenner nettype=(lan,link,elink,stam,tun):              a) Sett det man klarer i prefiksrecord av:                 * nettype                 * nettident                 * orgid                 * anvid                 * komm                 * samband                 Dersom orgid,anvid ikke kan settes                  => warning til NAVlogg.            b) SETT VLAN - andre forsøk               * Dersom prefiks.vlan ikke er satt                OG                * Dersom vlan er angitt i description 5. felt,                  dvs etter kommanter               => sett prefiks.vlan i henhold til dette.        3.5.2 Konvensjon er ikke fulgt:                * Sett nettype=ukjent                * Sett nettident = descriptionstreng (max 20? tegn).4) LAG GWPORTER FOR EVT HSRP-ADRESSER   Sjekk om det finnes hsrp-adresser for ruteren   * Dersom det finnes hsrp-adresser så lages det gwport for disse     - Her settes gwport.hsrp=true.     - gwport.prefiksid knytter seg til aktuelle prefiks       (som skal være opprettet)		*/		// Check for standard OID support		Set oidsNotSupported = nb.oidsNotSupported(new String[] {			"ifSpeed",			"ifAdminStatus",			"ifDescr",			"ifInOctets",		});		if (!oidsNotSupported.isEmpty()) {			if (nb.getCat().equals("GW") || nb.getCat().equals("GSW")) {				Log.w("PROCESS_CGW", "Oidkeys " + oidsNotSupported + " are required, but not supported by " + nb.getSysname() + ", type " + nb.getType() + ", unable to fetch data!");			}			return false;		}		// Check for router OID		oidsNotSupported = nb.oidsNotSupported(new String[] {			"ipAdEntIfIndex",			"ipAdEntIfNetMask",		});		if (!oidsNotSupported.isEmpty()) {			if (nb.getCat().equals("GW") || nb.getCat().equals("GSW")) {				Log.w("PROCESS_CGW", "Oidkeys " + oidsNotSupported + " are required, but not supported by " + nb.getSysname() + ", type " + nb.getType() + ", unable to fetch data!");			}			return false;		}		// Fetch HSRP		MultiMap hsrpIpMap = util.reverse(sSnmp.getAllMap(nb.getOid("cHsrpGrpVirtualIpAddr")));		// Prefices and mapping to ifindex		Map ipMap = sSnmp.getAllMap(nb.getOid("ipAdEntIfIndex"));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -