home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume40 / netramet / part13 < prev    next >
Encoding:
Text File  |  1993-11-07  |  65.3 KB  |  2,095 lines

  1. Newsgroups: comp.sources.misc
  2. From: nevil@ccu1.aukuni.ac.nz (J Nevil Brownlee)
  3. Subject: v40i101:  netramet - Network Traffic Accounting Meter, Part13/25
  4. Message-ID: <1993Nov7.221152.12121@sparky.sterling.com>
  5. X-Md4-Signature: b4df06250bc3f4837d1d3789fae11928
  6. Sender: kent@sparky.sterling.com (Kent Landfield)
  7. Organization: Sterling Software
  8. Date: Sun, 7 Nov 1993 22:11:52 GMT
  9. Approved: kent@sparky.sterling.com
  10.  
  11. Submitted-by: nevil@ccu1.aukuni.ac.nz (J Nevil Brownlee)
  12. Posting-number: Volume 40, Issue 101
  13. Archive-name: netramet/part13
  14. Environment: INET, UNIX, DOS
  15.  
  16. #! /bin/sh
  17. # This is a shell archive.  Remove anything before this line, then feed it
  18. # into a shell via "sh file" or similar.  To overwrite existing files,
  19. # type "sh file -c".
  20. # Contents:  netramet/mib/mib.IAWG.txt netramet/src/apps/snmpd.c
  21. #   netramet/src/meter/include/flowhash.h
  22. # Wrapped by kent@sparky on Tue Nov  2 18:17:08 1993
  23. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin:$PATH ; export PATH
  24. echo If this archive is complete, you will see the following message:
  25. echo '          "shar: End of archive 13 (of 25)."'
  26. if test -f 'netramet/mib/mib.IAWG.txt' -a "${1}" != "-c" ; then 
  27.   echo shar: Will not clobber existing file \"'netramet/mib/mib.IAWG.txt'\"
  28. else
  29.   echo shar: Extracting \"'netramet/mib/mib.IAWG.txt'\" \(46845 characters\)
  30.   sed "s/^X//" >'netramet/mib/mib.IAWG.txt' <<'END_OF_FILE'
  31. X-- Internet Accounting MIB $Revision: 2.2, 16 Sep 93 $
  32. X-- $Principal-Author: cbrooks $
  33. X-- $Current-Author: nbrownlee @
  34. X
  35. X-- Internet Accounting Management Information Base
  36. X-- This following text defines an initial SNMP MIB for Internet Accounting.
  37. X-- For additional details, see RFC 1272, "Internet Accounting: Background",
  38. X-- C. Mills, D. Hirsch, and G. Ruth, and the Internet Draft
  39. X-- "Internet Accounting Architecture", Mills, Laube, and Ruth.
  40. X
  41. X
  42. XACCOUNTING-MIB DEFINITIONS ::= BEGIN
  43. X
  44. XIMPORTS experimental, OBJECT-TYPE, ObjectName, Counter, Gauge,
  45. X    NetworkAddress, TimeTicks  FROM RFC1155-SMI
  46. X    TRAP-TYPE FROM RFC1215;
  47. X
  48. Xinternet-accounting OBJECT IDENTIFIER ::= { experimental 99 }
  49. X
  50. Xcontrol        OBJECT IDENTIFIER ::= { internet-accounting 1 }
  51. X
  52. Xflowdata    OBJECT IDENTIFIER ::= { internet-accounting 2 }
  53. X
  54. Xruledata    OBJECT IDENTIFIER ::= { internet-accounting 3 }
  55. X
  56. Xactiondata    OBJECT IDENTIFIER ::= { internet-accounting 4 }
  57. X
  58. X
  59. X-- The AddressTuple construct:
  60. X-- In future might have any address for any layer in the protocol stack
  61. X-- (session, presentation, transport, application).  The intent here is
  62. X-- to represent the fact that the address tuple field can contain many
  63. X-- attributes.
  64. X
  65. X-- AddressTuple ::= SEQUENCE {
  66. X--    interface           [ 0] INTEGER OPTIONAL,        -- interface
  67. X
  68. X--    adjacent_type    [ 1] AddressType OPTIONAL,    -- adjacent
  69. X--    adjacent_address [ 2] NetWork_Address OPTIONAL,
  70. X--    adjacent_mask    [ 3] NetWork_Address OPTIONAL,
  71. X
  72. X--    peer_type        [ 4] AddressType OPTIONAL,    -- peer
  73. X--    peer_address     [ 5] NetWork_Address OPTIONAL,
  74. X--    peer_mask           [ 6] NetWork_Address OPTIONAL,
  75. X
  76. X--    detail_type      [ 7] AddressType OPTIONAL,    -- transport
  77. X--    detail_address   [ 8] NetWork_Address OPTIONAL,
  78. X--    detail_mask      [ 9] NetWork_Address OPTIONAL,
  79. X
  80. X--    subscriber_id    [10] OCTET STRING OPTIONAL    -- subscriber
  81. X--    subscriber_mask  [11] OCTET STRING OPTIONAL
  82. X--    }
  83. X
  84. X-- Within an address tuple the mask attributes are used to specify
  85. X-- which parts of the addresses must match exactly when address tuples
  86. X-- are compared.  For example peer_type = ipaddress, peer_address =
  87. X-- 130.216.0.0, peer_mask = 255.255.0.0 would match any peer address
  88. X-- representing an IP interface within network 130.216.
  89. X
  90. X-- As an example of types and values, here is an address tuple for a flow
  91. X-- carrying a stream of SMTP data over an ethernet:
  92. X--    adjacent type = ethernet,  adjacent address = 02-07-01-04-ED-4A
  93. X--    peer type = IP, peer address = 130.216.240.7
  94. X--    detail type = TCP, detail address = 25 (port number)
  95. X
  96. X-- The Network Address construct:
  97. X-- The intent here is that this address type represent a choice of N-1
  98. X-- layer addresses based on the protocol layer at which accounting is
  99. X-- done.  For example, if accounting is being performed at the
  100. X-- presentation level, then this address might be a session layer
  101. X-- address; if done at the transport level it might be an IP address.
  102. X-- The level at which accounting is done is the "peer" level, N.
  103. X
  104. X-- In the following, "adjacent" means the level below the current level
  105. X-- and "detail" means the level above it.  For IP, the adjacent layer
  106. X-- address might be the ethernet or 802 MAC layer address.  A better
  107. X-- encoding convention may be needed so that addresses at any layer can
  108. X-- be specified unambiguously.
  109. X
  110. X-- NetWorkAddress ::= CHOICE {
  111. X--    adjacentLayerAddress  [1] IMPLICIT OCTET STRING,
  112. X
  113. X--    ipAddress                [2] IMPLICIT IpAddress,
  114. X--    nsapAddress        [3] IMPLICIT OCTET STRING,
  115. X--    idprAddress        [4] IMPLICIT OCTET STRING,
  116. X--    decnetAddress        [5] IMPLICIT OCTET STRING,
  117. X--    ipxnetAddress        [6] IMPLICIT OCTET STRING,
  118. X--    ethertalkAddress      [7] IMPLICIT OCTET STRING,
  119. X
  120. X--    detailAddress         [7] IMPLICIT OCTET STRING
  121. X--    }
  122. X
  123. X-- The AddressType type:
  124. X-- The intent of this type is to indicate the type of address
  125. X-- that is being recorded.  This would probably be encoded as a
  126. X-- tag in the above NetworkAddress type if using full ASN.1.  Instead
  127. X-- we explicitly call it out as a separate value, and instantiate it
  128. X-- as a separate field.
  129. X
  130. XAddressType ::= INTEGER {
  131. X    adjacentlayer(1), ipaddress(2), nsapaddress(3),
  132. X    idpraddress(4), decnetaddress(5),
  133. X    ipxnetaddress(6), ethertalkaddress(7),
  134. X    detailaddress(8)
  135. X    }
  136. X
  137. X
  138. X--
  139. X-- The Control Group
  140. X--
  141. X
  142. XacctHighWaterMark OBJECT-TYPE
  143. X    SYNTAX  INTEGER (0..100)
  144. X    ACCESS  read-write
  145. X    STATUS  mandatory
  146. X    DESCRIPTION
  147. X    "A value expressed as a percent, interpreted by the meter as an
  148. X    indication of when to send a trap indicating that the management
  149. X    station should increase the polling frequency.  Values of 0% or
  150. X    100% disable the checking represented by this variable."
  151. X    ::= { control 1 }
  152. X
  153. XacctFloodMark OBJECT-TYPE
  154. X    SYNTAX  INTEGER (0..100)
  155. X    ACCESS  read-write
  156. X    STATUS  mandatory
  157. X    DESCRIPTION
  158. X    "A value expressed as a percent, interpreted by the meter as
  159. X    an indication of how full the flow record table should become
  160. X    before the meter should panic and start dumping the contents of
  161. X    the flow table to the management station in raw form.
  162. X    0% or 100% disables the checking represented by this variable."
  163. X    ::= { control 2 }
  164. X
  165. XacctInactivityTimeout OBJECT-TYPE
  166. X    SYNTAX  INTEGER
  167. X    ACCESS  read-write
  168. X    STATUS  mandatory
  169. X    DESCRIPTION
  170. X    "The time in seconds since the last packet seen (and the last
  171. X    report) after which the flow may be terminated."
  172. X    DEFVAL { 600 } -- 10 minutes
  173. X    ::= { control 3 }
  174. X
  175. XacctFlowSamplingRate OBJECT-TYPE
  176. X    SYNTAX  SEQUENCE OF FlowSamplingRate
  177. X    ACCESS  not-accessible
  178. X    STATUS  mandatory
  179. X    DESCRIPTION
  180. X    "One for each interface.  The paramater N for statistical counting.
  181. X    Set to zero to count every packet on this interface.  Set to N to
  182. X    count 1/Nth of the packets from this interface.  A meter should
  183. X    choose its own algorithm to introduce variance into the sampling
  184. X    so that exactly every Nth packet is not counted.  A sampling rate
  185. X    of 1 yields a normal counter."
  186. X    DEFVAL { 1 } -- Count every packet
  187. X    ::= { control 4 }
  188. X
  189. XFlowSamplingRate ::= SEQUENCE { rate INTEGER }
  190. X
  191. XacctCollectorInfo OBJECT-TYPE
  192. X    SYNTAX  SEQUENCE OF acctCollectorInfoEntry
  193. X    ACCESS  not-accessible
  194. X    STATUS  mandatory
  195. X    DESCRIPTION
  196. X    "Information about snmp peers which have collected flow data
  197. X    from this meter."
  198. X    ::= { control 5 }
  199. X
  200. XacctCollectorInfoEntry OBJECT-TYPE
  201. X    SYNTAX  AcctCollectorInfoEntry
  202. X    ACCESS  not-accessible
  203. X    STATUS  mandatory
  204. X    DESCRIPTION
  205. X    "Information about a particular collector."
  206. X    INDEX  { acctCollectorIndex }
  207. X    ::= { acctCollectorInfo 1 }
  208. X
  209. XAcctCollectorInfoEntry ::= SEQUENCE {
  210. X    acctCollectorIndex             INTEGER,
  211. X    acctCollectorPeerAddress         OCTET STRING,
  212. X    acctCollectorLastTime        TIMETICKS,
  213. X    acctCollectorPreviousTime        TIMETICKS
  214. X    }
  215. X
  216. XacctCollectorIndex OBJECT-TYPE
  217. X    SYNTAX  INTEGER
  218. X    ACCESS  read-only
  219. X    STATUS  mandatory
  220. X    DESCRIPTION
  221. X    "Selects an entry from the array of collector info entries."
  222. X    ::= { acctCollectorInfoEntry 1 }
  223. X
  224. XacctCollectorPeerAddress OBJECT-TYPE
  225. X    SYNTAX  OCTET STRING
  226. X    ACCESS  read-only
  227. X    STATUS  mandatory
  228. X    DESCRIPTION
  229. X    "Peer address of this collector."
  230. X    ::= { acctCollectorInfoEntry 2 }
  231. X
  232. XcacctCollectorLastTime OBJECT-TYPE
  233. X    SYNTAX  TIMETICKS
  234. X    ACCESS  read-only
  235. X    STATUS  mandatory
  236. X    DESCRIPTION
  237. X    "Time this collector last began a collection."
  238. X    ::= { acctCollectorInfoEntry 3 }
  239. X
  240. XacctCollectorPreviousTime OBJECT-TYPE
  241. X    SYNTAX  TIMETICKS
  242. X    ACCESS  read-only
  243. X    STATUS  mandatory
  244. X    DESCRIPTION
  245. X    "Time this collector began the collection before last."
  246. X    ::= { acctCollectorInfoEntry 4 }
  247. X
  248. XacctLastCollectTime OBJECT-TYPE
  249. X    SYNTAX  TIMETICKS
  250. X    ACCESS  read-write
  251. X    STATUS  mandatory
  252. X    DESCRIPTION
  253. X    "Time last collection of meter data began.  This variable will be
  254. X    written by a collector as the first step in making a collection.
  255. X    The meter will set its LastTime value to uptime and set its
  256. X    PreviousTime value to the old LastTime.  This allows the meter to
  257. X    recover flows which have been inactive since PreviousTime, for
  258. X    these have been collected at least once."
  259. X    ::= { control 6 }
  260. X
  261. XacctRuleSetInfo OBJECT-TYPE
  262. X    SYNTAX  SEQUENCE OF acctRuleInfoEntry
  263. X    ACCESS  not-accessible
  264. X    STATUS  mandatory
  265. X    DESCRIPTION
  266. X    "Array of information about the rule sets held in the meter,
  267. X    i.e. about each rule table and its accompanying action table."
  268. X    ::= { control 7 }
  269. X
  270. XacctRuleInfoEntry OBJECT-TYPE
  271. X    SYNTAX  AcctRuleInfoEntry
  272. X    ACCESS  not-accessible
  273. X    STATUS  mandatory
  274. X    DESCRIPTION
  275. X    "Information about a particular rule set."
  276. X    INDEX  { acctRuleInfoIndex }
  277. X    ::= { acctRuleSetInfo 1 }
  278. X
  279. XAcctRuleInfoEntry ::= SEQUENCE {
  280. X    acctRuleInfoIndex             INTEGER,
  281. X    acctRuleInfoRuleSize        INTEGER,
  282. X    acctRuleInfoActionSize        INTEGER
  283. X    }
  284. X
  285. XacctRuleInfoIndex OBJECT-TYPE
  286. X    SYNTAX  INTEGER
  287. X    ACCESS  read-write
  288. X    STATUS  mandatory
  289. X    DESCRIPTION
  290. X    "Selects an entry from the array of rule set info entries."
  291. X    ::= { acctRuleInfoEntry 1 }
  292. X
  293. XacctRuleInfoRuleSize OBJECT-TYPE
  294. X    SYNTAX  INTEGER
  295. X    ACCESS  read-write
  296. X    STATUS  mandatory
  297. X    DESCRIPTION
  298. X    "Number of rules in this table.  Setting this variable will
  299. X    cause the meter to allocate space for these rules."
  300. X    ::= { acctRuleInfoEntry 2 }
  301. X
  302. XacctRuleInfoActionSize OBJECT-TYPE
  303. X    SYNTAX  INTEGER
  304. X    ACCESS  read-write
  305. X    STATUS  mandatory
  306. X    DESCRIPTION
  307. X    "Number of actions in this table.  Setting this variable will
  308. X    cause the meter to allocate space for these actions, and will
  309. X    set the values of all variables in them to zero."
  310. X    ::= { acctRuleInfoEntry 3 }
  311. X
  312. XacctCurrentRuleSet OBJECT-TYPE
  313. X    SYNTAX  INTEGER
  314. X    ACCESS  read-write
  315. X    STATUS  mandatory
  316. X    DESCRIPTION
  317. X    "Index to the arrays of rule and action tables.  Specifies which
  318. X    set of rules and actions is currently being used for accounting by
  319. X    the meter.  When the manager sets this variable the meter will
  320. X    close its current rule set and start using the new one.  Flows
  321. X    created by the old rule set remain in memory, orphaned until their
  322. X    data has been collected."
  323. X    ::= { control 8 }
  324. X
  325. XacctEmergencyRuleSet OBJECT-TYPE
  326. X    SYNTAX  INTEGER
  327. X    ACCESS  read-write
  328. X    STATUS  mandatory
  329. X    DESCRIPTION
  330. X    "Index to the arrays of rule and action tables.  After a
  331. X    declareDataLoss trap the meter may switch to using the emergency
  332. X    rule set.  For this to be effective the manager must have
  333. X    downloaded an emergency rule set which uses a coarser collecting
  334. X    granularity."
  335. X    ::= { control 9 }
  336. X
  337. X
  338. X--
  339. X-- The Flow Table
  340. X--
  341. X
  342. X-- This is a table kept by a meter, with one entry for every flow
  343. X-- currently being accounted for.
  344. X
  345. X-- The variables kept for each flow comprise:
  346. X--    Housekeeping information for the flow.
  347. X--    The flow's "counters", i.e. its octet and PDU counts for each
  348. X--        direction, and its first and last packet times.
  349. X--    The flow's "keys", i.e. the information used to distinguish
  350. X--        packets for this particular flow.
  351. X
  352. X-- Each flow has at least one key, but "aggregate" flows may have more
  353. X-- than one key.  Every key is associated with a single flow, and every
  354. X-- PDU matching a key is counted in its associated flow's counters.
  355. X
  356. X-- Each packet which arrives at a meter is examined, and values for all
  357. X-- the "key" variables are extracted and assembled into a "packet key".
  358. X-- The set of current keys is searched to see whether this flow has
  359. X-- already been seen.  If it has, the packet is simply counted;
  360. X-- if not, the rules are consulted to create a new flow in which this
  361. X-- packet may be counted.  Once a flow has been created in this way a
  362. X-- collector will have to read the flow's key data just once.  After
  363. X-- that the collector needs only to read the flow's counts from time to
  364. X-- time.
  365. X
  366. X-- Each key has two AddressTuples, one for each of its end points.
  367. X-- Flows are bidirectional and have two sets of counters, one for each
  368. X-- of the two possible directions.  Since we may be accounting for
  369. X-- packets observed in transit along a network segment the choice of
  370. X-- "to" and "from" direction is arbitrary; "source" and "destination"
  371. X-- (abbreviated to "dest" elsewhere in this MIB) are specified for each
  372. X-- flow by the rules in the current rule set.  In the special case where
  373. X-- the address tuples are identical all packets are counted in the "to"
  374. X-- direction's counters.
  375. X
  376. X-- From time to time a collector may sweep the flow table so as collect
  377. X-- counts.  To reduce the number of SNMP requests required to do this,
  378. X-- two further tables provide alternative windows into the flow table.
  379. X
  380. X-- The Creation Table allows a collector to find the first entry created
  381. X-- after a specified time, then make successive getnext requests to find
  382. X-- all other entries created since that time.  Similarly, the Activity Table
  383. X-- allows a collector to find all the entries last counted after a specified
  384. X-- time.  Note that it is not sensible for the meter to keep the Activity
  385. X-- Table in LastTime order, since that would result in very active flows
  386. X-- being counted many times during the same collection.
  387. X
  388. X-- This scheme allows multiple collectors to independently use the same
  389. X-- meter; the collectors do not have to be synchronised and they may use
  390. X-- different collection intervals.
  391. X
  392. X-- A meter may reclaim the memory space used by flows (or keys) for which
  393. X-- no packets have been seen since lastCollectTime, or for an interval
  394. X-- longer than the inactivityTimeout, whichever is the longer.  The meter
  395. X-- may reuse flow indexes for flows thus reclaimed.
  396. X
  397. XacctFlowTable OBJECT-TYPE
  398. X    SYNTAX  SEQUENCE OF AcctFlowEntry
  399. X    ACCESS  not-accessible
  400. X    STATUS  mandatory
  401. X    DESCRIPTION
  402. X    "The list of all flows being kept for
  403. X    accounting purposes on this system."
  404. X    ::= { flowdata 1 }
  405. X
  406. XacctFlowEntry OBJECT-TYPE
  407. X    SYNTAX  AcctFlowEntry
  408. X    ACCESS  not-accessible
  409. X    STATUS  mandatory
  410. X    DESCRIPTION
  411. X    "The flow record for a particular flow."
  412. X    INDEX { acctFlowIndex }
  413. X    ::= { acctFlowTable 1 }
  414. X
  415. XAcctFlowEntry ::= SEQUENCE {
  416. X    acctFlowIndex           INTEGER,
  417. X    acctFlowStatus           INTEGER,
  418. X
  419. X    acctFlowSourceInterface       INTEGER,      -- Source Address Tuple
  420. X    acctFlowSourceAdjacentType       AddressType,
  421. X    acctFlowSourceAdjacentAddress  OCTET STRING,
  422. X    acctFlowSourceAdjacentMask       OCTET STRING,
  423. X    acctFlowSourcePeerType       AddressType,
  424. X    acctFlowSourcePeerTypeMask       AddressType,
  425. X    acctFlowSourcePeerAddress       OCTET STRING,
  426. X    acctFlowSourcePeerMask       OCTET STRING,
  427. X    acctFlowSourceDetailType       AddressType,
  428. X    acctFlowSourceDetailTypeMask   AddressType,
  429. X    acctFlowSourceDetailAddress       OCTET STRING,
  430. X    acctFlowSourceDetailMask       OCTET STRING,
  431. X    acctFlowSourceSubscriberID       OCTET STRING,
  432. X    acctFlowSourceSubscriberMask   OCTET STRING,
  433. X
  434. X    acctFlowDestInterface       INTEGER,      -- Dest Address Tuple
  435. X    acctFlowDestAdjacentType       AddressType,
  436. X    acctFlowDestAdjacentAddress       OCTET STRING,
  437. X    acctFlowDestAdjacentMask       OCTET STRING,
  438. X    acctFlowDestPeerType       AddressType,
  439. X    acctFlowDestPeerTypeMask       AddressType,
  440. X    acctFlowDestPeerAddress       OCTET STRING,
  441. X    acctFlowDestPeerMask       OCTET STRING,
  442. X    acctFlowDestDetailType       AddressType,
  443. X    acctFlowDestDetailTypeMask       AddressType,
  444. X    acctFlowDestDetailAddress       OCTET STRING,
  445. X    acctFlowDestDetailMask       OCTET STRING,
  446. X    acctFlowDestSubscriberID       OCTET STRING,
  447. X    acctFlowDestSubscriberMask       OCTET STRING,
  448. X
  449. X    acctFlowSubscriberID       OCTET STRING,  -- Session attributes
  450. X    acctFlowSessionID           INTEGER,
  451. X
  452. X    acctFlowPDUScale           INTEGER,      -- Rule Set attributes
  453. X    acctFlowOctetScale           INTEGER,
  454. X    acctFlowRuleSet           INTEGER,
  455. X    acctFlowType           INTEGER,
  456. X
  457. X    acctFlowToOctets           Counter,      -- Source-to-Dest counters
  458. X    acctFlowToPDUs           Counter,
  459. X    acctFlowFromOctets           Counter,      -- Dest-to-Source counters
  460. X    acctFlowFromPDUs           Counter,
  461. X
  462. X    acctFlowFirstTime           TimeTicks,      -- Activity times
  463. X    acctFlowLastTime           TimeTicks
  464. X    }
  465. XacctFlowIndex OBJECT-TYPE
  466. X    SYNTAX  INTEGER
  467. X    ACCESS  read-only
  468. X    STATUS  mandatory
  469. X    DESCRIPTION
  470. X    "The bucket number for this flow.  The different values for this
  471. X    variable need not be consecutive."
  472. X    ::= { acctFlowEntry 1 }
  473. X
  474. XacctFlowStatus OBJECT-TYPE
  475. X    SYNTAX  INTEGER { valid(1), invalid(2) }
  476. X    ACCESS  read-only
  477. X    STATUS  mandatory
  478. X    DESCRIPTION
  479. X    "Status of this flow.  Allows all table rows to be collected
  480. X    via a simple table sweep, whilst throwing out all flows that are
  481. X    invalid."
  482. X    ::= { acctFlowEntry 2 }
  483. X
  484. XacctFlowSourceInterface OBJECT-TYPE
  485. X    SYNTAX  INTEGER
  486. X    ACCESS  read-only
  487. X    STATUS  mandatory
  488. X    DESCRIPTION
  489. X    "Index of the interface associated with the source address for
  490. X    this flow.  This value is one of the values contained in the
  491. X    ifIndex field of the interfaces table."
  492. X    ::= { acctFlowEntry 3 }
  493. X
  494. XacctFlowSourceAdjacentType OBJECT-TYPE
  495. X    SYNTAX  AddressType
  496. X    ACCESS  read-only
  497. X    STATUS  mandatory
  498. X    DESCRIPTION
  499. X    "Adjacent address type of the source for this flow."
  500. X    ::= { acctFlowEntry 4 }
  501. X
  502. XacctFlowSourceAdjacentAddress OBJECT-TYPE
  503. X    SYNTAX  OCTET STRING -- actually NetworkAddress
  504. X    ACCESS  read-only
  505. X    STATUS  mandatory
  506. X    DESCRIPTION
  507. X    "Address of the adjacent device on the path for the source
  508. X    for this flow."
  509. X    ::= { acctFlowEntry 5 }
  510. X
  511. XacctFlowSourceAdjacentMask OBJECT-TYPE
  512. X    SYNTAX  OCTET STRING
  513. X    ACCESS  read-only
  514. X    STATUS  mandatory
  515. X    DESCRIPTION
  516. X    "1-bits in this mask indicate which bits must match when
  517. X    comparing the adjacent source address for this flow."
  518. X    ::= { acctFlowEntry 6 }
  519. X
  520. XacctFlowSourcePeerType OBJECT-TYPE
  521. X    SYNTAX  AddressType
  522. X    ACCESS  read-only
  523. X    STATUS  mandatory
  524. X    DESCRIPTION
  525. X    "Peer address type of the source for this flow."
  526. X    ::= { acctFlowEntry 7 }
  527. X
  528. XacctFlowSourcePeerTypeMask OBJECT-TYPE
  529. X    SYNTAX  AddressType
  530. X    ACCESS  read-only
  531. X    STATUS  mandatory
  532. X    DESCRIPTION
  533. X    "1-bits in this mask indicate which bits must match when
  534. X    comparing the source peer type for this flow."
  535. X    ::= { acctFlowEntry 8 }
  536. X
  537. XacctFlowSourcePeerAddress OBJECT-TYPE
  538. X    SYNTAX  OCTET STRING -- actually NetworkAddress
  539. X    ACCESS  read-only
  540. X    STATUS  mandatory
  541. X    DESCRIPTION
  542. X    "Address of the peer device for the source of this flow."
  543. X    ::= { acctFlowEntry 9 }
  544. X
  545. XacctFlowSourcePeerMask OBJECT-TYPE
  546. X    SYNTAX  OCTET STRING
  547. X    ACCESS  read-only
  548. X    STATUS  mandatory
  549. X    DESCRIPTION
  550. X    "1-bits in this mask indicate which bits must match when
  551. X    comparing the source peer address for this flow."
  552. X    ::= { acctFlowEntry 10 }
  553. X
  554. XacctFlowSourceDetailType OBJECT-TYPE
  555. X    SYNTAX  AddressType
  556. X    ACCESS  read-only
  557. X    STATUS  mandatory
  558. X    DESCRIPTION
  559. X    "Detail address type of the source for this flow."
  560. X    ::= { acctFlowEntry 11 }
  561. X
  562. XacctFlowSourceDetailTypeMask OBJECT-TYPE
  563. X    SYNTAX  AddressType
  564. X    ACCESS  read-only
  565. X    STATUS  mandatory
  566. X    DESCRIPTION
  567. X    "1-bits in this mask indicate which bits must match when
  568. X    comparing the source detail type for this flow."
  569. X    ::= { acctFlowEntry 12 }
  570. X
  571. XacctFlowSourceDetailAddress OBJECT-TYPE
  572. X    SYNTAX  OCTET STRING -- actually NetworkAddress
  573. X    ACCESS  read-only
  574. X    STATUS  mandatory
  575. X    DESCRIPTION
  576. X    "Address of the detail device for the source of this flow."
  577. X    ::= { acctFlowEntry 13 }
  578. X
  579. XacctFlowSourceDetailMask OBJECT-TYPE
  580. X    SYNTAX  OCTET STRING
  581. X    ACCESS  read-only
  582. X    STATUS  mandatory
  583. X    DESCRIPTION
  584. X    "1-bits in this mask indicate which bits must match when
  585. X    comparing the detail source address for this flow."
  586. X    ::= { acctFlowEntry 14 }
  587. X
  588. XacctFlowSourceSubscriberID OBJECT-TYPE
  589. X    SYNTAX  OCTET STRING
  590. X    ACCESS  read-only
  591. X    STATUS  mandatory
  592. X    DESCRIPTION
  593. X    "Subscriber ID associated with the source address for this flow."
  594. X    ::= { acctFlowEntry 15 }
  595. X
  596. XacctFlowSourceSubscriberMask OBJECT-TYPE
  597. X    SYNTAX  OCTET STRING
  598. X    ACCESS  read-only
  599. X    STATUS  mandatory
  600. X    DESCRIPTION
  601. X    "1-bits in this mask indicate which bits must match when
  602. X    comparing the source Subsccriber ID for this flow."
  603. X    ::= { acctFlowEntry 16 }
  604. X
  605. XacctFlowDestInterface OBJECT-TYPE
  606. X    SYNTAX  INTEGER
  607. X    ACCESS  read-only
  608. X    STATUS  mandatory
  609. X    DESCRIPTION
  610. X    "Index of the interface associated with the dest address for
  611. X    this flow.  This value is one of the values contained in the
  612. X    ifIndex field of the interfaces table."
  613. X    ::= { acctFlowEntry 17 }
  614. X
  615. XacctFlowDestAdjacentType OBJECT-TYPE
  616. X    SYNTAX  AddressType
  617. X    ACCESS  read-only
  618. X    STATUS  mandatory
  619. X    DESCRIPTION
  620. X    "Adjacent address type of the destination for this flow."
  621. X    ::= { acctFlowEntry 18 }
  622. X
  623. XacctFlowDestAdjacentAddress OBJECT-TYPE
  624. X    SYNTAX  OCTET STRING
  625. X    ACCESS  read-only
  626. X    STATUS  mandatory
  627. X    DESCRIPTION
  628. X    "Address of the adjacent device on the path for the destination
  629. X    for this flow."
  630. X    ::= { acctFlowEntry 19 }
  631. X
  632. XacctFlowDestAdjacentMask OBJECT-TYPE
  633. X    SYNTAX  OCTET STRING
  634. X    ACCESS  read-only
  635. X    STATUS  mandatory
  636. X    DESCRIPTION
  637. X    "1-bits in this mask indicate which bits must match when
  638. X    comparing the adjacent dest address for this flow."
  639. X    ::= { acctFlowEntry 20 }
  640. X
  641. XacctFlowDestPeerType OBJECT-TYPE
  642. X    SYNTAX  AddressType
  643. X    ACCESS  read-only
  644. X    STATUS  mandatory
  645. X    DESCRIPTION
  646. X    "Peer address type of the destination for this flow."
  647. X    ::= { acctFlowEntry 21 }
  648. X
  649. XacctFlowDestPeerTypeMask OBJECT-TYPE
  650. X    SYNTAX  AddressType
  651. X    ACCESS  read-only
  652. X    STATUS  mandatory
  653. X    DESCRIPTION
  654. X    "1-bits in this mask indicate which bits must match when
  655. X    comparing the dest peer address for this flow."
  656. X    ::= { acctFlowEntry 22 }
  657. X
  658. XacctFlowDestPeerAddress OBJECT-TYPE
  659. X    SYNTAX  OCTET STRING
  660. X    ACCESS  read-only
  661. X    STATUS  mandatory
  662. X    DESCRIPTION
  663. X    "Address of the peer device for the destination of this flow."
  664. X    ::= { acctFlowEntry 23 }
  665. X
  666. XacctFlowDestPeerMask OBJECT-TYPE
  667. X    SYNTAX  OCTET STRING
  668. X    ACCESS  read-only
  669. X    STATUS  mandatory
  670. X    DESCRIPTION
  671. X    "1-bits in this mask indicate which bits must match when
  672. X    comparing the dest peer type for this flow."
  673. X    ::= { acctFlowEntry 24 }
  674. X
  675. XacctFlowDestDetailType OBJECT-TYPE
  676. X    SYNTAX  AddressType
  677. X    ACCESS  read-only
  678. X    STATUS  mandatory
  679. X    DESCRIPTION
  680. X    "Detail address type for the destination of this flow."
  681. X    ::= { acctFlowEntry 25 }
  682. X
  683. XacctFlowDestDetailTypeMask OBJECT-TYPE
  684. X    SYNTAX  AddressType
  685. X    ACCESS  read-only
  686. X    STATUS  mandatory
  687. X    DESCRIPTION
  688. X    "1-bits in this mask indicate which bits must match when
  689. X    comparing the dest detail type for this flow."
  690. X    ::= { acctFlowEntry 26 }
  691. X
  692. XacctFlowDestDetailAddress OBJECT-TYPE
  693. X    SYNTAX  OCTET STRING -- actually NetworkAddress
  694. X    ACCESS  read-only
  695. X    STATUS  mandatory
  696. X    DESCRIPTION
  697. X    "Address of the detail device for the destination of this flow."
  698. X    ::= { acctFlowEntry 27 }
  699. X
  700. XacctFlowDestDetailMask OBJECT-TYPE
  701. X    SYNTAX  OCTET STRING
  702. X    ACCESS  read-only
  703. X    STATUS  mandatory
  704. X    DESCRIPTION
  705. X    "1-bits in this mask indicate which bits must match when
  706. X    comparing the detail destination address for this flow."
  707. X    ::= { acctFlowEntry 28 }
  708. X
  709. XacctFlowDestSubscriberID OBJECT-TYPE
  710. X    SYNTAX  OCTET STRING
  711. X    ACCESS  read-only
  712. X    STATUS  mandatory
  713. X    DESCRIPTION
  714. X    "Subscriber ID associated with the dest address for this flow."
  715. X    ::= { acctFlowEntry 29 }
  716. X
  717. XacctFlowDestSubscriberMask OBJECT-TYPE
  718. X    SYNTAX  OCTET STRING
  719. X    ACCESS  read-only
  720. X    STATUS  mandatory
  721. X    DESCRIPTION
  722. X    "1-bits in this mask indicate which bits must match when
  723. X    comparing the dest Subsccriber ID for this flow."
  724. X    ::= { acctFlowEntry 30 }
  725. X
  726. XacctFlowSubscriberID OBJECT-TYPE
  727. X    SYNTAX  OCTET STRING
  728. X    ACCESS  read-only
  729. X    STATUS  mandatory
  730. X    DESCRIPTION
  731. X    "Subscriber ID for this flow, not associated with flow direction."
  732. X    ::= { acctFlowEntry 31 }
  733. X
  734. XacctFlowSessionID OBJECT-TYPE
  735. X    SYNTAX  OCTET STRING
  736. X    ACCESS  read-only
  737. X    STATUS  mandatory
  738. X    DESCRIPTION
  739. X    "Session ID for this flow.  Such an ID might be allocated by a
  740. X    network access server to distinguish a series of sessions between
  741. X    the same pair of addresses, which would otherwise appear to be
  742. X    parts of the same accounting flow"
  743. X    ::= { acctFlowEntry 32 }
  744. X
  745. XacctFlowPDUScale OBJECT-TYPE
  746. X    SYNTAX  INTEGER (1..127)
  747. X    ACCESS  read-only
  748. X    STATUS  mandatory
  749. X    DESCRIPTION
  750. X    "The scale factor applied to this particular flow.  Indicates
  751. X    the number of bits the PDU counter values should be moved left
  752. X    to obtain the actual values."
  753. X    ::= { acctFlowEntry 33 }
  754. X
  755. XacctFlowOctetScale OBJECT-TYPE
  756. X    SYNTAX  INTEGER (1..127)
  757. X    ACCESS  read-only
  758. X    STATUS  mandatory
  759. X    DESCRIPTION
  760. X    "The scale factor applied to this particular flow.  Indicates
  761. X    the number of bits the octet counter values should be moved left
  762. X    to obtain the actual values."
  763. X    ::= { acctFlowEntry 34 }
  764. X
  765. XacctFlowRuleSet OBJECT-TYPE
  766. X    SYNTAX  INTEGER
  767. X    ACCESS  read-only
  768. X    STATUS  mandatory
  769. X    DESCRIPTION
  770. X    "The rule set which created this flow."
  771. X    ::= { acctFlowEntry 35 }
  772. X
  773. XacctFlowType OBJECT-TYPE
  774. X    SYNTAX  INTEGER { count(1), tally(2), aggregate(3) }
  775. X    ACCESS  read-only
  776. X    STATUS  mandatory
  777. X    DESCRIPTION
  778. X    "Type of flow.  Details are given for acctRuleAction (below)."
  779. X    ::= { acctFlowEntry 36 }
  780. X
  781. XacctFlowToOctets OBJECT-TYPE
  782. X    SYNTAX  Counter
  783. X    ACCESS  read-only
  784. X    STATUS  mandatory
  785. X    DESCRIPTION
  786. X    "The count of octets flowing from source to dest address and
  787. X    being delivered to the protocol level being metered.  In the
  788. X    case of IP this would count the number of octets delivered to
  789. X    the IP level."
  790. X    ::= { acctFlowEntry 37 }
  791. X
  792. XacctFlowToPDUs OBJECT-TYPE
  793. X    SYNTAX  Counter
  794. X    ACCESS  read-only
  795. X    STATUS  mandatory
  796. X    DESCRIPTION
  797. X    "The count of protocol packets flowing from source to dest
  798. X    address and being delivered to the protocol level being metered.
  799. X    In the case of IP, for example, this would count the IP packets
  800. X    delivered to the IP protocol level."
  801. X    ::= { acctFlowEntry 38 }
  802. X
  803. XacctFlowFromOctets OBJECT-TYPE
  804. X    SYNTAX  Counter
  805. X    ACCESS  read-only
  806. X    STATUS  mandatory
  807. X    DESCRIPTION
  808. X    "The count of octets flowing from dest to source address and
  809. X    being delivered to the protocol level being metered."
  810. X    ::= { acctFlowEntry 39 }
  811. X
  812. XacctFlowFromPDUs OBJECT-TYPE
  813. X    SYNTAX  Counter
  814. X    ACCESS  read-only
  815. X    STATUS  mandatory
  816. X    DESCRIPTION
  817. X    "The count of protocol packets flowing from dest to source
  818. X    address and being delivered to the protocol level being metered.
  819. X    In the case of IP, for example, this would count the IP packets
  820. X    delivered to the IP protocol level."
  821. X    ::= { acctFlowEntry 40 }
  822. X
  823. XacctFlowFirstTime OBJECT-TYPE
  824. X    SYNTAX  Timeticks
  825. X    ACCESS  read-only
  826. X    STATUS  mandatory
  827. X    DESCRIPTION
  828. X    "The time at which this flow was first entered in the table"
  829. X    ::= { acctFlowEntry 41 }
  830. X
  831. XacctFlowLastTime OBJECT-TYPE
  832. X    SYNTAX  Timeticks
  833. X    ACCESS  read-only
  834. X    STATUS  mandatory
  835. X    DESCRIPTION
  836. X    "The last time this flow had activity, i.e. the time of arrival
  837. X    of the last PDU belonging to this flow."
  838. X    ::= { acctFlowEntry 42 }
  839. X
  840. X
  841. X--
  842. X-- The Creation Table
  843. X--
  844. X
  845. XacctCreationTable OBJECT-TYPE
  846. X    SYNTAX  SEQUENCE OF AcctCreationEntry
  847. X    ACCESS  not-accessible
  848. X    STATUS  mandatory
  849. X    DESCRIPTION
  850. X    "Window into the Flow Table.  Allows a collector to find all
  851. X    flows wich were created after a given time."
  852. X    ::= { flowdata 2 }
  853. X
  854. XacctCreationEntry OBJECT-TYPE
  855. X    SYNTAX  AcctCreationEntry
  856. X    ACCESS  not-accessible
  857. X    STATUS   mandatory
  858. X    DESCRIPTION
  859. X    "The Creation Entry for a particular flow."
  860. X    INDEX { acctCreationTime, acctCreationIndex }
  861. X    ::= { acctCreationTable 1 }
  862. X
  863. XAcctCreationEntry ::= SEQUENCE {
  864. X    acctCreationTime         TimeTicks,
  865. X    acctCreationIndex         INTEGER
  866. X    }
  867. XacctCreationTime OBJECT-TYPE
  868. X    SYNTAX  TimeTicks
  869. X    ACCESS  read-only
  870. X    STATUS  mandatory
  871. X    DESCRIPTION
  872. X    "Earliest time after which a required flow could
  873. X    have been created."
  874. X    ::= { acctCreationEntry 1 }
  875. X
  876. XacctCreationIndex OBJECT-TYPE
  877. X    SYNTAX  INTEGER
  878. X    ACCESS  read-only
  879. X    STATUS  mandatory
  880. X    DESCRIPTION
  881. X    "Index of next entry in flow table created after Creation Time."
  882. X    ::= { acctCreationEntry 2 }
  883. X
  884. X
  885. X--
  886. X-- The Activity Table
  887. X--
  888. X
  889. XacctActivityTable OBJECT-TYPE
  890. X    SYNTAX  SEQUENCE OF AcctActivityEntry
  891. X    ACCESS  not-accessible
  892. X    STATUS   mandatory
  893. X    DESCRIPTION
  894. X    "Window into the Flow Table.  Allows a collector to find all
  895. X    flows wich were last used after a given time."
  896. X    ::= { flowdata 3 }
  897. X
  898. XacctActivityEntry OBJECT-TYPE
  899. X    SYNTAX  AcctActivityEntry
  900. X    ACCESS  not-accessible
  901. X    STATUS  mandatory
  902. X    DESCRIPTION
  903. X        "The Activity Entry for a particular flow."
  904. X    INDEX { acctActivityTime, acctActivityIndex }
  905. X    ::= { acctActivityTable 1 }
  906. X
  907. XAcctActivityEntry ::= SEQUENCE {
  908. X    acctActivitytTime         TimeTicks,
  909. X    acctActivityIndex        INTEGER
  910. X    }
  911. XacctActivityTime OBJECT-TYPE
  912. X    SYNTAX  TimeTicks
  913. X    ACCESS  read-only
  914. X    STATUS  mandatory
  915. X    DESCRIPTION
  916. X    "Earliest time after which a required flow could have
  917. X    been active."
  918. X    ::= { acctActivityEntry 1 }
  919. X
  920. XacctActivityIndex OBJECT-TYPE
  921. X    SYNTAX  INTEGER
  922. X    ACCESS  read-only
  923. X    STATUS  mandatory
  924. X    DESCRIPTION
  925. X    "Index of next entry in flow table active after Active Time."
  926. X    ::= { acctActivityEntry 2 }
  927. X
  928. X
  929. X--
  930. X-- The Activity Column Table
  931. X--
  932. X
  933. XacctActivityColumnTable OBJECT-TYPE
  934. X    SYNTAX  SEQUENCE OF AcctColumnEntry
  935. X    ACCESS  not-accessible
  936. X    STATUS   mandatory
  937. X    DESCRIPTION
  938. X    "Window into the Flow Table.  Allows a collector to find all
  939. X    flows wich were last used after a given time, and to retrieve
  940. X    data values for a specified attribute of each active flow."
  941. X    ::= { flowdata 4 }
  942. X
  943. XacctColumnEntry OBJECT-TYPE
  944. X    SYNTAX  AcctColumnEntry
  945. X    ACCESS  not-accessible
  946. X    STATUS  mandatory
  947. X    DESCRIPTION
  948. X        "The Activity Column Entry for a particular flow."
  949. X    INDEX { acctColumnAttribute, acctColumnTime, acctColumnIndex }
  950. X    ::= { acctActivityColumnTable 1 }
  951. X
  952. XAcctColumnEntry ::= SEQUENCE {
  953. X    acctColumnAttribute        INTEGER,
  954. X    acctColumntTime         TimeTicks,
  955. X    acctColumnIndex        INTEGER,
  956. X    acctColumnData        OPAQUE
  957. X    }
  958. XacctColumnAttribute OBJECT-TYPE
  959. X    SYNTAX  INTEGER { Null(0),
  960. X    FlowIndex(1),FlowStatus(2),
  961. X
  962. X    FlowSourceInterface(3),    -- Source Address Tuple
  963. X    FlowSourceAdjacentType(4),
  964. X    FlowSourceAdjacentAddress(5),FlowSourceAdjacentMask(6),
  965. X    FlowSourcePeerType(7),FlowSourcePeerTypeMask(8),
  966. X    FlowSourcePeerAddress(9),FlowSourcePeerMask(10),
  967. X    FlowSourceDetailType(11),FlowSourceDetailTypeMask(12),
  968. X    FlowSourceDetailAddress(13),FlowSourceDetailMask(14),
  969. X    FlowSourceSubscriberID(15),FlowSourceSubscriberMask(16),
  970. X
  971. X    FlowDestInterface(17),    -- Dest Address Tuple
  972. X    FlowDestAdjacentType(18),
  973. X    FlowDestAdjacentAddress(19),FlowDestAdjacentMask(20),
  974. X    FlowDestPeerType(21),FlowDestPeerTypeMask(22),
  975. X    FlowDestPeerAddress(23),FlowDestPeerMask(24),
  976. X    FlowDestDetailType(25),FlowDestDetailTypeMask(26),
  977. X    FlowDestDetailAddress(27),FlowDestDetailMask(28),
  978. X    FlowDestSubscriberID(29),FlowDestSubscriberMask(30),
  979. X
  980. X    FlowSubscriberID(31),    -- Session attributes
  981. X    FlowSessionID(32),
  982. X
  983. X    FlowPDUScale(33),    -- Rule Set attributes
  984. X    FlowOctetScale(34),
  985. X    FlowRuleSet(35),
  986. X    FlowType(36),
  987. X
  988. X    FlowToOctets(37),    -- Source-to-Dest counters
  989. X    FlowToPDUs(38),
  990. X    FlowFromOctets(39),    -- Dest-to-Source counters
  991. X    FlowFromPDUs(40),
  992. X
  993. X    FlowFirstTime(41),    -- Activity times
  994. X    FlowLastTime(42)
  995. X    }
  996. X    ACCESS  read-only
  997. X    STATUS  mandatory
  998. X    DESCRIPTION
  999. X    "Attribute for which values are required from active flows."
  1000. X    ::= { acctColumnEntry 1 }
  1001. X
  1002. XacctColumnTime OBJECT-TYPE
  1003. X    SYNTAX  TimeTicks
  1004. X    ACCESS  read-only
  1005. X    STATUS  mandatory
  1006. X    DESCRIPTION
  1007. X    "Earliest time after which a required flow could have
  1008. X    been active."
  1009. X    ::= { acctColumnEntry 2 }
  1010. X
  1011. XacctColumnIndex OBJECT-TYPE
  1012. X    SYNTAX  INTEGER
  1013. X    ACCESS  read-only
  1014. X    STATUS  mandatory
  1015. X    DESCRIPTION
  1016. X    "Index of next entry in flow table active after acctColumnTime."
  1017. X    ::= { acctColumnEntry 3 }
  1018. X
  1019. XacctColumnFlowData OBJECT-TYPE
  1020. X    SYNTAX  OPAQUE
  1021. X    ACCESS  read-only
  1022. X    STATUS  mandatory
  1023. X    DESCRIPTION
  1024. X    "Collection of attribute data for flows active after
  1025. X    acctColumnTime.  Within the opaque object is a sequence of
  1026. X    { flow -1, attribute value } pairs, one for each active flow.
  1027. X    The end of the sequence is marked by a flow -1 value of 0
  1028. X    if there are no more rows in this column, and 1 otherwise."
  1029. X    ::= { acctColumnEntry 4 }
  1030. X
  1031. X
  1032. X--
  1033. X-- The Rule Table
  1034. X--
  1035. X
  1036. X-- This is an array of rule tables; the one in use is selected by
  1037. X-- CurrentRuleSet.  To change the rule set the manager chooses a set
  1038. X-- number which is not in use, downloads the new rule set there, then
  1039. X-- writes the new set number into CurrentRuleSet.  Several rule sets can
  1040. X-- be held in a meter so that the manager can change thr rules easily,
  1041. X-- for example with time of day.  Note that the manager may not change
  1042. X-- rules in the current rule set!
  1043. X
  1044. XacctRuleTable OBJECT-TYPE
  1045. X    SYNTAX  SEQUENCE OF AcctRuleEntry
  1046. X    ACCESS  not-accessible
  1047. X    STATUS   mandatory
  1048. X    DESCRIPTION
  1049. X        "The list of rules used to determine the
  1050. X    granularity of accounting data."
  1051. X    ::= { ruledata 1 }
  1052. X
  1053. XacctRuleEntry OBJECT-TYPE
  1054. X    SYNTAX  AcctRuleEntry
  1055. X    ACCESS  not-accessible
  1056. X    STATUS   mandatory
  1057. X    DESCRIPTION
  1058. X        "The rule record itself."
  1059. X    INDEX { acctRuleSet, acctRuleIndex }
  1060. X    ::= { acctRuleTable 1 }
  1061. X
  1062. XAcctRuleEntry ::= SEQUENCE {
  1063. X    acctRuleSet             INTEGER,
  1064. X    acctRuleIndex         INTEGER,
  1065. X    acctRuleSelector         INTEGER,     -- what to select on
  1066. X    acctRuleMask         OCTET STRING,     -- mask value
  1067. X    acctRuleMatchedValue     OCTET STRING,     -- matched value
  1068. X    acctRuleAction          INTEGER,     -- action to take
  1069. X    acctRuleJumpIndex         INTEGER     -- where to go
  1070. X    }
  1071. X
  1072. XacctRuleSet OBJECT-TYPE
  1073. X    SYNTAX  INTEGER
  1074. X    ACCESS  read-write
  1075. X    STATUS  mandatory
  1076. X    DESCRIPTION
  1077. X    "Selects a table from the array of rule tables."
  1078. X    ::= { acctRuleEntry 1 }
  1079. X
  1080. XacctRuleIndex OBJECT-TYPE
  1081. X    SYNTAX  INTEGER
  1082. X    ACCESS  read-write
  1083. X    STATUS  mandatory
  1084. X    DESCRIPTION
  1085. X    "The index into the Rule table.  N.B: These values will
  1086. X    often be consecutive, given the fall-through semantics of
  1087. X    processing the table."
  1088. X    ::= { acctRuleEntry 2 }
  1089. X
  1090. XacctRuleSelector OBJECT-TYPE
  1091. X    SYNTAX  INTEGER { Null(0),
  1092. X--    FlowIndex(1),FlowStatus(2),
  1093. X
  1094. X    FlowSourceInterface(3),
  1095. X    FlowSourceAdjacentType(4),FlowSourceAdjacentAddress(5),
  1096. X--    FlowSourceAdjacentMask(6),
  1097. X    FlowSourcePeerType(7),
  1098. X--    FlowSourcePeerTypeMask(8),
  1099. X    FlowSourcePeerAddress(9),
  1100. X--    FlowSourcePeerMask(10),
  1101. X    FlowSourceDetailType(11),
  1102. X--    FlowSourceDetailTypeMask(12),
  1103. X    FlowSourceDetailAddress(13),
  1104. X--    FlowSourceDetailMask(14),
  1105. X    FlowSourceSubscriberID(15),
  1106. X--    FlowSourceSubscriberMask(16),
  1107. X
  1108. X    FlowDestInterface(17),
  1109. X    FlowDestAdjacentType(18),FlowDestAdjacentAddress(19),
  1110. X--    FlowDestAdjacentMask(20),
  1111. X    FlowDestPeerType(21),
  1112. X--    FlowDestPeerTypeMask(22),
  1113. X    FlowDestPeerAddress(23),
  1114. X--    FlowDestPeerMask(24),
  1115. X    FlowDestDetailType(25),
  1116. X--    FlowDestDetailTypeMask(26),
  1117. X    FlowDestDetailAddress(27),
  1118. X--    FlowDestDetailMask(28),
  1119. X    FlowDestSubscriberID(29),
  1120. X--    FlowDestSubscriberMask(30),
  1121. X
  1122. X    FlowSubscriberID(31),FlowSessionID(32),
  1123. X    }
  1124. X    ACCESS  read-write
  1125. X    STATUS  mandatory
  1126. X    DESCRIPTION
  1127. X    "Defines the source of the value to match.  Null(0) is a
  1128. X    special case; it always succeeds."
  1129. X    ::= { acctRuleEntry 3 }
  1130. X
  1131. XacctRuleMask OBJECT-TYPE
  1132. X    SYNTAX  OCTET STRING
  1133. X    ACCESS  read-write
  1134. X    STATUS  mandatory
  1135. X    DESCRIPTION
  1136. X    "The initial mask used to compute the desired value, encoded
  1137. X    as an OCTET STRING."
  1138. X    ::= { acctRuleEntry 4 }
  1139. X
  1140. XacctRuleMatchedValue OBJECT-TYPE
  1141. X    SYNTAX  OCTET STRING
  1142. X    ACCESS  read-write
  1143. X    STATUS  mandatory
  1144. X    DESCRIPTION
  1145. X    "The resulting value to be matched for equality.
  1146. X    Specifically, if the attribute chosen by the acctRuleSelector
  1147. X    logically ANDed with the mask specified by the acctRuleMask
  1148. X    equals the value specified in the acctRuleMatchedValue, then
  1149. X    continue processing the table entry based on the action
  1150. X    specified by the acctRuleAction entry.  Otherwise, proceed to
  1151. X    the next entry in the rule table."
  1152. X    ::= { acctRuleEntry 5 }
  1153. X
  1154. XacctRuleAction OBJECT-TYPE
  1155. X    SYNTAX  INTEGER { count(1), tally(2), aggregate(3),
  1156. X    succeed(4), fail(5),
  1157. X    pushto(6), popto(7),
  1158. X    goto(8) }
  1159. X    ACCESS  read-write
  1160. X    STATUS  mandatory
  1161. X    DESCRIPTION
  1162. X    "The action to be taken if there is a match between this rule
  1163. X    and the PDU being considered.  The meter maintains a stack of
  1164. X    indexes of rules which have been successfully matched, which
  1165. X    provides information needed for counting and tallying.
  1166. X
  1167. X    Count(1) counts in a flowEntry which takes values from the PDU
  1168. X        and masks from the matched rules.  There is no ActionEntry
  1169. X        associated with a count flow.
  1170. X    Tally(2) counts in a flowEntry which takes values from the PDU
  1171. X        and masks from acctAction[acctRuleJumpIndex].  Fields are
  1172. X        only tallied if the masks in their ActionEntry are non-zero.
  1173. X        Values for fields not being tallied are taken from the
  1174. X        ActionEntry.
  1175. X    Aggregate(3) counts in a flowEntry which takes all its values
  1176. X        from acctAction[acctRuleJumpIndex].  An aggregate flow
  1177. X        makes no reference to the matched rules, and many rules
  1178. X        may count in the same aggregate flow.
  1179. X
  1180. X    Succeed(4) terminates rule matching and indicates that the PDU
  1181. X        was successfuly matched.  It will not be counted, and the
  1182. X        meter will not try to match it again.
  1183. X    Fail(5) terminates rule matching and indicates that the PDU
  1184. X        was not matched.  The meter may try to match it again, for
  1185. X        example with the source and dest keys interchanged.
  1186. X
  1187. X    Pushto(6) tells the meter to use RuleJumpIndex as the index of
  1188. X        the next rule to match.  It also saves the current rule
  1189. X        -1 in the stack.
  1190. X    Popto(7) tells the meter to use RuleJumpIndex as the index of
  1191. X        the next rule to match.  It also deletes the top entry
  1192. X        from the stack.
  1193. X
  1194. X    Goto(8) tells the meter to use RuleJumpIndex as the index of
  1195. X        the next rule to match.  The stack is not changed."
  1196. X    ::= { acctRuleEntry 6 }
  1197. X
  1198. XacctRuleJumpIndex OBJECT-TYPE
  1199. X    SYNTAX  INTEGER
  1200. X    ACCESS  read-write
  1201. X    STATUS  mandatory
  1202. X    DESCRIPTION
  1203. X    "An index into the Rule table.  Where to restart the search.
  1204. X    Must take on one of the values allowed for acctRuleIndex."
  1205. X    ::= { acctRuleEntry 7 }
  1206. X
  1207. X
  1208. X--
  1209. X-- The Action Table
  1210. X--
  1211. X
  1212. XacctActionTable OBJECT-TYPE
  1213. X    SYNTAX  SEQUENCE OF AcctActionEntry
  1214. X    ACCESS  not-accessible
  1215. X    STATUS  mandatory
  1216. X    DESCRIPTION
  1217. X    "The list of values used to create flowEntries for flows
  1218. X    matching entries in the rule table (above)."
  1219. X    ::= { actiondata 1 }
  1220. X
  1221. XacctActionEntry OBJECT-TYPE
  1222. X    SYNTAX  AcctActionEntry
  1223. X    ACCESS  not-accessible
  1224. X    STATUS  mandatory
  1225. X    DESCRIPTION
  1226. X    "The rule action record."
  1227. X    INDEX { acctActionSet, acctActionIndex }
  1228. X    ::= { acctActionTable 1 }
  1229. X
  1230. XAcctActionEntry ::= SEQUENCE {
  1231. X    acctActionIndex              INTEGER,
  1232. X    acctActionStatus               INTEGER,
  1233. X
  1234. X    acctActionSourceInterface          INTEGER,          -- Source AddressTuple
  1235. X    acctActionSourceAdjacentType      AddressType,
  1236. X    acctActionSourceAdjacentAddress   OCTET STRING,
  1237. X    acctActionSourceAdjacentMask      OCTET STRING,
  1238. X    acctActionSourcePeerType          AddressType,
  1239. X    acctActionSourcePeerTypeMask      AddressType,
  1240. X    acctActionSourcePeerAddress          OCTET STRING,
  1241. X    acctActionSourcePeerMask          OCTET STRING,
  1242. X    acctActionSourceDetailType        AddressType,
  1243. X    acctActionSourceDetailTypeMask    AddressType,
  1244. X    acctActionSourceDetailAddress     OCTET STRING,
  1245. X    acctActionSourceDetailMask          OCTET STRING,
  1246. X    acctActionSourceSubscriberID      OCTET STRING,
  1247. X    acctActionSourceSubscriberMask    OCTET STRING,
  1248. X
  1249. X    acctActionDestInterface          INTEGER,          -- Dest AddressTuple
  1250. X    acctActionDestAdjacentType          AddressType,
  1251. X    acctActionDestAdjacentAddress     OCTET STRING,
  1252. X    acctActionDestAdjacentMask          OCTET STRING,
  1253. X    acctActionDestPeerType          AddressType,
  1254. X    acctActionDestPeerTypeMask          AddressType,
  1255. X    acctActionDestPeerAddress          OCTET STRING,
  1256. X    acctActionDestPeerMask          OCTET STRING,
  1257. X    acctActionDestDetailType          AddressType,
  1258. X    acctActionDestDetailTypeMask      AddressType,
  1259. X    acctActionDestDetailAddress       OCTET STRING,
  1260. X    acctActionSoDestDetailMask          OCTET STRING,
  1261. X    acctActionDestSubscriberID          OCTET STRING,
  1262. X    acctActionDestSubscriberMask      OCTET STRING,
  1263. X
  1264. X    acctActionSubscriberID          OCTET STRING,   -- Session attributes
  1265. X    acctActionSessionID              INTEGER,
  1266. X
  1267. X    acctActionPDUScale              INTEGER,          -- Rule Set attributes
  1268. X    acctActionOctetScale          INTEGER
  1269. X    acctActionSet              INTEGER,
  1270. X    }
  1271. X
  1272. X-- Most of the variables in acctActionEntry provide values for the
  1273. X-- corresponding variables in acctFlowEntry.  For their descriptions
  1274. X-- please refer to their definitions in acctFlowEntry.
  1275. X
  1276. XacctActionIndex OBJECT-TYPE
  1277. X    SYNTAX  INTEGER
  1278. X    ACCESS  read-write
  1279. X    STATUS  mandatory
  1280. X    DESCRIPTION
  1281. X    "The index into the Action table."
  1282. X    ::= { acctActionEntry 1 }
  1283. X
  1284. XacctActionStatus OBJECT-TYPE
  1285. X    SYNTAX  INTEGER
  1286. X    ACCESS  read-write
  1287. X    STATUS  mandatory
  1288. X    DESCRIPTION ""
  1289. X    ::= { acctActionEntry 2 }
  1290. X
  1291. XacctActionSourceInterface OBJECT-TYPE
  1292. X    SYNTAX  INTEGER
  1293. X    ACCESS  read-write
  1294. X    STATUS  mandatory
  1295. X    DESCRIPTION ""
  1296. X    ::= { acctActionEntry 3 }
  1297. X
  1298. XacctActionSourceAdjacentType OBJECT-TYPE
  1299. X    SYNTAX  AddressType
  1300. X    ACCESS  read-write
  1301. X    STATUS  mandatory
  1302. X    DESCRIPTION ""
  1303. X    ::= { acctActionEntry 4 }
  1304. X
  1305. XacctActionSourceAdjacentAddress OBJECT-TYPE
  1306. X    SYNTAX  OCTET STRING -- actually NetworkAddress
  1307. X    ACCESS  read-write
  1308. X    STATUS  mandatory
  1309. X    DESCRIPTION ""
  1310. X    ::= { acctActionEntry 5 }
  1311. X
  1312. XacctActionSourceAdjacentMask OBJECT-TYPE
  1313. X    SYNTAX  OCTET STRING
  1314. X    ACCESS  read-write
  1315. X    STATUS  mandatory
  1316. X    DESCRIPTION ""
  1317. X    ::= { acctActionEntry 6 }
  1318. X
  1319. XacctActionSourcePeerType OBJECT-TYPE
  1320. X    SYNTAX  AddressType
  1321. X    ACCESS  read-write
  1322. X    STATUS  mandatory
  1323. X    DESCRIPTION ""
  1324. X    ::= { acctActionEntry 7 }
  1325. X
  1326. XacctActionSourcePeerTypeMask OBJECT-TYPE
  1327. X    SYNTAX  AddressType
  1328. X    ACCESS  read-write
  1329. X    STATUS  mandatory
  1330. X    DESCRIPTION ""
  1331. X    ::= { acctActionEntry 8 }
  1332. X
  1333. XacctActionSourcePeerAddress OBJECT-TYPE
  1334. X    SYNTAX  OCTET STRING -- actually NetworkAddress
  1335. X    ACCESS  read-write
  1336. X    STATUS  mandatory
  1337. X    DESCRIPTION ""
  1338. X    ::= { acctActionEntry 9 }
  1339. X
  1340. XacctActionSourcePeerMask OBJECT-TYPE
  1341. X    SYNTAX  OCTET STRING
  1342. X    ACCESS  read-write
  1343. X    STATUS  mandatory
  1344. X    DESCRIPTION ""
  1345. X    ::= { acctActionEntry 10 }
  1346. X
  1347. XacctActionSourceDetailType OBJECT-TYPE
  1348. X    SYNTAX  AddressType
  1349. X    ACCESS  read-write
  1350. X    STATUS  mandatory
  1351. X    DESCRIPTION ""
  1352. X    ::= { acctActionEntry 11 }
  1353. X
  1354. XacctActionSourceDetailTypeMask OBJECT-TYPE
  1355. X    SYNTAX  AddressType
  1356. X    ACCESS  read-write
  1357. X    STATUS  mandatory
  1358. X    DESCRIPTION ""
  1359. X    ::= { acctActionEntry 12 }
  1360. X
  1361. XacctActionSourceDetailAddress OBJECT-TYPE
  1362. X    SYNTAX  OCTET STRING -- actually NetworkAddress
  1363. X    ACCESS  read-write
  1364. X    STATUS  mandatory
  1365. X    DESCRIPTION ""
  1366. X    ::= { acctActionEntry 13 }
  1367. X
  1368. XacctActionSourceDetailMask OBJECT-TYPE
  1369. X    SYNTAX  OCTET STRING
  1370. X    ACCESS  read-write
  1371. X    STATUS  mandatory
  1372. X    DESCRIPTION ""
  1373. X    ::= { acctActionEntry 14 }
  1374. X
  1375. XacctActionSourceSubscriberID OBJECT-TYPE
  1376. X    SYNTAX  OCTET STRING
  1377. X    ACCESS  read-write
  1378. X    STATUS  mandatory
  1379. X    DESCRIPTION ""
  1380. X    ::= { acctActionEntry 15 }
  1381. X
  1382. XacctActionSourceSubscriberMask OBJECT-TYPE
  1383. X    SYNTAX  OCTET STRING
  1384. X    ACCESS  read-write
  1385. X    STATUS  mandatory
  1386. X    DESCRIPTION ""
  1387. X    ::= { acctActionEntry 16 }
  1388. X
  1389. XacctActionDestInterface OBJECT-TYPE
  1390. X    SYNTAX  INTEGER
  1391. X    ACCESS  read-write
  1392. X    STATUS  mandatory
  1393. X    DESCRIPTION ""
  1394. X    ::= { acctActionEntry 17 }
  1395. X
  1396. XacctActionDestAdjacentType OBJECT-TYPE
  1397. X    SYNTAX  AddressType
  1398. X    ACCESS  read-write
  1399. X    STATUS  mandatory
  1400. X    DESCRIPTION ""
  1401. X    ::= { acctActionEntry 18 }
  1402. X
  1403. XacctActionDestAdjacentAddress OBJECT-TYPE
  1404. X    SYNTAX  OCTET STRING
  1405. X    ACCESS  read-write
  1406. X    STATUS  mandatory
  1407. X    DESCRIPTION ""
  1408. X    ::= { acctActionEntry 19 }
  1409. X
  1410. XacctActionDestAdjacentMask OBJECT-TYPE
  1411. X    SYNTAX  OCTET STRING
  1412. X    ACCESS  read-write
  1413. X    STATUS  mandatory
  1414. X    DESCRIPTION ""
  1415. X    ::= { acctActionEntry 20 }
  1416. X
  1417. XacctActionDestPeerType OBJECT-TYPE
  1418. X    SYNTAX  AddressType
  1419. X    ACCESS  read-write
  1420. X    STATUS  mandatory
  1421. X    DESCRIPTION ""
  1422. X    ::= { acctActionEntry 21 }
  1423. X
  1424. XacctActionDestPeerTypeMask OBJECT-TYPE
  1425. X    SYNTAX  AddressType
  1426. X    ACCESS  read-write
  1427. X    STATUS  mandatory
  1428. X    DESCRIPTION ""
  1429. X    ::= { acctActionEntry 22 }
  1430. X
  1431. XacctActionDestPeerAddress OBJECT-TYPE
  1432. X    SYNTAX  OCTET STRING
  1433. X    ACCESS  read-write
  1434. X    STATUS  mandatory
  1435. X    DESCRIPTION ""
  1436. X    ::= { acctActionEntry 23 }
  1437. X
  1438. XacctActionDestPeerMask OBJECT-TYPE
  1439. X    SYNTAX  OCTET STRING
  1440. X    ACCESS  read-write
  1441. X    STATUS  mandatory
  1442. X    DESCRIPTION ""
  1443. X    ::= { acctActionEntry 24 }
  1444. X
  1445. XacctActionDestDetailType OBJECT-TYPE
  1446. X    SYNTAX  AddressType
  1447. X    ACCESS  read-write
  1448. X    STATUS  mandatory
  1449. X    DESCRIPTION ""
  1450. X    ::= { acctActionEntry 25 }
  1451. X
  1452. XacctActionDestDetailTypeMask OBJECT-TYPE
  1453. X    SYNTAX  AddressType
  1454. X    ACCESS  read-write
  1455. X    STATUS  mandatory
  1456. X    DESCRIPTION ""
  1457. X    ::= { acctActionEntry 26 }
  1458. X
  1459. XacctActionDestDetailAddress OBJECT-TYPE
  1460. X    SYNTAX  OCTET STRING -- actually NetworkAddress
  1461. X    ACCESS  read-write
  1462. X    STATUS  mandatory
  1463. X    DESCRIPTION ""
  1464. X    ::= { acctActionEntry 27 }
  1465. X
  1466. XacctActionDestDetailMask OBJECT-TYPE
  1467. X    SYNTAX  OCTET STRING
  1468. X    ACCESS  read-write
  1469. X    STATUS  mandatory
  1470. X    DESCRIPTION ""
  1471. X    ::= { acctActionEntry 28 }
  1472. X
  1473. XacctActionDestSubscriberID OBJECT-TYPE
  1474. X    SYNTAX  OCTET STRING
  1475. X    ACCESS  read-write
  1476. X    STATUS  mandatory
  1477. X    DESCRIPTION ""
  1478. X    ::= { acctActionEntry 29 }
  1479. X
  1480. XacctActionDestSubscriberMask OBJECT-TYPE
  1481. X    SYNTAX  OCTET STRING
  1482. X    ACCESS  read-write
  1483. X    STATUS  mandatory
  1484. X    DESCRIPTION ""
  1485. X    ::= { acctActionEntry 30 }
  1486. X
  1487. XacctActionSubscriberID OBJECT-TYPE
  1488. X    SYNTAX  OCTET STRING
  1489. X    ACCESS  read-write
  1490. X    STATUS  mandatory
  1491. X    DESCRIPTION ""
  1492. X    ::= { acctActionEntry 31 }
  1493. X
  1494. XacctActionSessionID OBJECT-TYPE
  1495. X    SYNTAX  OCTET STRING
  1496. X    ACCESS  read-write
  1497. X    STATUS  mandatory
  1498. X    DESCRIPTION ""
  1499. X    ::= { acctActionEntry 32 }
  1500. X
  1501. XacctActionPDUScale OBJECT-TYPE
  1502. X    SYNTAX  INTEGER (1..127)
  1503. X    ACCESS  read-write
  1504. X    STATUS  mandatory
  1505. X    DESCRIPTION ""
  1506. X    ::= { acctActionEntry 33 }
  1507. X
  1508. XacctActionOctetScale OBJECT-TYPE
  1509. X    SYNTAX  INTEGER (1..127)
  1510. X    ACCESS  read-write
  1511. X    STATUS  mandatory
  1512. X    DESCRIPTION ""
  1513. X    ::= { acctActionEntry 34 }
  1514. X
  1515. XacctActionSet OBJECT-TYPE
  1516. X    SYNTAX  INTEGER
  1517. X    ACCESS  read-write
  1518. X    STATUS  mandatory
  1519. X    DESCRIPTION
  1520. X    "Selects a table from the array of action tables."
  1521. X    ::= { acctActionEntry 35 }
  1522. X
  1523. X
  1524. X--
  1525. X-- Internet Accounting Traps
  1526. X--
  1527. X
  1528. XdeclareHighWater TRAP-TYPE
  1529. X    ENTERPRISE { internet-accounting }
  1530. X    VARIABLES { highWaterMark }
  1531. X    DESCRIPTION
  1532. X    "Sent by the meter to the management host to
  1533. X    indicate that the high water mark has been exceeded.
  1534. X    This should be interpreted by the management host as a
  1535. X    request to increase the polling frequency.  N.B: this
  1536. X    trap is optional.  Meters are not required to implement
  1537. X    this trap; management hosts are not required to
  1538. X    increase their polling frequency."
  1539. X    ::= 1
  1540. X
  1541. XdeclareDataLoss TRAP-TYPE
  1542. X    ENTERPRISE { internet-accounting }
  1543. X    DESCRIPTION
  1544. X    "Sent by the meter to the management host to
  1545. X    indicate that usage data is being lost."
  1546. X    ::= 2
  1547. X
  1548. XdeclareFlood TRAP-TYPE
  1549. X    ENTERPRISE { internet-accounting }
  1550. X    DESCRIPTION
  1551. X    "This trap contains, as part of the trap body, Internet
  1552. X    Accounting flow records.  The assumption here is that
  1553. X    these flow records will be send as Opaque values, allowing
  1554. X    an escape to more detailed ASN.1 types."
  1555. X    ::= 3
  1556. X
  1557. XEND
  1558. END_OF_FILE
  1559.   if test 46845 -ne `wc -c <'netramet/mib/mib.IAWG.txt'`; then
  1560.     echo shar: \"'netramet/mib/mib.IAWG.txt'\" unpacked with wrong size!
  1561.   fi
  1562.   # end of 'netramet/mib/mib.IAWG.txt'
  1563. fi
  1564. if test -f 'netramet/src/apps/snmpd.c' -a "${1}" != "-c" ; then 
  1565.   echo shar: Will not clobber existing file \"'netramet/src/apps/snmpd.c'\"
  1566. else
  1567.   echo shar: Extracting \"'netramet/src/apps/snmpd.c'\" \(3756 characters\)
  1568.   sed "s/^X//" >'netramet/src/apps/snmpd.c' <<'END_OF_FILE'
  1569. X/*
  1570. X * snmpd.c - send snmp GET requests to a network entity.
  1571. X *
  1572. X */
  1573. X/***********************************************************
  1574. X    Copyright 1988, 1989 by Carnegie Mellon University
  1575. X
  1576. X                      All Rights Reserved
  1577. X
  1578. XPermission to use, copy, modify, and distribute this software and its 
  1579. Xdocumentation for any purpose and without fee is hereby granted, 
  1580. Xprovided that the above copyright notice appear in all copies and that
  1581. Xboth that copyright notice and this permission notice appear in 
  1582. Xsupporting documentation, and that the name of CMU not be
  1583. Xused in advertising or publicity pertaining to distribution of the
  1584. Xsoftware without specific, written prior permission.  
  1585. X
  1586. XCMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  1587. XALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
  1588. XCMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  1589. XANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  1590. XWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  1591. XARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  1592. XSOFTWARE.
  1593. X******************************************************************/
  1594. X#include <sys/types.h>
  1595. X#include <netinet/in.h>
  1596. X#include <stdio.h>
  1597. X#include <sys/socket.h>
  1598. X#include <errno.h>
  1599. X
  1600. X#include "ausnmp.h"
  1601. X#include "snmp.h"
  1602. X#include "snmpimpl.h"
  1603. X#include "asn1.h"
  1604. X
  1605. Xextern int  errno;
  1606. Xint    snmp_dump_packet = 0;
  1607. X
  1608. Xmain(argc, argv)
  1609. X    int        argc;
  1610. X    char    *argv[];
  1611. X{
  1612. X    int    arg;
  1613. X    int sd;
  1614. X    struct sockaddr_in    me;
  1615. X
  1616. X
  1617. X    /*
  1618. X     * usage: snmpd
  1619. X     */
  1620. X    for(arg = 1; arg < argc; arg++){
  1621. X    if (argv[arg][0] == '-'){
  1622. X        switch(argv[arg][1]){
  1623. X        case 'd':
  1624. X            snmp_dump_packet++;
  1625. X            break;
  1626. X        default:
  1627. X            printf("invalid option: -%c\n", argv[arg][1]);
  1628. X            break;
  1629. X        }
  1630. X        continue;
  1631. X    }
  1632. X    }
  1633. X    /* Set up connections */
  1634. X    sd = socket(AF_INET, SOCK_DGRAM, 0);
  1635. X    if (sd < 0){
  1636. X    perror("socket");
  1637. X    return 0;
  1638. X    }
  1639. X    me.sin_family = AF_INET;
  1640. X    me.sin_addr.s_addr = INADDR_ANY;
  1641. X    me.sin_port = htons(SNMP_PORT);
  1642. X    if (bind(sd, (struct sockaddr *)&me, sizeof(me)) != 0){
  1643. X    perror("bind");
  1644. X    return 0;
  1645. X    }
  1646. X    init_snmp();
  1647. X    receive(sd);
  1648. X}
  1649. X
  1650. Xreceive(sd)
  1651. X    int sd;
  1652. X{
  1653. X    int numfds;
  1654. X    fd_set fdset;
  1655. X    int count;
  1656. X
  1657. X    while(1){
  1658. X    numfds = 0;
  1659. X    FD_ZERO(&fdset);
  1660. X    numfds = sd + 1;
  1661. X    FD_SET(sd, &fdset);
  1662. X    count = select(numfds, &fdset, 0, 0, 0);
  1663. X    if (count > 0){
  1664. X        if(FD_ISSET(sd, &fdset))
  1665. X        snmp_read(sd);
  1666. X    } else switch(count){
  1667. X        case 0:
  1668. X        break;
  1669. X        case -1:
  1670. X        if (errno == EINTR){
  1671. X            continue;
  1672. X        } else {
  1673. X            perror("select");
  1674. X        }
  1675. X        return -1;
  1676. X        default:
  1677. X        printf("select returned %d\n", count);
  1678. X        return -1;
  1679. X    }
  1680. X    }
  1681. X}
  1682. X
  1683. Xsnmp_read(sd)
  1684. X    int sd;
  1685. X{
  1686. X    struct sockaddr_in    from;
  1687. X    int length, out_length, fromlength;
  1688. X    u_char  packet[1500], outpacket[1500];
  1689. X    fromlength = sizeof from;
  1690. X    length = recvfrom(sd, packet, 1500, 0, (struct sockaddr *)&from, &fromlength);
  1691. X    if (length == -1)
  1692. X    perror("recvfrom");
  1693. X    if (snmp_dump_packet){
  1694. X    int count;
  1695. X
  1696. X    printf("recieved %d bytes from %s:\n", length, inet_ntoa(from.sin_addr));
  1697. X    for(count = 0; count < length; count++){
  1698. X        printf("%02X ", packet[count]);
  1699. X        if ((count % 16) == 15)
  1700. X        printf("\n");
  1701. X    }
  1702. X    printf("\n\n");
  1703. X    }
  1704. X    out_length = 1500;
  1705. X    if (snmp_agent_parse(packet, length, outpacket, &out_length, from.sin_addr)){
  1706. X    if (snmp_dump_packet){
  1707. X        int count;
  1708. X
  1709. X        printf("sent %d bytes to %s:\n", out_length, inet_ntoa(from.sin_addr));
  1710. X        for(count = 0; count < out_length; count++){
  1711. X        printf("%02X ", outpacket[count]);
  1712. X        if ((count % 16) == 15)
  1713. X            printf("\n");
  1714. X        }
  1715. X        printf("\n\n");
  1716. X    }
  1717. X    if (sendto(sd, (char *)outpacket, out_length, 0, (struct sockaddr *)&from,
  1718. X        sizeof(from)) < 0){
  1719. X        perror("sendto");
  1720. X        return 0;
  1721. X    }
  1722. X
  1723. X    }
  1724. X    
  1725. X}
  1726. X
  1727. END_OF_FILE
  1728.   if test 3756 -ne `wc -c <'netramet/src/apps/snmpd.c'`; then
  1729.     echo shar: \"'netramet/src/apps/snmpd.c'\" unpacked with wrong size!
  1730.   fi
  1731.   # end of 'netramet/src/apps/snmpd.c'
  1732. fi
  1733. if test -f 'netramet/src/meter/include/flowhash.h' -a "${1}" != "-c" ; then 
  1734.   echo shar: Will not clobber existing file \"'netramet/src/meter/include/flowhash.h'\"
  1735. else
  1736.   echo shar: Extracting \"'netramet/src/meter/include/flowhash.h'\" \(11145 characters\)
  1737.   sed "s/^X//" >'netramet/src/meter/include/flowhash.h' <<'END_OF_FILE'
  1738. X/* 1310, Tue 5 Oct 93
  1739. X
  1740. X   FLOWHASH.H:  Data structures for AU Meter
  1741. X
  1742. X   Copyright (C) 1992,1993 by Nevil Brownlee,
  1743. X   Computer Centre,  University of Auckland */
  1744. X
  1745. X#ifndef EXTFLOW
  1746. X#define EXTFLOW  extern
  1747. X#define DECLARE  0
  1748. X#define INIT(v)
  1749. X#else
  1750. X#define EXTFLOW
  1751. X#define DECLARE  1
  1752. X#define INIT(v)  = v
  1753. X#endif
  1754. X
  1755. X#define DFMXFLOWS 4000  /* Default max nbr of traffic flows */
  1756. X
  1757. X#define MXCLCTRS    10  /* Max nbr of active Collectors */
  1758. X#define MXNRTBLS    10  /* Max nbr of rule+action tables */
  1759. X
  1760. X#define RSTKSIZ     20  /* Max depth of rule matches */
  1761. X#define HASHMOD    256  /* Size of flow hash tables */
  1762. X#define MNCGRPSZ     5  /* Min nbr of rules in a compare group */
  1763. X#define INITHSZ   1500  /* Initial rule_hash size (ints) */
  1764. X#define FLOWBLOBSZ  55  /* Nbr of {index, info} pairs in a column blob */
  1765. X
  1766. Xstruct hash_tbl {
  1767. X   struct flow far *hash_ent[HASHMOD];
  1768. X   };
  1769. X   
  1770. X#define AT_IGNORE     0  /* Addr_type values */
  1771. X#define AT_DUMMY      1
  1772. X
  1773. X#define AT_IP         2
  1774. X#define AT_NOVELL     6
  1775. X#define AT_DECNET     5
  1776. X#define AT_ETHERTALK  7
  1777. X
  1778. X#define PT_ICMP       1  /* IP protocol types */
  1779. X#define PT_TCP        6
  1780. X#define PT_UDP       17
  1781. X
  1782. X#define MAC_ADDR_LEN     6  /* Ethernet */
  1783. X#define PEER_ADDR_LEN    4  /* IP, IPX, Decnet, EtherTalk */
  1784. X#define DETAIL_ADDR_LEN  2  /* TCP/UDP port, .. */
  1785. X
  1786. X#define RULE_ADDR_LEN    6  /* Max of above three */
  1787. X
  1788. Xstruct key {
  1789. X   unsigned char AdjAddress[MAC_ADDR_LEN], AdjMask[MAC_ADDR_LEN];
  1790. X   unsigned char PeerAddress[PEER_ADDR_LEN], PeerMask[PEER_ADDR_LEN];
  1791. X   unsigned char DetailAddress[DETAIL_ADDR_LEN], DetailMask[DETAIL_ADDR_LEN];
  1792. X   };
  1793. X
  1794. Xstruct flow {
  1795. X   union {  /* Must be first to line up with hash_tbl entries */
  1796. X      struct flow far *action;  /* For aggregates and tallies */
  1797. X      struct rule far *count;  /* For counts */
  1798. X      struct hash_tbl far *hash;  /* For tally action entries */
  1799. X      struct flow far *next;  /* For hash chains */
  1800. X      } link;
  1801. X   unsigned long UpOctets,UpPDUs, DownOctets,DownPDUs,
  1802. X      FirstTime,LastTime;
  1803. X   unsigned char FlowRuleSet, FlowType;
  1804. X   unsigned char PeerAddrType, PeerTypeMask,
  1805. X      DetailAddrType, DetailTypeMask;
  1806. X   struct key Low, High;
  1807. X   };
  1808. X
  1809. Xstruct flow_key {
  1810. X   unsigned char PeerAddrType, PeerTypeMask,
  1811. X      DetailAddrType, DetailTypeMask;
  1812. X   struct key Low, High;
  1813. X   };
  1814. X
  1815. X#define Key(fp)  &fp->PeerAddrType
  1816. X
  1817. X#define FT_RULE       0  /* Flow types */
  1818. X#define FT_COUNT      1
  1819. X#define FT_TALLY      2
  1820. X#define FT_AGGREGATE  3
  1821. X
  1822. XEXTFLOW unsigned int nflows,  /* Nbr of flows in use */
  1823. X   mxflowsp1;  /* Max nbr of flows + 1 */
  1824. XEXTFLOW struct flow far **flow_ix;  /* The flow table */
  1825. X   /* Flow 1 is a dummy for the Create and Active tables */
  1826. X   
  1827. XEXTFLOW unsigned int empty_ix;  /* Last flow number used by number_flow */
  1828. X
  1829. XEXTFLOW unsigned int gcf_ix;  /* Next possible flow for garbage collector */
  1830. X
  1831. XEXTFLOW unsigned char  /* Parameters for garbage collector */
  1832. X   gc_interval INIT(5),  /* Seconds between calls */
  1833. X   gc_f INIT(4),  /* Non-zero (in-use) flow indexes */
  1834. X   gc_e INIT(16);  /* Zero (unused) flow indexes */
  1835. XEXTFLOW unsigned long GarbageCollectTime,
  1836. X   /* OK to recover flows with LastTime greater than this */
  1837. X   FlowsRecovered INIT(0);
  1838. X
  1839. Xstruct rule {
  1840. X   unsigned char RuleSelector;  /* Rule's MIB variables */
  1841. X   unsigned char RuleMask[RULE_ADDR_LEN];
  1842. X   unsigned char RuleMatchedValue[RULE_ADDR_LEN];
  1843. X   unsigned char RuleAction;
  1844. X   unsigned int  RuleJumpIndex;
  1845. X
  1846. X   unsigned int  hash_tbl_index;  /* 0 => simple compare */
  1847. X   unsigned int  hash_link;
  1848. X   };
  1849. X
  1850. XEXTFLOW struct flow far *null_flow;  /* All fields zeroed */
  1851. X
  1852. XEXTFLOW struct rule far *rule_table[MXNRTBLS];
  1853. XEXTFLOW unsigned int rt_size[MXNRTBLS];
  1854. XEXTFLOW struct rule far *c_rt;  /* Current Rule Table */
  1855. XEXTFLOW int c_rsz;  /* Nbr of rules in current rule table */
  1856. X
  1857. Xstruct rule_hash_tbl {
  1858. X   unsigned int group_last;  /* Nbr of last rule in group */
  1859. X   unsigned int hash_mask;  /* Group hash table size - 1 */
  1860. X   int hash_ent[1];
  1861. X   };
  1862. X
  1863. XEXTFLOW int far *rule_hash;
  1864. XEXTFLOW unsigned int rh_size;
  1865. X
  1866. XEXTFLOW struct flow far *action_table[MXNRTBLS];
  1867. XEXTFLOW unsigned int at_size[MXNRTBLS];
  1868. XEXTFLOW struct flow far *c_at;  /* Current Action Table */
  1869. XEXTFLOW int c_asz;  /* Nbr of actions in current action table */
  1870. X
  1871. X#define RA_COUNT      1  /* RuleAction values */
  1872. X#define RA_TALLY      2
  1873. X#define RA_AGGREGATE  3
  1874. X#define RA_SUCCEED    4
  1875. X#define RA_FAIL          5
  1876. X#define RA_PUSHTO     6
  1877. X#define RA_POPTO      7
  1878. X#define RA_GOTO       8
  1879. X
  1880. X#define RS_NULL                 0  /* Rule Selector dummy value */
  1881. X
  1882. X#define FTFLOWINDEX        1  /* Flow table attribute values */
  1883. X#define FTFLOWSTATUS        2
  1884. X
  1885. X#define FTLOWINTERFACE          3
  1886. X#define FTLOWADJACENTTYPE       4
  1887. X#define FTLOWADJACENTADDRESS    5
  1888. X#define FTLOWADJACENTMASK       6
  1889. X#define FTLOWPEERTYPE        7
  1890. X#define FTLOWPEERTYPEMASK    8
  1891. X#define FTLOWPEERADDRESS    9
  1892. X#define FTLOWPEERMASK           10
  1893. X#define FTLOWDETAILTYPE        11
  1894. X#define FTLOWDETAILTYPEMASK    12
  1895. X#define FTLOWDETAILADDRESS     13
  1896. X#define FTLOWDETAILMASK        14
  1897. X#define FTLOWSUBSCRIBERID      15
  1898. X#define FTLOWSUBSCRIBERMASK    16
  1899. X#define FTHIINTERFACE          17
  1900. X#define FTHIADJACENTTYPE       18
  1901. X#define FTHIADJACENTADDRESS    19
  1902. X#define FTHIADJACENTMASK       20
  1903. X#define FTHIPEERTYPE           21
  1904. X#define FTHIPEERTYPEMASK       22
  1905. X#define FTHIPEERADDRESS           23
  1906. X#define FTHIPEERMASK           24
  1907. X#define FTHIDETAILTYPE         25
  1908. X#define FTHIDETAILTYPEMASK     26
  1909. X#define FTHIDETAILADDRESS      27
  1910. X#define FTHIDETAILMASK         28
  1911. X#define FTHISUBSCRIBERID       29
  1912. X#define FTHISUBSCRIBERMASK     30
  1913. X
  1914. X#define FTSUBSCRIBERID         31
  1915. X#define FTSUBSCRIBERMASK       32
  1916. X
  1917. X#define FTPDUSCALE             33
  1918. X#define FTOCTETSCALE           34
  1919. X#define FTRULESET              35
  1920. X#define FTFLOWTYPE             36
  1921. X
  1922. X#define FTUPOCTETS           37
  1923. X#define FTUPPDUS           38
  1924. X#define FTDOWNOCTETS           39
  1925. X#define FTDOWNPDUS           40
  1926. X
  1927. X#define FTFIRSTTIME           41
  1928. X#define FTLASTTIME           42
  1929. X
  1930. Xstruct attrib_info {
  1931. X   char *name;
  1932. X   unsigned char index;
  1933. X   unsigned char len;
  1934. X   };
  1935. X
  1936. XEXTFLOW struct attrib_info attribs[1+FTLASTTIME]
  1937. X   /* Serial search -> longest names first! */
  1938. X#if DECLARE
  1939. X   = {
  1940. X      "null",                   0,                     0,
  1941. X      "flowindex",              FTFLOWINDEX,           2,
  1942. X      "flowstatus",             FTFLOWSTATUS,          1,
  1943. X      "sourceinterface",        FTLOWINTERFACE,        1,
  1944. X      "sourceadjacenttype",     FTLOWADJACENTTYPE,     1,
  1945. X      "sourceadjacentaddress",  FTLOWADJACENTADDRESS,  MAC_ADDR_LEN,
  1946. X      "sourceadjacentmask",     FTLOWADJACENTMASK,     MAC_ADDR_LEN,
  1947. X      "sourcepeertypemask",     FTLOWPEERTYPEMASK,     1,
  1948. X      "sourcepeertype",         FTLOWPEERTYPE,         1,
  1949. X      "sourcepeeraddress",      FTLOWPEERADDRESS,      PEER_ADDR_LEN,
  1950. X      "sourcepeermask",         FTLOWPEERMASK,         PEER_ADDR_LEN,
  1951. X      "sourcedetailtypemask",   FTLOWDETAILTYPEMASK,   1,
  1952. X      "sourcedetailtype",       FTLOWDETAILTYPE,       1,
  1953. X      "sourcedetailaddress",    FTLOWDETAILADDRESS,    DETAIL_ADDR_LEN,
  1954. X      "sourcedetailmask",       FTLOWDETAILMASK,       DETAIL_ADDR_LEN,
  1955. X      "sourcesubscriberid",     FTLOWSUBSCRIBERID,     0,
  1956. X      "sourcesubscribermask",   FTLOWSUBSCRIBERMASK,   0,
  1957. X      "destinterface",          FTHIINTERFACE,         1,
  1958. X      "destadjacenttype",       FTHIADJACENTTYPE,      1,
  1959. X      "destadjacentaddress",    FTHIADJACENTADDRESS,   MAC_ADDR_LEN,
  1960. X      "destadjacentmask",       FTHIADJACENTMASK,      MAC_ADDR_LEN,
  1961. X      "destpeertypemask",       FTHIPEERTYPEMASK,      1,
  1962. X      "destpeertype",           FTHIPEERTYPE,          1,
  1963. X      "destpeeraddress",        FTHIPEERADDRESS,       PEER_ADDR_LEN,
  1964. X      "destpeermask",           FTHIPEERMASK,          PEER_ADDR_LEN,
  1965. X      "destdetailtypemask",     FTHIDETAILTYPEMASK,    1,
  1966. X      "destdetailtype",         FTHIDETAILTYPE,        1,
  1967. X      "destdetailaddress",      FTHIDETAILADDRESS,     DETAIL_ADDR_LEN,
  1968. X      "destdetailmask",         FTHIDETAILMASK,        DETAIL_ADDR_LEN,
  1969. X      "destsubscriberid",       FTHISUBSCRIBERID,      0,
  1970. X      "destsubscribermask",     FTHISUBSCRIBERMASK,    0,
  1971. X      "subscriberid",           FTSUBSCRIBERID,        0,
  1972. X      "subscribermask",         FTSUBSCRIBERMASK,      0,
  1973. X      "pduscale",               FTPDUSCALE,            0,
  1974. X      "octetscale",             FTOCTETSCALE,          0,
  1975. X      "flowruleset",            FTRULESET,             1,
  1976. X      "flowtype",               FTFLOWTYPE,            1,
  1977. X      "tooctets",               FTUPOCTETS,            4,
  1978. X      "topdus",                 FTUPPDUS,              4,
  1979. X      "fromoctets",             FTDOWNOCTETS,          4,
  1980. X      "frompdus",               FTDOWNPDUS,            4,
  1981. X      "firsttime",              FTFIRSTTIME,           4,
  1982. X      "lasttime",               FTLASTTIME,            4
  1983. X   }
  1984. X#endif
  1985. X   ;
  1986. X
  1987. X/* Global Variables */
  1988. X
  1989. XEXTFLOW unsigned char column_blob[(FLOWBLOBSZ+2)*(2+RULE_ADDR_LEN)];
  1990. X
  1991. X#ifdef AU_MSDOS  /* PC ntoh routines swap the byte order */
  1992. X#define netshort(x)  x
  1993. X#define netlong(x)   x
  1994. X#else            /* SunOS ntoh routines don't */
  1995. X#define netshort(x)  htons(x)
  1996. X#define netlong(x)   htonl(x)
  1997. X#endif
  1998. X
  1999. XEXTFLOW unsigned int n_hash_tables INIT(0),  /* Performance statistics */
  2000. X   n_hash_ents INIT(0), t_hash_size INIT(0);
  2001. XEXTFLOW unsigned long n_matches INIT(0),
  2002. X   n_hash_compares INIT(0), n_hash_searches INIT(0);
  2003. X
  2004. XEXTFLOW unsigned long s_uptime;  /* uptime() value for current sample */
  2005. X
  2006. XEXTFLOW unsigned char kb_enabled;
  2007. XEXTFLOW unsigned char display_enabled;
  2008. X
  2009. X/* MIB variables */
  2010. X
  2011. XEXTFLOW unsigned long InactivityTimeout INIT(600L);  /* 10 minutes */
  2012. XEXTFLOW unsigned char HighWaterMark INIT(85);  /* 85 % */
  2013. XEXTFLOW unsigned char FloodMark INIT(100);  /* Disabled */
  2014. X
  2015. Xstruct CTinfo {
  2016. X   unsigned char LastCollectPeer[PEER_ADDR_LEN];
  2017. X   unsigned long LastCollectTime;
  2018. X   unsigned long PrevCollectTime;
  2019. X   };
  2020. X
  2021. XEXTFLOW struct CTinfo CTi[MXCLCTRS];
  2022. XEXTFLOW unsigned char n_collectors INIT(0);
  2023. X
  2024. XEXTFLOW unsigned long LastCollectTime INIT(0L);
  2025. X
  2026. XEXTFLOW unsigned char CurrentRuleSet INIT(0);
  2027. XEXTFLOW unsigned char EmergencyRuleSet INIT(0);
  2028. X
  2029. X/* Flowhash functions */
  2030. X
  2031. X#define addrcpy(d,s,n) qmove(s,d,n)  /* Stick to d,s order for copies! */
  2032. X
  2033. Xstruct flow far *get_flow(void);
  2034. Xvoid free_flow(struct flow far *q);
  2035. X
  2036. Xint open_rule_set(unsigned char doSet, unsigned char n);
  2037. Xvoid close_rule_set(void);
  2038. X
  2039. Xvoid init_flow(struct flow far *f, unsigned char type);
  2040. Xunsigned int number_flow(struct flow far *fp);
  2041. Xvoid garbage_collect(void);
  2042. X
  2043. Xstruct flow far *find_flow(int x);
  2044. X
  2045. Xstruct flow far *search_hash_table(
  2046. X   struct hash_tbl far *t,  /* Table to search */
  2047. X   struct key far *Low,  /* Target keys */
  2048. X   struct key far *High,
  2049. X   struct flow far *pdu,
  2050. X   struct flow far *ap,  /* Action with table's masks */
  2051. X   unsigned char OK_to_add  /* 1 = add new flow if not found */
  2052. X   );
  2053. X
  2054. Xint pkt_match(unsigned char forward, unsigned char OK_to_match,
  2055. X   int len, struct flow far *pdu, struct key far *from, struct key far *to);
  2056. X
  2057. Xvoid build_flow_blob(unsigned long t_time, unsigned int fx);
  2058. X
  2059. Xvoid pkt_monitor(unsigned char far *pp,int len,unsigned char pt);
  2060. X
  2061. Xvoid open_log(void);
  2062. Xvoid write_flows(void);
  2063. X
  2064. Xvoid show_stats(void);
  2065. Xvoid show_time(void);
  2066. X
  2067. Xvoid init_monitor(void);
  2068. X
  2069. Xvoid show_help(void);
  2070. Xvoid handle_kb(int ch);
  2071. X
  2072. END_OF_FILE
  2073.   if test 11145 -ne `wc -c <'netramet/src/meter/include/flowhash.h'`; then
  2074.     echo shar: \"'netramet/src/meter/include/flowhash.h'\" unpacked with wrong size!
  2075.   fi
  2076.   # end of 'netramet/src/meter/include/flowhash.h'
  2077. fi
  2078. echo shar: End of archive 13 \(of 25\).
  2079. cp /dev/null ark13isdone
  2080. MISSING=""
  2081. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ; do
  2082.     if test ! -f ark${I}isdone ; then
  2083.     MISSING="${MISSING} ${I}"
  2084.     fi
  2085. done
  2086. if test "${MISSING}" = "" ; then
  2087.     echo You have unpacked all 25 archives.
  2088.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2089. else
  2090.     echo You still must unpack the following archives:
  2091.     echo "        " ${MISSING}
  2092. fi
  2093. exit 0
  2094. exit 0 # Just in case...
  2095.