summaryrefslogtreecommitdiffstats
path: root/contrib/bsnmp
diff options
context:
space:
mode:
authorharti <harti@FreeBSD.org>2006-02-10 16:49:49 +0000
committerharti <harti@FreeBSD.org>2006-02-10 16:49:49 +0000
commitaf0ed09791e779050efb210d9304ae1e7100c129 (patch)
tree4fe9e3d15aac8c790ccdb33e7552bcedc8ffbbf1 /contrib/bsnmp
parentd548c36029e34bef752ca1dee9ebf934815ff4c7 (diff)
downloadFreeBSD-src-af0ed09791e779050efb210d9304ae1e7100c129.zip
FreeBSD-src-af0ed09791e779050efb210d9304ae1e7100c129.tar.gz
Vendor patch: Make the link traps more RFC-conform.
Submitted by: glebius
Diffstat (limited to 'contrib/bsnmp')
-rw-r--r--contrib/bsnmp/snmp_mibII/mibII.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/contrib/bsnmp/snmp_mibII/mibII.c b/contrib/bsnmp/snmp_mibII/mibII.c
index aa5cb83..98a16d4 100644
--- a/contrib/bsnmp/snmp_mibII/mibII.c
+++ b/contrib/bsnmp/snmp_mibII/mibII.c
@@ -306,15 +306,17 @@ mib_fetch_ifmib(struct mibif *ifp)
return (-1);
}
- if (ifp->trap_enable) {
- if (!(oldmib.ifmd_flags & IFF_UP)) {
- if (ifp->mib.ifmd_flags & IFF_UP)
- link_trap(ifp, 1);
- } else {
- if (!(ifp->mib.ifmd_flags & IFF_UP))
- link_trap(ifp, 0);
- }
- }
+ /*
+ * Quoting RFC2863, 3.1.15: "... LinkUp and linkDown traps are
+ * generated just after ifOperStatus leaves, or just before it
+ * enters, the down state, respectively;"
+ */
+ if (ifp->trap_enable && ifp->mib.ifmd_data.ifi_link_state !=
+ oldmib.ifmd_data.ifi_link_state &&
+ (ifp->mib.ifmd_data.ifi_link_state == LINK_STATE_DOWN ||
+ oldmib.ifmd_data.ifi_link_state == LINK_STATE_DOWN))
+ link_trap(ifp, ifp->mib.ifmd_data.ifi_link_state ==
+ LINK_STATE_UP ? 1 : 0);
ifp->flags &= ~(MIBIF_HIGHSPEED | MIBIF_VERYHIGHSPEED);
if (ifp->mib.ifmd_data.ifi_baudrate > 20000000) {
@@ -625,6 +627,7 @@ mibif_create(u_int sysindex, const char *name)
ifp->counter_disc = get_ticks();
}
ifp->index = map->ifindex;
+ ifp->mib.ifmd_data.ifi_link_state = LINK_STATE_UNKNOWN;
INSERT_OBJECT_INT(ifp, &mibif_list);
mib_if_number++;
OpenPOWER on IntegriCloud