📄 ospf_snmp.c
字号:
/* OSPFv2 SNMP support * Copyright (C) 2000 IP Infusion Inc. * * Written by Kunihiro Ishiguro <kunihiro@zebra.org> * * This file is part of GNU Zebra. * * GNU Zebra is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * GNU Zebra is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Zebra; see the file COPYING. If not, write to the Free * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */#include <zebra.h>#ifdef HAVE_SNMP#include <asn1.h>#include <snmp.h>#include <snmp_impl.h>#include "if.h"#include "log.h"#include "prefix.h"#include "table.h"#include "command.h"#include "memory.h"#include "smux.h"#include "ospfd/ospfd.h"#include "ospfd/ospf_interface.h"#include "ospfd/ospf_asbr.h"#include "ospfd/ospf_lsa.h"#include "ospfd/ospf_lsdb.h"#include "ospfd/ospf_abr.h"#include "ospfd/ospf_neighbor.h"#include "ospfd/ospf_nsm.h"#include "ospfd/ospf_flood.h"/* OSPF2-MIB. */#define OSPF2MIB 1,3,6,1,2,1,14/* Zebra enterprise OSPF MIB. This variable is used for register OSPF MIB to SNMP agent under SMUX protocol. */#define OSPFDOID 1,3,6,1,4,1,3317,1,2,5/* OSPF MIB General Group values. */#define OSPFROUTERID 1#define OSPFADMINSTAT 2#define OSPFVERSIONNUMBER 3#define OSPFAREABDRRTRSTATUS 4#define OSPFASBDRRTRSTATUS 5#define OSPFEXTERNLSACOUNT 6#define OSPFEXTERNLSACKSUMSUM 7#define OSPFTOSSUPPORT 8#define OSPFORIGINATENEWLSAS 9#define OSPFRXNEWLSAS 10#define OSPFEXTLSDBLIMIT 11#define OSPFMULTICASTEXTENSIONS 12#define OSPFEXITOVERFLOWINTERVAL 13#define OSPFDEMANDEXTENSIONS 14/* OSPF MIB ospfAreaTable. */#define OSPFAREAID 1#define OSPFAUTHTYPE 2#define OSPFIMPORTASEXTERN 3#define OSPFSPFRUNS 4#define OSPFAREABDRRTRCOUNT 5#define OSPFASBDRRTRCOUNT 6#define OSPFAREALSACOUNT 7#define OSPFAREALSACKSUMSUM 8#define OSPFAREASUMMARY 9#define OSPFAREASTATUS 10/* OSPF MIB ospfStubAreaTable. */#define OSPFSTUBAREAID 1#define OSPFSTUBTOS 2#define OSPFSTUBMETRIC 3#define OSPFSTUBSTATUS 4#define OSPFSTUBMETRICTYPE 5/* OSPF MIB ospfLsdbTable. */#define OSPFLSDBAREAID 1#define OSPFLSDBTYPE 2#define OSPFLSDBLSID 3#define OSPFLSDBROUTERID 4#define OSPFLSDBSEQUENCE 5#define OSPFLSDBAGE 6#define OSPFLSDBCHECKSUM 7#define OSPFLSDBADVERTISEMENT 8/* OSPF MIB ospfAreaRangeTable. */#define OSPFAREARANGEAREAID 1#define OSPFAREARANGENET 2#define OSPFAREARANGEMASK 3#define OSPFAREARANGESTATUS 4#define OSPFAREARANGEEFFECT 5/* OSPF MIB ospfHostTable. */#define OSPFHOSTIPADDRESS 1#define OSPFHOSTTOS 2#define OSPFHOSTMETRIC 3#define OSPFHOSTSTATUS 4#define OSPFHOSTAREAID 5/* OSPF MIB ospfIfTable. */#define OSPFIFIPADDRESS 1#define OSPFADDRESSLESSIF 2#define OSPFIFAREAID 3#define OSPFIFTYPE 4#define OSPFIFADMINSTAT 5#define OSPFIFRTRPRIORITY 6#define OSPFIFTRANSITDELAY 7#define OSPFIFRETRANSINTERVAL 8#define OSPFIFHELLOINTERVAL 9#define OSPFIFRTRDEADINTERVAL 10#define OSPFIFPOLLINTERVAL 11#define OSPFIFSTATE 12#define OSPFIFDESIGNATEDROUTER 13#define OSPFIFBACKUPDESIGNATEDROUTER 14#define OSPFIFEVENTS 15#define OSPFIFAUTHKEY 16#define OSPFIFSTATUS 17#define OSPFIFMULTICASTFORWARDING 18#define OSPFIFDEMAND 19#define OSPFIFAUTHTYPE 20/* OSPF MIB ospfIfMetricTable. */#define OSPFIFMETRICIPADDRESS 1#define OSPFIFMETRICADDRESSLESSIF 2#define OSPFIFMETRICTOS 3#define OSPFIFMETRICVALUE 4#define OSPFIFMETRICSTATUS 5/* OSPF MIB ospfVirtIfTable. */#define OSPFVIRTIFAREAID 1#define OSPFVIRTIFNEIGHBOR 2#define OSPFVIRTIFTRANSITDELAY 3#define OSPFVIRTIFRETRANSINTERVAL 4#define OSPFVIRTIFHELLOINTERVAL 5#define OSPFVIRTIFRTRDEADINTERVAL 6#define OSPFVIRTIFSTATE 7#define OSPFVIRTIFEVENTS 8#define OSPFVIRTIFAUTHKEY 9#define OSPFVIRTIFSTATUS 10#define OSPFVIRTIFAUTHTYPE 11/* OSPF MIB ospfNbrTable. */#define OSPFNBRIPADDR 1#define OSPFNBRADDRESSLESSINDEX 2#define OSPFNBRRTRID 3#define OSPFNBROPTIONS 4#define OSPFNBRPRIORITY 5#define OSPFNBRSTATE 6#define OSPFNBREVENTS 7#define OSPFNBRLSRETRANSQLEN 8#define OSPFNBMANBRSTATUS 9#define OSPFNBMANBRPERMANENCE 10#define OSPFNBRHELLOSUPPRESSED 11/* OSPF MIB ospfVirtNbrTable. */#define OSPFVIRTNBRAREA 1#define OSPFVIRTNBRRTRID 2#define OSPFVIRTNBRIPADDR 3#define OSPFVIRTNBROPTIONS 4#define OSPFVIRTNBRSTATE 5#define OSPFVIRTNBREVENTS 6#define OSPFVIRTNBRLSRETRANSQLEN 7#define OSPFVIRTNBRHELLOSUPPRESSED 8/* OSPF MIB ospfExtLsdbTable. */#define OSPFEXTLSDBTYPE 1#define OSPFEXTLSDBLSID 2#define OSPFEXTLSDBROUTERID 3#define OSPFEXTLSDBSEQUENCE 4#define OSPFEXTLSDBAGE 5#define OSPFEXTLSDBCHECKSUM 6#define OSPFEXTLSDBADVERTISEMENT 7/* OSPF MIB ospfAreaAggregateTable. */#define OSPFAREAAGGREGATEAREAID 1#define OSPFAREAAGGREGATELSDBTYPE 2#define OSPFAREAAGGREGATENET 3#define OSPFAREAAGGREGATEMASK 4#define OSPFAREAAGGREGATESTATUS 5#define OSPFAREAAGGREGATEEFFECT 6/* SYNTAX Status from OSPF-MIB. */#define OSPF_STATUS_ENABLED 1#define OSPF_STATUS_DISABLED 2/* SNMP value hack. */#define COUNTER ASN_COUNTER#define INTEGER ASN_INTEGER#define GAUGE ASN_GAUGE#define TIMETICKS ASN_TIMETICKS#define IPADDRESS ASN_IPADDRESS#define STRING ASN_OCTET_STR/* Declare static local variables for convenience. */SNMP_LOCAL_VARIABLES/* OSPF-MIB instances. */oid ospf_oid [] = { OSPF2MIB };oid ospfd_oid [] = { OSPFDOID };/* IP address 0.0.0.0. */static struct in_addr ospf_empty_addr = {0};/* Hook functions. */static u_char *ospfGeneralGroup ();static u_char *ospfAreaEntry ();static u_char *ospfStubAreaEntry ();static u_char *ospfLsdbEntry ();static u_char *ospfAreaRangeEntry ();static u_char *ospfHostEntry ();static u_char *ospfIfEntry ();static u_char *ospfIfMetricEntry ();static u_char *ospfVirtIfEntry ();static u_char *ospfNbrEntry ();static u_char *ospfVirtNbrEntry ();static u_char *ospfExtLsdbEntry ();static u_char *ospfAreaAggregateEntry ();struct variable ospf_variables[] = { /* OSPF general variables */ {OSPFROUTERID, IPADDRESS, RWRITE, ospfGeneralGroup, 2, {1, 1}}, {OSPFADMINSTAT, INTEGER, RWRITE, ospfGeneralGroup, 2, {1, 2}}, {OSPFVERSIONNUMBER, INTEGER, RONLY, ospfGeneralGroup, 2, {1, 3}}, {OSPFAREABDRRTRSTATUS, INTEGER, RONLY, ospfGeneralGroup, 2, {1, 4}}, {OSPFASBDRRTRSTATUS, INTEGER, RWRITE, ospfGeneralGroup, 2, {1, 5}}, {OSPFEXTERNLSACOUNT, GAUGE, RONLY, ospfGeneralGroup, 2, {1, 6}}, {OSPFEXTERNLSACKSUMSUM, INTEGER, RONLY, ospfGeneralGroup, 2, {1, 7}}, {OSPFTOSSUPPORT, INTEGER, RWRITE, ospfGeneralGroup, 2, {1, 8}}, {OSPFORIGINATENEWLSAS, COUNTER, RONLY, ospfGeneralGroup, 2, {1, 9}}, {OSPFRXNEWLSAS, COUNTER, RONLY, ospfGeneralGroup, 2, {1, 10}}, {OSPFEXTLSDBLIMIT, INTEGER, RWRITE, ospfGeneralGroup, 2, {1, 11}}, {OSPFMULTICASTEXTENSIONS, INTEGER, RWRITE, ospfGeneralGroup, 2, {1, 12}}, {OSPFEXITOVERFLOWINTERVAL, INTEGER, RWRITE, ospfGeneralGroup, 2, {1, 13}}, {OSPFDEMANDEXTENSIONS, INTEGER, RWRITE, ospfGeneralGroup, 2, {1, 14}}, /* OSPF area data structure. */ {OSPFAREAID, IPADDRESS, RONLY, ospfAreaEntry, 3, {2, 1, 1}}, {OSPFAUTHTYPE, INTEGER, RWRITE, ospfAreaEntry, 3, {2, 1, 2}}, {OSPFIMPORTASEXTERN, INTEGER, RWRITE, ospfAreaEntry, 3, {2, 1, 3}}, {OSPFSPFRUNS, COUNTER, RONLY, ospfAreaEntry, 3, {2, 1, 4}}, {OSPFAREABDRRTRCOUNT, GAUGE, RONLY, ospfAreaEntry, 3, {2, 1, 5}}, {OSPFASBDRRTRCOUNT, GAUGE, RONLY, ospfAreaEntry, 3, {2, 1, 6}}, {OSPFAREALSACOUNT, GAUGE, RONLY, ospfAreaEntry, 3, {2, 1, 7}}, {OSPFAREALSACKSUMSUM, INTEGER, RONLY, ospfAreaEntry, 3, {2, 1, 8}}, {OSPFAREASUMMARY, INTEGER, RWRITE, ospfAreaEntry, 3, {2, 1, 9}}, {OSPFAREASTATUS, INTEGER, RWRITE, ospfAreaEntry, 3, {2, 1, 10}}, /* OSPF stub area information. */ {OSPFSTUBAREAID, IPADDRESS, RONLY, ospfStubAreaEntry, 3, {3, 1, 1}}, {OSPFSTUBTOS, INTEGER, RONLY, ospfStubAreaEntry, 3, {3, 1, 2}}, {OSPFSTUBMETRIC, INTEGER, RWRITE, ospfStubAreaEntry, 3, {3, 1, 3}}, {OSPFSTUBSTATUS, INTEGER, RWRITE, ospfStubAreaEntry, 3, {3, 1, 4}}, {OSPFSTUBMETRICTYPE, INTEGER, RWRITE, ospfStubAreaEntry, 3, {3, 1, 5}}, /* OSPF link state database. */ {OSPFLSDBAREAID, IPADDRESS, RONLY, ospfLsdbEntry, 3, {4, 1, 1}}, {OSPFLSDBTYPE, INTEGER, RONLY, ospfLsdbEntry, 3, {4, 1, 2}}, {OSPFLSDBLSID, IPADDRESS, RONLY, ospfLsdbEntry, 3, {4, 1, 3}}, {OSPFLSDBROUTERID, IPADDRESS, RONLY, ospfLsdbEntry, 3, {4, 1, 4}}, {OSPFLSDBSEQUENCE, INTEGER, RONLY, ospfLsdbEntry, 3, {4, 1, 5}}, {OSPFLSDBAGE, INTEGER, RONLY, ospfLsdbEntry, 3, {4, 1, 6}}, {OSPFLSDBCHECKSUM, INTEGER, RONLY, ospfLsdbEntry, 3, {4, 1, 7}}, {OSPFLSDBADVERTISEMENT, STRING, RONLY, ospfLsdbEntry, 3, {4, 1, 8}}, /* Area range table. */ {OSPFAREARANGEAREAID, IPADDRESS, RONLY, ospfAreaRangeEntry, 3, {5, 1, 1}}, {OSPFAREARANGENET, IPADDRESS, RONLY, ospfAreaRangeEntry, 3, {5, 1, 2}}, {OSPFAREARANGEMASK, IPADDRESS, RWRITE, ospfAreaRangeEntry, 3, {5, 1, 3}}, {OSPFAREARANGESTATUS, INTEGER, RWRITE, ospfAreaRangeEntry, 3, {5, 1, 4}}, {OSPFAREARANGEEFFECT, INTEGER, RWRITE, ospfAreaRangeEntry, 3, {5, 1, 5}}, /* OSPF host table. */ {OSPFHOSTIPADDRESS, IPADDRESS, RONLY, ospfHostEntry, 3, {6, 1, 1}}, {OSPFHOSTTOS, INTEGER, RONLY, ospfHostEntry, 3, {6, 1, 2}}, {OSPFHOSTMETRIC, INTEGER, RWRITE, ospfHostEntry, 3, {6, 1, 3}}, {OSPFHOSTSTATUS, INTEGER, RWRITE, ospfHostEntry, 3, {6, 1, 4}}, {OSPFHOSTAREAID, IPADDRESS, RONLY, ospfHostEntry, 3, {6, 1, 5}}, /* OSPF interface table. */ {OSPFIFIPADDRESS, IPADDRESS, RONLY, ospfIfEntry, 3, {7, 1, 1}}, {OSPFADDRESSLESSIF, INTEGER, RONLY, ospfIfEntry, 3, {7, 1, 2}}, {OSPFIFAREAID, IPADDRESS, RWRITE, ospfIfEntry, 3, {7, 1, 3}}, {OSPFIFTYPE, INTEGER, RWRITE, ospfIfEntry, 3, {7, 1, 4}}, {OSPFIFADMINSTAT, INTEGER, RWRITE, ospfIfEntry, 3, {7, 1, 5}}, {OSPFIFRTRPRIORITY, INTEGER, RWRITE, ospfIfEntry, 3, {7, 1, 6}}, {OSPFIFTRANSITDELAY, INTEGER, RWRITE, ospfIfEntry, 3, {7, 1, 7}}, {OSPFIFRETRANSINTERVAL, INTEGER, RWRITE, ospfIfEntry, 3, {7, 1, 8}}, {OSPFIFHELLOINTERVAL, INTEGER, RWRITE, ospfIfEntry, 3, {7, 1, 9}}, {OSPFIFRTRDEADINTERVAL, INTEGER, RWRITE, ospfIfEntry, 3, {7, 1, 10}}, {OSPFIFPOLLINTERVAL, INTEGER, RWRITE, ospfIfEntry, 3, {7, 1, 11}}, {OSPFIFSTATE, INTEGER, RONLY, ospfIfEntry, 3, {7, 1, 12}}, {OSPFIFDESIGNATEDROUTER, IPADDRESS, RONLY, ospfIfEntry, 3, {7, 1, 13}}, {OSPFIFBACKUPDESIGNATEDROUTER, IPADDRESS, RONLY, ospfIfEntry, 3, {7, 1, 14}}, {OSPFIFEVENTS, COUNTER, RONLY, ospfIfEntry, 3, {7, 1, 15}}, {OSPFIFAUTHKEY, STRING, RWRITE, ospfIfEntry, 3, {7, 1, 16}}, {OSPFIFSTATUS, INTEGER, RWRITE, ospfIfEntry, 3, {7, 1, 17}}, {OSPFIFMULTICASTFORWARDING, INTEGER, RWRITE, ospfIfEntry, 3, {7, 1, 18}}, {OSPFIFDEMAND, INTEGER, RWRITE, ospfIfEntry, 3, {7, 1, 19}}, {OSPFIFAUTHTYPE, INTEGER, RWRITE, ospfIfEntry, 3, {7, 1, 20}}, /* OSPF interface metric table. */ {OSPFIFMETRICIPADDRESS, IPADDRESS, RONLY, ospfIfMetricEntry, 3, {8, 1, 1}}, {OSPFIFMETRICADDRESSLESSIF, INTEGER, RONLY, ospfIfMetricEntry, 3, {8, 1, 2}}, {OSPFIFMETRICTOS, INTEGER, RONLY, ospfIfMetricEntry, 3, {8, 1, 3}}, {OSPFIFMETRICVALUE, INTEGER, RWRITE, ospfIfMetricEntry, 3, {8, 1, 4}}, {OSPFIFMETRICSTATUS, INTEGER, RWRITE, ospfIfMetricEntry, 3, {8, 1, 5}}, /* OSPF virtual interface table. */ {OSPFVIRTIFAREAID, IPADDRESS, RONLY, ospfVirtIfEntry, 3, {9, 1, 1}}, {OSPFVIRTIFNEIGHBOR, IPADDRESS, RONLY, ospfVirtIfEntry, 3, {9, 1, 2}}, {OSPFVIRTIFTRANSITDELAY, INTEGER, RWRITE, ospfVirtIfEntry, 3, {9, 1, 3}}, {OSPFVIRTIFRETRANSINTERVAL, INTEGER, RWRITE, ospfVirtIfEntry, 3, {9, 1, 4}}, {OSPFVIRTIFHELLOINTERVAL, INTEGER, RWRITE, ospfVirtIfEntry, 3, {9, 1, 5}}, {OSPFVIRTIFRTRDEADINTERVAL, INTEGER, RWRITE, ospfVirtIfEntry, 3, {9, 1, 6}}, {OSPFVIRTIFSTATE, INTEGER, RONLY, ospfVirtIfEntry, 3, {9, 1, 7}}, {OSPFVIRTIFEVENTS, COUNTER, RONLY, ospfVirtIfEntry, 3, {9, 1, 8}}, {OSPFVIRTIFAUTHKEY, STRING, RWRITE, ospfVirtIfEntry, 3, {9, 1, 9}}, {OSPFVIRTIFSTATUS, INTEGER, RWRITE, ospfVirtIfEntry, 3, {9, 1, 10}}, {OSPFVIRTIFAUTHTYPE, INTEGER, RWRITE, ospfVirtIfEntry, 3, {9, 1, 11}}, /* OSPF neighbor table. */ {OSPFNBRIPADDR, IPADDRESS, RONLY, ospfNbrEntry, 3, {10, 1, 1}}, {OSPFNBRADDRESSLESSINDEX, INTEGER, RONLY, ospfNbrEntry, 3, {10, 1, 2}}, {OSPFNBRRTRID, IPADDRESS, RONLY, ospfNbrEntry, 3, {10, 1, 3}}, {OSPFNBROPTIONS, INTEGER, RONLY, ospfNbrEntry, 3, {10, 1, 4}}, {OSPFNBRPRIORITY, INTEGER, RWRITE, ospfNbrEntry, 3, {10, 1, 5}}, {OSPFNBRSTATE, INTEGER, RONLY, ospfNbrEntry, 3, {10, 1, 6}}, {OSPFNBREVENTS, COUNTER, RONLY, ospfNbrEntry, 3, {10, 1, 7}}, {OSPFNBRLSRETRANSQLEN, GAUGE, RONLY, ospfNbrEntry, 3, {10, 1, 8}}, {OSPFNBMANBRSTATUS, INTEGER, RWRITE, ospfNbrEntry, 3, {10, 1, 9}}, {OSPFNBMANBRPERMANENCE, INTEGER, RONLY, ospfNbrEntry, 3, {10, 1, 10}}, {OSPFNBRHELLOSUPPRESSED, INTEGER, RONLY, ospfNbrEntry, 3, {10, 1, 11}}, /* OSPF virtual neighbor table. */ {OSPFVIRTNBRAREA, IPADDRESS, RONLY, ospfVirtNbrEntry, 3, {11, 1, 1}}, {OSPFVIRTNBRRTRID, IPADDRESS, RONLY, ospfVirtNbrEntry, 3, {11, 1, 2}}, {OSPFVIRTNBRIPADDR, IPADDRESS, RONLY, ospfVirtNbrEntry, 3, {11, 1, 3}}, {OSPFVIRTNBROPTIONS, INTEGER, RONLY, ospfVirtNbrEntry, 3, {11, 1, 4}}, {OSPFVIRTNBRSTATE, INTEGER, RONLY, ospfVirtNbrEntry, 3, {11, 1, 5}}, {OSPFVIRTNBREVENTS, COUNTER, RONLY, ospfVirtNbrEntry, 3, {11, 1, 6}}, {OSPFVIRTNBRLSRETRANSQLEN, INTEGER, RONLY, ospfVirtNbrEntry, 3, {11, 1, 7}}, {OSPFVIRTNBRHELLOSUPPRESSED, INTEGER, RONLY, ospfVirtNbrEntry, 3, {11, 1, 8}}, /* OSPF link state database, external. */ {OSPFEXTLSDBTYPE, INTEGER, RONLY, ospfExtLsdbEntry, 3, {12, 1, 1}}, {OSPFEXTLSDBLSID, IPADDRESS, RONLY, ospfExtLsdbEntry, 3, {12, 1, 2}}, {OSPFEXTLSDBROUTERID, IPADDRESS, RONLY, ospfExtLsdbEntry, 3, {12, 1, 3}}, {OSPFEXTLSDBSEQUENCE, INTEGER, RONLY, ospfExtLsdbEntry, 3, {12, 1, 4}}, {OSPFEXTLSDBAGE, INTEGER, RONLY, ospfExtLsdbEntry, 3, {12, 1, 5}}, {OSPFEXTLSDBCHECKSUM, INTEGER, RONLY, ospfExtLsdbEntry, 3, {12, 1, 6}}, {OSPFEXTLSDBADVERTISEMENT, STRING, RONLY, ospfExtLsdbEntry, 3, {12, 1, 7}}, /* OSPF area aggregate table. */ {OSPFAREAAGGREGATEAREAID, IPADDRESS, RONLY, ospfAreaAggregateEntry, 3, {14, 1, 1}}, {OSPFAREAAGGREGATELSDBTYPE, INTEGER, RONLY, ospfAreaAggregateEntry, 3, {14, 1, 2}}, {OSPFAREAAGGREGATENET, IPADDRESS, RONLY, ospfAreaAggregateEntry, 3, {14, 1, 3}}, {OSPFAREAAGGREGATEMASK, IPADDRESS, RONLY, ospfAreaAggregateEntry, 3, {14, 1, 4}}, {OSPFAREAAGGREGATESTATUS, INTEGER, RWRITE, ospfAreaAggregateEntry, 3, {14, 1, 5}}, {OSPFAREAAGGREGATEEFFECT, INTEGER, RWRITE, ospfAreaAggregateEntry, 3, {14, 1, 6}}};/* The administrative status of OSPF. When OSPF is enbled on at least one interface return 1. */intospf_admin_stat (struct ospf *ospf){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -