📄 ciscogw.java
字号:
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 + -