summaryrefslogtreecommitdiffstats
path: root/usr.sbin/bsnmpd
diff options
context:
space:
mode:
authorsyrinx <syrinx@FreeBSD.org>2007-08-08 19:27:50 +0000
committersyrinx <syrinx@FreeBSD.org>2007-08-08 19:27:50 +0000
commitfea5330c6b926d1cfc717df2e0b005185c4f423b (patch)
treea1b0a50d1af757d9f6e886e4198dcdfaf3444a7f /usr.sbin/bsnmpd
parentbcc9fe49c4d9a3a059edb4a8d1bd017abb27db7e (diff)
downloadFreeBSD-src-fea5330c6b926d1cfc717df2e0b005185c4f423b.zip
FreeBSD-src-fea5330c6b926d1cfc717df2e0b005185c4f423b.tar.gz
Keep the snmp_bridge(3) module up to date with if_bridge(4) and add an
object to control the value of the new 'PRIVATE' bridge members' flag. While here, remove stale '__unused' compiler directives. Reviewed by: bz Approved by: re (bmah), bz (mentor)
Diffstat (limited to 'usr.sbin/bsnmpd')
-rw-r--r--usr.sbin/bsnmpd/modules/snmp_bridge/BEGEMOT-BRIDGE-MIB.txt20
-rw-r--r--usr.sbin/bsnmpd/modules/snmp_bridge/bridge_port.c23
-rw-r--r--usr.sbin/bsnmpd/modules/snmp_bridge/bridge_snmp.h5
-rw-r--r--usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c65
-rw-r--r--usr.sbin/bsnmpd/modules/snmp_bridge/bridge_tree.def1
-rw-r--r--usr.sbin/bsnmpd/modules/snmp_bridge/snmp_bridge.35
6 files changed, 108 insertions, 11 deletions
diff --git a/usr.sbin/bsnmpd/modules/snmp_bridge/BEGEMOT-BRIDGE-MIB.txt b/usr.sbin/bsnmpd/modules/snmp_bridge/BEGEMOT-BRIDGE-MIB.txt
index 4de407c..d55ea3c 100644
--- a/usr.sbin/bsnmpd/modules/snmp_bridge/BEGEMOT-BRIDGE-MIB.txt
+++ b/usr.sbin/bsnmpd/modules/snmp_bridge/BEGEMOT-BRIDGE-MIB.txt
@@ -41,7 +41,7 @@ IMPORTS
FROM BEGEMOT-MIB;
begemotBridge MODULE-IDENTITY
- LAST-UPDATED "200611210000Z"
+ LAST-UPDATED "200708060000Z"
ORGANIZATION "Sofia University St. Kliment Ohridski"
CONTACT-INFO
" Shteryana Shopova
@@ -56,6 +56,10 @@ begemotBridge MODULE-IDENTITY
E-Mail: syrinx@FreeBSD.org"
DESCRIPTION
"The Begemot MIB for managing bridge interfaces."
+ REVISION "200708060000Z"
+ DESCRIPTION
+ "Third revision adds begemotBridgeBasePortPrivate
+ object."
REVISION "200611210000Z"
DESCRIPTION
"Second revision adds support for monitoring RSTP
@@ -211,7 +215,8 @@ BegemotBridgeBasePortEntry ::= SEQUENCE {
begemotBridgeBaseSpanEnabled INTEGER,
begemotBridgeBasePortDelayExceededDiscards Counter32,
begemotBridgeBasePortMtuExceededDiscards Counter32,
- begemotBridgeBasePortStatus RowStatus
+ begemotBridgeBasePortStatus RowStatus,
+ begemotBridgeBasePortPrivate TruthValue
}
begemotBridgeBasePort OBJECT-TYPE
@@ -272,6 +277,17 @@ begemotBridgeBasePortStatus OBJECT-TYPE
removal of member ports from a specified bridge."
::= { begemotBridgeBasePortEntry 6 }
+begemotBridgeBasePortPrivate OBJECT-TYPE
+ SYNTAX TruthValue
+ MAX-ACCESS read-write
+ STATUS current
+ DESCRIPTION
+ "The value of this objects reflects whether the port
+ has a PRIVATE flag set. A port with this flags set
+ can only communicate with ports not having the
+ PRIVATE flag set."
+ ::= { begemotBridgeBasePortEntry 7 }
+
-- ---------------------------------------------------------- --
-- the Bridge interface STP table
-- ---------------------------------------------------------- --
diff --git a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_port.c b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_port.c
index dd07c40..fe2af04 100644
--- a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_port.c
+++ b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_port.c
@@ -1074,6 +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;
+ const char *bname;
struct bridge_port *bp;
if (time(NULL) - ports_list_age > bridge_get_data_maxage())
@@ -1110,6 +1111,16 @@ op_begemot_base_port(struct snmp_context *ctx, struct snmp_value *val,
case LEAF_begemotBridgeBasePortStatus:
return (bridge_port_set_status(ctx, val, sub));
+ case LEAF_begemotBridgeBasePortPrivate:
+ if ((bp = bridge_port_index_get(&val->var, sub,
+ status)) == NULL)
+ return (SNMP_ERR_NOSUCHNAME);
+ if ((bname = bridge_if_find_name(bp->sysindex)) == NULL)
+ return (SNMP_ERR_GENERR);
+ ctx->scratch->int1 = bp->priv_set;
+ return (bridge_port_set_private(bname, bp,
+ val->v.integer));
+
case LEAF_begemotBridgeBasePort:
case LEAF_begemotBridgeBasePortIfIndex:
case LEAF_begemotBridgeBasePortDelayExceededDiscards:
@@ -1124,6 +1135,14 @@ op_begemot_base_port(struct snmp_context *ctx, struct snmp_value *val,
/* FALLTHROUGH */
case LEAF_begemotBridgeBasePortStatus:
return (bridge_port_rollback_status(ctx, val, sub));
+ case LEAF_begemotBridgeBasePortPrivate:
+ if ((bp = bridge_port_index_get(&val->var, sub,
+ status)) == NULL)
+ return (SNMP_ERR_GENERR);
+ if ((bname = bridge_if_find_name(bp->sysindex)) == NULL)
+ return (SNMP_ERR_GENERR);
+ return (bridge_port_set_private(bname, bp,
+ ctx->scratch->int1));
}
return (SNMP_ERR_NOERROR);
@@ -1160,6 +1179,10 @@ get:
case LEAF_begemotBridgeBasePortStatus:
val->v.integer = bp->status;
return (SNMP_ERR_NOERROR);
+
+ case LEAF_begemotBridgeBasePortPrivate:
+ val->v.integer = bp->priv_set;
+ return (SNMP_ERR_NOERROR);
}
abort();
diff --git a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_snmp.h b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_snmp.h
index b6f213b..7f48950 100644
--- a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_snmp.h
+++ b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_snmp.h
@@ -106,6 +106,7 @@ struct bridge_port {
uint32_t dly_ex_drops; /* Drops on output. */
uint32_t dly_mtu_drops; /* MTU exceeded drops. */
int32_t status; /* The entry status. */
+ enum TruthValue priv_set; /* The private flag. */
/* dot1dStp subtree objects. */
int32_t path_cost;
@@ -337,6 +338,10 @@ int bridge_port_set_admin_ptp(const char *bif_name, struct bridge_port *bp,
int bridge_port_set_admin_edge(const char *bif_name, struct bridge_port *bp,
uint32_t enable);
+/* Set 'private' flag. */
+int bridge_port_set_private(const char *bif_name, struct bridge_port *bp,
+ uint32_t priv_set);
+
/* Add a bridge member port. */
int bridge_port_addm(struct bridge_port *bp, const char *b_name);
diff --git a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c
index 76de4cf..9684d68 100644
--- a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c
+++ b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c
@@ -429,8 +429,7 @@ bridge_set_max_cache(struct bridge_if *bif, int32_t max_cache)
}
int
-bridge_set_tx_hold_count(struct bridge_if *bif __unused,
- int32_t tx_hc __unused)
+bridge_set_tx_hold_count(struct bridge_if *bif, int32_t tx_hc)
{
struct ifdrv ifd;
struct ifbrparam b_param;
@@ -455,8 +454,7 @@ bridge_set_tx_hold_count(struct bridge_if *bif __unused,
}
int
-bridge_set_stp_version(struct bridge_if *bif __unused,
- int32_t stp_proto __unused)
+bridge_set_stp_version(struct bridge_if *bif, int32_t stp_proto)
{
struct ifdrv ifd;
struct ifbrparam b_param;
@@ -675,6 +673,11 @@ bridge_port_getinfo_conf(struct ifbreq *k_info, struct bridge_port *bp)
else
bp->span_enable = begemotBridgeBaseSpanEnabled_disabled;
+ if (k_info->ifbr_ifsflags & IFBIF_PRIVATE)
+ bp->priv_set = TruthValue_true;
+ else
+ bp->priv_set = TruthValue_false;
+
if (k_info->ifbr_ifsflags & IFBIF_BSTP_ADMEDGE)
bp->admin_edge = TruthValue_true;
else
@@ -840,8 +843,8 @@ bridge_port_set_path_cost(const char *bif_name, struct bridge_port *bp,
* Set the PonitToPoint status of the link administratively.
*/
int
-bridge_port_set_admin_ptp(const char *bif_name __unused,
- struct bridge_port *bp __unused, uint32_t admin_ptp __unused)
+bridge_port_set_admin_ptp(const char *bif_name, struct bridge_port *bp,
+ uint32_t admin_ptp)
{
struct ifdrv ifd;
struct ifbreq b_req;
@@ -891,8 +894,8 @@ bridge_port_set_admin_ptp(const char *bif_name __unused,
* Set admin edge.
*/
int
-bridge_port_set_admin_edge(const char *bif_name __unused,
- struct bridge_port *bp __unused, uint32_t enable __unused)
+bridge_port_set_admin_edge(const char *bif_name, struct bridge_port *bp,
+ uint32_t enable)
{
struct ifdrv ifd;
struct ifbreq b_req;
@@ -932,6 +935,52 @@ bridge_port_set_admin_edge(const char *bif_name __unused,
}
/*
+ * Set 'private' flag.
+ */
+int
+bridge_port_set_private(const char *bif_name, struct bridge_port *bp,
+ uint32_t priv_set)
+{
+ struct ifdrv ifd;
+ struct ifbreq b_req;
+
+ if (bp->priv_set == priv_set)
+ return (0);
+
+ bzero(&b_req, sizeof(b_req));
+ strlcpy(ifd.ifd_name, bif_name, sizeof(ifd.ifd_name));
+ ifd.ifd_len = sizeof(b_req);
+ ifd.ifd_data = &b_req;
+ strlcpy(b_req.ifbr_ifsname, bp->p_name, sizeof(b_req.ifbr_ifsname));
+ ifd.ifd_cmd = BRDGGIFFLGS;
+
+ if (ioctl(sock, SIOCGDRVSPEC, &ifd) < 0) {
+ syslog(LOG_ERR, "get member %s param: ioctl(BRDGGIFFLGS) "
+ "failed: %s", bp->p_name, strerror(errno));
+ return (-1);
+ }
+
+ if (priv_set == TruthValue_true)
+ b_req.ifbr_ifsflags |= IFBIF_PRIVATE;
+ else if (priv_set == TruthValue_false)
+ b_req.ifbr_ifsflags &= ~IFBIF_PRIVATE;
+ else
+ return (SNMP_ERR_WRONG_VALUE);
+
+ ifd.ifd_cmd = BRDGSIFFLGS;
+ if (ioctl(sock, SIOCSDRVSPEC, &ifd) < 0) {
+ syslog(LOG_ERR, "set member %s param: ioctl(BRDGSIFFLGS) "
+ "failed: %s", bp->p_name, strerror(errno));
+ return (-1);
+ }
+
+ bp->priv_set = priv_set;
+
+ return (0);
+}
+
+
+/*
* Add a bridge member port.
*/
int
diff --git a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_tree.def b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_tree.def
index 5a161af..cbebda0 100644
--- a/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_tree.def
+++ b/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_tree.def
@@ -200,6 +200,7 @@ typedef TpFdbStatus ENUM (
(4 begemotBridgeBasePortDelayExceededDiscards COUNTER GET)
(5 begemotBridgeBasePortMtuExceededDiscards COUNTER GET)
(6 begemotBridgeBasePortStatus RowStatus GET SET)
+ (7 begemotBridgeBasePortPrivate TruthValue GET SET)
))
)
(2 begemotBridgeStp
diff --git a/usr.sbin/bsnmpd/modules/snmp_bridge/snmp_bridge.3 b/usr.sbin/bsnmpd/modules/snmp_bridge/snmp_bridge.3
index c433dfa..24c8969 100644
--- a/usr.sbin/bsnmpd/modules/snmp_bridge/snmp_bridge.3
+++ b/usr.sbin/bsnmpd/modules/snmp_bridge/snmp_bridge.3
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 8, 2006
+.Dd August 6, 2007
.Dt snmp_bridge 3
.Os
.Sh NAME
@@ -83,6 +83,9 @@ has been SET already.
.It Va destroy
will attempt to remove the interface from the system bridge interface.
.El
+.It Va begemotBridgeBasePortPrivate
+This object controls a bridge interface flag called PRIVATE where any private
+port can not communicate with another private port.
.El
.Sh RESTRICTIONS
Not all information in the MIBs is currently available in FreeBSD.
OpenPOWER on IntegriCloud