summaryrefslogtreecommitdiffstats
path: root/usr.sbin/bsnmpd
diff options
context:
space:
mode:
authorsyrinx <syrinx@FreeBSD.org>2006-12-15 20:01:57 +0000
committersyrinx <syrinx@FreeBSD.org>2006-12-15 20:01:57 +0000
commit358a7eb8bf0bcec55c098afb6b76697eec5e3b6e (patch)
treeb6a41d4287c0f881f454af24bcdd77d8365847d7 /usr.sbin/bsnmpd
parent6e9534365d1b39363503d66a3d1942dc144e1aa4 (diff)
downloadFreeBSD-src-358a7eb8bf0bcec55c098afb6b76697eec5e3b6e.zip
FreeBSD-src-358a7eb8bf0bcec55c098afb6b76697eec5e3b6e.tar.gz
Do not add 'default:' cases inside a switch() on an enum like the
SNMP option argument. That way the compiler will give a warning in case of a missing or an extra but unknown 'case:'. Do the same for SNMP LEAF objects to be prepared once gensnmptree will auto-generate enums for those too. Add an abort() after the switch() instead of the 'default:' to catch any errors. The nice side effect is that the compiler will correctly track supposed to be 'uninitialized' variables with that. When trying to set a value sanity check it before calling the OS dependent API of snmp_bridge to tell whether it is an attempt to set a bad value or a general error. Suggested by: harti (first part) Approved by: bz (mentor)
Diffstat (limited to 'usr.sbin/bsnmpd')
-rw-r--r--usr.sbin/bsnmpd/modules/snmp_bridge/bridge_addrs.c40
-rw-r--r--usr.sbin/bsnmpd/modules/snmp_bridge/bridge_if.c348
-rw-r--r--usr.sbin/bsnmpd/modules/snmp_bridge/bridge_pf.c29
-rw-r--r--usr.sbin/bsnmpd/modules/snmp_bridge/bridge_port.c431
-rw-r--r--usr.sbin/bsnmpd/modules/snmp_bridge/bridge_snmp.c23
-rw-r--r--usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c44
6 files changed, 498 insertions, 417 deletions
diff --git a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_addrs.c b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_addrs.c
index 0563ceb..781517f 100644
--- a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_addrs.c
+++ b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_addrs.c
@@ -397,7 +397,6 @@ int
op_dot1d_tp_fdb(struct snmp_context *c __unused, struct snmp_value *val,
uint sub, uint iidx __unused, enum snmp_op op)
{
- int ret;
struct bridge_if *bif;
struct tp_entry *te;
@@ -412,37 +411,36 @@ op_dot1d_tp_fdb(struct snmp_context *c __unused, struct snmp_value *val,
case SNMP_OP_GET:
if ((te = bridge_addrs_get(&val->var, sub, bif)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_GETNEXT:
if ((te = bridge_addrs_getnext(&val->var, sub, bif)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
bridge_addrs_index_append(&val->var, sub, te);
- break;
+ goto get;
case SNMP_OP_SET:
return (SNMP_ERR_NOT_WRITEABLE);
case SNMP_OP_ROLLBACK:
case SNMP_OP_COMMIT:
- default:
- abort();
+ break;
}
+ abort();
- ret = SNMP_ERR_NOERROR;
+get:
switch (val->var.subs[sub - 1]) {
case LEAF_dot1dTpFdbAddress:
- ret = string_get(val, te->tp_addr, ETHER_ADDR_LEN);
- break;
+ return (string_get(val, te->tp_addr, ETHER_ADDR_LEN));
case LEAF_dot1dTpFdbPort :
val->v.integer = te->port_no;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dTpFdbStatus:
val->v.integer = te->status;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (ret);
+ abort();
}
/*
@@ -547,7 +545,6 @@ int
op_begemot_tp_fdb(struct snmp_context *c __unused, struct snmp_value *val,
uint sub, uint iidx __unused, enum snmp_op op)
{
- int ret;
struct tp_entry *te;
if (time(NULL) - address_list_age > bridge_get_data_maxage())
@@ -557,7 +554,7 @@ op_begemot_tp_fdb(struct snmp_context *c __unused, struct snmp_value *val,
case SNMP_OP_GET:
if ((te = bridge_addrs_begemot_get(&val->var, sub)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_GETNEXT:
if ((te = bridge_addrs_begemot_getnext(&val->var,
@@ -565,29 +562,28 @@ op_begemot_tp_fdb(struct snmp_context *c __unused, struct snmp_value *val,
bridge_addrs_begemot_index_append(&val->var,
sub, te) < 0)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_SET:
return (SNMP_ERR_NOT_WRITEABLE);
case SNMP_OP_ROLLBACK:
case SNMP_OP_COMMIT:
- default:
- abort();
+ break;
}
+ abort();
- ret = SNMP_ERR_NOERROR;
+get:
switch (val->var.subs[sub - 1]) {
case LEAF_begemotBridgeTpFdbAddress:
- ret = string_get(val, te->tp_addr, ETHER_ADDR_LEN);
- break;
+ return (string_get(val, te->tp_addr, ETHER_ADDR_LEN));
case LEAF_begemotBridgeTpFdbPort:
val->v.integer = te->port_no;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeTpFdbStatus:
val->v.integer = te->status;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (ret);
+ abort();
}
diff --git a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_if.c b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_if.c
index 0798012..8ab594d 100644
--- a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_if.c
+++ b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_if.c
@@ -628,7 +628,6 @@ int
op_dot1d_base(struct snmp_context *ctx __unused, 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)
@@ -638,41 +637,36 @@ op_dot1d_base(struct snmp_context *ctx __unused, struct snmp_value *value,
bridge_update_bif(bif) <= 0) /* It was just deleted. */
return (SNMP_ERR_NOSUCHNAME);
- ret = SNMP_ERR_NOERROR;
-
switch (op) {
case SNMP_OP_GET:
switch (value->var.subs[sub - 1]) {
case LEAF_dot1dBaseBridgeAddress:
- ret = string_get(value, bif->br_addr.octet,
- ETHER_ADDR_LEN);
- break;
+ return (string_get(value, bif->br_addr.octet,
+ ETHER_ADDR_LEN));
case LEAF_dot1dBaseNumPorts:
value->v.integer = bif->num_ports;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dBaseType:
value->v.integer = bif->br_type;
- break;
- abort();
+ return (SNMP_ERR_NOERROR);
}
- break;
+ abort();
case SNMP_OP_SET:
- ret = SNMP_ERR_NOT_WRITEABLE;
- break;
+ return (SNMP_ERR_NOT_WRITEABLE);
case SNMP_OP_GETNEXT:
case SNMP_OP_ROLLBACK:
case SNMP_OP_COMMIT:
- abort();
+ break;
}
- return (ret);
+ abort();
}
int
-op_dot1d_stp(struct snmp_context *ctx, struct snmp_value *value,
- uint sub, uint iidx __unused, enum snmp_op op)
+op_dot1d_stp(struct snmp_context *ctx, struct snmp_value *val, uint sub,
+ uint iidx __unused, enum snmp_op op)
{
int ret;
struct bridge_if *bif;
@@ -686,107 +680,139 @@ op_dot1d_stp(struct snmp_context *ctx, struct snmp_value *value,
switch (op) {
case SNMP_OP_GET:
- switch (value->var.subs[sub - 1]) {
+ switch (val->var.subs[sub - 1]) {
case LEAF_dot1dStpProtocolSpecification:
- value->v.integer = bif->prot_spec;
- break;
+ val->v.integer = bif->prot_spec;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpPriority:
- value->v.integer = bif->priority;
- break;
+ val->v.integer = bif->priority;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpTimeSinceTopologyChange:
if (bridge_get_time_since_tc(bif,
- &(value->v.uint32)) < 0)
+ &(val->v.uint32)) < 0)
return (SNMP_ERR_GENERR);
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpTopChanges:
- value->v.uint32 = bif->top_changes;
- break;
+ val->v.uint32 = bif->top_changes;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpDesignatedRoot:
- return (string_get(value, bif->design_root,
+ return (string_get(val, bif->design_root,
SNMP_BRIDGE_ID_LEN));
case LEAF_dot1dStpRootCost:
- value->v.integer = bif->root_cost;
- break;
+ val->v.integer = bif->root_cost;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpRootPort:
- value->v.integer = bif->root_port;
- break;
+ val->v.integer = bif->root_port;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpMaxAge:
- value->v.integer = bif->max_age;
- break;
+ val->v.integer = bif->max_age;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpHelloTime:
- value->v.integer = bif->hello_time;
- break;
+ val->v.integer = bif->hello_time;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpHoldTime:
- value->v.integer = bif->hold_time;
- break;
+ val->v.integer = bif->hold_time;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpForwardDelay:
- value->v.integer = bif->fwd_delay;
- break;
+ val->v.integer = bif->fwd_delay;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpBridgeMaxAge:
- value->v.integer = bif->bridge_max_age;
- break;
+ val->v.integer = bif->bridge_max_age;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpBridgeHelloTime:
- value->v.integer = bif->bridge_hello_time;
- break;
+ val->v.integer = bif->bridge_hello_time;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpBridgeForwardDelay:
- value->v.integer = bif->bridge_fwd_delay;
- break;
+ val->v.integer = bif->bridge_fwd_delay;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpVersion:
- value->v.integer = bif->stp_version;
- break;
+ val->v.integer = bif->stp_version;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpTxHoldCount:
- value->v.integer = bif->tx_hold_count;
+ val->v.integer = bif->tx_hold_count;
+ return (SNMP_ERR_NOERROR);
}
-
- return (SNMP_ERR_NOERROR);
+ abort();
case SNMP_OP_GETNEXT:
abort();
case SNMP_OP_SET:
- switch (value->var.subs[sub - 1]) {
+ switch (val->var.subs[sub - 1]) {
case LEAF_dot1dStpPriority:
+ if (val->v.integer > SNMP_BRIDGE_MAX_PRIORITY ||
+ val->v.integer % 4096 != 0)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bif->priority;
- ret = bridge_set_priority(bif, value->v.integer);
- break;
+ if (bridge_set_priority(bif, val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpBridgeMaxAge:
+ if (val->v.integer < SNMP_BRIDGE_MIN_MAGE ||
+ val->v.integer > SNMP_BRIDGE_MAX_MAGE)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bif->bridge_max_age;
- ret = bridge_set_maxage(bif, value->v.integer);
- break;
+ if (bridge_set_maxage(bif, val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpBridgeHelloTime:
+ if (val->v.integer < SNMP_BRIDGE_MIN_HTIME ||
+ val->v.integer > SNMP_BRIDGE_MAX_HTIME)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bif->bridge_hello_time;
- ret = bridge_set_hello_time(bif, value->v.integer);
- break;
+ if (bridge_set_hello_time(bif, val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpBridgeForwardDelay:
+ if (val->v.integer < SNMP_BRIDGE_MIN_FDELAY ||
+ val->v.integer > SNMP_BRIDGE_MAX_FDELAY)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bif->bridge_fwd_delay;
- ret = bridge_set_forward_delay(bif, value->v.integer);
- break;
+ if (bridge_set_forward_delay(bif, val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpVersion:
+ if (val->v.integer != dot1dStpVersion_stpCompatible &&
+ val->v.integer != dot1dStpVersion_rstp)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bif->stp_version;
- ret = bridge_set_stp_version(bif, value->v.integer);
- break;
+ if (bridge_set_stp_version(bif, val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpTxHoldCount:
+ if (val->v.integer < SNMP_BRIDGE_MIN_TXHC ||
+ val->v.integer > SNMP_BRIDGE_MAX_TXHC)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bif->tx_hold_count;
- ret = bridge_set_tx_hold_count(bif, value->v.integer);
- break;
+ if (bridge_set_tx_hold_count(bif, val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dStpProtocolSpecification:
case LEAF_dot1dStpTimeSinceTopologyChange:
@@ -799,18 +825,11 @@ 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);
+ abort();
case SNMP_OP_ROLLBACK:
- switch (value->var.subs[sub - 1]) {
+ switch (val->var.subs[sub - 1]) {
case LEAF_dot1dStpPriority:
bridge_set_priority(bif, ctx->scratch->int1);
break;
@@ -836,7 +855,7 @@ op_dot1d_stp(struct snmp_context *ctx, struct snmp_value *value,
return (SNMP_ERR_NOERROR);
}
- return (SNMP_ERR_NOERROR);
+ abort();
}
int
@@ -857,23 +876,32 @@ op_dot1d_tp(struct snmp_context *ctx, struct snmp_value *value,
switch (value->var.subs[sub - 1]) {
case LEAF_dot1dTpLearnedEntryDiscards:
value->v.uint32 = bif->lrnt_drops;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_dot1dTpAgingTime:
value->v.integer = bif->age_time;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (SNMP_ERR_NOERROR);
+ abort();
case SNMP_OP_GETNEXT:
abort();
case SNMP_OP_SET:
- if (value->var.subs[sub - 1] == LEAF_dot1dTpAgingTime) {
- ctx->scratch->int1 = bif->age_time;
- if (bridge_set_aging_time(bif, value->v.integer) < 0)
- return (SNMP_ERR_GENERR);
+ switch (value->var.subs[sub - 1]) {
+ case LEAF_dot1dTpLearnedEntryDiscards:
+ return (SNMP_ERR_NOT_WRITEABLE);
+
+ case LEAF_dot1dTpAgingTime:
+ if (value->v.integer < SNMP_BRIDGE_MIN_AGE_TIME ||
+ value->v.integer > SNMP_BRIDGE_MAX_AGE_TIME)
+ return (SNMP_ERR_WRONG_VALUE);
+
+ ctx->scratch->int1 = bif->age_time;
+ if (bridge_set_aging_time(bif, value->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
}
- return (SNMP_ERR_NOERROR);
+ abort();
case SNMP_OP_ROLLBACK:
if (value->var.subs[sub - 1] == LEAF_dot1dTpAgingTime)
@@ -884,7 +912,7 @@ op_dot1d_tp(struct snmp_context *ctx, struct snmp_value *value,
return (SNMP_ERR_NOERROR);
}
- return (SNMP_ERR_NOERROR);
+ abort();
}
/*
@@ -1095,7 +1123,6 @@ int
op_begemot_base_bridge(struct snmp_context *ctx, struct snmp_value *val,
uint sub, uint iidx __unused, enum snmp_op op)
{
- int ret;
struct bridge_if *bif;
if (time(NULL) - bridge_list_age > bridge_get_data_maxage())
@@ -1105,13 +1132,13 @@ op_begemot_base_bridge(struct snmp_context *ctx, struct snmp_value *val,
case SNMP_OP_GET:
if ((bif = bridge_if_index_get(&val->var, sub)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_GETNEXT:
if ((bif = bridge_if_index_getnext(&val->var, sub)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
bridge_if_index_append(&val->var, sub, bif);
- break;
+ goto get;
case SNMP_OP_SET:
switch (val->var.subs[sub - 1]) {
@@ -1130,42 +1157,37 @@ op_begemot_base_bridge(struct snmp_context *ctx, struct snmp_value *val,
case SNMP_OP_COMMIT:
return (bridge_commit_if_status(val, sub));
-
- default:
- abort();
}
+ abort();
- ret = SNMP_ERR_NOERROR;
+get:
switch (val->var.subs[sub - 1]) {
case LEAF_begemotBridgeBaseName:
- ret = string_get(val, bif->bif_name, -1);
- break;
+ return (string_get(val, bif->bif_name, -1));
case LEAF_begemotBridgeBaseAddress:
- ret = string_get(val, bif->br_addr.octet, ETHER_ADDR_LEN);
- break;
+ return (string_get(val, bif->br_addr.octet, ETHER_ADDR_LEN));
case LEAF_begemotBridgeBaseNumPorts:
val->v.integer = bif->num_ports;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeBaseType:
val->v.integer = bif->br_type;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeBaseStatus:
val->v.integer = bif->if_status;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (ret);
+ abort();
}
int
op_begemot_stp(struct snmp_context *ctx, struct snmp_value *val,
uint sub, uint iidx __unused, enum snmp_op op)
{
- int ret;
struct bridge_if *bif;
if (time(NULL) - bridge_list_age > bridge_get_data_maxage())
@@ -1175,13 +1197,13 @@ op_begemot_stp(struct snmp_context *ctx, struct snmp_value *val,
case SNMP_OP_GET:
if ((bif = bridge_if_index_get(&val->var, sub)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_GETNEXT:
if ((bif = bridge_if_index_getnext(&val->var, sub)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
bridge_if_index_append(&val->var, sub, bif);
- break;
+ goto get;
case SNMP_OP_SET:
if ((bif = bridge_if_index_get(&val->var, sub)) == NULL)
@@ -1189,34 +1211,65 @@ op_begemot_stp(struct snmp_context *ctx, struct snmp_value *val,
switch (val->var.subs[sub - 1]) {
case LEAF_begemotBridgeStpPriority:
+ if (val->v.integer > SNMP_BRIDGE_MAX_PRIORITY ||
+ val->v.integer % 4096 != 0)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bif->priority;
- ret = bridge_set_priority(bif, val->v.integer);
- break;
+ if (bridge_set_priority(bif, val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpBridgeMaxAge:
+ if (val->v.integer < SNMP_BRIDGE_MIN_MAGE ||
+ val->v.integer > SNMP_BRIDGE_MAX_MAGE)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bif->bridge_max_age;
- ret = bridge_set_maxage(bif, val->v.integer);
- break;
+ if (bridge_set_maxage(bif, val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpBridgeHelloTime:
+ if (val->v.integer < SNMP_BRIDGE_MIN_HTIME ||
+ val->v.integer > SNMP_BRIDGE_MAX_HTIME)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bif->bridge_hello_time;
- ret = bridge_set_hello_time(bif, val->v.integer);
- break;
+ if (bridge_set_hello_time(bif, val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpBridgeForwardDelay:
+ if (val->v.integer < SNMP_BRIDGE_MIN_FDELAY ||
+ val->v.integer > SNMP_BRIDGE_MAX_FDELAY)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bif->bridge_fwd_delay;
- ret = bridge_set_forward_delay(bif, val->v.integer);
- break;
+ if (bridge_set_forward_delay(bif, val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpVersion:
+ if (val->v.integer !=
+ begemotBridgeStpVersion_stpCompatible &&
+ val->v.integer != begemotBridgeStpVersion_rstp)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bif->stp_version;
- ret = bridge_set_stp_version(bif, val->v.integer);
- break;
+ if (bridge_set_stp_version(bif, val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpTxHoldCount:
+ if (val->v.integer < SNMP_BRIDGE_MIN_TXHC ||
+ val->v.integer > SNMP_BRIDGE_MAX_TXHC)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bif->tx_hold_count;
- ret = bridge_set_tx_hold_count(bif, val->v.integer);
- break;
+ if (bridge_set_tx_hold_count(bif, val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpProtocolSpecification:
case LEAF_begemotBridgeStpTimeSinceTopologyChange:
@@ -1229,16 +1282,8 @@ op_begemot_stp(struct snmp_context *ctx, struct snmp_value *val,
case LEAF_begemotBridgeStpHoldTime:
case LEAF_begemotBridgeStpForwardDelay:
return (SNMP_ERR_NOT_WRITEABLE);
-
- default:
- return (SNMP_ERR_NOSUCHNAME);
}
-
- if (ret == 0)
- return (SNMP_ERR_NOERROR);
- else if (ret == -2)
- return (SNMP_ERR_WRONG_VALUE);
- return (SNMP_ERR_GENERR);
+ abort();
case SNMP_OP_ROLLBACK:
if ((bif = bridge_if_index_get(&val->var, sub)) == NULL)
@@ -1273,81 +1318,77 @@ op_begemot_stp(struct snmp_context *ctx, struct snmp_value *val,
case SNMP_OP_COMMIT:
return (SNMP_ERR_NOERROR);
-
- default:
- abort();
}
+ abort();
- ret = SNMP_ERR_NOERROR;
-
+get:
switch (val->var.subs[sub - 1]) {
case LEAF_begemotBridgeStpProtocolSpecification:
val->v.integer = bif->prot_spec;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpPriority:
val->v.integer = bif->priority;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpTimeSinceTopologyChange:
if (bridge_get_time_since_tc(bif, &(val->v.uint32)) < 0)
return (SNMP_ERR_GENERR);
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpTopChanges:
val->v.uint32 = bif->top_changes;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpDesignatedRoot:
- ret = string_get(val, bif->design_root, SNMP_BRIDGE_ID_LEN);
- break;
+ return (string_get(val, bif->design_root, SNMP_BRIDGE_ID_LEN));
case LEAF_begemotBridgeStpRootCost:
val->v.integer = bif->root_cost;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpRootPort:
val->v.integer = bif->root_port;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpMaxAge:
val->v.integer = bif->max_age;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpHelloTime:
val->v.integer = bif->hello_time;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpHoldTime:
val->v.integer = bif->hold_time;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpForwardDelay:
val->v.integer = bif->fwd_delay;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpBridgeMaxAge:
val->v.integer = bif->bridge_max_age;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpBridgeHelloTime:
val->v.integer = bif->bridge_hello_time;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpBridgeForwardDelay:
val->v.integer = bif->bridge_fwd_delay;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpVersion:
val->v.integer = bif->stp_version;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeStpTxHoldCount:
val->v.integer = bif->tx_hold_count;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (ret);
+ abort();
}
int
@@ -1363,13 +1404,13 @@ op_begemot_tp(struct snmp_context *ctx, struct snmp_value *val,
case SNMP_OP_GET:
if ((bif = bridge_if_index_get(&val->var, sub)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_GETNEXT:
if ((bif = bridge_if_index_getnext(&val->var, sub)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
bridge_if_index_append(&val->var, sub, bif);
- break;
+ goto get;
case SNMP_OP_SET:
if ((bif = bridge_if_index_get(&val->var, sub)) == NULL)
@@ -1377,6 +1418,10 @@ op_begemot_tp(struct snmp_context *ctx, struct snmp_value *val,
switch (val->var.subs[sub - 1]) {
case LEAF_begemotBridgeTpAgingTime:
+ if (val->v.integer < SNMP_BRIDGE_MIN_AGE_TIME ||
+ val->v.integer > SNMP_BRIDGE_MAX_AGE_TIME)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bif->age_time;
if (bridge_set_aging_time(bif, val->v.integer) < 0)
return (SNMP_ERR_GENERR);
@@ -1410,24 +1455,23 @@ op_begemot_tp(struct snmp_context *ctx, struct snmp_value *val,
case SNMP_OP_COMMIT:
return (SNMP_ERR_NOERROR);
-
- default:
- abort();
}
+ abort();
+get:
switch (val->var.subs[sub - 1]) {
case LEAF_begemotBridgeTpLearnedEntryDiscards:
val->v.uint32 = bif->lrnt_drops;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeTpAgingTime:
val->v.integer = bif->age_time;
- break;
+ return (SNMP_ERR_NOERROR);
case LEAF_begemotBridgeTpMaxAddresses:
val->v.integer = bif->max_addrs;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (SNMP_ERR_NOERROR);
+ abort();
}
diff --git a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_pf.c b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_pf.c
index f6e17fd..0ad8cbf 100644
--- a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_pf.c
+++ b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_pf.c
@@ -95,23 +95,22 @@ op_begemot_bridge_pf(struct snmp_context *ctx, struct snmp_value *val,
if ((k_val = snmp_truth2val(val->v.integer)) < 0)
return (SNMP_ERR_BADVALUE);
+ return (SNMP_ERR_NOERROR);
case SNMP_OP_GET:
- break;
- }
-
- switch (val->var.subs[sub - 1]) {
- case LEAF_begemotBridgePfilStatus:
- case LEAF_begemotBridgePfilMembers:
- case LEAF_begemotBridgePfilIpOnly:
- case LEAF_begemotBridgeLayer2PfStatus:
- if (bridge_do_pfctl(val->var.subs[sub - 1] - 1,
- op, &k_val) < 0)
- return (SNMP_ERR_GENERR);
- val->v.integer = val2snmp_truth(k_val);
- break;
- abort();
+ switch (val->var.subs[sub - 1]) {
+ case LEAF_begemotBridgePfilStatus:
+ case LEAF_begemotBridgePfilMembers:
+ case LEAF_begemotBridgePfilIpOnly:
+ case LEAF_begemotBridgeLayer2PfStatus:
+ if (bridge_do_pfctl(val->var.subs[sub - 1] - 1,
+ op, &k_val) < 0)
+ return (SNMP_ERR_GENERR);
+ val->v.integer = val2snmp_truth(k_val);
+ return (SNMP_ERR_NOERROR);
+ }
+ abort();
}
- return (SNMP_ERR_NOERROR);
+ abort();
}
diff --git a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_port.c b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_port.c
index 9600a1e..62f8731 100644
--- a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_port.c
+++ b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_port.c
@@ -360,7 +360,7 @@ op_dot1d_base_port(struct snmp_context *c __unused, struct snmp_value *val,
if ((bp = bridge_port_find(val->var.subs[sub],
bif)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_GETNEXT:
if (val->var.len - sub == 0) {
@@ -374,43 +374,47 @@ op_dot1d_base_port(struct snmp_context *c __unused, struct snmp_value *val,
}
val->var.len = sub + 1;
val->var.subs[sub] = bp->port_no;
- break;
+ goto get;
case SNMP_OP_SET:
return (SNMP_ERR_NOT_WRITEABLE);
case SNMP_OP_ROLLBACK:
case SNMP_OP_COMMIT:
- default:
- abort();
+ break;
}
+ abort();
+get:
switch (val->var.subs[sub - 1]) {
case LEAF_dot1dBasePort:
val->v.integer = bp->port_no;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dBasePortIfIndex:
val->v.integer = bp->if_idx;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dBasePortCircuit:
val->v.oid = bp->circuit;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dBasePortDelayExceededDiscards:
val->v.uint32 = bp->dly_ex_drops;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dBasePortMtuExceededDiscards:
val->v.uint32 = bp->dly_mtu_drops;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (SNMP_ERR_NOERROR);
+ abort();
}
int
op_dot1d_stp_port(struct snmp_context *ctx, struct snmp_value *val,
uint sub, uint iidx __unused, enum snmp_op op)
{
- int ret;
struct bridge_if *bif;
struct bridge_port *bp;
@@ -428,7 +432,7 @@ op_dot1d_stp_port(struct snmp_context *ctx, struct snmp_value *val,
if ((bp = bridge_port_find(val->var.subs[sub],
bif)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_GETNEXT:
if (val->var.len - sub == 0) {
@@ -442,7 +446,7 @@ op_dot1d_stp_port(struct snmp_context *ctx, struct snmp_value *val,
}
val->var.len = sub + 1;
val->var.subs[sub] = bp->port_no;
- break;
+ goto get;
case SNMP_OP_SET:
if (val->var.len - sub != 1)
@@ -453,20 +457,37 @@ op_dot1d_stp_port(struct snmp_context *ctx, struct snmp_value *val,
switch (val->var.subs[sub - 1]) {
case LEAF_dot1dStpPortPriority:
+ if (val->v.integer < 0 || val->v.integer > 255)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bp->priority;
- ret = bridge_port_set_priority(bif->bif_name, bp,
- val->v.integer);
- break;
+ if (bridge_port_set_priority(bif->bif_name, bp,
+ val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortEnable:
+ if (val->v.integer != dot1dStpPortEnable_enabled &&
+ val->v.integer != dot1dStpPortEnable_disabled)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bp->enable;
- ret = bridge_port_set_stp_enable(bif->bif_name,
- bp, val->v.integer);
- break;
+ if (bridge_port_set_stp_enable(bif->bif_name,
+ bp, val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortPathCost:
+ if (val->v.integer < SNMP_PORT_MIN_PATHCOST ||
+ val->v.integer > SNMP_PORT_MAX_PATHCOST)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bp->path_cost;
- ret = bridge_port_set_path_cost(bif->bif_name, bp,
- val->v.integer);
- break;
+ if (bridge_port_set_path_cost(bif->bif_name, bp,
+ val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPort:
case LEAF_dot1dStpPortState:
case LEAF_dot1dStpPortDesignatedRoot:
@@ -475,14 +496,8 @@ op_dot1d_stp_port(struct snmp_context *ctx, struct snmp_value *val,
case LEAF_dot1dStpPortDesignatedPort:
case LEAF_dot1dStpPortForwardTransitions:
return (SNMP_ERR_NOT_WRITEABLE);
- default:
- return (SNMP_ERR_NOSUCHNAME);
}
- if (ret == 0)
- return (SNMP_ERR_NOERROR);
- else if (ret == -2)
- return (SNMP_ERR_WRONG_VALUE);
- return (SNMP_ERR_GENERR);
+ abort();
case SNMP_OP_ROLLBACK:
if ((bp = bridge_port_find(val->var.subs[sub],
@@ -506,55 +521,58 @@ op_dot1d_stp_port(struct snmp_context *ctx, struct snmp_value *val,
case SNMP_OP_COMMIT:
return (SNMP_ERR_NOERROR);
-
- default:
- abort();
}
+ abort();
- ret = SNMP_ERR_NOERROR;
+get:
switch (val->var.subs[sub - 1]) {
case LEAF_dot1dStpPort:
val->v.integer = bp->port_no;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortPriority:
val->v.integer = bp->priority;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortState:
val->v.integer = bp->state;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortEnable:
val->v.integer = bp->enable;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortPathCost:
val->v.integer = bp->path_cost;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortDesignatedRoot:
- ret = string_get(val, bp->design_root,
- SNMP_BRIDGE_ID_LEN);
- break;
+ return (string_get(val, bp->design_root,
+ SNMP_BRIDGE_ID_LEN));
+
case LEAF_dot1dStpPortDesignatedCost:
val->v.integer = bp->design_cost;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortDesignatedBridge:
- ret = string_get(val, bp->design_bridge,
- SNMP_BRIDGE_ID_LEN);
- break;
+ return (string_get(val, bp->design_bridge,
+ SNMP_BRIDGE_ID_LEN));
+
case LEAF_dot1dStpPortDesignatedPort:
- ret = string_get(val, bp->design_port, 2);
- break;
+ return (string_get(val, bp->design_port, 2));
+
case LEAF_dot1dStpPortForwardTransitions:
val->v.uint32 = bp->fwd_trans;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (ret);
+ abort();
}
int
op_dot1d_stp_ext_port(struct snmp_context *ctx, struct snmp_value *val,
uint sub, uint iidx __unused, enum snmp_op op)
{
- int ret;
struct bridge_if *bif;
struct bridge_port *bp;
@@ -572,7 +590,7 @@ op_dot1d_stp_ext_port(struct snmp_context *ctx, struct snmp_value *val,
if ((bp = bridge_port_find(val->var.subs[sub],
bif)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_GETNEXT:
if (val->var.len - sub == 0) {
@@ -586,7 +604,7 @@ op_dot1d_stp_ext_port(struct snmp_context *ctx, struct snmp_value *val,
}
val->var.len = sub + 1;
val->var.subs[sub] = bp->port_no;
- break;
+ goto get;
case SNMP_OP_SET:
if (val->var.len - sub != 1)
@@ -597,33 +615,44 @@ op_dot1d_stp_ext_port(struct snmp_context *ctx, struct snmp_value *val,
switch (val->var.subs[sub - 1]) {
case LEAF_dot1dStpPortAdminEdgePort:
+ if (val->v.integer != TruthValue_true &&
+ val->v.integer != TruthValue_false)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bp->admin_edge;
- ret = bridge_port_set_admin_edge(bif->bif_name, bp,
- val->v.integer);
- break;
+ if (bridge_port_set_admin_edge(bif->bif_name, bp,
+ val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortAdminPointToPoint:
+ if (val->v.integer < 0 || val->v.integer >
+ StpPortAdminPointToPointType_auto)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bp->admin_p2p;
- ret = bridge_port_set_admin_p2p(bif->bif_name, bp,
- val->v.integer);
- break;
+ if (bridge_port_set_admin_p2p(bif->bif_name, bp,
+ val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortAdminPathCost:
+ if (val->v.integer < SNMP_PORT_MIN_PATHCOST ||
+ val->v.integer > SNMP_PORT_MAX_PATHCOST)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bp->admin_path_cost;
- ret = bridge_port_set_path_cost(bif->bif_name, bp,
- val->v.integer);
- break;
+ if (bridge_port_set_path_cost(bif->bif_name, bp,
+ val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortProtocolMigration:
case LEAF_dot1dStpPortOperEdgePort:
case LEAF_dot1dStpPortOperPointToPoint:
return (SNMP_ERR_NOT_WRITEABLE);
- default:
- return (SNMP_ERR_NOSUCHNAME);
}
-
- if (ret == 0)
- return (SNMP_ERR_NOERROR);
- else if (ret == -2)
- return (SNMP_ERR_WRONG_VALUE);
- return (SNMP_ERR_GENERR);
+ abort();
case SNMP_OP_ROLLBACK:
if ((bp = bridge_port_find(val->var.subs[sub],
@@ -648,33 +677,37 @@ op_dot1d_stp_ext_port(struct snmp_context *ctx, struct snmp_value *val,
case SNMP_OP_COMMIT:
return (SNMP_ERR_NOERROR);
-
- default:
- abort();
}
+ abort();
+get:
switch (val->var.subs[sub - 1]) {
case LEAF_dot1dStpPortProtocolMigration:
val->v.integer = bp->proto_migr;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortAdminEdgePort:
val->v.integer = bp->admin_edge;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortOperEdgePort:
val->v.integer = bp->oper_edge;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortAdminPointToPoint:
val->v.integer = bp->admin_p2p;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortOperPointToPoint:
val->v.integer = bp->oper_p2p;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dStpPortAdminPathCost:
val->v.integer = bp->admin_path_cost;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (SNMP_ERR_NOERROR);
+ abort();
}
int
@@ -698,7 +731,7 @@ op_dot1d_tp_port(struct snmp_context *c __unused, struct snmp_value *val,
if ((bp = bridge_port_find(val->var.subs[sub],
bif)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_GETNEXT:
if (val->var.len - sub == 0) {
@@ -712,36 +745,41 @@ op_dot1d_tp_port(struct snmp_context *c __unused, struct snmp_value *val,
}
val->var.len = sub + 1;
val->var.subs[sub] = bp->port_no;
- break;
+ goto get;
case SNMP_OP_SET:
return (SNMP_ERR_NOT_WRITEABLE);
case SNMP_OP_ROLLBACK:
case SNMP_OP_COMMIT:
- default:
- abort();
+ break;
}
+ abort();
+get:
switch (val->var.subs[sub - 1]) {
case LEAF_dot1dTpPort:
val->v.integer = bp->port_no;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dTpPortMaxInfo:
val->v.integer = bp->max_info;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dTpPortInFrames:
val->v.uint32 = bp->in_frames;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dTpPortOutFrames:
val->v.uint32 = bp->out_frames;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_dot1dTpPortInDiscards:
val->v.uint32 = bp->in_drops;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (SNMP_ERR_NOERROR);
+ abort();
}
/*
@@ -1036,7 +1074,7 @@ op_begemot_base_port(struct snmp_context *ctx, struct snmp_value *val,
uint sub, uint iidx __unused, enum snmp_op op)
{
int8_t status, which;
- struct bridge_port *bp = NULL;
+ struct bridge_port *bp;
if (time(NULL) - ports_list_age > bridge_get_data_maxage())
bridge_update_all_ports();
@@ -1052,7 +1090,7 @@ op_begemot_base_port(struct snmp_context *ctx, struct snmp_value *val,
if ((bp = bridge_port_index_get(&val->var, sub,
status)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_GETNEXT:
if (which == LEAF_begemotBridgeBaseSpanEnabled ||
@@ -1062,7 +1100,7 @@ op_begemot_base_port(struct snmp_context *ctx, struct snmp_value *val,
status)) == NULL ||
bridge_port_index_append(&val->var, sub, bp) < 0)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_SET:
switch (which) {
@@ -1095,36 +1133,42 @@ op_begemot_base_port(struct snmp_context *ctx, struct snmp_value *val,
return (SNMP_ERR_NOERROR);
}
+ abort();
+get:
switch (which) {
case LEAF_begemotBridgeBasePort:
val->v.integer = bp->port_no;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeBasePortIfIndex:
val->v.integer = bp->if_idx;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeBaseSpanEnabled:
val->v.integer = bp->span_enable;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeBasePortDelayExceededDiscards:
val->v.uint32 = bp->dly_ex_drops;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeBasePortMtuExceededDiscards:
val->v.uint32 = bp->dly_mtu_drops;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeBasePortStatus:
val->v.integer = bp->status;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (SNMP_ERR_NOERROR);
+ abort();
}
int
op_begemot_stp_port(struct snmp_context *ctx, struct snmp_value *val,
uint sub, uint iidx __unused, enum snmp_op op)
{
- int ret;
struct bridge_port *bp;
const char *b_name;
@@ -1135,13 +1179,13 @@ op_begemot_stp_port(struct snmp_context *ctx, struct snmp_value *val,
case SNMP_OP_GET:
if ((bp = bridge_port_index_get(&val->var, sub, 0)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_GETNEXT:
if ((bp = bridge_port_index_getnext(&val->var, sub, 0)) ==
NULL || bridge_port_index_append(&val->var, sub, bp) < 0)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_SET:
if ((bp = bridge_port_index_get(&val->var, sub, 0)) == NULL)
@@ -1149,23 +1193,41 @@ op_begemot_stp_port(struct snmp_context *ctx, struct snmp_value *val,
if ((b_name = bridge_if_find_name(bp->sysindex)) == NULL)
return (SNMP_ERR_GENERR);
- ret = SNMP_ERR_NOERROR;
switch (val->var.subs[sub - 1]) {
case LEAF_begemotBridgeStpPortPriority:
+ if (val->v.integer < 0 || val->v.integer > 255)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bp->priority;
- ret = bridge_port_set_priority(b_name, bp,
- val->v.integer);
- break;
+ if (bridge_port_set_priority(b_name, bp,
+ val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortEnable:
+ if (val->v.integer !=
+ begemotBridgeStpPortEnable_enabled ||
+ val->v.integer !=
+ begemotBridgeStpPortEnable_disabled)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bp->enable;
- ret = bridge_port_set_stp_enable(b_name, bp,
- val->v.integer);
- break;
+ if (bridge_port_set_stp_enable(b_name, bp,
+ val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortPathCost:
+ if (val->v.integer < SNMP_PORT_MIN_PATHCOST ||
+ val->v.integer > SNMP_PORT_MAX_PATHCOST)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bp->path_cost;
- ret = bridge_port_set_path_cost(b_name, bp,
- val->v.integer);
- break;
+ if (bridge_port_set_path_cost(b_name, bp,
+ val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPort:
case LEAF_begemotBridgeStpPortState:
case LEAF_begemotBridgeStpPortDesignatedRoot:
@@ -1175,11 +1237,7 @@ op_begemot_stp_port(struct snmp_context *ctx, struct snmp_value *val,
case LEAF_begemotBridgeStpPortForwardTransitions:
return (SNMP_ERR_NOT_WRITEABLE);
}
- if (ret == 0)
- return (SNMP_ERR_NOERROR);
- else if (ret == -2)
- return (SNMP_ERR_WRONG_VALUE);
- return (SNMP_ERR_GENERR);
+ abort();
case SNMP_OP_ROLLBACK:
if ((bp = bridge_port_index_get(&val->var, sub, 0)) == NULL ||
@@ -1204,53 +1262,56 @@ op_begemot_stp_port(struct snmp_context *ctx, struct snmp_value *val,
case SNMP_OP_COMMIT:
return (SNMP_ERR_NOERROR);
-
- default:
- abort();
}
+ abort();
- ret = SNMP_ERR_NOERROR;
+get:
switch (val->var.subs[sub - 1]) {
case LEAF_begemotBridgeStpPort:
val->v.integer = bp->port_no;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortPriority:
val->v.integer = bp->priority;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortState:
val->v.integer = bp->state;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortEnable:
val->v.integer = bp->enable;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortPathCost:
val->v.integer = bp->path_cost;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortDesignatedRoot:
- ret = string_get(val, bp->design_root, SNMP_BRIDGE_ID_LEN);
- break;
+ return (string_get(val, bp->design_root, SNMP_BRIDGE_ID_LEN));
+
case LEAF_begemotBridgeStpPortDesignatedCost:
val->v.integer = bp->design_cost;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortDesignatedBridge:
- ret = string_get(val, bp->design_bridge, SNMP_BRIDGE_ID_LEN);
- break;
+ return (string_get(val, bp->design_bridge, SNMP_BRIDGE_ID_LEN));
+
case LEAF_begemotBridgeStpPortDesignatedPort:
- ret = string_get(val, bp->design_port, 2);
- break;
+ return (string_get(val, bp->design_port, 2));
+
case LEAF_begemotBridgeStpPortForwardTransitions:
val->v.uint32 = bp->fwd_trans;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (ret);
+ abort();
}
int
op_begemot_stp_ext_port(struct snmp_context *ctx, struct snmp_value *val,
uint sub, uint iidx __unused, enum snmp_op op)
{
- int ret;
struct bridge_port *bp;
const char *b_name;
@@ -1261,13 +1322,13 @@ op_begemot_stp_ext_port(struct snmp_context *ctx, struct snmp_value *val,
case SNMP_OP_GET:
if ((bp = bridge_port_index_get(&val->var, sub, 0)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_GETNEXT:
if ((bp = bridge_port_index_getnext(&val->var, sub, 0)) ==
NULL || bridge_port_index_append(&val->var, sub, bp) < 0)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_SET:
if ((bp = bridge_port_index_get(&val->var, sub, 0)) == NULL)
@@ -1277,33 +1338,44 @@ op_begemot_stp_ext_port(struct snmp_context *ctx, struct snmp_value *val,
switch (val->var.subs[sub - 1]) {
case LEAF_begemotBridgeStpPortAdminEdgePort:
+ if (val->v.integer != TruthValue_true &&
+ val->v.integer != TruthValue_false)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bp->admin_edge;
- ret = bridge_port_set_admin_edge(b_name, bp,
- val->v.integer);
- break;
+ if (bridge_port_set_admin_edge(b_name, bp,
+ val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortAdminPointToPoint:
+ if (val->v.integer < 0 || val->v.integer >
+ StpPortAdminPointToPointType_auto)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bp->admin_p2p;
- ret = bridge_port_set_admin_p2p(b_name, bp,
- val->v.integer);
- break;
+ if (bridge_port_set_admin_p2p(b_name, bp,
+ val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortAdminPathCost:
+ if (val->v.integer < SNMP_PORT_MIN_PATHCOST ||
+ val->v.integer > SNMP_PORT_MAX_PATHCOST)
+ return (SNMP_ERR_WRONG_VALUE);
+
ctx->scratch->int1 = bp->admin_path_cost;
- ret = bridge_port_set_path_cost(b_name, bp,
- val->v.integer);
- break;
+ if (bridge_port_set_path_cost(b_name, bp,
+ val->v.integer) < 0)
+ return (SNMP_ERR_GENERR);
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortProtocolMigration:
case LEAF_begemotBridgeStpPortOperEdgePort:
case LEAF_begemotBridgeStpPortOperPointToPoint:
return (SNMP_ERR_NOT_WRITEABLE);
- default:
- return (SNMP_ERR_NOSUCHNAME);
}
-
- if (ret == 0)
- return (SNMP_ERR_NOERROR);
- else if (ret == -2)
- return (SNMP_ERR_WRONG_VALUE);
- return (SNMP_ERR_GENERR);
+ abort();
case SNMP_OP_ROLLBACK:
if ((bp = bridge_port_index_get(&val->var, sub, 0)) == NULL ||
@@ -1328,33 +1400,37 @@ op_begemot_stp_ext_port(struct snmp_context *ctx, struct snmp_value *val,
case SNMP_OP_COMMIT:
return (SNMP_ERR_NOERROR);
-
- default:
- abort();
}
+ abort();
+get:
switch (val->var.subs[sub - 1]) {
case LEAF_begemotBridgeStpPortProtocolMigration:
val->v.integer = bp->proto_migr;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortAdminEdgePort:
val->v.integer = bp->admin_edge;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortOperEdgePort:
val->v.integer = bp->oper_edge;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortAdminPointToPoint:
val->v.integer = bp->admin_p2p;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortOperPointToPoint:
val->v.integer = bp->oper_p2p;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeStpPortAdminPathCost:
val->v.integer = bp->admin_path_cost;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (SNMP_ERR_NOERROR);
+ abort();
}
int
@@ -1370,40 +1446,45 @@ op_begemot_tp_port(struct snmp_context *c __unused, struct snmp_value *val,
case SNMP_OP_GET:
if ((bp = bridge_port_index_get(&val->var, sub, 0)) == NULL)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_GETNEXT:
if ((bp = bridge_port_index_getnext(&val->var, sub, 0)) ==
NULL || bridge_port_index_append(&val->var, sub, bp) < 0)
return (SNMP_ERR_NOSUCHNAME);
- break;
+ goto get;
case SNMP_OP_SET:
return (SNMP_ERR_NOT_WRITEABLE);
case SNMP_OP_ROLLBACK:
case SNMP_OP_COMMIT:
- default:
- abort();
+ break;
}
+ abort();
+get:
switch (val->var.subs[sub - 1]) {
case LEAF_begemotBridgeTpPort:
val->v.integer = bp->port_no;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeTpPortMaxInfo:
val->v.integer = bp->max_info;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeTpPortInFrames:
val->v.uint32 = bp->in_frames;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeTpPortOutFrames:
val->v.uint32 = bp->out_frames;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeTpPortInDiscards:
val->v.uint32 = bp->in_drops;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (SNMP_ERR_NOERROR);
+ abort();
}
diff --git a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_snmp.c b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_snmp.c
index 6a13bca..81acc4d 100644
--- a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_snmp.c
+++ b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_snmp.c
@@ -168,16 +168,17 @@ op_begemot_bridge_config(struct snmp_context *ctx, struct snmp_value *val,
case SNMP_OP_GET:
switch (val->var.subs[sub - 1]) {
case LEAF_begemotBridgeDefaultBridgeIf:
- string_get(val, bridge_get_default_name(), -1);
- break;
+ return (string_get(val, bridge_get_default_name(), -1));
+
case LEAF_begemotBridgeDataUpdate:
val->v.integer = bridge_data_maxage;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeDataPoll:
val->v.integer = bridge_poll_ticks / 100;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (SNMP_ERR_NOERROR);
+ abort();
case SNMP_OP_GETNEXT:
abort();
@@ -197,22 +198,24 @@ op_begemot_bridge_config(struct snmp_context *ctx, struct snmp_value *val,
if (bridge_set_default_name(val->v.octetstring.octets,
val->v.octetstring.len) < 0)
return (SNMP_ERR_BADVALUE);
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeDataUpdate:
if (val->v.integer < SNMP_BRIDGE_DATA_MAXAGE_MIN ||
val->v.integer > SNMP_BRIDGE_DATA_MAXAGE_MAX)
return (SNMP_ERR_WRONG_VALUE);
ctx->scratch->int1 = bridge_data_maxage;
bridge_data_maxage = val->v.integer;
- break;
+ return (SNMP_ERR_NOERROR);
+
case LEAF_begemotBridgeDataPoll:
if (val->v.integer < SNMP_BRIDGE_POLL_INTERVAL_MIN ||
val->v.integer > SNMP_BRIDGE_POLL_INTERVAL_MAX)
return (SNMP_ERR_WRONG_VALUE);
ctx->scratch->int1 = val->v.integer;
- break;
+ return (SNMP_ERR_NOERROR);
}
- return (SNMP_ERR_NOERROR);
+ abort();
case SNMP_OP_ROLLBACK:
switch (val->var.subs[sub - 1]) {
@@ -239,7 +242,7 @@ op_begemot_bridge_config(struct snmp_context *ctx, struct snmp_value *val,
return (SNMP_ERR_NOERROR);
}
- return (SNMP_ERR_NOERROR);
+ abort();
}
/*
diff --git a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c
index 585a4e2..30924b5 100644
--- a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c
+++ b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c
@@ -285,10 +285,6 @@ bridge_set_priority(struct bridge_if *bif, int32_t priority)
struct ifdrv ifd;
struct ifbrparam b_param;
- /* Sanity check. */
- if (priority > SNMP_BRIDGE_MAX_PRIORITY || priority % 4096 != 0)
- return (-1);
-
strlcpy(ifd.ifd_name, bif->bif_name, IFNAMSIZ);
ifd.ifd_len = sizeof(b_param);
ifd.ifd_data = &b_param;
@@ -332,10 +328,6 @@ bridge_set_maxage(struct bridge_if *bif, int32_t max_age)
struct ifdrv ifd;
struct ifbrparam b_param;
- if (max_age < SNMP_BRIDGE_MIN_MAGE ||
- max_age > SNMP_BRIDGE_MAX_MAGE)
- return (-2);
-
strlcpy(ifd.ifd_name, bif->bif_name, IFNAMSIZ);
ifd.ifd_len = sizeof(b_param);
ifd.ifd_data = &b_param;
@@ -358,10 +350,6 @@ bridge_set_hello_time(struct bridge_if *bif, int32_t hello_time)
struct ifdrv ifd;
struct ifbrparam b_param;
- if (hello_time < SNMP_BRIDGE_MIN_HTIME ||
- hello_time > SNMP_BRIDGE_MAX_HTIME)
- return (-2);
-
strlcpy(ifd.ifd_name, bif->bif_name, IFNAMSIZ);
ifd.ifd_len = sizeof(b_param);
ifd.ifd_data = &b_param;
@@ -384,10 +372,6 @@ bridge_set_forward_delay(struct bridge_if *bif, int32_t fwd_delay)
struct ifdrv ifd;
struct ifbrparam b_param;
- if (fwd_delay < SNMP_BRIDGE_MIN_FDELAY ||
- fwd_delay > SNMP_BRIDGE_MAX_FDELAY)
- return (-2);
-
strlcpy(ifd.ifd_name, bif->bif_name, IFNAMSIZ);
ifd.ifd_len = sizeof(b_param);
ifd.ifd_data = &b_param;
@@ -410,11 +394,6 @@ bridge_set_aging_time(struct bridge_if *bif, int32_t age_time)
struct ifdrv ifd;
struct ifbrparam b_param;
- /* Sanity check. */
- if (age_time < SNMP_BRIDGE_MIN_AGE_TIME ||
- age_time > SNMP_BRIDGE_MAX_AGE_TIME)
- return (-1);
-
strlcpy(ifd.ifd_name, bif->bif_name, IFNAMSIZ);
ifd.ifd_len = sizeof(b_param);
ifd.ifd_data = &b_param;
@@ -491,10 +470,6 @@ bridge_set_stp_version(struct bridge_if *bif __unused,
struct ifdrv ifd;
struct ifbrparam b_param;
- if (stp_proto != dot1dStpVersion_stpCompatible &&
- stp_proto != dot1dStpVersion_rstp)
- return (-2);
-
strlcpy(ifd.ifd_name, bif->bif_name, IFNAMSIZ);
ifd.ifd_len = sizeof(b_param);
ifd.ifd_data = &b_param;
@@ -777,9 +752,6 @@ bridge_port_set_priority(const char *bif_name, struct bridge_port *bp,
struct ifdrv ifd;
struct ifbreq b_req;
- if (priority < 0 || priority > 255)
- return (-2);
-
strlcpy(ifd.ifd_name, bif_name, sizeof(ifd.ifd_name));
ifd.ifd_len = sizeof(b_req);
ifd.ifd_data = &b_req;
@@ -811,10 +783,6 @@ bridge_port_set_stp_enable(const char *bif_name, struct bridge_port *bp,
if (bp->enable == enable)
return (0);
- if (enable != dot1dStpPortEnable_enabled &&
- enable != dot1dStpPortEnable_disabled)
- return (-2);
-
bzero(&b_req, sizeof(b_req));
strlcpy(ifd.ifd_name, bif_name, sizeof(ifd.ifd_name));
ifd.ifd_len = sizeof(b_req);
@@ -854,11 +822,7 @@ bridge_port_set_path_cost(const char *bif_name, struct bridge_port *bp,
struct ifdrv ifd;
struct ifbreq b_req;
-#if __FreeBSD_version > 700024
- if (path_cost < SNMP_PORT_MIN_PATHCOST ||
- path_cost > SNMP_PORT_MAX_PATHCOST)
- return (-2);
-#else
+#if __FreeBSD_version < 700025
if (path_cost < SNMP_PORT_MIN_PATHCOST ||
path_cost > SNMP_PORT_PATHCOST_OBSOLETE)
return (-2);
@@ -901,9 +865,6 @@ bridge_port_set_admin_p2p(const char *bif_name __unused,
if (bp->admin_p2p == admin_p2p)
return (0);
- if (admin_p2p > StpPortAdminPointToPointType_auto)
- return (-2);
-
bzero(&b_req, sizeof(b_req));
strlcpy(ifd.ifd_name, bif_name, sizeof(ifd.ifd_name));
ifd.ifd_len = sizeof(b_req);
@@ -959,9 +920,6 @@ bridge_port_set_admin_edge(const char *bif_name __unused,
if (bp->admin_edge == enable)
return (0);
- if (enable != TruthValue_true && enable != TruthValue_false)
- return (-2);
-
bzero(&b_req, sizeof(b_req));
strlcpy(ifd.ifd_name, bif_name, sizeof(ifd.ifd_name));
ifd.ifd_len = sizeof(b_req);
OpenPOWER on IntegriCloud