diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | bgpd/bgp_snmp.c | 5 | ||||
-rwxr-xr-x | configure.ac | 20 | ||||
-rw-r--r-- | lib/smux.c | 4 | ||||
-rw-r--r-- | ospfclient/.cvsignore | 7 | ||||
-rw-r--r-- | ospfd/ChangeLog | 14 | ||||
-rw-r--r-- | ospfd/ospf_snmp.c | 3 | ||||
-rw-r--r-- | ripd/rip_snmp.c | 3 | ||||
-rw-r--r-- | zebra/zebra_snmp.c | 180 |
9 files changed, 160 insertions, 84 deletions
@@ -1,3 +1,11 @@ +2003-03-17 Amir Guindehi <amir@datacore.ch> + + * Extended SNMP checks in configure.ac so that net-snmp works + +2003-03-17 Amir Guindehi <amir@datacore.ch> + Ralph Keller <keller@tik.ee.ethz.ch> + * merge OSPF-API + 2003-02-07 Paul Jakma <paul@dishone.st> * Sync to zebra CVS diff --git a/bgpd/bgp_snmp.c b/bgpd/bgp_snmp.c index bf9c7f87..822036c1 100644 --- a/bgpd/bgp_snmp.c +++ b/bgpd/bgp_snmp.c @@ -21,6 +21,9 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #include <zebra.h> #ifdef HAVE_SNMP +#ifdef HAVE_NETSNMP +#include <net-snmp/net-snmp-config.h> +#endif #include <asn1.h> #include <snmp.h> #include <snmp_impl.h> @@ -516,7 +519,7 @@ bgpPeerTable (struct variable *v, oid name[], size_t *length, case BGPPEEROUTTOTALMESSAGES: return SNMP_INTEGER (peer->open_out + peer->update_out + peer->keepalive_out + peer->notify_out - + peer->refresh_out, peer->dynamic_cap_out); + + peer->refresh_out + peer->dynamic_cap_out); break; case BGPPEERLASTERROR: { diff --git a/configure.ac b/configure.ac index c274a0df..4c302121 100755 --- a/configure.ac +++ b/configure.ac @@ -617,6 +617,19 @@ dnl AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes) AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes) LIBS="${old_libs}" fi + if test "${HAVE_SNMP}" = ""; then + if test "${NEED_CRYPTO}" = ""; then + old_libs="${LIBS}" + LIBS="-L/usr/lib" + AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes ]) + LIBS="${old_libs}" + else + old_libs="${LIBS}" + LIBS="-L/usr/lib" + AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes; NEED_CRYPTO=yes;LIBS="$LIBS -lcrypto" ],,"-lcrypto") + LIBS="${old_libs}" + fi + fi if test "${HAVE_SNMP}" = "yes"; then for ac_snmp in /usr/include/net-snmp/library/asn1.h /usr/include/ucd-snmp/asn1.h /usr/local/include/ucd-snmp/asn1.h /dev/null do @@ -626,8 +639,13 @@ dnl AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes) /usr/include/net-snmp/*) AC_DEFINE(HAVE_SNMP,,SNMP) AC_DEFINE(UCD_COMPATIBLE,,SNMP) - CFLAGS="${CFLAGS} -I/usr/include/ucd-snmp" + CFLAGS="${CFLAGS} -I/usr/include/net-snmp -I/usr/include/net-snmp/library" + if test "${HAVE_NETSNMP}" = "yes"; then + AC_DEFINE(HAVE_NETSNMP,,SNMP) + LIBS="${LIBS} -lnetsnmp" + else LIBS="${LIBS} -lsnmp" + fi ;; /usr/include/ucd-snmp/*) AC_DEFINE(HAVE_SNMP,,SNMP) @@ -22,7 +22,9 @@ #include <zebra.h> #ifdef HAVE_SNMP - +#ifdef HAVE_NETSNMP +#include <net-snmp/net-snmp-config.h> +#endif #include <asn1.h> #include <snmp.h> #include <snmp_impl.h> diff --git a/ospfclient/.cvsignore b/ospfclient/.cvsignore new file mode 100644 index 00000000..d7e3a7e2 --- /dev/null +++ b/ospfclient/.cvsignore @@ -0,0 +1,7 @@ +Makefile +*.o +ospfd +ospfd.conf +tags +TAGS +.deps diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog index 31c5b0f7..5dfc96e6 100644 --- a/ospfd/ChangeLog +++ b/ospfd/ChangeLog @@ -1,3 +1,17 @@ +2002-03-17 Amir Guindehi <amir@datacore.ch> + + * ospf_apiserver.[ch]: Merge Ralph Keller's OSPFAPI support. + * ospf_api.[ch]: Merge Ralph Keller's OSPFAPI support. + * ospfclient: OSPFAPI demonstration client. + +2003-01-23 Masahiko Endo <endo@suri.co.jp> + + * ospf_ism.c: NSM event schedule bug fix. + +2002-10-30 Greg Troxel <gdt@ir.bbn.com> + + * ospf_packet.c (ospf_make_md5_digest): MD5 length fix. + 2002-10-23 endo@suri.co.jp (Masahiko Endo) * ospf_opaque.c: Update Opaque LSA patch. diff --git a/ospfd/ospf_snmp.c b/ospfd/ospf_snmp.c index 4ed0ecd3..4f9af315 100644 --- a/ospfd/ospf_snmp.c +++ b/ospfd/ospf_snmp.c @@ -24,6 +24,9 @@ #include <zebra.h> #ifdef HAVE_SNMP +#ifdef HAVE_NETSNMP +#include <net-snmp/net-snmp-config.h> +#endif #include <asn1.h> #include <snmp.h> #include <snmp_impl.h> diff --git a/ripd/rip_snmp.c b/ripd/rip_snmp.c index dc2b6212..5a5060fd 100644 --- a/ripd/rip_snmp.c +++ b/ripd/rip_snmp.c @@ -22,6 +22,9 @@ #include <zebra.h> #ifdef HAVE_SNMP +#ifdef HAVE_NETSNMP +#include <net-snmp/net-snmp-config.h> +#endif #include <asn1.h> #include <snmp.h> #include <snmp_impl.h> diff --git a/zebra/zebra_snmp.c b/zebra/zebra_snmp.c index d160bfa7..051aaaa7 100644 --- a/zebra/zebra_snmp.c +++ b/zebra/zebra_snmp.c @@ -1,4 +1,4 @@ -/* BGP4 SNMP support +/* FIB SNMP. * Copyright (C) 1999 Kunihiro Ishiguro * * This file is part of GNU Zebra. @@ -22,6 +22,9 @@ #include <zebra.h> #ifdef HAVE_SNMP +#ifdef HAVE_NETSNMP +#include <net-snmp/net-snmp-config.h> +#endif #include <asn1.h> #include <snmp.h> #include <snmp_impl.h> @@ -90,41 +93,41 @@ u_char * ipCidrNumber (); u_char * ipCidrTable (); struct variable zebra_variables[] = -{ - {0, GAUGE32, RONLY, ipFwNumber, 1, {1}}, - {IPFORWARDDEST, IPADDRESS, RONLY, ipFwTable, 3, {2, 1, 1}}, - {IPFORWARDMASK, IPADDRESS, RONLY, ipFwTable, 3, {2, 1, 2}}, - {IPFORWARDPOLICY, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 3}}, - {IPFORWARDNEXTHOP, IPADDRESS, RONLY, ipFwTable, 3, {2, 1, 4}}, - {IPFORWARDIFINDEX, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 5}}, - {IPFORWARDTYPE, ENUMERATION, RONLY, ipFwTable, 3, {2, 1, 6}}, - {IPFORWARDPROTO, ENUMERATION, RONLY, ipFwTable, 3, {2, 1, 7}}, - {IPFORWARDAGE, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 8}}, - {IPFORWARDINFO, OBJECTIDENTIFIER, RONLY, ipFwTable, 3, {2, 1, 9}}, - {IPFORWARDNEXTHOPAS, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 10}}, - {IPFORWARDMETRIC1, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 11}}, - {IPFORWARDMETRIC2, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 12}}, - {IPFORWARDMETRIC3, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 13}}, - {IPFORWARDMETRIC4, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 14}}, - {IPFORWARDMETRIC5, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 15}}, - {0, GAUGE32, RONLY, ipCidrNumber, 1, {3}}, - {IPCIDRROUTEDEST, IPADDRESS, RONLY, ipCidrTable, 3, {4, 1, 1}}, - {IPCIDRROUTEMASK, IPADDRESS, RONLY, ipCidrTable, 3, {4, 1, 2}}, - {IPCIDRROUTETOS, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 3}}, - {IPCIDRROUTENEXTHOP, IPADDRESS, RONLY, ipCidrTable, 3, {4, 1, 4}}, - {IPCIDRROUTEIFINDEX, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 5}}, - {IPCIDRROUTETYPE, ENUMERATION, RONLY, ipCidrTable, 3, {4, 1, 6}}, - {IPCIDRROUTEPROTO, ENUMERATION, RONLY, ipCidrTable, 3, {4, 1, 7}}, - {IPCIDRROUTEAGE, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 8}}, - {IPCIDRROUTEINFO, OBJECTIDENTIFIER, RONLY, ipCidrTable, 3, {4, 1, 9}}, - {IPCIDRROUTENEXTHOPAS, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 10}}, - {IPCIDRROUTEMETRIC1, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 11}}, - {IPCIDRROUTEMETRIC2, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 12}}, - {IPCIDRROUTEMETRIC3, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 13}}, - {IPCIDRROUTEMETRIC4, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 14}}, - {IPCIDRROUTEMETRIC5, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 15}}, - {IPCIDRROUTESTATUS, ROWSTATUS, RONLY, ipCidrTable, 3, {4, 1, 16}} -}; + { + {0, GAUGE32, RONLY, ipFwNumber, 1, {1}}, + {IPFORWARDDEST, IPADDRESS, RONLY, ipFwTable, 3, {2, 1, 1}}, + {IPFORWARDMASK, IPADDRESS, RONLY, ipFwTable, 3, {2, 1, 2}}, + {IPFORWARDPOLICY, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 3}}, + {IPFORWARDNEXTHOP, IPADDRESS, RONLY, ipFwTable, 3, {2, 1, 4}}, + {IPFORWARDIFINDEX, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 5}}, + {IPFORWARDTYPE, ENUMERATION, RONLY, ipFwTable, 3, {2, 1, 6}}, + {IPFORWARDPROTO, ENUMERATION, RONLY, ipFwTable, 3, {2, 1, 7}}, + {IPFORWARDAGE, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 8}}, + {IPFORWARDINFO, OBJECTIDENTIFIER, RONLY, ipFwTable, 3, {2, 1, 9}}, + {IPFORWARDNEXTHOPAS, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 10}}, + {IPFORWARDMETRIC1, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 11}}, + {IPFORWARDMETRIC2, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 12}}, + {IPFORWARDMETRIC3, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 13}}, + {IPFORWARDMETRIC4, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 14}}, + {IPFORWARDMETRIC5, INTEGER32, RONLY, ipFwTable, 3, {2, 1, 15}}, + {0, GAUGE32, RONLY, ipCidrNumber, 1, {3}}, + {IPCIDRROUTEDEST, IPADDRESS, RONLY, ipCidrTable, 3, {4, 1, 1}}, + {IPCIDRROUTEMASK, IPADDRESS, RONLY, ipCidrTable, 3, {4, 1, 2}}, + {IPCIDRROUTETOS, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 3}}, + {IPCIDRROUTENEXTHOP, IPADDRESS, RONLY, ipCidrTable, 3, {4, 1, 4}}, + {IPCIDRROUTEIFINDEX, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 5}}, + {IPCIDRROUTETYPE, ENUMERATION, RONLY, ipCidrTable, 3, {4, 1, 6}}, + {IPCIDRROUTEPROTO, ENUMERATION, RONLY, ipCidrTable, 3, {4, 1, 7}}, + {IPCIDRROUTEAGE, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 8}}, + {IPCIDRROUTEINFO, OBJECTIDENTIFIER, RONLY, ipCidrTable, 3, {4, 1, 9}}, + {IPCIDRROUTENEXTHOPAS, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 10}}, + {IPCIDRROUTEMETRIC1, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 11}}, + {IPCIDRROUTEMETRIC2, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 12}}, + {IPCIDRROUTEMETRIC3, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 13}}, + {IPCIDRROUTEMETRIC4, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 14}}, + {IPCIDRROUTEMETRIC5, INTEGER32, RONLY, ipCidrTable, 3, {4, 1, 15}}, + {IPCIDRROUTESTATUS, ROWSTATUS, RONLY, ipCidrTable, 3, {4, 1, 16}} + }; u_char * @@ -132,16 +135,21 @@ ipFwNumber (struct variable *v, oid objid[], size_t *objid_len, int exact, size_t *val_len, WriteMethod **write_method) { static int result; - struct route_node *np; + struct route_table *table; + struct route_node *rn; struct rib *rib; if (smux_header_generic(v, objid, objid_len, exact, val_len, write_method) == MATCH_FAILED) return NULL; + table = vrf_table (AFI_IP, SAFI_UNICAST, 0); + if (! table) + return NULL; + /* Return number of routing entries. */ result = 0; - for (np = route_top (rib_table_ipv4); np; np = route_next (np)) - for (rib = np->info; rib; rib = rib->next) + for (rn = route_top (table); rn; rn = route_next (rn)) + for (rib = rn->info; rib; rib = rib->next) result++; return (u_char *)&result; @@ -149,19 +157,24 @@ ipFwNumber (struct variable *v, oid objid[], size_t *objid_len, u_char * ipCidrNumber (struct variable *v, oid objid[], size_t *objid_len, - int exact, size_t *val_len, WriteMethod **write_method) + int exact, size_t *val_len, WriteMethod **write_method) { static int result; - struct route_node *np; + struct route_table *table; + struct route_node *rn; struct rib *rib; if (smux_header_generic(v, objid, objid_len, exact, val_len, write_method) == MATCH_FAILED) return NULL; + table = vrf_table (AFI_IP, SAFI_UNICAST, 0); + if (! table) + return 0; + /* Return number of routing entries. */ result = 0; - for (np = route_top (rib_table_ipv4); np; np = route_next (np)) - for (rib = np->info; rib; rib = rib->next) + for (rn = route_top (table); rn; rn = route_next (rn)) + for (rib = rn->info; rib; rib = rib->next) result++; return (u_char *)&result; @@ -193,16 +206,16 @@ in_addr_add(u_char *p, int num) for (i = 3; 0 <= i; i--) { p--; if (*p + num > 255) { - *p += num; - num = 1; + *p += num; + num = 1; } else { - *p += num; - return 1; + *p += num; + return 1; } } if (ip0 > *p) { - /* ip + num > 0xffffffff */ - return 0; + /* ip + num > 0xffffffff */ + return 0; } return 1; @@ -212,26 +225,26 @@ int proto_trans(int type) { switch (type) { - case ZEBRA_ROUTE_SYSTEM: - return 1; /* other */ - case ZEBRA_ROUTE_KERNEL: - return 1; /* other */ - case ZEBRA_ROUTE_CONNECT: - return 2; /* local interface */ - case ZEBRA_ROUTE_STATIC: - return 3; /* static route */ - case ZEBRA_ROUTE_RIP: - return 8; /* rip */ - case ZEBRA_ROUTE_RIPNG: - return 1; /* shouldn't happen */ - case ZEBRA_ROUTE_OSPF: - return 13; /* ospf */ - case ZEBRA_ROUTE_OSPF6: - return 1; /* shouldn't happen */ - case ZEBRA_ROUTE_BGP: - return 14; /* bgp */ - default: - return 1; /* other */ + case ZEBRA_ROUTE_SYSTEM: + return 1; /* other */ + case ZEBRA_ROUTE_KERNEL: + return 1; /* other */ + case ZEBRA_ROUTE_CONNECT: + return 2; /* local interface */ + case ZEBRA_ROUTE_STATIC: + return 3; /* static route */ + case ZEBRA_ROUTE_RIP: + return 8; /* rip */ + case ZEBRA_ROUTE_RIPNG: + return 1; /* shouldn't happen */ + case ZEBRA_ROUTE_OSPF: + return 13; /* ospf */ + case ZEBRA_ROUTE_OSPF6: + return 1; /* shouldn't happen */ + case ZEBRA_ROUTE_BGP: + return 14; /* bgp */ + default: + return 1; /* other */ } } @@ -283,6 +296,7 @@ get_fwtable_route_node(struct variable *v, oid objid[], size_t *objid_len, int exact, struct route_node **np, struct rib **rib) { struct in_addr dest; + struct route_table *table; struct route_node *np2; struct rib *rib2; int proto; @@ -291,7 +305,7 @@ get_fwtable_route_node(struct variable *v, oid objid[], size_t *objid_len, u_char *pnt; int i; -/* Init index variables */ + /* Init index variables */ pnt = (u_char *) &dest; for (i = 0; i < 4; i++) @@ -304,19 +318,23 @@ get_fwtable_route_node(struct variable *v, oid objid[], size_t *objid_len, proto = 0; policy = 0; -/* Init return variables */ + /* Init return variables */ *np = NULL; *rib = NULL; -/* Short circuit exact matches of wrong length */ + /* Short circuit exact matches of wrong length */ if (exact && (*objid_len != v->namelen + 10)) return; -/* Get INDEX information out of OID. - * ipForwardDest, ipForwardProto, ipForwardPolicy, ipForwardNextHop - */ + table = vrf_table (AFI_IP, SAFI_UNICAST, 0); + if (! table) + return; + + /* Get INDEX information out of OID. + * ipForwardDest, ipForwardProto, ipForwardPolicy, ipForwardNextHop + */ if (*objid_len > v->namelen) oid2in_addr (objid + v->namelen, MIN(4, *objid_len - v->namelen), &dest); @@ -329,7 +347,7 @@ get_fwtable_route_node(struct variable *v, oid objid[], size_t *objid_len, if (*objid_len > v->namelen + 6) oid2in_addr (objid + v->namelen + 6, MIN(4, *objid_len - v->namelen - 6), - &nexthop); + &nexthop); /* Apply GETNEXT on not exact search */ @@ -345,14 +363,14 @@ get_fwtable_route_node(struct variable *v, oid objid[], size_t *objid_len, { if (policy) /* Not supported (yet?) */ return; - for (*np = route_top (rib_table_ipv4); *np; *np = route_next (*np)) + for (*np = route_top (table); *np; *np = route_next (*np)) { if (!in_addr_cmp(&(*np)->p.u.prefix, (u_char *)&dest)) { for (*rib = (*np)->info; *rib; *rib = (*rib)->next) { if (!in_addr_cmp((u_char *)&(*rib)->nexthop->gate.ipv4, - (u_char *)&nexthop)) + (u_char *)&nexthop)) if (proto == proto_trans((*rib)->type)) return; } @@ -361,9 +379,9 @@ get_fwtable_route_node(struct variable *v, oid objid[], size_t *objid_len, return; } -/* Search next best entry */ + /* Search next best entry */ - for (np2 = route_top (rib_table_ipv4); np2; np2 = route_next (np2)) + for (np2 = route_top (table); np2; np2 = route_next (np2)) { /* Check destination first */ @@ -527,7 +545,7 @@ ipFwTable (struct variable *v, oid objid[], size_t *objid_len, u_char * ipCidrTable (struct variable *v, oid objid[], size_t *objid_len, - int exact, size_t *val_len, WriteMethod **write_method) + int exact, size_t *val_len, WriteMethod **write_method) { switch (v->magic) { |