📄 vacmmib.java
字号:
/*_############################################################################
_##
_## SNMP4J-Agent - VacmMIB.java
_##
_## Copyright 2005-2006 Frank Fock (SNMP4J.org)
_##
_## Licensed under the Apache License, Version 2.0 (the "License");
_## you may not use this file except in compliance with the License.
_## You may obtain a copy of the License at
_##
_## http://www.apache.org/licenses/LICENSE-2.0
_##
_## Unless required by applicable law or agreed to in writing, software
_## distributed under the License is distributed on an "AS IS" BASIS,
_## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
_## See the License for the specific language governing permissions and
_## limitations under the License.
_##
_##########################################################################*/
package org.snmp4j.agent.mo.snmp;
import java.util.*;
import org.snmp4j.log.*;
import org.snmp4j.agent.*;
import org.snmp4j.agent.mo.*;
import org.snmp4j.agent.mo.util.*;
import org.snmp4j.agent.security.*;
import org.snmp4j.security.*;
import org.snmp4j.smi.*;
/**
* This concrete implementation of the SNMP-VIEW-BASED-ACM-MIB (RFC 3415).
* The configuration of the view access model can be changed programatically
* (see {@link MutableVACM}) or via SNMP but an initial configuration must be
* created programatically in order to allow any access to the agent via SNMP.
*
* @author Frank Fock
* @version 1.0
*/
public class VacmMIB implements MOGroup, MutableVACM {
private static final LogAdapter logger = LogFactory.getLogger(VacmMIB.class);
private static final OID vacmContextEntryOID =
new OID(new int[] {1,3,6,1,6,3,16,1,1,1});
private static final int colVacmGroupName = 3;
private static final int colVacmSecurityToGroupStorageType = 4;
private static final int colVacmSecurityToGroupRowStatus = 5;
private static final int idxVacmGroupName = 0;
private static final int idxVacmSecurityToGroupStorageType = 1;
private static final int idxVacmSecurityToGroupRowStatus = 2;
private static final OID vacmSecurityToGroupEntryOID =
new OID(new int[] {1,3,6,1,6,3,16,1,2,1});
private static final int colVacmAccessContextMatch = 4;
private static final int colVacmAccessReadViewName = 5;
private static final int colVacmAccessWriteViewName = 6;
private static final int colVacmAccessNotifyViewName = 7;
private static final int colVacmAccessStorageType = 8;
private static final int colVacmAccessRowStatus = 9;
// private static final int idxVacmAccessGroupName = 0;
private static final int idxVacmAccessContextPrefix = 1;
private static final int idxVacmAccessSecurityModel = 2;
private static final int idxVacmAccessSecurityLevel = 3;
private static final int idxVacmAccessContextMatch = 0;
private static final int idxVacmAccessReadViewName = 1;
private static final int idxVacmAccessWriteViewName = 2;
private static final int idxVacmAccessNotifyViewName = 3;
private static final int idxVacmAccessStorageType = 4;
private static final int idxVacmAccessRowStatus = 5;
private static final OID vacmAccessEntryOID =
new OID(new int[] {1,3,6,1,6,3,16,1,4,1});
public static final int vacmExactMatch = MutableVACM.VACM_MATCH_EXACT;
public static final int vacmPrefixMatch = MutableVACM.VACM_MATCH_PREFIX;
private static final OID vacmViewSpinLockOID =
new OID(new int[] {1,3,6,1,6,3,16,1,5,1,0});
private static final int colVacmViewTreeFamilyMask = 3;
private static final int colVacmViewTreeFamilyType = 4;
private static final int colVacmViewTreeFamilyStorageType = 5;
private static final int colVacmViewTreeFamilyRowStatus = 6;
// private static final int idxVacmViewTreeViewName = 0;
private static final int idxVacmViewTreeSubtree = 1;
private static final int idxVacmViewTreeFamilyMask = 0;
private static final int idxVacmViewTreeFamilyType = 1;
private static final int idxVacmViewTreeFamilyStorageType = 2;
private static final int idxVacmViewTreeFamilyRowStatus = 3;
private static final OID vacmViewTreeFamilyEntryOID =
new OID(new int[] {1,3,6,1,6,3,16,1,5,2,1});
public static final int vacmViewIncluded = MutableVACM.VACM_VIEW_INCLUDED;
public static final int vacmViewExcluded = MutableVACM.VACM_VIEW_EXCLUDED;
private static final int[] vacmViewTreeFamilyTypeValues = {
vacmViewIncluded, vacmViewExcluded
};
private static MOTableSubIndex[] vacmViewTreeFamilyIndexes =
new MOTableSubIndex[] {
new MOTableSubIndex(SMIConstants.SYNTAX_OCTET_STRING, 1, 32),
new MOTableSubIndex(SMIConstants.SYNTAX_OBJECT_IDENTIFIER, 0, 96)
};
private static MOTableIndex vacmViewTreeFamilyIndex =
new MOTableIndex(vacmViewTreeFamilyIndexes);
private static MOTableSubIndex[] vacmAccessIndexes = new MOTableSubIndex[] {
new MOTableSubIndex(SMIConstants.SYNTAX_OCTET_STRING, 1, 32),
new MOTableSubIndex(SMIConstants.SYNTAX_OCTET_STRING, 0, 32),
new MOTableSubIndex(SMIConstants.SYNTAX_INTEGER, 1, 1),
new MOTableSubIndex(SMIConstants.SYNTAX_INTEGER, 1, 1)
};
private static MOTableIndex vacmAccessIndex =
new MOTableIndex(vacmAccessIndexes) {
public boolean isValidIndex(OID index) {
boolean ok = super.isValidIndex(index);
if (ok) {
SecurityModels secModels = SecurityModels.getInstance();
Integer32 secModel = new Integer32(index.get(index.size()-2));
if (secModels.getSecurityModel(secModel) == null) {
return false;
}
int secLevel = index.get(index.size()-1);
if ((secLevel < 1) || (secLevel > 3)) {
return false;
}
}
return ok;
}
};
private MOServer server;
private DefaultMOTable vacmContextTable;
private DefaultMOTable vacmSecurityToGroupTable;
private DefaultMOMutableTableModel vacmSecurityToGroupTableModel;
private DefaultMOTable vacmAccessTable;
private DefaultMOMutableTableModel vacmAccessTableModel;
private TestAndIncr vacmViewSpinLock;
private DefaultMOTable vacmViewTreeFamilyTable;
private DefaultMOMutableTableModel vacmViewTreeFamilyTableModel;
public VacmMIB(MOServer server) {
this.server = server;
createVacmContextTable();
createVacmSecuritToGroupTable();
createVacmAccessTable();
createVacmViewTreeFamilyTable();
vacmViewSpinLock = new TestAndIncr(vacmViewSpinLockOID);
}
public void registerMOs(MOServer server, OctetString context) throws
DuplicateRegistrationException {
server.register(vacmContextTable, context);
server.register(vacmSecurityToGroupTable, context);
server.register(vacmAccessTable, context);
server.register(vacmViewSpinLock, context);
server.register(vacmViewTreeFamilyTable, context);
}
private void createVacmContextTable() {
MOTableSubIndex[] vacmContextTableIndexes = new MOTableSubIndex[] {
new MOTableSubIndex(SMIConstants.SYNTAX_OCTET_STRING, 0, 32) };
MOTableIndex vacmContextTableIndex =
new MOTableIndex(vacmContextTableIndexes);
MOColumn[] vacmContextColumns = new MOColumn[] {
new MOColumn(1, SMIConstants.SYNTAX_OCTET_STRING,
MOAccessImpl.ACCESS_READ_ONLY) };
this.vacmContextTable =
new DefaultMOTable(vacmContextEntryOID, vacmContextTableIndex,
vacmContextColumns);
this.vacmContextTable.setModel(new VacmContextTableModel());
}
private void createVacmSecuritToGroupTable() {
MOTableSubIndex[] vacmSecurityToGroupIndexes = new MOTableSubIndex[] {
new MOTableSubIndex(SMIConstants.SYNTAX_INTEGER, 1, 1),
new MOTableSubIndex(SMIConstants.SYNTAX_OCTET_STRING, 1, 32) };
MOTableIndex vacmSecurityToGroupIndex =
new MOTableIndex(vacmSecurityToGroupIndexes) {
public boolean isValidIndex(OID index) {
boolean ok = super.isValidIndex(index);
if (ok) {
SecurityModels secModels = SecurityModels.getInstance();
if (secModels.getSecurityModel(new Integer32(index.get(0))) == null) {
return false;
}
}
return ok;
}
};
MOColumn[] vacmSecurityToGroupColumns = new MOColumn[] {
new SnmpAdminString(colVacmGroupName,
MOAccessImpl.ACCESS_READ_CREATE, null, true, 1, 32),
new StorageType(colVacmSecurityToGroupStorageType,
MOAccessImpl.ACCESS_READ_CREATE,
new Integer32(StorageType.nonVolatile), true),
new RowStatus(colVacmSecurityToGroupRowStatus)
};
this.vacmSecurityToGroupTable =
new DefaultMOTable(vacmSecurityToGroupEntryOID,
vacmSecurityToGroupIndex,
vacmSecurityToGroupColumns);
vacmSecurityToGroupTableModel = new DefaultMOMutableTableModel();
vacmSecurityToGroupTableModel.setRowFactory(new DefaultMOMutableRow2PCFactory());
this.vacmSecurityToGroupTable.setModel(vacmSecurityToGroupTableModel);
}
private void createVacmAccessTable() {
MOColumn[] vacmAccessColumns = new MOColumn[] {
new Enumerated(colVacmAccessContextMatch,
MOAccessImpl.ACCESS_READ_CREATE,
new Integer32(vacmExactMatch), true,
new int[] { vacmExactMatch, vacmPrefixMatch }),
new SnmpAdminString(colVacmAccessReadViewName,
MOAccessImpl.ACCESS_READ_CREATE,
new OctetString(), true, 0, 32),
new SnmpAdminString(colVacmAccessWriteViewName,
MOAccessImpl.ACCESS_READ_CREATE,
new OctetString(), true, 0, 32),
new SnmpAdminString(colVacmAccessNotifyViewName,
MOAccessImpl.ACCESS_READ_CREATE,
new OctetString(), true, 0, 32),
new StorageType(colVacmAccessStorageType,
MOAccessImpl.ACCESS_READ_CREATE,
new Integer32(StorageType.nonVolatile), true),
new RowStatus(colVacmAccessRowStatus)
};
vacmAccessTable = new DefaultMOTable(vacmAccessEntryOID,
vacmAccessIndex,
vacmAccessColumns);
vacmAccessTableModel = new DefaultMOMutableTableModel();
vacmAccessTableModel.setRowFactory(new DefaultMOMutableRow2PCFactory());
vacmAccessTable.setModel(vacmAccessTableModel);
}
private void createVacmViewTreeFamilyTable() {
MOColumn[] vacmViewTreeFamilyColumns = new MOColumn[] {
new SnmpAdminString(colVacmViewTreeFamilyMask,
MOAccessImpl.ACCESS_READ_CREATE,
new OctetString(), true, 0, 16),
new Enumerated(colVacmViewTreeFamilyType,
MOAccessImpl.ACCESS_READ_CREATE,
new Integer32(vacmViewIncluded), true,
vacmViewTreeFamilyTypeValues),
new StorageType(colVacmViewTreeFamilyStorageType,
MOAccessImpl.ACCESS_READ_CREATE,
new Integer32(StorageType.nonVolatile), true),
new RowStatus(colVacmViewTreeFamilyRowStatus)
};
vacmViewTreeFamilyTable = new DefaultMOTable(vacmViewTreeFamilyEntryOID,
vacmViewTreeFamilyIndex,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -