1 20 21 22 23 package org.snmp4j.agent.mo.snmp; 24 25 28 import java.util.*; 29 30 import org.snmp4j.*; 31 import org.snmp4j.agent.*; 32 import org.snmp4j.agent.mo.*; 33 import org.snmp4j.agent.request.*; 34 import org.snmp4j.event.*; 35 import org.snmp4j.log.*; 36 import org.snmp4j.mp.*; 37 import org.snmp4j.security.*; 38 import org.snmp4j.smi.*; 39 40 43 public class SnmpTargetMIB implements MOGroup, CounterListener, 44 MOTableRowListener { 45 46 private static final LogAdapter logger = 47 LogFactory.getLogger(SnmpTargetMIB.class); 48 49 private static final OID oidSnmpTargetSpinLock = 51 new OID(new int[] {1, 3, 6, 1, 6, 3, 12, 1, 1, 0}); 52 53 private MOScalar snmpTargetSpinLock; 54 55 private static final OID oidSnmpUnknownContexts = 56 new OID(new int[] {1, 3, 6, 1, 6, 3, 12, 1, 5, 0}); 57 58 private MOScalar snmpUnknownContexts; 59 60 private static final OID oidSnmpUnavailableContexts = 61 new OID(new int[] {1, 3, 6, 1, 6, 3, 12, 1, 4, 0}); 62 63 private MOScalar snmpUnavailableContexts; 64 65 private static final OID oidSnmpTargetParamsEntry = 66 new OID(new int[] {1, 3, 6, 1, 6, 3, 12, 1, 3, 1}); 67 68 private static final int colSnmpTargetParamsMPModel = 2; 70 private static final int colSnmpTargetParamsSecurityModel = 3; 71 private static final int colSnmpTargetParamsSecurityName = 4; 72 private static final int colSnmpTargetParamsSecurityLevel = 5; 73 private static final int colSnmpTargetParamsStorageType = 6; 74 private static final int colSnmpTargetParamsRowStatus = 7; 75 76 static final int idxSnmpTargetParamsMPModel = 0; 78 static final int idxSnmpTargetParamsSecurityModel = 1; 79 static final int idxSnmpTargetParamsSecurityName = 2; 80 static final int idxSnmpTargetParamsSecurityLevel = 3; 81 static final int idxSnmpTargetParamsStorageType = 4; 82 static final int idxSnmpTargetParamsRowStatus = 5; 83 private static MOTableSubIndex[] snmpTargetParamsEntryIndexes = 84 new MOTableSubIndex[] { 85 new MOTableSubIndex(SMIConstants.SYNTAX_OCTET_STRING, 1, 32) 86 }; 87 88 private static MOTableIndex snmpTargetParamsEntryIndex = 89 new MOTableIndex(snmpTargetParamsEntryIndexes, true) { 90 public boolean isValidIndex(OID index) { 91 boolean isValidIndex = super.isValidIndex(index); 92 if (isValidIndex) { 93 } 96 return isValidIndex; 97 } 98 }; 99 100 private DefaultMOTable snmpTargetParamsEntry; 101 private DefaultMOMutableTableModel snmpTargetParamsEntryModel; 102 private static final OID oidSnmpTargetAddrEntry = 103 new OID(new int[] {1, 3, 6, 1, 6, 3, 12, 1, 2, 1}); 104 105 private static final int colSnmpTargetAddrTDomain = 2; 107 private static final int colSnmpTargetAddrTAddress = 3; 108 private static final int colSnmpTargetAddrTimeout = 4; 109 private static final int colSnmpTargetAddrRetryCount = 5; 110 private static final int colSnmpTargetAddrTagList = 6; 111 private static final int colSnmpTargetAddrParams = 7; 112 private static final int colSnmpTargetAddrStorageType = 8; 113 private static final int colSnmpTargetAddrRowStatus = 9; 114 115 static final int idxSnmpTargetAddrTDomain = 0; 117 static final int idxSnmpTargetAddrTAddress = 1; 118 static final int idxSnmpTargetAddrTimeout = 2; 119 static final int idxSnmpTargetAddrRetryCount = 3; 120 static final int idxSnmpTargetAddrTagList = 4; 121 static final int idxSnmpTargetAddrParams = 5; 122 static final int idxSnmpTargetAddrStorageType = 6; 123 static final int idxSnmpTargetAddrRowStatus = 7; 124 private static MOTableSubIndex[] snmpTargetAddrEntryIndexes = 125 new MOTableSubIndex[] { 126 new MOTableSubIndex(SMIConstants.SYNTAX_OCTET_STRING, 1, 32) 127 }; 128 129 private static MOTableIndex snmpTargetAddrEntryIndex = 130 new MOTableIndex(snmpTargetAddrEntryIndexes, true) { 131 public boolean isValidIndex(OID index) { 132 boolean isValidIndex = super.isValidIndex(index); 133 if (isValidIndex) { 134 } 137 return isValidIndex; 138 } 139 }; 140 141 private static final OID[] DEFAULT_TDOMAINS = { 142 TransportDomains.snmpUDPDomain, 143 TransportDomains.transportDomainTcpIpv4, 144 TransportDomains.transportDomainTcpIpv6, 145 TransportDomains.transportDomainUdpIpv4, 146 TransportDomains.transportDomainUdpIpv6 147 }; 148 149 private DefaultMOTable snmpTargetAddrEntry; 150 private DefaultMOMutableTableModel snmpTargetAddrEntryModel; 151 152 private Hashtable snmpTargetAddrTagIndex = new Hashtable(); 153 154 private Hashtable supportedAddressClasses = new Hashtable(); 156 private Snmp session; 157 private CoexistenceInfoProvider coexistenceProvider; 158 159 public SnmpTargetMIB(Snmp session) { 160 this.session = session; 161 snmpTargetSpinLock = new TestAndIncr(oidSnmpTargetSpinLock); 162 snmpUnknownContexts = 163 new MOScalar(oidSnmpUnknownContexts, 164 MOAccessImpl.ACCESS_READ_ONLY, new Counter32()); 165 snmpUnavailableContexts = 166 new MOScalar(oidSnmpUnavailableContexts, 167 MOAccessImpl.ACCESS_READ_ONLY, new Counter32()); 168 createSnmpTargetParamsEntry(); 169 createSnmpTargetAddrEntry(); 170 } 171 172 public Collection getTargetAddrRowsForTag(OctetString tag) { 173 Collection l = (Collection)snmpTargetAddrTagIndex.get(tag); 174 if (l == null) { 175 return Collections.EMPTY_SET; 176 } 177 else { 178 synchronized (l) { 179 l = new ArrayList(l); 180 } 181 } 182 return l; 183 } 184 185 public Address getTargetAddress(OctetString name) { 186 OID index = name.toSubIndex(true); 187 SnmpTargetAddrEntryRow trow = 188 (SnmpTargetAddrEntryRow) this.snmpTargetAddrEntryModel.getRow(index); 189 if (trow != null) { 190 return trow.getAddress(); 191 } 192 return null; 193 } 194 195 public Target getTarget(OctetString name, 196 OctetString contextEngineID, 197 OctetString contextName) { 198 OID index = name.toSubIndex(true); 199 SnmpTargetAddrEntryRow trow = 200 (SnmpTargetAddrEntryRow) this.snmpTargetAddrEntryModel.getRow(index); 201 if (trow != null) { 202 return trow.getTarget(contextEngineID, contextName); 203 } 204 return null; 205 } 206 207 public void addDefaultTDomains() { 208 TDomainAddressFactoryImpl factory = new TDomainAddressFactoryImpl(); 209 for (int i=0; i<DEFAULT_TDOMAINS.length; i++) { 210 supportedAddressClasses.put(DEFAULT_TDOMAINS[i], factory); 211 } 212 } 213 214 public void addSupportedTDomain(OID transportDomain, 215 TDomainAddressFactory factory) { 216 supportedAddressClasses.put(transportDomain, factory); 217 } 218 219 public boolean addTargetAddress(OctetString name, 220 OID transportDomain, OctetString address, 221 int timeout, int retries, 222 OctetString tagList, 223 OctetString params, 224 int storageType) { 225 Variable[] vbs = new Variable[snmpTargetAddrEntry.getColumnCount()]; 226 int n=0; 227 vbs[n++] = transportDomain; 228 vbs[n++] = address; 229 vbs[n++] = new Integer32(timeout); 230 vbs[n++] = new Integer32(retries); 231 vbs[n++] = tagList; 232 vbs[n++] = params; 233 vbs[n++] = new Integer32(storageType); 234 vbs[n++] = new Integer32(RowStatus.active); 235 OID index = name.toSubIndex(true); 236 MOTableRow row = snmpTargetAddrEntry.createRow(index, vbs); 237 snmpTargetAddrEntry.addRow(row); 238 return true; 239 } 240 241 public MOTableRow removeTargetAddress(OctetString name) { 242 OID index = name.toSubIndex(true); 243 MOTableRow removedRow = snmpTargetAddrEntryModel.removeRow(index); 244 if (removedRow != null) { 245 removeRowFromTargetAddrTagIndex(removedRow); 246 } 247 return removedRow; 248 } 249 250 protected void removeRowFromTargetAddrTagIndex(MOTableRow removedRow) { 251 OctetString tagList = 252 (OctetString) removedRow.getValue(idxSnmpTargetAddrTagList); 253 Set tags = SnmpTagList.getTags(tagList); 254 if ((tags != null) && (this.snmpTargetAddrTagIndex != null)) { 255 for (Iterator it = tags.iterator(); it.hasNext(); ) { 256 Object item = it.next(); 257 Collection indexRows = 258 (Collection) this.snmpTargetAddrTagIndex.get(item); 259 if (indexRows != null) { 260 synchronized (indexRows) { 261 indexRows.remove(removedRow); 262 if (indexRows.isEmpty()) { 263 this.snmpTargetAddrTagIndex.remove(item); 264 } 265 } 266 } 267 } 268 } 269 } 270 271 public boolean addTargetParams(OctetString name, int mpModel, int secModel, 272 OctetString secName, int secLevel, 273 int storageType) { 274 Variable[] vbs = new Variable[snmpTargetParamsEntry.getColumnCount()]; 275 int n=0; 276 vbs[n++] = new Integer32(mpModel); 277 vbs[n++] = new Integer32(secModel); 278 vbs[n++] = secName; 279 vbs[n++] = new Integer32(secLevel); 280 vbs[n++] = new Integer32(storageType); 281 vbs[n++] = new Integer32(RowStatus.active); 282 OID index = name.toSubIndex(true); 283 MOTableRow row = snmpTargetParamsEntry.createRow(index, vbs); 284 snmpTargetParamsEntry.addRow(row); 285 return true; 286 } 287 288 public MOTableRow removeTargetParams(OctetString name) { 289 OID index = name.toSubIndex(true); 290 return snmpTargetParamsEntry.removeRow(index); 291 } 292 293 private void createSnmpTargetParamsEntry() { 294 MOColumn[] snmpTargetParamsEntryColumns = new MOColumn[6]; 295 snmpTargetParamsEntryColumns[idxSnmpTargetParamsMPModel] = 296 new MOMutableColumn(colSnmpTargetParamsMPModel, 297 SMIConstants.SYNTAX_INTEGER, 298 MOAccessImpl.ACCESS_READ_CREATE, 299 null, 300 false); 301 ((MOMutableColumn) snmpTargetParamsEntryColumns[idxSnmpTargetParamsMPModel]). 302 addMOValueValidationListener(new SnmpTargetParamsMPModelValidator()); 303 snmpTargetParamsEntryColumns[idxSnmpTargetParamsSecurityModel] = 304 new MOMutableColumn(colSnmpTargetParamsSecurityModel, 305 SMIConstants.SYNTAX_INTEGER, 306 MOAccessImpl.ACCESS_READ_CREATE, 307 null, 308 false); 309 ((MOMutableColumn) snmpTargetParamsEntryColumns[ 310 idxSnmpTargetParamsSecurityModel]). 311 addMOValueValidationListener(new SnmpTargetParamsSecurityModelValidator()); 312 snmpTargetParamsEntryColumns[idxSnmpTargetParamsSecurityName] = 313 new SnmpAdminString(colSnmpTargetParamsSecurityName, 314 MOAccessImpl.ACCESS_READ_CREATE, 315 null, 316 false); 317 snmpTargetParamsEntryColumns[idxSnmpTargetParamsSecurityLevel] = 318 new Enumerated(colSnmpTargetParamsSecurityLevel, 319 MOAccessImpl.ACCESS_READ_CREATE, 320 null, 321 false, 322 new int[] { 323 SnmpTargetParamsSecurityLevelEnum.noAuthNoPriv, 324 SnmpTargetParamsSecurityLevelEnum.authPriv, 325 SnmpTargetParamsSecurityLevelEnum.authNoPriv}); 326 snmpTargetParamsEntryColumns[idxSnmpTargetParamsStorageType] = 327 new StorageType(colSnmpTargetParamsStorageType, 328 MOAccessImpl.ACCESS_READ_CREATE, 329 new Integer32(3), 330 true); 331 snmpTargetParamsEntryColumns[idxSnmpTargetParamsRowStatus] = 332 new RowStatus(colSnmpTargetParamsRowStatus, 333 MOAccessImpl.ACCESS_READ_CREATE); 334 ((RowStatus)snmpTargetParamsEntryColumns[idxSnmpTargetParamsRowStatus]). 335 addRowStatusListener(new SnmpTargetParamsEntryRowStatusListener()); 336 337 snmpTargetParamsEntry = 338 new DefaultMOTable(oidSnmpTargetParamsEntry, 339 snmpTargetParamsEntryIndex, 340 snmpTargetParamsEntryColumns); 341 snmpTargetParamsEntryModel = new DefaultMOMutableTableModel(); 342 snmpTargetParamsEntryModel.setRowFactory(new DefaultMOMutableRow2PCFactory()); 343 snmpTargetParamsEntry.setModel(snmpTargetParamsEntryModel); 344 } 345 346 private void createSnmpTargetAddrEntry() { 347 MOColumn[] snmpTargetAddrEntryColumns = new MOColumn[8]; 348 snmpTargetAddrEntryColumns[idxSnmpTargetAddrTDomain] = 349 new MOMutableColumn(colSnmpTargetAddrTDomain, 350 SMIConstants.SYNTAX_OBJECT_IDENTIFIER, 351 MOAccessImpl.ACCESS_READ_CREATE, 352 null, 353 false); 354 ((MOMutableColumn) snmpTargetAddrEntryColumns[idxSnmpTargetAddrTDomain]). 355 addMOValueValidationListener(new SnmpTargetAddrTDomainValidator()); 356 snmpTargetAddrEntryColumns[idxSnmpTargetAddrTAddress] = 357 new MOMutableColumn(colSnmpTargetAddrTAddress, 358 SMIConstants.SYNTAX_OCTET_STRING, 359 MOAccessImpl.ACCESS_READ_CREATE, 360 null, 361 false); 362 ((MOMutableColumn) snmpTargetAddrEntryColumns[idxSnmpTargetAddrTAddress]). 363 addMOValueValidationListener(new SnmpTargetAddrTAddressValidator()); 364 snmpTargetAddrEntryColumns[idxSnmpTargetAddrTimeout] = 365 new MOMutableColumn(colSnmpTargetAddrTimeout, 366 SMIConstants.SYNTAX_INTEGER, 367 MOAccessImpl.ACCESS_READ_CREATE, 368 new Integer32(1500), 369 true); 370 ((MOMutableColumn) snmpTargetAddrEntryColumns[idxSnmpTargetAddrTimeout]). 371 addMOValueValidationListener(new SnmpTargetAddrTimeoutValidator()); 372 snmpTargetAddrEntryColumns[idxSnmpTargetAddrRetryCount] = 373 new MOMutableColumn(colSnmpTargetAddrRetryCount, 374 SMIConstants.SYNTAX_INTEGER32, 375 MOAccessImpl.ACCESS_READ_CREATE, 376 new Integer32(3), 377 true); 378 ((MOMutableColumn) snmpTargetAddrEntryColumns[idxSnmpTargetAddrRetryCount]). 379 addMOValueValidationListener(new SnmpTargetAddrRetryCountValidator()); 380 snmpTargetAddrEntryColumns[idxSnmpTargetAddrTagList] = 381 new SnmpTagList(colSnmpTargetAddrTagList, 382 MOAccessImpl.ACCESS_READ_CREATE, 383 new OctetString(new byte[] {}), 384 true); 385 snmpTargetAddrEntryColumns[idxSnmpTargetAddrParams] = 386 new MOMutableColumn(colSnmpTargetAddrParams, 387 SMIConstants.SYNTAX_OCTET_STRING, 388 MOAccessImpl.ACCESS_READ_CREATE, 389 new OctetString(), 390 true); 391 ((MOMutableColumn) snmpTargetAddrEntryColumns[idxSnmpTargetAddrParams]). 392 addMOValueValidationListener(new SnmpTargetAddrParamsValidator()); 393 snmpTargetAddrEntryColumns[idxSnmpTargetAddrStorageType] = 394 new StorageType(colSnmpTargetAddrStorageType, 395 MOAccessImpl.ACCESS_READ_CREATE, 396 new Integer32(3), 397 true); 398 snmpTargetAddrEntryColumns[idxSnmpTargetAddrRowStatus] = 399 new RowStatus(colSnmpTargetAddrRowStatus); 400 snmpTargetAddrEntry = 401 new DefaultMOTable(oidSnmpTargetAddrEntry, 402 snmpTargetAddrEntryIndex, 403 snmpTargetAddrEntryColumns); 404 snmpTargetAddrEntryModel = new DefaultMOMutableTableModel(); 405 snmpTargetAddrEntryModel.setRowFactory(new SnmpTargetAddrEntryFactory()); 406 snmpTargetAddrEntry.setModel(snmpTargetAddrEntryModel); 407 } 408 409 public void registerMOs(MOServer server, OctetString context) throws 410 DuplicateRegistrationException { 411 server.register(this.snmpTargetSpinLock, context); 413 server.register(this.snmpUnknownContexts, context); 414 server.register(this.snmpUnavailableContexts, context); 415 server.register(this.snmpTargetParamsEntry, context); 416 server.register(this.snmpTargetAddrEntry, context); 417 } 418 419 public void unregisterMOs(MOServer server, OctetString context) { 420 server.unregister(this.snmpTargetSpinLock, context); 422 server.unregister(this.snmpUnknownContexts, context); 423 server.unregister(this.snmpUnavailableContexts, context); 424 server.unregister(this.snmpTargetParamsEntry, context); 425 server.unregister(this.snmpTargetAddrEntry, context); 426 } 427 428 class SnmpTargetAddrEntryFactory implements MOTableRowFactory { 429 430 public MOTableRow createRow(OID index, Variable[] values) throws 431 UnsupportedOperationException { 432 SnmpTargetAddrEntryRow row = new SnmpTargetAddrEntryRow(index, values); 433 return row; 434 } 435 436 public void freeRow(MOTableRow row) { 437 } 438 439 } 440 441 442 class SnmpTargetParamsEntryRowStatusListener implements RowStatusListener { 443 444 public void rowStatusChanged(RowStatusEvent event) { 445 if (event.getNewStatus() == RowStatus.destroy) { 446 OID index = event.getRow().getIndex(); 447 OctetString paramsIndex = 448 (OctetString) snmpTargetParamsEntryIndex.getIndexValues(index)[0]; 449 synchronized (snmpTargetAddrEntryModel) { 450 for (Iterator it = snmpTargetAddrEntryModel.iterator(); it.hasNext(); ) { 451 MOTableRow r = (MOTableRow) it.next(); 452 Integer32 rowStatus = 453 (Integer32) r.getValue(idxSnmpTargetAddrRowStatus); 454 if ((rowStatus == null) || 455 (rowStatus.getValue() != RowStatus.active)) { 456 continue; 457 } 458 if (paramsIndex.equals(r.getValue(idxSnmpTargetAddrParams))) { 459 event.setDenyReason(SnmpConstants.SNMP_ERROR_INCONSISTENT_VALUE); 460 return; 461 } 462 } 463 } 464 } 465 } 466 467 } 468 469 public class SnmpTargetAddrEntryRow extends DefaultMOMutableRow2PC { 470 public SnmpTargetAddrEntryRow(OID index, Variable[] values) { 471 super(index, values); 472 updateUserObject(this); 473 } 474 475 private void updateUserObject(MOTableRow changeSet) { 476 Variable tagList = changeSet.getValue(idxSnmpTargetAddrTagList); 477 if (tagList != null) { 478 Set obsolete = (Set) getUserObject(); 479 Set tags = SnmpTagList.getTags((OctetString)tagList); 480 if (obsolete != null) { 481 obsolete.removeAll(tags); 482 } 483 setUserObject(tags); 484 updateIndex(obsolete, tags); 485 } 486 } 487 488 public void commitRow(SubRequest subRequest, MOTableRow changeSet) { 489 super.commitRow(subRequest, changeSet); 490 updateUserObject(changeSet); 491 } 492 493 private void updateIndex(Set remove, Set tags) { 494 if (remove != null) { 495 for (Iterator it = remove.iterator(); it.hasNext(); ) { 496 Object next = it.next(); 497 Collection list = (Collection) snmpTargetAddrTagIndex.get(next); 498 if (list != null) { 499 synchronized (list) { 500 if (!list.remove(this)) { 501 logger.error("Inconsistent tag value '" + next + 502 "' for rows: " + list); 503 } 504 } 505 } 506 else { 507 logger.error("Tag value '" + next + "' not found in tag index"); 508 } 509 } 510 } 511 for (Iterator it = tags.iterator(); it.hasNext(); ) { 512 Object next = it.next(); 513 Set list = (Set) snmpTargetAddrTagIndex.get(next); 514 if (list == null) { 515 list = new HashSet(); 516 } 517 synchronized (list) { 518 list.add(this); 519 } 520 snmpTargetAddrTagIndex.put(next, list); 521 } 522 } 523 524 525 526 public void prepareRow(SubRequest subRequest, MOTableRow changeSet) { 527 OID tdomain = 528 (OID) getResultingValue(idxSnmpTargetAddrTDomain, changeSet); 529 OctetString taddress = 530 (OctetString) getResultingValue(idxSnmpTargetAddrTAddress, 531 changeSet); 532 if (tdomain != null) { 533 TDomainAddressFactory factory = 534 (TDomainAddressFactory) supportedAddressClasses.get(tdomain); 535 if ((factory == null) || (!factory.isValidAddress(tdomain, taddress))) { 536 subRequest.getStatus(). 537 setErrorStatus(SnmpConstants.SNMP_ERROR_INCONSISTENT_VALUE); 538 } 539 } 540 else if (taddress != null) { 541 subRequest.getStatus(). 542 setErrorStatus(SnmpConstants.SNMP_ERROR_INCONSISTENT_VALUE); 543 } 544 } 545 546 public Address getAddress() { 547 OID tdomain = (OID) getValue(idxSnmpTargetAddrTDomain); 548 TDomainAddressFactory factory = (TDomainAddressFactory) 549 supportedAddressClasses.get(tdomain); 550 if (factory != null) { 551 OctetString addr = (OctetString) getValue(idxSnmpTargetAddrTAddress); 552 return factory.createAddress(tdomain, addr); 553 } 554 return null; 555 } 556 557 public OctetString getTAddress(Address address) { 558 OID tdomain = (OID) getValue(idxSnmpTargetAddrTDomain); 559 TDomainAddressFactory factory = (TDomainAddressFactory) 560 supportedAddressClasses.get(tdomain); 561 OID domain = factory.getTransportDomain(address); 562 if (!tdomain.equals(domain)) { 563 return null; 564 } 565 return factory.getAddress(address); 566 } 567 568 public Target getTarget(OctetString contextEngineID, 569 OctetString contextName) { 570 Address addr = getAddress(); 571 OctetString addrParams = 572 (OctetString) getValue(idxSnmpTargetAddrParams); 573 OID paramsIndex = addrParams.toSubIndex(true); 574 MOTableRow paramsRow = snmpTargetParamsEntryModel.getRow(paramsIndex); 575 if (paramsRow == null) { 576 return null; 577 } 578 Target t; 579 if (paramsRow.getValue(idxSnmpTargetParamsMPModel).toInt() == 580 MPv3.ID) { 581 t = new UserTarget(addr, 582 (OctetString) 583 paramsRow.getValue(idxSnmpTargetParamsSecurityName), 584 contextEngineID.getValue(), 585 paramsRow.getValue(idxSnmpTargetParamsSecurityLevel). 586 toInt()); 587 } 588 else { 589 OctetString community = 590 (OctetString) paramsRow.getValue(idxSnmpTargetParamsSecurityName); 591 if (coexistenceProvider != null) { 592 community = coexistenceProvider.getCommunity(community, 593 contextEngineID, contextName); 594 if (community == null) { 595 return null; 596 } 597 } 598 t = new CommunityTarget(addr, community); 599 } 600 t.setRetries(getValue(idxSnmpTargetAddrRetryCount).toInt()); 601 t.setTimeout(getValue(idxSnmpTargetAddrTimeout).toInt()*10); 602 t.setVersion(paramsRow.getValue(idxSnmpTargetParamsMPModel).toInt()); 603 return t; 604 } 605 } 606 607 609 613 class SnmpTargetParamsMPModelValidator implements 614 MOValueValidationListener { 615 616 public void validate(MOValueValidationEvent validationEvent) { 617 Variable newValue = validationEvent.getNewValue(); 618 int v = ((Integer32) newValue).getValue(); 619 if (session.getMessageProcessingModel(v) == null) { 620 validationEvent.setValidationStatus(SnmpConstants. 621 SNMP_ERROR_WRONG_VALUE); 622 return; 623 } 624 } 627 } 628 629 633 static class SnmpTargetParamsSecurityModelValidator implements 634 MOValueValidationListener { 635 636 public void validate(MOValueValidationEvent validationEvent) { 637 Variable newValue = validationEvent.getNewValue(); 639 switch (((Integer32)newValue).getValue()) { 640 case SecurityModel.SECURITY_MODEL_USM: { 641 if (SecurityModels.getInstance(). 642 getSecurityModel((Integer32) newValue) == null) { 643 validationEvent.setValidationStatus(SnmpConstants. 644 SNMP_ERROR_WRONG_VALUE); 645 return; 646 } 647 break; 648 } 649 default: 650 break; 651 } 652 } 654 } 655 656 660 class SnmpTargetAddrTDomainValidator implements 661 MOValueValidationListener { 662 663 public void validate(MOValueValidationEvent validationEvent) { 664 Variable newValue = validationEvent.getNewValue(); 665 if (newValue instanceof OID) { 667 OID tdomain = (OID)newValue; 668 if (!supportedAddressClasses.containsKey(tdomain)) { 669 validationEvent.setValidationStatus(SnmpConstants.SNMP_ERROR_BAD_VALUE); 670 } 671 } 672 else { 673 validationEvent.setValidationStatus(SnmpConstants.SNMP_ERROR_WRONG_TYPE); 674 } 675 } 677 } 678 679 683 static class SnmpTargetAddrTAddressValidator implements 684 MOValueValidationListener { 685 686 public void validate(MOValueValidationEvent validationEvent) { 687 Variable newValue = validationEvent.getNewValue(); 688 OctetString os = (OctetString) newValue; 689 if (!(((os.length() >= 1) && (os.length() <= 255)))) { 690 validationEvent.setValidationStatus(SnmpConstants. 691 SNMP_ERROR_WRONG_LENGTH); 692 return; 693 } 694 } 697 } 698 699 703 static class SnmpTargetAddrTimeoutValidator implements 704 MOValueValidationListener { 705 706 public void validate(MOValueValidationEvent validationEvent) { 707 Variable newValue = validationEvent.getNewValue(); 708 long v = ((Integer32) newValue).getValue(); 709 if (!(((v >= 0L) ))) { 710 validationEvent.setValidationStatus(SnmpConstants. 711 SNMP_ERROR_WRONG_VALUE); 712 return; 713 } 714 } 717 } 718 719 723 static class SnmpTargetAddrRetryCountValidator implements 724 MOValueValidationListener { 725 726 public void validate(MOValueValidationEvent validationEvent) { 727 Variable newValue = validationEvent.getNewValue(); 728 long v = ((Integer32) newValue).getValue(); 729 if (!(((v >= 0L) && (v <= 255L)))) { 730 validationEvent.setValidationStatus(SnmpConstants. 731 SNMP_ERROR_WRONG_VALUE); 732 return; 733 } 734 } 737 } 738 739 743 class SnmpTargetAddrParamsValidator implements 744 MOValueValidationListener { 745 746 public void validate(MOValueValidationEvent validationEvent) { 747 Variable newValue = validationEvent.getNewValue(); 748 OctetString os = (OctetString) newValue; 749 if (!(((os.length() >= 1) && (os.length() <= 32)))) { 750 validationEvent.setValidationStatus(SnmpConstants. 751 SNMP_ERROR_WRONG_LENGTH); 752 return; 753 } 754 OID paramsIndexOID = os.toSubIndex(true); 756 MOTableRow paramsRow = 757 snmpTargetParamsEntryModel.getRow(paramsIndexOID); 758 if (paramsRow == null) { 759 validationEvent. 760 setValidationStatus(SnmpConstants.SNMP_ERROR_INCONSISTENT_VALUE); 761 } 762 } 764 } 765 766 public void incrementCounter(CounterEvent event) { 767 if (event.getOid().equals(snmpUnavailableContexts.getOid())) { 768 ((Counter32) snmpUnavailableContexts.getValue()).increment(); 769 event.setCurrentValue(snmpUnavailableContexts.getValue()); 770 } 771 else if (event.getOid().equals(snmpUnknownContexts.getOid())) { 772 ((Counter32) snmpUnknownContexts.getValue()).increment(); 773 event.setCurrentValue(snmpUnknownContexts.getValue()); 774 } 775 } 776 777 779 public static final class SnmpTargetParamsSecurityLevelEnum { 780 public static final int noAuthNoPriv = 1; 781 public static final int authNoPriv = 2; 782 public static final int authPriv = 3; 783 } 784 785 787 public void rowChanged(MOTableRowEvent event) { 788 if ((event.getType() == MOTableRowEvent.DELETE) && 789 (event.getRow() instanceof SnmpTargetAddrEntryRow)) { 790 Variable[] vbs = new Variable[event.getRow().size()]; 791 vbs[idxSnmpTargetAddrTagList] = new OctetString(); 792 MOTableRow dummyRow = 793 new DefaultMOTableRow(event.getRow().getIndex(), vbs); 794 ((SnmpTargetAddrEntryRow)event.getRow()).updateUserObject(dummyRow); 795 } 796 } 797 798 806 public MOTableRow getTargetParamsRow(OctetString paramsName) { 807 if (paramsName == null) { 808 return null; 809 } 810 OID paramsIndex = paramsName.toSubIndex(true); 811 return snmpTargetParamsEntryModel.getRow(paramsIndex); 812 } 813 814 824 public MOTableRow getTargetParamsRow(OctetString paramsName, 825 boolean activeOnly) { 826 MOTableRow row = getTargetParamsRow(paramsName); 827 if (activeOnly && (row != null)) { 828 if (((Integer32)row.getValue(idxSnmpTargetParamsRowStatus)).getValue() 829 != RowStatus.active) { 830 return null; 831 } 832 } 833 return row; 834 } 835 836 public DefaultMOTable getSnmpTargetAddrEntry() { 837 return snmpTargetAddrEntry; 838 } 839 840 public CoexistenceInfoProvider getCoexistenceProvider() { 841 return coexistenceProvider; 842 } 843 844 public void setCoexistenceProvider(CoexistenceInfoProvider 845 coexistenceProvider) { 846 this.coexistenceProvider = coexistenceProvider; 847 } 848 850 } 853 | Popular Tags |