telemetry-snmp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/rspec.yml +44 -0
  3. data/.github/workflows/rubocop.yml +28 -0
  4. data/.github/workflows/sourcehawk-scan.yml +20 -0
  5. data/.gitignore +14 -0
  6. data/.rspec +4 -0
  7. data/.rubocop.yml +26 -0
  8. data/CHANGELOG.md +4 -0
  9. data/CODE_OF_CONDUCT.md +75 -0
  10. data/CONTRIBUTING.md +54 -0
  11. data/Gemfile +10 -0
  12. data/INDIVIDUAL_CONTRIBUTOR_LICENSE.md +30 -0
  13. data/LICENSE +201 -0
  14. data/NOTICE.txt +9 -0
  15. data/README.md +54 -0
  16. data/attribution.txt +1 -0
  17. data/config.ru +15 -0
  18. data/exe/snmp_collector +55 -0
  19. data/lib/telemetry/snmp.rb +23 -0
  20. data/lib/telemetry/snmp/api.rb +55 -0
  21. data/lib/telemetry/snmp/auth.rb +54 -0
  22. data/lib/telemetry/snmp/auth/defaults.rb +41 -0
  23. data/lib/telemetry/snmp/client.rb +104 -0
  24. data/lib/telemetry/snmp/controllers/device_creds.rb +105 -0
  25. data/lib/telemetry/snmp/controllers/devices.rb +94 -0
  26. data/lib/telemetry/snmp/controllers/oid_groups.rb +71 -0
  27. data/lib/telemetry/snmp/controllers/oids.rb +80 -0
  28. data/lib/telemetry/snmp/controllers/users.rb +81 -0
  29. data/lib/telemetry/snmp/controllers/walks.rb +89 -0
  30. data/lib/telemetry/snmp/data.rb +69 -0
  31. data/lib/telemetry/snmp/data/default_opts.rb +73 -0
  32. data/lib/telemetry/snmp/data/migrations/001_device_creds.rb +19 -0
  33. data/lib/telemetry/snmp/data/migrations/002_create_devices_table.rb +31 -0
  34. data/lib/telemetry/snmp/data/migrations/003_create_oids_tables.rb +16 -0
  35. data/lib/telemetry/snmp/data/migrations/004_create_oid_groups.rb +15 -0
  36. data/lib/telemetry/snmp/data/migrations/005_create_oids_oid_groups.rb +17 -0
  37. data/lib/telemetry/snmp/data/migrations/006_device_to_oid_group.rb +15 -0
  38. data/lib/telemetry/snmp/data/migrations/007_create_users.rb +20 -0
  39. data/lib/telemetry/snmp/data/migrations/008_create_walks_table.rb +14 -0
  40. data/lib/telemetry/snmp/data/migrations/009_create_tag_name_column.rb +7 -0
  41. data/lib/telemetry/snmp/data/migrations/010_create_user_audit_table.rb +18 -0
  42. data/lib/telemetry/snmp/data/models/device.rb +11 -0
  43. data/lib/telemetry/snmp/data/models/device_cred.rb +11 -0
  44. data/lib/telemetry/snmp/data/models/oid.rb +10 -0
  45. data/lib/telemetry/snmp/data/models/oid_group.rb +10 -0
  46. data/lib/telemetry/snmp/data/models/oid_oid_groups.rb +10 -0
  47. data/lib/telemetry/snmp/data/models/oid_walk.rb +10 -0
  48. data/lib/telemetry/snmp/data/models/user.rb +10 -0
  49. data/lib/telemetry/snmp/data/models/user_audit_log.rb +19 -0
  50. data/lib/telemetry/snmp/mibs/AGENTX-MIB.txt +527 -0
  51. data/lib/telemetry/snmp/mibs/AIRPORT-BASESTATION-3-MIB.txt +461 -0
  52. data/lib/telemetry/snmp/mibs/BRIDGE-MIB.txt +1472 -0
  53. data/lib/telemetry/snmp/mibs/DISMAN-EVENT-MIB.txt +1882 -0
  54. data/lib/telemetry/snmp/mibs/DISMAN-SCHEDULE-MIB.txt +699 -0
  55. data/lib/telemetry/snmp/mibs/DISMAN-SCRIPT-MIB.txt +1764 -0
  56. data/lib/telemetry/snmp/mibs/EtherLike-MIB.txt +1862 -0
  57. data/lib/telemetry/snmp/mibs/HCNUM-TC.txt +118 -0
  58. data/lib/telemetry/snmp/mibs/HOST-RESOURCES-MIB.txt +1540 -0
  59. data/lib/telemetry/snmp/mibs/HOST-RESOURCES-TYPES.txt +389 -0
  60. data/lib/telemetry/snmp/mibs/IANA-ADDRESS-FAMILY-NUMBERS-MIB.txt +123 -0
  61. data/lib/telemetry/snmp/mibs/IANA-LANGUAGE-MIB.txt +123 -0
  62. data/lib/telemetry/snmp/mibs/IANA-RTPROTO-MIB.txt +91 -0
  63. data/lib/telemetry/snmp/mibs/IANAifType-MIB.txt +619 -0
  64. data/lib/telemetry/snmp/mibs/IF-INVERTED-STACK-MIB.txt +149 -0
  65. data/lib/telemetry/snmp/mibs/IF-MIB.txt +1814 -0
  66. data/lib/telemetry/snmp/mibs/INET-ADDRESS-MIB.txt +402 -0
  67. data/lib/telemetry/snmp/mibs/IP-FORWARD-MIB.txt +1277 -0
  68. data/lib/telemetry/snmp/mibs/IP-MIB.txt +4993 -0
  69. data/lib/telemetry/snmp/mibs/IPV6-FLOW-LABEL-MIB.txt +58 -0
  70. data/lib/telemetry/snmp/mibs/IPV6-ICMP-MIB.txt +529 -0
  71. data/lib/telemetry/snmp/mibs/IPV6-MIB.txt +1443 -0
  72. data/lib/telemetry/snmp/mibs/IPV6-TC.txt +67 -0
  73. data/lib/telemetry/snmp/mibs/IPV6-TCP-MIB.txt +211 -0
  74. data/lib/telemetry/snmp/mibs/IPV6-UDP-MIB.txt +141 -0
  75. data/lib/telemetry/snmp/mibs/NET-SNMP-AGENT-MIB.txt +554 -0
  76. data/lib/telemetry/snmp/mibs/NET-SNMP-EXAMPLES-MIB.txt +285 -0
  77. data/lib/telemetry/snmp/mibs/NET-SNMP-EXTEND-MIB.txt +325 -0
  78. data/lib/telemetry/snmp/mibs/NET-SNMP-MIB.txt +67 -0
  79. data/lib/telemetry/snmp/mibs/NET-SNMP-PASS-MIB.txt +124 -0
  80. data/lib/telemetry/snmp/mibs/NET-SNMP-TC.txt +128 -0
  81. data/lib/telemetry/snmp/mibs/NET-SNMP-VACM-MIB.txt +154 -0
  82. data/lib/telemetry/snmp/mibs/NOTIFICATION-LOG-MIB.txt +753 -0
  83. data/lib/telemetry/snmp/mibs/PAN-COMMON-MIB.md5 +1 -0
  84. data/lib/telemetry/snmp/mibs/PAN-COMMON-MIB.my +2293 -0
  85. data/lib/telemetry/snmp/mibs/PAN-ENTITY-EXT-MIB.md5 +1 -0
  86. data/lib/telemetry/snmp/mibs/PAN-ENTITY-EXT-MIB.my +293 -0
  87. data/lib/telemetry/snmp/mibs/PAN-GLOBAL-REG-MIB.md5 +1 -0
  88. data/lib/telemetry/snmp/mibs/PAN-GLOBAL-REG-MIB.my +84 -0
  89. data/lib/telemetry/snmp/mibs/PAN-GLOBAL-TC-MIB.md5 +1 -0
  90. data/lib/telemetry/snmp/mibs/PAN-GLOBAL-TC-MIB.my +68 -0
  91. data/lib/telemetry/snmp/mibs/PAN-LC-MIB.md5 +1 -0
  92. data/lib/telemetry/snmp/mibs/PAN-LC-MIB.my +204 -0
  93. data/lib/telemetry/snmp/mibs/PAN-PRODUCT-MIB.md5 +1 -0
  94. data/lib/telemetry/snmp/mibs/PAN-PRODUCT-MIB.my +305 -0
  95. data/lib/telemetry/snmp/mibs/PAN-TRAPS.md5 +1 -0
  96. data/lib/telemetry/snmp/mibs/PAN-TRAPS.my +7809 -0
  97. data/lib/telemetry/snmp/mibs/RFC-1215.txt +38 -0
  98. data/lib/telemetry/snmp/mibs/RFC1155-SMI.txt +119 -0
  99. data/lib/telemetry/snmp/mibs/RFC1213-MIB.txt +2613 -0
  100. data/lib/telemetry/snmp/mibs/RMON-MIB.txt +3980 -0
  101. data/lib/telemetry/snmp/mibs/SCTP-MIB.txt +1342 -0
  102. data/lib/telemetry/snmp/mibs/SMUX-MIB.txt +160 -0
  103. data/lib/telemetry/snmp/mibs/SNMP-COMMUNITY-MIB.txt +429 -0
  104. data/lib/telemetry/snmp/mibs/SNMP-FRAMEWORK-MIB.txt +526 -0
  105. data/lib/telemetry/snmp/mibs/SNMP-MPD-MIB.txt +145 -0
  106. data/lib/telemetry/snmp/mibs/SNMP-NOTIFICATION-MIB.txt +589 -0
  107. data/lib/telemetry/snmp/mibs/SNMP-PROXY-MIB.txt +294 -0
  108. data/lib/telemetry/snmp/mibs/SNMP-TARGET-MIB.txt +660 -0
  109. data/lib/telemetry/snmp/mibs/SNMP-USER-BASED-SM-MIB.txt +912 -0
  110. data/lib/telemetry/snmp/mibs/SNMP-USM-AES-MIB.txt +62 -0
  111. data/lib/telemetry/snmp/mibs/SNMP-USM-DH-OBJECTS-MIB.txt +532 -0
  112. data/lib/telemetry/snmp/mibs/SNMP-VIEW-BASED-ACM-MIB.txt +830 -0
  113. data/lib/telemetry/snmp/mibs/SNMPv2-CONF.txt +322 -0
  114. data/lib/telemetry/snmp/mibs/SNMPv2-MIB.txt +854 -0
  115. data/lib/telemetry/snmp/mibs/SNMPv2-SMI.txt +344 -0
  116. data/lib/telemetry/snmp/mibs/SNMPv2-TC.txt +772 -0
  117. data/lib/telemetry/snmp/mibs/SNMPv2-TM.txt +176 -0
  118. data/lib/telemetry/snmp/mibs/TCP-MIB.txt +785 -0
  119. data/lib/telemetry/snmp/mibs/TRANSPORT-ADDRESS-MIB.txt +421 -0
  120. data/lib/telemetry/snmp/mibs/TUNNEL-MIB.txt +738 -0
  121. data/lib/telemetry/snmp/mibs/UCD-DEMO-MIB.txt +74 -0
  122. data/lib/telemetry/snmp/mibs/UCD-DISKIO-MIB.txt +171 -0
  123. data/lib/telemetry/snmp/mibs/UCD-DLMOD-MIB.txt +124 -0
  124. data/lib/telemetry/snmp/mibs/UCD-IPFWACC-MIB.txt +327 -0
  125. data/lib/telemetry/snmp/mibs/UCD-SNMP-MIB.txt +1712 -0
  126. data/lib/telemetry/snmp/mibs/UDP-MIB.txt +549 -0
  127. data/lib/telemetry/snmp/publisher.rb +130 -0
  128. data/lib/telemetry/snmp/version.rb +7 -0
  129. data/sourcehawk.yml +4 -0
  130. data/telemetry-snmp.gemspec +48 -0
  131. metadata +456 -0
@@ -0,0 +1,912 @@
1
+ SNMP-USER-BASED-SM-MIB DEFINITIONS ::= BEGIN
2
+
3
+ IMPORTS
4
+ MODULE-IDENTITY, OBJECT-TYPE,
5
+ OBJECT-IDENTITY,
6
+ snmpModules, Counter32 FROM SNMPv2-SMI
7
+ TEXTUAL-CONVENTION, TestAndIncr,
8
+ RowStatus, RowPointer,
9
+ StorageType, AutonomousType FROM SNMPv2-TC
10
+ MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF
11
+ SnmpAdminString, SnmpEngineID,
12
+ snmpAuthProtocols, snmpPrivProtocols FROM SNMP-FRAMEWORK-MIB;
13
+
14
+ snmpUsmMIB MODULE-IDENTITY
15
+ LAST-UPDATED "200210160000Z" -- 16 Oct 2002, midnight
16
+ ORGANIZATION "SNMPv3 Working Group"
17
+ CONTACT-INFO "WG-email: snmpv3@lists.tislabs.com
18
+ Subscribe: majordomo@lists.tislabs.com
19
+ In msg body: subscribe snmpv3
20
+
21
+ Chair: Russ Mundy
22
+ Network Associates Laboratories
23
+ postal: 15204 Omega Drive, Suite 300
24
+ Rockville, MD 20850-4601
25
+ USA
26
+ email: mundy@tislabs.com
27
+
28
+ phone: +1 301-947-7107
29
+
30
+ Co-Chair: David Harrington
31
+ Enterasys Networks
32
+ Postal: 35 Industrial Way
33
+ P. O. Box 5004
34
+ Rochester, New Hampshire 03866-5005
35
+ USA
36
+ EMail: dbh@enterasys.com
37
+ Phone: +1 603-337-2614
38
+
39
+ Co-editor Uri Blumenthal
40
+ Lucent Technologies
41
+ postal: 67 Whippany Rd.
42
+ Whippany, NJ 07981
43
+ USA
44
+ email: uri@lucent.com
45
+ phone: +1-973-386-2163
46
+
47
+ Co-editor: Bert Wijnen
48
+ Lucent Technologies
49
+ postal: Schagen 33
50
+ 3461 GL Linschoten
51
+ Netherlands
52
+ email: bwijnen@lucent.com
53
+ phone: +31-348-480-685
54
+ "
55
+ DESCRIPTION "The management information definitions for the
56
+ SNMP User-based Security Model.
57
+
58
+ Copyright (C) The Internet Society (2002). This
59
+ version of this MIB module is part of RFC 3414;
60
+ see the RFC itself for full legal notices.
61
+ "
62
+ -- Revision history
63
+
64
+ REVISION "200210160000Z" -- 16 Oct 2002, midnight
65
+ DESCRIPTION "Changes in this revision:
66
+ - Updated references and contact info.
67
+ - Clarification to usmUserCloneFrom DESCRIPTION
68
+ clause
69
+ - Fixed 'command responder' into 'command generator'
70
+ in last para of DESCRIPTION clause of
71
+ usmUserTable.
72
+ This revision published as RFC3414.
73
+ "
74
+ REVISION "199901200000Z" -- 20 Jan 1999, midnight
75
+ DESCRIPTION "Clarifications, published as RFC2574"
76
+
77
+ REVISION "199711200000Z" -- 20 Nov 1997, midnight
78
+ DESCRIPTION "Initial version, published as RFC2274"
79
+ ::= { snmpModules 15 }
80
+
81
+ -- Administrative assignments ****************************************
82
+
83
+ usmMIBObjects OBJECT IDENTIFIER ::= { snmpUsmMIB 1 }
84
+ usmMIBConformance OBJECT IDENTIFIER ::= { snmpUsmMIB 2 }
85
+
86
+ -- Identification of Authentication and Privacy Protocols ************
87
+
88
+ usmNoAuthProtocol OBJECT-IDENTITY
89
+ STATUS current
90
+ DESCRIPTION "No Authentication Protocol."
91
+ ::= { snmpAuthProtocols 1 }
92
+
93
+ usmHMACMD5AuthProtocol OBJECT-IDENTITY
94
+ STATUS current
95
+ DESCRIPTION "The HMAC-MD5-96 Digest Authentication Protocol."
96
+ REFERENCE "- H. Krawczyk, M. Bellare, R. Canetti HMAC:
97
+ Keyed-Hashing for Message Authentication,
98
+ RFC2104, Feb 1997.
99
+ - Rivest, R., Message Digest Algorithm MD5, RFC1321.
100
+ "
101
+ ::= { snmpAuthProtocols 2 }
102
+
103
+ usmHMACSHAAuthProtocol OBJECT-IDENTITY
104
+ STATUS current
105
+ DESCRIPTION "The HMAC-SHA-96 Digest Authentication Protocol."
106
+ REFERENCE "- H. Krawczyk, M. Bellare, R. Canetti, HMAC:
107
+ Keyed-Hashing for Message Authentication,
108
+ RFC2104, Feb 1997.
109
+ - Secure Hash Algorithm. NIST FIPS 180-1.
110
+ "
111
+ ::= { snmpAuthProtocols 3 }
112
+
113
+ usmNoPrivProtocol OBJECT-IDENTITY
114
+ STATUS current
115
+ DESCRIPTION "No Privacy Protocol."
116
+ ::= { snmpPrivProtocols 1 }
117
+
118
+ usmDESPrivProtocol OBJECT-IDENTITY
119
+ STATUS current
120
+ DESCRIPTION "The CBC-DES Symmetric Encryption Protocol."
121
+ REFERENCE "- Data Encryption Standard, National Institute of
122
+ Standards and Technology. Federal Information
123
+ Processing Standard (FIPS) Publication 46-1.
124
+
125
+ Supersedes FIPS Publication 46,
126
+ (January, 1977; reaffirmed January, 1988).
127
+
128
+ - Data Encryption Algorithm, American National
129
+ Standards Institute. ANSI X3.92-1981,
130
+ (December, 1980).
131
+
132
+ - DES Modes of Operation, National Institute of
133
+ Standards and Technology. Federal Information
134
+ Processing Standard (FIPS) Publication 81,
135
+ (December, 1980).
136
+
137
+ - Data Encryption Algorithm - Modes of Operation,
138
+ American National Standards Institute.
139
+ ANSI X3.106-1983, (May 1983).
140
+ "
141
+ ::= { snmpPrivProtocols 2 }
142
+
143
+ -- Textual Conventions ***********************************************
144
+
145
+ KeyChange ::= TEXTUAL-CONVENTION
146
+ STATUS current
147
+ DESCRIPTION
148
+ "Every definition of an object with this syntax must identify
149
+ a protocol P, a secret key K, and a hash algorithm H
150
+ that produces output of L octets.
151
+
152
+ The object's value is a manager-generated, partially-random
153
+ value which, when modified, causes the value of the secret
154
+ key K, to be modified via a one-way function.
155
+
156
+ The value of an instance of this object is the concatenation
157
+ of two components: first a 'random' component and then a
158
+ 'delta' component.
159
+
160
+ The lengths of the random and delta components
161
+ are given by the corresponding value of the protocol P;
162
+ if P requires K to be a fixed length, the length of both the
163
+ random and delta components is that fixed length; if P
164
+ allows the length of K to be variable up to a particular
165
+ maximum length, the length of the random component is that
166
+ maximum length and the length of the delta component is any
167
+ length less than or equal to that maximum length.
168
+ For example, usmHMACMD5AuthProtocol requires K to be a fixed
169
+ length of 16 octets and L - of 16 octets.
170
+ usmHMACSHAAuthProtocol requires K to be a fixed length of
171
+ 20 octets and L - of 20 octets. Other protocols may define
172
+ other sizes, as deemed appropriate.
173
+
174
+ When a requester wants to change the old key K to a new
175
+ key keyNew on a remote entity, the 'random' component is
176
+ obtained from either a true random generator, or from a
177
+ pseudorandom generator, and the 'delta' component is
178
+ computed as follows:
179
+
180
+ - a temporary variable is initialized to the existing value
181
+ of K;
182
+ - if the length of the keyNew is greater than L octets,
183
+ then:
184
+ - the random component is appended to the value of the
185
+ temporary variable, and the result is input to the
186
+ the hash algorithm H to produce a digest value, and
187
+ the temporary variable is set to this digest value;
188
+ - the value of the temporary variable is XOR-ed with
189
+ the first (next) L-octets (16 octets in case of MD5)
190
+ of the keyNew to produce the first (next) L-octets
191
+ (16 octets in case of MD5) of the 'delta' component.
192
+ - the above two steps are repeated until the unused
193
+ portion of the keyNew component is L octets or less,
194
+ - the random component is appended to the value of the
195
+ temporary variable, and the result is input to the
196
+ hash algorithm H to produce a digest value;
197
+ - this digest value, truncated if necessary to be the same
198
+ length as the unused portion of the keyNew, is XOR-ed
199
+ with the unused portion of the keyNew to produce the
200
+ (final portion of the) 'delta' component.
201
+
202
+ For example, using MD5 as the hash algorithm H:
203
+
204
+ iterations = (lenOfDelta - 1)/16; /* integer division */
205
+ temp = keyOld;
206
+ for (i = 0; i < iterations; i++) {
207
+ temp = MD5 (temp || random);
208
+ delta[i*16 .. (i*16)+15] =
209
+ temp XOR keyNew[i*16 .. (i*16)+15];
210
+ }
211
+ temp = MD5 (temp || random);
212
+ delta[i*16 .. lenOfDelta-1] =
213
+ temp XOR keyNew[i*16 .. lenOfDelta-1];
214
+
215
+ The 'random' and 'delta' components are then concatenated as
216
+ described above, and the resulting octet string is sent to
217
+ the recipient as the new value of an instance of this object.
218
+
219
+ At the receiver side, when an instance of this object is set
220
+ to a new value, then a new value of K is computed as follows:
221
+
222
+ - a temporary variable is initialized to the existing value
223
+ of K;
224
+ - if the length of the delta component is greater than L
225
+ octets, then:
226
+ - the random component is appended to the value of the
227
+ temporary variable, and the result is input to the
228
+ hash algorithm H to produce a digest value, and the
229
+ temporary variable is set to this digest value;
230
+ - the value of the temporary variable is XOR-ed with
231
+ the first (next) L-octets (16 octets in case of MD5)
232
+ of the delta component to produce the first (next)
233
+ L-octets (16 octets in case of MD5) of the new value
234
+ of K.
235
+ - the above two steps are repeated until the unused
236
+ portion of the delta component is L octets or less,
237
+ - the random component is appended to the value of the
238
+ temporary variable, and the result is input to the
239
+ hash algorithm H to produce a digest value;
240
+ - this digest value, truncated if necessary to be the same
241
+ length as the unused portion of the delta component, is
242
+ XOR-ed with the unused portion of the delta component to
243
+ produce the (final portion of the) new value of K.
244
+
245
+ For example, using MD5 as the hash algorithm H:
246
+
247
+ iterations = (lenOfDelta - 1)/16; /* integer division */
248
+ temp = keyOld;
249
+ for (i = 0; i < iterations; i++) {
250
+ temp = MD5 (temp || random);
251
+ keyNew[i*16 .. (i*16)+15] =
252
+ temp XOR delta[i*16 .. (i*16)+15];
253
+ }
254
+ temp = MD5 (temp || random);
255
+ keyNew[i*16 .. lenOfDelta-1] =
256
+ temp XOR delta[i*16 .. lenOfDelta-1];
257
+
258
+ The value of an object with this syntax, whenever it is
259
+ retrieved by the management protocol, is always the zero
260
+ length string.
261
+
262
+ Note that the keyOld and keyNew are the localized keys.
263
+
264
+ Note that it is probably wise that when an SNMP entity sends
265
+ a SetRequest to change a key, that it keeps a copy of the old
266
+ key until it has confirmed that the key change actually
267
+ succeeded.
268
+ "
269
+ SYNTAX OCTET STRING
270
+
271
+ -- Statistics for the User-based Security Model **********************
272
+
273
+ usmStats OBJECT IDENTIFIER ::= { usmMIBObjects 1 }
274
+
275
+ usmStatsUnsupportedSecLevels OBJECT-TYPE
276
+ SYNTAX Counter32
277
+ MAX-ACCESS read-only
278
+ STATUS current
279
+ DESCRIPTION "The total number of packets received by the SNMP
280
+ engine which were dropped because they requested a
281
+ securityLevel that was unknown to the SNMP engine
282
+ or otherwise unavailable.
283
+ "
284
+ ::= { usmStats 1 }
285
+
286
+ usmStatsNotInTimeWindows OBJECT-TYPE
287
+ SYNTAX Counter32
288
+ MAX-ACCESS read-only
289
+ STATUS current
290
+ DESCRIPTION "The total number of packets received by the SNMP
291
+ engine which were dropped because they appeared
292
+ outside of the authoritative SNMP engine's window.
293
+ "
294
+ ::= { usmStats 2 }
295
+
296
+ usmStatsUnknownUserNames OBJECT-TYPE
297
+ SYNTAX Counter32
298
+ MAX-ACCESS read-only
299
+ STATUS current
300
+ DESCRIPTION "The total number of packets received by the SNMP
301
+ engine which were dropped because they referenced a
302
+ user that was not known to the SNMP engine.
303
+ "
304
+ ::= { usmStats 3 }
305
+
306
+ usmStatsUnknownEngineIDs OBJECT-TYPE
307
+ SYNTAX Counter32
308
+ MAX-ACCESS read-only
309
+ STATUS current
310
+ DESCRIPTION "The total number of packets received by the SNMP
311
+ engine which were dropped because they referenced an
312
+ snmpEngineID that was not known to the SNMP engine.
313
+ "
314
+ ::= { usmStats 4 }
315
+
316
+ usmStatsWrongDigests OBJECT-TYPE
317
+ SYNTAX Counter32
318
+ MAX-ACCESS read-only
319
+ STATUS current
320
+ DESCRIPTION "The total number of packets received by the SNMP
321
+ engine which were dropped because they didn't
322
+ contain the expected digest value.
323
+ "
324
+ ::= { usmStats 5 }
325
+
326
+ usmStatsDecryptionErrors OBJECT-TYPE
327
+ SYNTAX Counter32
328
+ MAX-ACCESS read-only
329
+ STATUS current
330
+ DESCRIPTION "The total number of packets received by the SNMP
331
+ engine which were dropped because they could not be
332
+ decrypted.
333
+ "
334
+ ::= { usmStats 6 }
335
+
336
+ -- The usmUser Group ************************************************
337
+
338
+ usmUser OBJECT IDENTIFIER ::= { usmMIBObjects 2 }
339
+
340
+ usmUserSpinLock OBJECT-TYPE
341
+ SYNTAX TestAndIncr
342
+ MAX-ACCESS read-write
343
+ STATUS current
344
+ DESCRIPTION "An advisory lock used to allow several cooperating
345
+ Command Generator Applications to coordinate their
346
+ use of facilities to alter secrets in the
347
+ usmUserTable.
348
+ "
349
+ ::= { usmUser 1 }
350
+
351
+ -- The table of valid users for the User-based Security Model ********
352
+
353
+ usmUserTable OBJECT-TYPE
354
+ SYNTAX SEQUENCE OF UsmUserEntry
355
+ MAX-ACCESS not-accessible
356
+ STATUS current
357
+ DESCRIPTION "The table of users configured in the SNMP engine's
358
+ Local Configuration Datastore (LCD).
359
+
360
+ To create a new user (i.e., to instantiate a new
361
+ conceptual row in this table), it is recommended to
362
+ follow this procedure:
363
+
364
+ 1) GET(usmUserSpinLock.0) and save in sValue.
365
+
366
+ 2) SET(usmUserSpinLock.0=sValue,
367
+ usmUserCloneFrom=templateUser,
368
+ usmUserStatus=createAndWait)
369
+ You should use a template user to clone from
370
+ which has the proper auth/priv protocol defined.
371
+
372
+ If the new user is to use privacy:
373
+
374
+ 3) generate the keyChange value based on the secret
375
+ privKey of the clone-from user and the secret key
376
+ to be used for the new user. Let us call this
377
+ pkcValue.
378
+ 4) GET(usmUserSpinLock.0) and save in sValue.
379
+ 5) SET(usmUserSpinLock.0=sValue,
380
+ usmUserPrivKeyChange=pkcValue
381
+ usmUserPublic=randomValue1)
382
+ 6) GET(usmUserPulic) and check it has randomValue1.
383
+ If not, repeat steps 4-6.
384
+
385
+ If the new user will never use privacy:
386
+
387
+ 7) SET(usmUserPrivProtocol=usmNoPrivProtocol)
388
+
389
+ If the new user is to use authentication:
390
+
391
+ 8) generate the keyChange value based on the secret
392
+ authKey of the clone-from user and the secret key
393
+ to be used for the new user. Let us call this
394
+ akcValue.
395
+ 9) GET(usmUserSpinLock.0) and save in sValue.
396
+ 10) SET(usmUserSpinLock.0=sValue,
397
+ usmUserAuthKeyChange=akcValue
398
+ usmUserPublic=randomValue2)
399
+ 11) GET(usmUserPulic) and check it has randomValue2.
400
+ If not, repeat steps 9-11.
401
+
402
+ If the new user will never use authentication:
403
+
404
+ 12) SET(usmUserAuthProtocol=usmNoAuthProtocol)
405
+
406
+ Finally, activate the new user:
407
+
408
+ 13) SET(usmUserStatus=active)
409
+
410
+ The new user should now be available and ready to be
411
+ used for SNMPv3 communication. Note however that access
412
+ to MIB data must be provided via configuration of the
413
+ SNMP-VIEW-BASED-ACM-MIB.
414
+
415
+ The use of usmUserSpinlock is to avoid conflicts with
416
+ another SNMP command generator application which may
417
+ also be acting on the usmUserTable.
418
+ "
419
+ ::= { usmUser 2 }
420
+
421
+ usmUserEntry OBJECT-TYPE
422
+ SYNTAX UsmUserEntry
423
+ MAX-ACCESS not-accessible
424
+ STATUS current
425
+ DESCRIPTION "A user configured in the SNMP engine's Local
426
+ Configuration Datastore (LCD) for the User-based
427
+ Security Model.
428
+ "
429
+ INDEX { usmUserEngineID,
430
+ usmUserName
431
+ }
432
+ ::= { usmUserTable 1 }
433
+
434
+ UsmUserEntry ::= SEQUENCE
435
+ {
436
+ usmUserEngineID SnmpEngineID,
437
+ usmUserName SnmpAdminString,
438
+ usmUserSecurityName SnmpAdminString,
439
+ usmUserCloneFrom RowPointer,
440
+ usmUserAuthProtocol AutonomousType,
441
+ usmUserAuthKeyChange KeyChange,
442
+ usmUserOwnAuthKeyChange KeyChange,
443
+ usmUserPrivProtocol AutonomousType,
444
+ usmUserPrivKeyChange KeyChange,
445
+ usmUserOwnPrivKeyChange KeyChange,
446
+ usmUserPublic OCTET STRING,
447
+ usmUserStorageType StorageType,
448
+ usmUserStatus RowStatus
449
+ }
450
+
451
+ usmUserEngineID OBJECT-TYPE
452
+ SYNTAX SnmpEngineID
453
+ MAX-ACCESS not-accessible
454
+ STATUS current
455
+ DESCRIPTION "An SNMP engine's administratively-unique identifier.
456
+
457
+ In a simple agent, this value is always that agent's
458
+ own snmpEngineID value.
459
+
460
+ The value can also take the value of the snmpEngineID
461
+ of a remote SNMP engine with which this user can
462
+ communicate.
463
+ "
464
+ ::= { usmUserEntry 1 }
465
+
466
+ usmUserName OBJECT-TYPE
467
+ SYNTAX SnmpAdminString (SIZE(1..32))
468
+ MAX-ACCESS not-accessible
469
+ STATUS current
470
+ DESCRIPTION "A human readable string representing the name of
471
+ the user.
472
+
473
+ This is the (User-based Security) Model dependent
474
+ security ID.
475
+ "
476
+ ::= { usmUserEntry 2 }
477
+
478
+ usmUserSecurityName OBJECT-TYPE
479
+ SYNTAX SnmpAdminString
480
+ MAX-ACCESS read-only
481
+ STATUS current
482
+ DESCRIPTION "A human readable string representing the user in
483
+ Security Model independent format.
484
+
485
+ The default transformation of the User-based Security
486
+ Model dependent security ID to the securityName and
487
+ vice versa is the identity function so that the
488
+ securityName is the same as the userName.
489
+ "
490
+ ::= { usmUserEntry 3 }
491
+
492
+ usmUserCloneFrom OBJECT-TYPE
493
+ SYNTAX RowPointer
494
+ MAX-ACCESS read-create
495
+ STATUS current
496
+ DESCRIPTION "A pointer to another conceptual row in this
497
+ usmUserTable. The user in this other conceptual
498
+ row is called the clone-from user.
499
+
500
+ When a new user is created (i.e., a new conceptual
501
+ row is instantiated in this table), the privacy and
502
+ authentication parameters of the new user must be
503
+ cloned from its clone-from user. These parameters are:
504
+ - authentication protocol (usmUserAuthProtocol)
505
+ - privacy protocol (usmUserPrivProtocol)
506
+ They will be copied regardless of what the current
507
+ value is.
508
+
509
+ Cloning also causes the initial values of the secret
510
+ authentication key (authKey) and the secret encryption
511
+
512
+ key (privKey) of the new user to be set to the same
513
+ values as the corresponding secrets of the clone-from
514
+ user to allow the KeyChange process to occur as
515
+ required during user creation.
516
+
517
+ The first time an instance of this object is set by
518
+ a management operation (either at or after its
519
+ instantiation), the cloning process is invoked.
520
+ Subsequent writes are successful but invoke no
521
+ action to be taken by the receiver.
522
+ The cloning process fails with an 'inconsistentName'
523
+ error if the conceptual row representing the
524
+ clone-from user does not exist or is not in an active
525
+ state when the cloning process is invoked.
526
+
527
+ When this object is read, the ZeroDotZero OID
528
+ is returned.
529
+ "
530
+ ::= { usmUserEntry 4 }
531
+
532
+ usmUserAuthProtocol OBJECT-TYPE
533
+ SYNTAX AutonomousType
534
+ MAX-ACCESS read-create
535
+ STATUS current
536
+ DESCRIPTION "An indication of whether messages sent on behalf of
537
+ this user to/from the SNMP engine identified by
538
+ usmUserEngineID, can be authenticated, and if so,
539
+ the type of authentication protocol which is used.
540
+
541
+ An instance of this object is created concurrently
542
+ with the creation of any other object instance for
543
+ the same user (i.e., as part of the processing of
544
+ the set operation which creates the first object
545
+ instance in the same conceptual row).
546
+
547
+ If an initial set operation (i.e. at row creation time)
548
+ tries to set a value for an unknown or unsupported
549
+ protocol, then a 'wrongValue' error must be returned.
550
+
551
+ The value will be overwritten/set when a set operation
552
+ is performed on the corresponding instance of
553
+ usmUserCloneFrom.
554
+
555
+ Once instantiated, the value of such an instance of
556
+ this object can only be changed via a set operation to
557
+ the value of the usmNoAuthProtocol.
558
+
559
+ If a set operation tries to change the value of an
560
+
561
+ existing instance of this object to any value other
562
+ than usmNoAuthProtocol, then an 'inconsistentValue'
563
+ error must be returned.
564
+
565
+ If a set operation tries to set the value to the
566
+ usmNoAuthProtocol while the usmUserPrivProtocol value
567
+ in the same row is not equal to usmNoPrivProtocol,
568
+ then an 'inconsistentValue' error must be returned.
569
+ That means that an SNMP command generator application
570
+ must first ensure that the usmUserPrivProtocol is set
571
+ to the usmNoPrivProtocol value before it can set
572
+ the usmUserAuthProtocol value to usmNoAuthProtocol.
573
+ "
574
+ DEFVAL { usmNoAuthProtocol }
575
+ ::= { usmUserEntry 5 }
576
+
577
+ usmUserAuthKeyChange OBJECT-TYPE
578
+ SYNTAX KeyChange -- typically (SIZE (0 | 32)) for HMACMD5
579
+ -- typically (SIZE (0 | 40)) for HMACSHA
580
+ MAX-ACCESS read-create
581
+ STATUS current
582
+ DESCRIPTION "An object, which when modified, causes the secret
583
+ authentication key used for messages sent on behalf
584
+ of this user to/from the SNMP engine identified by
585
+ usmUserEngineID, to be modified via a one-way
586
+ function.
587
+
588
+ The associated protocol is the usmUserAuthProtocol.
589
+ The associated secret key is the user's secret
590
+ authentication key (authKey). The associated hash
591
+ algorithm is the algorithm used by the user's
592
+ usmUserAuthProtocol.
593
+
594
+ When creating a new user, it is an 'inconsistentName'
595
+ error for a set operation to refer to this object
596
+ unless it is previously or concurrently initialized
597
+ through a set operation on the corresponding instance
598
+ of usmUserCloneFrom.
599
+
600
+ When the value of the corresponding usmUserAuthProtocol
601
+ is usmNoAuthProtocol, then a set is successful, but
602
+ effectively is a no-op.
603
+
604
+ When this object is read, the zero-length (empty)
605
+ string is returned.
606
+
607
+ The recommended way to do a key change is as follows:
608
+
609
+ 1) GET(usmUserSpinLock.0) and save in sValue.
610
+ 2) generate the keyChange value based on the old
611
+ (existing) secret key and the new secret key,
612
+ let us call this kcValue.
613
+
614
+ If you do the key change on behalf of another user:
615
+
616
+ 3) SET(usmUserSpinLock.0=sValue,
617
+ usmUserAuthKeyChange=kcValue
618
+ usmUserPublic=randomValue)
619
+
620
+ If you do the key change for yourself:
621
+
622
+ 4) SET(usmUserSpinLock.0=sValue,
623
+ usmUserOwnAuthKeyChange=kcValue
624
+ usmUserPublic=randomValue)
625
+
626
+ If you get a response with error-status of noError,
627
+ then the SET succeeded and the new key is active.
628
+ If you do not get a response, then you can issue a
629
+ GET(usmUserPublic) and check if the value is equal
630
+ to the randomValue you did send in the SET. If so, then
631
+ the key change succeeded and the new key is active
632
+ (probably the response got lost). If not, then the SET
633
+ request probably never reached the target and so you
634
+ can start over with the procedure above.
635
+ "
636
+ DEFVAL { ''H } -- the empty string
637
+ ::= { usmUserEntry 6 }
638
+
639
+ usmUserOwnAuthKeyChange OBJECT-TYPE
640
+ SYNTAX KeyChange -- typically (SIZE (0 | 32)) for HMACMD5
641
+ -- typically (SIZE (0 | 40)) for HMACSHA
642
+ MAX-ACCESS read-create
643
+ STATUS current
644
+ DESCRIPTION "Behaves exactly as usmUserAuthKeyChange, with one
645
+ notable difference: in order for the set operation
646
+ to succeed, the usmUserName of the operation
647
+ requester must match the usmUserName that
648
+ indexes the row which is targeted by this
649
+ operation.
650
+ In addition, the USM security model must be
651
+ used for this operation.
652
+
653
+ The idea here is that access to this column can be
654
+ public, since it will only allow a user to change
655
+ his own secret authentication key (authKey).
656
+ Note that this can only be done once the row is active.
657
+
658
+ When a set is received and the usmUserName of the
659
+ requester is not the same as the umsUserName that
660
+ indexes the row which is targeted by this operation,
661
+ then a 'noAccess' error must be returned.
662
+
663
+ When a set is received and the security model in use
664
+ is not USM, then a 'noAccess' error must be returned.
665
+ "
666
+ DEFVAL { ''H } -- the empty string
667
+ ::= { usmUserEntry 7 }
668
+
669
+ usmUserPrivProtocol OBJECT-TYPE
670
+ SYNTAX AutonomousType
671
+ MAX-ACCESS read-create
672
+ STATUS current
673
+ DESCRIPTION "An indication of whether messages sent on behalf of
674
+ this user to/from the SNMP engine identified by
675
+ usmUserEngineID, can be protected from disclosure,
676
+ and if so, the type of privacy protocol which is used.
677
+
678
+ An instance of this object is created concurrently
679
+ with the creation of any other object instance for
680
+ the same user (i.e., as part of the processing of
681
+ the set operation which creates the first object
682
+ instance in the same conceptual row).
683
+
684
+ If an initial set operation (i.e. at row creation time)
685
+ tries to set a value for an unknown or unsupported
686
+ protocol, then a 'wrongValue' error must be returned.
687
+
688
+ The value will be overwritten/set when a set operation
689
+ is performed on the corresponding instance of
690
+ usmUserCloneFrom.
691
+
692
+ Once instantiated, the value of such an instance of
693
+ this object can only be changed via a set operation to
694
+ the value of the usmNoPrivProtocol.
695
+
696
+ If a set operation tries to change the value of an
697
+ existing instance of this object to any value other
698
+ than usmNoPrivProtocol, then an 'inconsistentValue'
699
+ error must be returned.
700
+
701
+ Note that if any privacy protocol is used, then you
702
+ must also use an authentication protocol. In other
703
+ words, if usmUserPrivProtocol is set to anything else
704
+ than usmNoPrivProtocol, then the corresponding instance
705
+ of usmUserAuthProtocol cannot have a value of
706
+
707
+ usmNoAuthProtocol. If it does, then an
708
+ 'inconsistentValue' error must be returned.
709
+ "
710
+ DEFVAL { usmNoPrivProtocol }
711
+ ::= { usmUserEntry 8 }
712
+
713
+ usmUserPrivKeyChange OBJECT-TYPE
714
+ SYNTAX KeyChange -- typically (SIZE (0 | 32)) for DES
715
+ MAX-ACCESS read-create
716
+ STATUS current
717
+ DESCRIPTION "An object, which when modified, causes the secret
718
+ encryption key used for messages sent on behalf
719
+ of this user to/from the SNMP engine identified by
720
+ usmUserEngineID, to be modified via a one-way
721
+ function.
722
+
723
+ The associated protocol is the usmUserPrivProtocol.
724
+ The associated secret key is the user's secret
725
+ privacy key (privKey). The associated hash
726
+ algorithm is the algorithm used by the user's
727
+ usmUserAuthProtocol.
728
+
729
+ When creating a new user, it is an 'inconsistentName'
730
+ error for a set operation to refer to this object
731
+ unless it is previously or concurrently initialized
732
+ through a set operation on the corresponding instance
733
+ of usmUserCloneFrom.
734
+
735
+ When the value of the corresponding usmUserPrivProtocol
736
+ is usmNoPrivProtocol, then a set is successful, but
737
+ effectively is a no-op.
738
+
739
+ When this object is read, the zero-length (empty)
740
+ string is returned.
741
+ See the description clause of usmUserAuthKeyChange for
742
+ a recommended procedure to do a key change.
743
+ "
744
+ DEFVAL { ''H } -- the empty string
745
+ ::= { usmUserEntry 9 }
746
+
747
+ usmUserOwnPrivKeyChange OBJECT-TYPE
748
+ SYNTAX KeyChange -- typically (SIZE (0 | 32)) for DES
749
+ MAX-ACCESS read-create
750
+ STATUS current
751
+ DESCRIPTION "Behaves exactly as usmUserPrivKeyChange, with one
752
+ notable difference: in order for the Set operation
753
+ to succeed, the usmUserName of the operation
754
+ requester must match the usmUserName that indexes
755
+
756
+ the row which is targeted by this operation.
757
+ In addition, the USM security model must be
758
+ used for this operation.
759
+
760
+ The idea here is that access to this column can be
761
+ public, since it will only allow a user to change
762
+ his own secret privacy key (privKey).
763
+ Note that this can only be done once the row is active.
764
+
765
+ When a set is received and the usmUserName of the
766
+ requester is not the same as the umsUserName that
767
+ indexes the row which is targeted by this operation,
768
+ then a 'noAccess' error must be returned.
769
+
770
+ When a set is received and the security model in use
771
+ is not USM, then a 'noAccess' error must be returned.
772
+ "
773
+ DEFVAL { ''H } -- the empty string
774
+ ::= { usmUserEntry 10 }
775
+
776
+ usmUserPublic OBJECT-TYPE
777
+ SYNTAX OCTET STRING (SIZE(0..32))
778
+ MAX-ACCESS read-create
779
+ STATUS current
780
+ DESCRIPTION "A publicly-readable value which can be written as part
781
+ of the procedure for changing a user's secret
782
+ authentication and/or privacy key, and later read to
783
+ determine whether the change of the secret was
784
+ effected.
785
+ "
786
+ DEFVAL { ''H } -- the empty string
787
+ ::= { usmUserEntry 11 }
788
+
789
+ usmUserStorageType OBJECT-TYPE
790
+ SYNTAX StorageType
791
+ MAX-ACCESS read-create
792
+ STATUS current
793
+ DESCRIPTION "The storage type for this conceptual row.
794
+
795
+ Conceptual rows having the value 'permanent' must
796
+ allow write-access at a minimum to:
797
+
798
+ - usmUserAuthKeyChange, usmUserOwnAuthKeyChange
799
+ and usmUserPublic for a user who employs
800
+ authentication, and
801
+ - usmUserPrivKeyChange, usmUserOwnPrivKeyChange
802
+ and usmUserPublic for a user who employs
803
+ privacy.
804
+
805
+ Note that any user who employs authentication or
806
+ privacy must allow its secret(s) to be updated and
807
+ thus cannot be 'readOnly'.
808
+
809
+ If an initial set operation tries to set the value to
810
+ 'readOnly' for a user who employs authentication or
811
+ privacy, then an 'inconsistentValue' error must be
812
+ returned. Note that if the value has been previously
813
+ set (implicit or explicit) to any value, then the rules
814
+ as defined in the StorageType Textual Convention apply.
815
+
816
+ It is an implementation issue to decide if a SET for
817
+ a readOnly or permanent row is accepted at all. In some
818
+ contexts this may make sense, in others it may not. If
819
+ a SET for a readOnly or permanent row is not accepted
820
+ at all, then a 'wrongValue' error must be returned.
821
+ "
822
+ DEFVAL { nonVolatile }
823
+ ::= { usmUserEntry 12 }
824
+
825
+ usmUserStatus OBJECT-TYPE
826
+ SYNTAX RowStatus
827
+ MAX-ACCESS read-create
828
+ STATUS current
829
+ DESCRIPTION "The status of this conceptual row.
830
+
831
+ Until instances of all corresponding columns are
832
+ appropriately configured, the value of the
833
+ corresponding instance of the usmUserStatus column
834
+ is 'notReady'.
835
+
836
+ In particular, a newly created row for a user who
837
+ employs authentication, cannot be made active until the
838
+ corresponding usmUserCloneFrom and usmUserAuthKeyChange
839
+ have been set.
840
+
841
+ Further, a newly created row for a user who also
842
+ employs privacy, cannot be made active until the
843
+ usmUserPrivKeyChange has been set.
844
+
845
+ The RowStatus TC [RFC2579] requires that this
846
+ DESCRIPTION clause states under which circumstances
847
+ other objects in this row can be modified:
848
+
849
+ The value of this object has no effect on whether
850
+ other objects in this conceptual row can be modified,
851
+ except for usmUserOwnAuthKeyChange and
852
+ usmUserOwnPrivKeyChange. For these 2 objects, the
853
+
854
+ value of usmUserStatus MUST be active.
855
+ "
856
+ ::= { usmUserEntry 13 }
857
+
858
+ -- Conformance Information *******************************************
859
+
860
+ usmMIBCompliances OBJECT IDENTIFIER ::= { usmMIBConformance 1 }
861
+ usmMIBGroups OBJECT IDENTIFIER ::= { usmMIBConformance 2 }
862
+
863
+ -- Compliance statements
864
+
865
+ usmMIBCompliance MODULE-COMPLIANCE
866
+ STATUS current
867
+ DESCRIPTION "The compliance statement for SNMP engines which
868
+ implement the SNMP-USER-BASED-SM-MIB.
869
+ "
870
+
871
+ MODULE -- this module
872
+ MANDATORY-GROUPS { usmMIBBasicGroup }
873
+
874
+ OBJECT usmUserAuthProtocol
875
+ MIN-ACCESS read-only
876
+ DESCRIPTION "Write access is not required."
877
+
878
+ OBJECT usmUserPrivProtocol
879
+ MIN-ACCESS read-only
880
+ DESCRIPTION "Write access is not required."
881
+ ::= { usmMIBCompliances 1 }
882
+
883
+ -- Units of compliance
884
+ usmMIBBasicGroup OBJECT-GROUP
885
+ OBJECTS {
886
+ usmStatsUnsupportedSecLevels,
887
+ usmStatsNotInTimeWindows,
888
+ usmStatsUnknownUserNames,
889
+ usmStatsUnknownEngineIDs,
890
+ usmStatsWrongDigests,
891
+ usmStatsDecryptionErrors,
892
+ usmUserSpinLock,
893
+ usmUserSecurityName,
894
+ usmUserCloneFrom,
895
+ usmUserAuthProtocol,
896
+ usmUserAuthKeyChange,
897
+ usmUserOwnAuthKeyChange,
898
+ usmUserPrivProtocol,
899
+ usmUserPrivKeyChange,
900
+ usmUserOwnPrivKeyChange,
901
+ usmUserPublic,
902
+ usmUserStorageType,
903
+ usmUserStatus
904
+ }
905
+ STATUS current
906
+ DESCRIPTION "A collection of objects providing for configuration
907
+ of an SNMP engine which implements the SNMP
908
+ User-based Security Model.
909
+ "
910
+ ::= { usmMIBGroups 1 }
911
+
912
+ END