KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > snmp4j > agent > mo > snmp > SnmpTargetMIB


1 /*_############################################################################
2   _##
3   _## SNMP4J-Agent - SnmpTargetMIB.java
4   _##
5   _## Copyright (C) 2005-2007 Frank Fock (SNMP4J.org)
6   _##
7   _## Licensed under the Apache License, Version 2.0 (the "License");
8   _## you may not use this file except in compliance with the License.
9   _## You may obtain a copy of the License at
10   _##
11   _## http://www.apache.org/licenses/LICENSE-2.0
12   _##
13   _## Unless required by applicable law or agreed to in writing, software
14   _## distributed under the License is distributed on an "AS IS" BASIS,
15   _## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   _## See the License for the specific language governing permissions and
17   _## limitations under the License.
18   _##
19   _##########################################################################*/

20
21
22
23 package org.snmp4j.agent.mo.snmp;
24
25 //--AgentGen BEGIN=_BEGIN
26
//--AgentGen END
27

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 //--AgentGen BEGIN=_IMPORT
41
//--AgentGen END
42

43 public class SnmpTargetMIB implements MOGroup, CounterListener,
44     MOTableRowListener {
45
46   private static final LogAdapter logger =
47       LogFactory.getLogger(SnmpTargetMIB.class);
48
49   // Constants
50
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   // Column sub-identifer defintions for snmpTargetParamsEntry:
69
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   // Column index defintions for snmpTargetParamsEntry:
77
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         //--AgentGen BEGIN=snmpTargetParamsEntry::isValidIndex
94
//--AgentGen END
95
}
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   // Column sub-identifer defintions for snmpTargetAddrEntry:
106
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   // Column index defintions for snmpTargetAddrEntry:
116
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         //--AgentGen BEGIN=snmpTargetAddrEntry::isValidIndex
135
//--AgentGen END
136
}
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   // maps TDomain OIDs to TDomainAddressFactory instances
155
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 JavaDoc 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     // Scalar Objects
412
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     // Scalar Objects
421
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 JavaDoc {
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 JavaDoc 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 JavaDoc 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   // Value Validators
608

609   /**
610    * The <code>SnmpTargetParamsMPModelValidator</code> implements the value validation
611    * for <code>SnmpTargetParamsMPModel</code>.
612    */

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       //--AgentGen BEGIN=snmpTargetParamsMPModel::validate
625
//--AgentGen END
626
}
627   }
628
629   /**
630    * The <code>SnmpTargetParamsSecurityModelValidator</code> implements the value validation
631    * for <code>SnmpTargetParamsSecurityModel</code>.
632    */

633   static class SnmpTargetParamsSecurityModelValidator implements
634       MOValueValidationListener {
635
636     public void validate(MOValueValidationEvent validationEvent) {
637       //--AgentGen BEGIN=snmpTargetParamsSecurityModel::validate
638
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       //--AgentGen END
653
}
654   }
655
656   /**
657    * The <code>SnmpTargetAddrTDomainValidator</code> implements the value validation
658    * for <code>SnmpTargetAddrTDomain</code>.
659    */

660   class SnmpTargetAddrTDomainValidator implements
661       MOValueValidationListener {
662
663     public void validate(MOValueValidationEvent validationEvent) {
664       Variable newValue = validationEvent.getNewValue();
665       //--AgentGen BEGIN=snmpTargetAddrTDomain::validate
666
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       //--AgentGen END
676
}
677   }
678
679   /**
680    * The <code>SnmpTargetAddrTAddressValidator</code> implements the value
681    * validation for <code>SnmpTargetAddrTAddress</code>.
682    */

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       //--AgentGen BEGIN=snmpTargetAddrTAddress::validate
695
//--AgentGen END
696
}
697   }
698
699   /**
700    * The <code>SnmpTargetAddrTimeoutValidator</code> implements the value
701    * validation for <code>SnmpTargetAddrTimeout</code>.
702    */

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) /*&& (v <= 2147483647L)*/))) {
710         validationEvent.setValidationStatus(SnmpConstants.
711                                             SNMP_ERROR_WRONG_VALUE);
712         return;
713       }
714       //--AgentGen BEGIN=snmpTargetAddrTimeout::validate
715
//--AgentGen END
716
}
717   }
718
719   /**
720    * The <code>SnmpTargetAddrRetryCountValidator</code> implements the value validation
721    * for <code>SnmpTargetAddrRetryCount</code>.
722    */

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       //--AgentGen BEGIN=snmpTargetAddrRetryCount::validate
735
//--AgentGen END
736
}
737   }
738
739   /**
740    * The <code>SnmpTargetAddrParamsValidator</code> implements the value validation
741    * for <code>SnmpTargetAddrParams</code>.
742    */

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       //--AgentGen BEGIN=snmpTargetAddrParams::validate
755
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       //--AgentGen END
763
}
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  // Enumerations
778

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 //--AgentGen BEGIN=_CLASSES
786

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   /**
799    * Returns the SNMP Target Parameters row for the specified name.
800    * @param paramsName
801    * the name of the parameters set to return.
802    * @return
803    * if the row containing the target parameters if such an entry
804    * exists or <code>null</code> if no such entry exists
805    */

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   /**
815    * Returns the SNMP Target Parameters row for the specified name.
816    * @param paramsName
817    * the name of the parameters set to return.
818    * @param activeOnly
819    * if <code>true</code> only an active row will be returned.
820    * @return
821    * if the row containing the target parameters if such an entry
822    * exists or <code>null</code> if no such entry exists
823    */

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   //--AgentGen END
849

850 //--AgentGen BEGIN=_END
851
//--AgentGen END
852
}
853
Popular Tags