Vendor patch: fix the reporting of ifOperStatus. We now consider an
interface up when it is running AND the link is not down (that is, it is up or unknown). If the interface is running but the link is down, we return state 'dormant', because we're waiting for an external event. Otherwise the interface is 'down'. Submitted by: csjp Reviewed by: glebius
This commit is contained in:
parent
4c0a7af955
commit
361b40a30d
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user