diff options
Diffstat (limited to 'usr.sbin/bsnmpd/modules/snmp_bridge/bridge_if.c')
-rw-r--r-- | usr.sbin/bsnmpd/modules/snmp_bridge/bridge_if.c | 77 |
1 files changed, 63 insertions, 14 deletions
diff --git a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_if.c b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_if.c index d188ab5..2805d85 100644 --- a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_if.c +++ b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_if.c @@ -674,6 +674,7 @@ int op_dot1d_stp(struct snmp_context *ctx, struct snmp_value *value, uint sub, uint iidx __unused, enum snmp_op op) { + int ret; struct bridge_if *bif; if ((bif = bridge_get_default()) == NULL) @@ -743,6 +744,11 @@ op_dot1d_stp(struct snmp_context *ctx, struct snmp_value *value, case LEAF_dot1dStpBridgeForwardDelay: value->v.integer = bif->bridge_fwd_delay; break; + case LEAF_dot1dStpVersion: + value->v.integer = bif->stp_version; + break; + case LEAF_dot1dStpTxHoldCount: + value->v.integer = bif->tx_hold_count; } return (SNMP_ERR_NOERROR); @@ -754,26 +760,32 @@ op_dot1d_stp(struct snmp_context *ctx, struct snmp_value *value, switch (value->var.subs[sub - 1]) { case LEAF_dot1dStpPriority: ctx->scratch->int1 = bif->priority; - if (bridge_set_priority(bif, value->v.integer) < 0) - return (SNMP_ERR_GENERR); + ret = bridge_set_priority(bif, value->v.integer); break; case LEAF_dot1dStpBridgeMaxAge: ctx->scratch->int1 = bif->bridge_max_age; - if (bridge_set_maxage(bif, value->v.integer) < 0) - return (SNMP_ERR_GENERR); + ret = bridge_set_maxage(bif, value->v.integer); break; case LEAF_dot1dStpBridgeHelloTime: ctx->scratch->int1 = bif->bridge_hello_time; - if (bridge_set_hello_time(bif, value->v.integer) < 0) - return (SNMP_ERR_GENERR); + ret = bridge_set_hello_time(bif, value->v.integer); break; case LEAF_dot1dStpBridgeForwardDelay: ctx->scratch->int1 = bif->bridge_fwd_delay; - if (bridge_set_forward_delay(bif, value->v.integer) < 0) - return (SNMP_ERR_GENERR); + ret = bridge_set_forward_delay(bif, value->v.integer); + break; + + case LEAF_dot1dStpVersion: + ctx->scratch->int1 = bif->stp_version; + ret = bridge_set_stp_version(bif, value->v.integer); + break; + + case LEAF_dot1dStpTxHoldCount: + ctx->scratch->int1 = bif->tx_hold_count; + ret = bridge_set_tx_hold_count(bif, value->v.integer); break; case LEAF_dot1dStpProtocolSpecification: @@ -787,24 +799,35 @@ op_dot1d_stp(struct snmp_context *ctx, struct snmp_value *value, case LEAF_dot1dStpHoldTime: case LEAF_dot1dStpForwardDelay: return (SNMP_ERR_NOT_WRITEABLE); + default: + return (SNMP_ERR_NOSUCHNAME); } + if (ret == -2) + return (SNMP_ERR_WRONG_VALUE); + else if (ret < 0) + return (SNMP_ERR_GENERR); return (SNMP_ERR_NOERROR); case SNMP_OP_ROLLBACK: switch (value->var.subs[sub - 1]) { case LEAF_dot1dStpPriority: - (void) bridge_set_priority(bif, ctx->scratch->int1); + bridge_set_priority(bif, ctx->scratch->int1); break; case LEAF_dot1dStpBridgeMaxAge: - (void) bridge_set_maxage(bif, ctx->scratch->int1); + bridge_set_maxage(bif, ctx->scratch->int1); break; case LEAF_dot1dStpBridgeHelloTime: - (void) bridge_set_hello_time(bif, ctx->scratch->int1); + bridge_set_hello_time(bif, ctx->scratch->int1); break; case LEAF_dot1dStpBridgeForwardDelay: - (void) bridge_set_forward_delay(bif, - ctx->scratch->int1); + bridge_set_forward_delay(bif, ctx->scratch->int1); + break; + case LEAF_dot1dStpVersion: + bridge_set_stp_version(bif, ctx->scratch->int1); + break; + case LEAF_dot1dStpTxHoldCount: + bridge_set_tx_hold_count(bif, ctx->scratch->int1); break; } return (SNMP_ERR_NOERROR); @@ -854,7 +877,7 @@ op_dot1d_tp(struct snmp_context *ctx, struct snmp_value *value, case SNMP_OP_ROLLBACK: if (value->var.subs[sub - 1] == LEAF_dot1dTpAgingTime) - (void) bridge_set_aging_time(bif, ctx->scratch->int1); + bridge_set_aging_time(bif, ctx->scratch->int1); return (SNMP_ERR_NOERROR); case SNMP_OP_COMMIT: @@ -1181,6 +1204,16 @@ op_begemot_stp(struct snmp_context *ctx, struct snmp_value *val, ret = bridge_set_forward_delay(bif, val->v.integer); break; + case LEAF_begemotBridgeStpVersion: + ctx->scratch->int1 = bif->stp_version; + ret = bridge_set_stp_version(bif, val->v.integer); + break; + + case LEAF_begemotBridgeStpTxHoldCount: + ctx->scratch->int1 = bif->tx_hold_count; + ret = bridge_set_tx_hold_count(bif, val->v.integer); + break; + case LEAF_begemotBridgeStpProtocolSpecification: case LEAF_begemotBridgeStpTimeSinceTopologyChange: case LEAF_begemotBridgeStpTopChanges: @@ -1220,6 +1253,14 @@ op_begemot_stp(struct snmp_context *ctx, struct snmp_value *val, case LEAF_begemotBridgeStpBridgeForwardDelay: bridge_set_forward_delay(bif, ctx->scratch->int1); break; + + case LEAF_begemotBridgeStpVersion: + bridge_set_stp_version(bif, ctx->scratch->int1); + break; + + case LEAF_begemotBridgeStpTxHoldCount: + bridge_set_tx_hold_count(bif, ctx->scratch->int1); + break; } return (SNMP_ERR_NOERROR); @@ -1284,6 +1325,14 @@ op_begemot_stp(struct snmp_context *ctx, struct snmp_value *val, case LEAF_begemotBridgeStpBridgeForwardDelay: val->v.integer = bif->bridge_fwd_delay; break; + + case LEAF_begemotBridgeStpVersion: + val->v.integer = bif->stp_version; + break; + + case LEAF_begemotBridgeStpTxHoldCount: + val->v.integer = bif->tx_hold_count; + break; } return (ret); |