diff options
| author | Hartmut Brandt <harti@FreeBSD.org> | 2005-11-02 14:05:49 +0000 |
|---|---|---|
| committer | Hartmut Brandt <harti@FreeBSD.org> | 2005-11-02 14:05:49 +0000 |
| commit | 361b40a30dd450a1b651f9f7e2f49a8e57cf2b8e (patch) | |
| tree | 4fdb91410f1a9bbad47c80ff67142978a8d797b2 | |
| parent | 4c0a7af95505bb23d3d9c30693993f7b246816c6 (diff) | |
Notes
| -rw-r--r-- | contrib/bsnmp/snmp_mibII/mibII_interfaces.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/contrib/bsnmp/snmp_mibII/mibII_interfaces.c b/contrib/bsnmp/snmp_mibII/mibII_interfaces.c index 1c0826007626..d3211d01192a 100644 --- a/contrib/bsnmp/snmp_mibII/mibII_interfaces.c +++ b/contrib/bsnmp/snmp_mibII/mibII_interfaces.c @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Begemot: bsnmp/snmp_mibII/mibII_interfaces.c,v 1.15 2005/05/23 09:03:39 brandt_h Exp $ + * $Begemot: bsnmp/snmp_mibII/mibII_interfaces.c,v 1.16 2005/11/02 12:07:40 brandt_h Exp $ * * Interfaces group. */ @@ -280,8 +280,22 @@ op_ifentry(struct snmp_context *ctx, struct snmp_value *value, break; case LEAF_ifOperStatus: - value->v.integer = - (ifp->mib.ifmd_flags & IFF_RUNNING) ? 1 : 2; + /* + * According to RFC 2863 the state should be Up if the + * interface is ready to transmit packets. We takes this to + * mean that the interface should be running and should have + * a carrier. If it is running and has no carrier we interpret + * this as 'waiting for an external event' (plugging in the + * cable) and hence return 'dormant'. + */ + if (ifp->mib.ifmd_flags & IFF_RUNNING) { + if (ifp->mib.ifmd_data.ifi_link_state == + LINK_STATE_DOWN) + value->v.integer = 5; /* state dormant */ + else + value->v.integer = 1; /* state up */ + } else + value->v.integer = 2; /* state down */ break; case LEAF_ifLastChange: |
