Commit 0fab728d authored by Michal Wasiak's avatar Michal Wasiak Committed by Adam Wujek

snmp/bridge_mib: update dot1qBase

Signed-off-by: 's avatarMichal Wasiak <michal.wasiak@gmail.com>
parent a70c9d3c
......@@ -17,6 +17,7 @@ CFLAGS += -I$(BRIDGE_MIB_DIR)
BRIDGE_MIB_SRCS += \
dot1dBase.c \
dot1qBase.c \
init_bridge_mib.c
BRIDGE_MIB_SRCS:=$(addprefix $(BRIDGE_MIB_DIR)/,$(BRIDGE_MIB_SRCS))
......@@ -7,6 +7,8 @@
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include "dot1qBase.h"
#include "wrsSnmp.h"
#include "snmp_shmem.h"
/** Initializes the dot1qBase module */
void
......@@ -58,16 +60,16 @@ handle_dot1qVlanVersionNumber(netsnmp_mib_handler *handler,
/* a instance handler also only hands us one request at a time, so
we don't need to loop over a list of requests; we'll only get one. */
int dot1qVlanVersionNumber;
dot1qVlanVersionNumber = DOT1QVLANVERSIONNUMBER;
switch(reqinfo->mode) {
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
/* XXX: a pointer to the scalar's data */,
/* XXX: the length of the data in bytes */);
&dot1qVlanVersionNumber,
sizeof(dot1qVlanVersionNumber));
break;
default:
/* we should never get here, so this is a really bad error */
snmp_log(LOG_ERR, "unknown mode (%d) in handle_dot1qVlanVersionNumber\n", reqinfo->mode );
......@@ -87,16 +89,16 @@ handle_dot1qMaxVlanId(netsnmp_mib_handler *handler,
/* a instance handler also only hands us one request at a time, so
we don't need to loop over a list of requests; we'll only get one. */
int dot1qMaxVlanId;
dot1qMaxVlanId = RTU_VID_MAX;
switch(reqinfo->mode) {
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
/* XXX: a pointer to the scalar's data */,
/* XXX: the length of the data in bytes */);
&dot1qMaxVlanId,
sizeof(dot1qMaxVlanId));
break;
default:
/* we should never get here, so this is a really bad error */
snmp_log(LOG_ERR, "unknown mode (%d) in handle_dot1qMaxVlanId\n", reqinfo->mode );
......@@ -116,13 +118,14 @@ handle_dot1qMaxSupportedVlans(netsnmp_mib_handler *handler,
/* a instance handler also only hands us one request at a time, so
we don't need to loop over a list of requests; we'll only get one. */
int dot1qMaxSupportedVlans;
dot1qMaxSupportedVlans = RTU_VID_MAX;
switch(reqinfo->mode) {
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_UNSIGNED,
/* XXX: a pointer to the scalar's data */,
/* XXX: the length of the data in bytes */);
&dot1qMaxSupportedVlans,
sizeof(dot1qMaxSupportedVlans));
break;
......@@ -145,13 +148,27 @@ handle_dot1qNumVlans(netsnmp_mib_handler *handler,
/* a instance handler also only hands us one request at a time, so
we don't need to loop over a list of requests; we'll only get one. */
int nvlans = 0;
int i;
struct rtu_vlan_table_entry vlan_tab_local[NUM_VLANS];
switch(reqinfo->mode) {
case MODE_GET:
if (0 != shmem_rtu_read_vlans(vlan_tab_local)) {
return SNMP_ERR_GENERR;
}
for (i = 0; i < NUM_VLANS; i++) {
if ((vlan_tab_local[i].drop != 0)
&& (vlan_tab_local[i].port_mask == 0x0))
continue;
nvlans++;
}
snmp_set_var_typed_value(requests->requestvb, ASN_UNSIGNED,
/* XXX: a pointer to the scalar's data */,
/* XXX: the length of the data in bytes */);
&nvlans,
sizeof(nvlans));
break;
......@@ -169,69 +186,19 @@ handle_dot1qGvrpStatus(netsnmp_mib_handler *handler,
netsnmp_agent_request_info *reqinfo,
netsnmp_request_info *requests)
{
int ret;
/* We are never called for a GETNEXT if it's registered as a
"instance", as it's "magically" handled for us. */
/* a instance handler also only hands us one request at a time, so
we don't need to loop over a list of requests; we'll only get one. */
int dot1qGvrpStatus;
dot1qGvrpStatus = DOT1QGVRPSTATUS_DISABLED;
switch(reqinfo->mode) {
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
/* XXX: a pointer to the scalar's data */,
/* XXX: the length of the data in bytes */);
break;
/*
* SET REQUEST
*
* multiple states in the transaction. See:
* http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
*/
case MODE_SET_RESERVE1:
/* or you could use netsnmp_check_vb_type_and_size instead */
ret = netsnmp_check_vb_type(requests->requestvb, ASN_INTEGER);
if ( ret != SNMP_ERR_NOERROR ) {
netsnmp_set_request_error(reqinfo, requests, ret );
}
break;
case MODE_SET_RESERVE2:
/* XXX malloc "undo" storage buffer */
if (/* XXX if malloc, or whatever, failed: */) {
netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_RESOURCEUNAVAILABLE);
}
break;
case MODE_SET_FREE:
/* XXX: free resources allocated in RESERVE1 and/or
RESERVE2. Something failed somewhere, and the states
below won't be called. */
break;
case MODE_SET_ACTION:
/* XXX: perform the value change here */
if (/* XXX: error? */) {
netsnmp_set_request_error(reqinfo, requests, /* some error */);
}
break;
case MODE_SET_COMMIT:
/* XXX: delete temporary storage */
if (/* XXX: error? */) {
/* try _really_really_ hard to never get to this point */
netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_COMMITFAILED);
}
break;
case MODE_SET_UNDO:
/* XXX: UNDO and return to previous value for the object */
if (/* XXX: error? */) {
/* try _really_really_ hard to never get to this point */
netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_UNDOFAILED);
}
&dot1qGvrpStatus,
sizeof(dot1qGvrpStatus));
break;
default:
......
......@@ -5,6 +5,11 @@
#ifndef DOT1QBASE_H
#define DOT1QBASE_H
#define DOT1QVLANVERSIONNUMBER 1
#define DOT1QGVRPSTATUS_ENABLED 1
#define DOT1QGVRPSTATUS_DISABLED 2
/* function declarations */
void init_dot1qBase(void);
Netsnmp_Node_Handler handle_dot1qVlanVersionNumber;
......
......@@ -12,6 +12,7 @@
#include "dot1dBasePortTable/dot1dBasePortTable.h"
#include "dot1dStaticTable/dot1dStaticTable.h"
#include "dot1dTpFdbTable/dot1dTpFdbTable.h"
#include "dot1qBase.h"
#include "dot1qFdbTable/dot1qFdbTable.h"
#include "dot1qTpFdbTable/dot1qTpFdbTable.h"
......@@ -21,6 +22,7 @@ void init_bridge_mib(void)
init_dot1dBasePortTable();
init_dot1dStaticTable();
init_dot1dTpFdbTable();
init_dot1qBase();
init_dot1qFdbTable();
init_dot1qTpFdbTable();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment