Index: src/usr.sbin/bsnmpd/modules/snmp_bridge/BEGEMOT-BRIDGE-MIB.txt =================================================================== RCS file: /home/ncvs/src/usr.sbin/bsnmpd/modules/snmp_bridge/BEGEMOT-BRIDGE-MIB.txt,v retrieving revision 1.2 diff -u -r1.2 BEGEMOT-BRIDGE-MIB.txt --- src/usr.sbin/bsnmpd/modules/snmp_bridge/BEGEMOT-BRIDGE-MIB.txt 7 Dec 2006 22:36:17 -0000 1.2 +++ src/usr.sbin/bsnmpd/modules/snmp_bridge/BEGEMOT-BRIDGE-MIB.txt 7 Aug 2007 11:59:48 -0000 @@ -41,7 +41,7 @@ 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 @@ 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 @@ begemotBridgeBaseSpanEnabled INTEGER, begemotBridgeBasePortDelayExceededDiscards Counter32, begemotBridgeBasePortMtuExceededDiscards Counter32, - begemotBridgeBasePortStatus RowStatus + begemotBridgeBasePortStatus RowStatus, + begemotBridgeBasePortPrivate TruthValue } begemotBridgeBasePort OBJECT-TYPE @@ -272,6 +277,17 @@ 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 -- ---------------------------------------------------------- -- Index: src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_port.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_port.c,v retrieving revision 1.5 diff -u -r1.5 bridge_port.c --- src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_port.c 20 Dec 2006 22:02:45 -0000 1.5 +++ src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_port.c 7 Aug 2007 11:59:49 -0000 @@ -1074,6 +1074,7 @@ 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 @@ 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 @@ /* 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 @@ 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(); Index: src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_snmp.h =================================================================== RCS file: /home/ncvs/src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_snmp.h,v retrieving revision 1.4 diff -u -r1.4 bridge_snmp.h --- src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_snmp.h 29 Dec 2006 19:23:38 -0000 1.4 +++ src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_snmp.h 7 Aug 2007 11:59:49 -0000 @@ -106,6 +106,7 @@ 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_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); Index: src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c,v retrieving revision 1.6 diff -u -r1.6 bridge_sys.c --- src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c 4 Feb 2007 13:31:05 -0000 1.6 +++ src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c 7 Aug 2007 11:59:49 -0000 @@ -429,8 +429,7 @@ } 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 @@ } 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 @@ 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 @@ * 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 @@ * 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 @@ } /* + * 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 Index: src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_tree.def =================================================================== RCS file: /home/ncvs/src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_tree.def,v retrieving revision 1.2 diff -u -r1.2 bridge_tree.def --- src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_tree.def 7 Dec 2006 22:36:17 -0000 1.2 +++ src/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_tree.def 7 Aug 2007 11:59:49 -0000 @@ -200,6 +200,7 @@ (4 begemotBridgeBasePortDelayExceededDiscards COUNTER GET) (5 begemotBridgeBasePortMtuExceededDiscards COUNTER GET) (6 begemotBridgeBasePortStatus RowStatus GET SET) + (7 begemotBridgeBasePortPrivate TruthValue GET SET) )) ) (2 begemotBridgeStp Index: src/usr.sbin/bsnmpd/modules/snmp_bridge/snmp_bridge.3 =================================================================== RCS file: /home/ncvs/src/usr.sbin/bsnmpd/modules/snmp_bridge/snmp_bridge.3,v retrieving revision 1.3 diff -u -r1.3 snmp_bridge.3 --- src/usr.sbin/bsnmpd/modules/snmp_bridge/snmp_bridge.3 16 Apr 2007 12:31:34 -0000 1.3 +++ src/usr.sbin/bsnmpd/modules/snmp_bridge/snmp_bridge.3 7 Aug 2007 11:59:49 -0000 @@ -25,7 +25,7 @@ .\" .\" $FreeBSD: src/usr.sbin/bsnmpd/modules/snmp_bridge/snmp_bridge.3,v 1.3 2007/04/16 12:31:34 pjd Exp $ .\" -.Dd December 8, 2006 +.Dd August 6, 2007 .Dt snmp_bridge 3 .Os .Sh NAME @@ -83,6 +83,9 @@ .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.