RFC 3806

Printer Finishing MIB

๐Ÿ“… published June 2004, from ietf

Printer Finishing MIB ๐Ÿ–จ๏ธโœจ

okay bestie, here's the header info for RFC 3806 first ๐ŸŽ€

  • Series: Network Working Group
  • RFC number: 3806
  • Title: Printer Finishing MIB
  • Authors: R. Bergman (Hitachi Printing Solutions), H. Lewis (IBM Corporation), I. McDonald (High North Inc.)
  • Category: Informational
  • Date: June 2004
  • Obsoletes / Updates: the title block doesn't list any RFCs it obsoletes or updates ๐Ÿ™ˆ

Status of This Memo ๐Ÿ“œ

this one is giving "for info only" ๐Ÿ’… it provides information for the Internet community and does not specify an Internet standard of any kind. distribution of this memo is unlimited, so share away ๐Ÿฆ‹

Copyright (C) The Internet Society (2004). ๐ŸŒธ

Abstract ๐Ÿ”ฅ

so this document defines a MIB module for managing printer finishing device subunits ๐Ÿ–จ๏ธ (MIB is the Management Information Base, aka the info store that network management uses ๐Ÿ‘€). the finishing subunits this MIB covers are an integral part of the Printer System, and it only applies to a Finisher Device that's connected to a Printer System. very specific, very focused, very iconic ๐Ÿ’–

Table of Contents ๐Ÿ“š

1.  Introduction. . . . . . . . . . . . . . . . . . . . . . . . .   3
    1.1.  Scope . . . . . . . . . . . . . . . . . . . . . . . . .   3
    1.2.  Rational. . . . . . . . . . . . . . . . . . . . . . . .   4
    1.3.  The Internet-Standard Management Framework. . . . . . .   4
    1.4.  Read-Write Objects. . . . . . . . . . . . . . . . . . .   4
2.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   5
    2.1.  General Terminology . . . . . . . . . . . . . . . . . .   5
    2.2.  Process Specific Terminology. . . . . . . . . . . . . .   9
3.  Finisher Subunits Integrated into the Printer Model . . . . .  12
4.  Finishing Specifications. . . . . . . . . . . . . . . . . . .  12
    4.1.  Multiple finDeviceTable Entries . . . . . . . . . . . .  13
    4.2.  Implicit Parameters . . . . . . . . . . . . . . . . . .  13
          4.2.1.  FinPunchPatternTC . . . . . . . . . . . . . . .  14
          4.2.2.  FinPunchHoleTypeTC, punchHoleSizeMaxDim,
                  punchHoleSizeMinDim . . . . . . . . . . . . . .  15
5.  The Attribute Mechanism . . . . . . . . . . . . . . . . . . .  15
    5.1.  Conformance of Attribute Implementation . . . . . . . .  16
    5.2.  Useful, 'Unknown', and 'Other' Values for Objects
          and Attributes. . . . . . . . . . . . . . . . . . . . .  16
    5.3.  Data Sub-types and Attribute Naming Conventions . . . .  17
    5.4.  Single-Value (Row) Versus Multi-Value (MULTI-ROW)
          Attributes. . . . . . . . . . . . . . . . . . . . . . .  17
    5.5.  Linked MUTI-ROW Values. . . . . . . . . . . . . . . . . .  17
    5.6.  Index Value Attributes. . . . . . . . . . . . . . . . . .  17
    5.7.  Attribute Specifications. . . . . . . . . . . . . . . . .  18
6.  Enumerations. . . . . . . . . . . . . . . . . . . . . . . . .  23
    6.1.  Registering Additional Enumerated Values. . . . . . . .  23
7.  IANA Printer Finishing MIB Specification. . . . . . . . . . .  24
8.  Printer Finishing MIB Specification . . . . . . . . . . . . .  30
9.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  48
10. Internationalization Considerations . . . . . . . . . . . . .  48
11. References. . . . . . . . . . . . . . . . . . . . . . . . . .  48
    11.1. Normative References. . . . . . . . . . . . . . . . . .  48
    11.2. Informative References. . . . . . . . . . . . . . . . .  49
12. Security Considerations . . . . . . . . . . . . . . . . . . .  49
13. Acknowledgements. . . . . . . . . . . . . . . . . . . . . . .  51
14. Authors' Addresses. . . . . . . . . . . . . . . . . . . . . .  52
15. Full Copyright Statement. . . . . . . . . . . . . . . . . . .  53

1. Introduction ๐Ÿ’–

okay so this doc describes an SNMP Management Information Base (MIB) for managing in-line post-processing ๐Ÿงš. it's the same kind of management that's already available for printers through the Printer MIB [RFC3805]. the Printer Finishing MIB includes these features:

  • Provides the status of the finishing device.
  • Queries and controls the features and configuration of the finishing device.
  • Enables and disables the finishing processes.
  • Allows unsolicited status from the finishing device.

the Finisher MIB is defined as an extension of the Printer MIB [RFC3805], and it's expected that the info in this doc will get folded into a future update of the Printer MIB ๐Ÿซถ

1.1. Scope ๐ŸŽ€

this doc gives you a robust set of finishing devices, features, and functions, based on today's state of the art for in-line finishing. finishing usually comes with the faster network printers and copiers (not the simple desktop ones), so no attempt is made to keep the scope to "bare minimum" ๐Ÿ’… the Printer Finishing MIB also doesn't duplicate the production mail preparation, custom insertion, franking, and reprints that are covered by the DMTF Large Mailing Operations standard [LMO]. not the same lane, bestie ๐Ÿšซ

info supplied by the Printer Finishing MIB can be used by printer and finisher management apps that monitor status and manage configuration. it can also be used by print and finishing submission apps that handle:

  • print-job-level finishing processes that are applied to a complete print job,
  • document-level finishing processes that are applied individually to each document in the print job,
  • document-level finishing processes that are applied to a selected document in the print job.

note that not every combination of finishing processes is permitted ๐Ÿ‘€ compatible combinations are implementation specific. the MIB does let you identify invalid combinations though, so you can catch them ๐Ÿ”

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. โœจ

1.2. Rational ๐Ÿ’…

the Printer MIB [RFC3805] is now successfully deployed across a big chunk of the network printer market ๐Ÿ™Œ SNMP and/or HTTP enabled printers and software management apps keep growing in numbers, and so does the availability of network printers and copiers with in-line finishing processes. so a well defined and ordered set of finishing objects is now necessary for printer management. iconic timing ๐Ÿ“

the printer model in the Printer MIB already includes finishing processes, and the MIB was designed to later incorporate finisher objects or to be referenced by a future Finisher MIB ๐Ÿฆ‹

1.3. The Internet-Standard Management Framework ๐ŸŒˆ

if you want a detailed overview of the docs describing the current Internet-Standard Management Framework, check out section 7 of RFC 3410 [RFC3410] ๐Ÿ“–

managed objects are accessed via a virtual information store called the Management Information Base, or MIB. MIB objects are generally accessed through the Simple Network Management Protocol (SNMP). objects in the MIB are defined using the mechanisms in the Structure of Management Information (SMI). this memo specifies a MIB module that is compliant to the SMIv2, which is described in STD 58, RFC 2578 [RFC2578], STD 58, RFC 2579 [RFC2579] and STD 58, RFC 2580 [RFC2580]. โญ

1.4. Read-Write Objects ๐Ÿ”‘

some objects in the Finisher MIB reflect the existence or amount of a given resource inside the finisher ๐Ÿงบ examples are the size and number of sheets in an inserter tray, or whether certain finisher options exist. some finishers have automatic sensors for these resources, but most finishers lack sensors for every property of every resource. so the management app is allowed to write into objects that hold descriptive or existence values for finishers that can't sense those values ๐Ÿ’–

the ability to change a read-write object's value may depend on the agent's implementation. a lot of objects in the MIB are given read-write access, but an implementation might only let a management app change the value if the finisher can not sense the value itself. even though some objects explicitly state how their conditional ability to change values works, any read-write object may act this way ๐Ÿ™ˆ

generally, an object gets read-write access in the Finisher MIB specification if:

  1. The object involves installation of a resource that some finishers cannot themselves detect. Therefore, external means are needed to inform the device of the installation. (Here external means include using the operator console, or remote management application) and
  2. The finisher will behave differently if the installation of the resource is reported than if the installation were not reported; that is, the object is not to be used as a place to put information not used by the finisher, i.e., not a "sticky-note". Another way of saying this is that the finisher believes that information given it and acts as if the information were true.
  3. The finisher may get hints that it may not know about the existence or properties of certain resources. For example, a paper tray may be removed and re-inserted. When this removal and insertion happens, the finisher may either assume that a property, such as the size of paper in the tray, has not changed or the finisher may change the value of the associated object to "unknown", as might be done for the amount of paper in the tray. As long as the finisher acts according to the value in the object either strategy is acceptable. ๐Ÿงš
  4. It is an implementation-specific matter as to whether or not MIB object values are persistent across power cycles or cold starts. ๐Ÿ”ฅ

2. Terminology ๐ŸŽ€

where it makes sense, the Printer Finishing MIB conforms to the terminology, syntax, and semantics from the DMTF Large Mailing Operations standard [LMO], the Internet Printing Protocol [RFC2911], and/or the ISO Document Printing Application [DPA]. so no reinventing the wheel, periodt ๐Ÿ’…

2.1. General Terminology โœจ

okay so first up is the basic vocab, and bestie, you need it before anything else makes sense ๐Ÿงš๐Ÿ’–

Finisher Input: an input tray on the finisher that isn't otherwise tied to the printer ๐ŸŽ€ for example, a tray that holds finishing "inserts" ๐Ÿ“ฆ

                      ^ Y
                      |
                      |<---- Reference Edge
                      |
                      |  |<--- Finishing Process Axis
                      |  |
                  --->|  |<--- Finishing Process Offset
                      |  |
    Head              +=========================+ (X2,Y4)
    Locations         #  |                      #
                +-----#----+                    #
       -----Y3--|-----#--O | <--+- Head         #
       ^        +-----#----+    |  Mechanisms   #
       |              #  |      |               #
       |              #  |      |               #
       |              #  |      |               #
       |              #  |      |               #
       |        +-----#----+    |               #
       | ---Y2--|-----#--O | <--+               #
       | ^      +-----#----+    |               #
       | |            #  |      |               #
       | |            #  |      |               #
       | |            #  |      |               #
       | |            #  |      |               #
       | |      +-----#----+    |               #
       | | -Y1--|-----#--O | <--+               #
       | | ^    +-----#----+       bottom right #
       | | |          #  |               corner #    X
      --------------- +==+======================+ ---->
                  (0,0)  (X1,0)

Figure 1 - Finishing Process Axis Parallel to Y Axis

         ^ Y
         |        Head Locations
         |<---------------->|---X2
         |<---->|---X1      |
         |      |           |
         |    +-|-+       +-|-+
         |    | | |       | | |  (X3,Y2)
         +======|===========|======+
         #    | | |       | | |    # Finishing Process Axis
         #----| O |-------| O |----#----- Y1
         #    +---+       +---+    #   ^
         #      ^           ^      #   |
         #      |           |      #   |
         #      +-----------+      #   |
         #      |                  #   |
         #     Head                #   |
         #     Mechanisms          #   |
         #                         #   |
         #                         # Finishing Process Offset
         #                         #   |
         #                         #   |
         #                         #   |
         #                         #   |
         #                         #   |
         #                         #   |
         #            bottom right #   |
         #                  corner #   v   X
         +=========================+ ------>
       (0,0)              Reference Edge

Figure 2 - Finishing Process Axis Parallel to X Axis

Finisher Output: the output of the finisher ๐Ÿฆ‹ because processing is in-line, the finisher outputs are a direct extension of the set of printer outputs. literally a seamless glow-up ๐Ÿ’…

Media Orientation: all Finishing Processes are defined relative to a portrait orientation of the medium, no matter the orientation of the printed image or the direction of feed ๐ŸŒธ so the 'X' and 'Y' axis always reference the medium as shown in figures 1 and 2, with the 'X' axis always along the short edge of the medium. edges and corners get defined with the medium orientation too, using the words top, bottom, left, and right. so the bottom edge of the medium is at Y = 0, the left edge is at X = 0, and the bottom right corner is at (X2,0) as shown in figure 1 and at (X3,0) as shown in figure 2 ๐Ÿ“

Finishing: defined by DPA as an operation on a document that happens after the image process is complete โœจ the finishing processes defined in this document are the ones applied to one or more instances of rectangular paper sheet media.

Finishing Process: defined by DPA as an operation applied by a machine, like trimming a document, folding its sheets, or applying a binding ๐ŸŽ€

Finishing Specification: defined by DPA as the specific sequence of operations for a serial combination of finishing processes ๐Ÿ‘‘ the exact sequential order of the processes is, in many cases, critical to getting the desired result. for example, folding and then trimming could give a very different result than trimming and then folding. the order really be mattering ๐Ÿ˜ญ

Finishing Process Parameters: this parameter set is used to create a detailed definition of the finishing process ๐Ÿ’œ generic Finishing Process Parameters are applicable to any Finishing Specification.

  • Head Mechanism: defined by DPA as the physical mechanism used to perform a finishing process ๐Ÿ”ฅ the head position may be fixed or variable, depending on what the device is capable of.
  • Reference Edge: defined by DPA as the edge of the document relative to the axis that the finishing process is applied to ๐ŸŒˆ the edge of the medium defined to be the Reference Edge may be either the 'X' or the 'Y' axis, depending on which finishing process is being performed.

Note that the Reference Edge may change from one finishing process to another, and there are two reasons this can happen. First, a subsequent process may require a different Reference Edge. Second, the actual dimensions of the document may change, for example as a result of a folding or a trimming operation. ngl this one is sneaky ๐Ÿ™ˆ

  • Jog Edge: defined by DPA as one of the two edges that is perpendicular to the Reference Edge ๐Ÿซถ specifying the Jog Edge parameter indicates that the edges of all sheets corresponding to the Jog Edge are aligned.
  • Finishing Process Axis: defined by DPA as the axis that some finishing processes are applied to, or referenced from, by the Head Mechanism โญ examples are the axis for a fold process or the axis for a punch process.
  • Head Locations: defined by DPA as the position of the Heads on the Finishing Process Axis ๐Ÿงš
  • Finishing Process Offset: the offset from the Reference Edge to the Finishing Process Axis, at which the finishing process takes place or is applied ๐Ÿ’…

2.2. Process Specific Terminology โœจ

okay so this next bit is basically a glossary of paper-finishing words, sorted into little groups. no networking yet, but it sets up everything after it ๐Ÿ“„๐Ÿ’…

FOLDING

Z Fold: two folds go into the sheet in opposite directions. The first fold sits at 25% of the sheet length and the second at 50% (basically the center ๐Ÿฆ‹). Z folding is super common on 11x17 inch or A3 sheets when they're bundled with 8.5x11 inch or A4 sheets.

Half Fold: you fold a sheet in half so one of the resulting dimensions is exactly half of the original. It's often used for signatures or booklets ๐Ÿ“–

Letter Fold: folding a sheet into roughly thirds. It's usually done on 8.5x11 inch or A4 sheets so they fit into an envelope โœ‰๏ธ

Signature: this is where images get placed on a big sheet in the right panel areas and orientation. When the sheet is folded, the booklet ends up with every page in the right order and orientation. so iconic, honestly ๐ŸคŒ

BINDING

Adhesive Binding: attaching sheets together with glue or adhesive to make a book or booklet. some methods glue each sheet individually before they're merged, but most put adhesive on the whole stack of sheets at once ๐Ÿซถ

Comb Binding: a row of small rectangular holes runs along the bind edge. a tube-shaped plastic strip with comb-like fingers goes through those holes to hold everything together ๐Ÿชฎ

Spiral Binding: also called wire binding. it's a mechanical bind where the leaves are held by a wire or plastic spiral fed through small holes in the binding edge ๐ŸŒ€

Padding: you put a non-penetrating adhesive on the edge of a stack, so the sheets can be peeled off one at a time. it's used a lot for forms ๐Ÿ“‹

Velo Binding: holes get punched into the edge of the sheets. then a two-piece plastic strip gets placed along the edge (one side has plastic pins that go through the holes) and the two pieces are staked together ๐Ÿ’œ

Perfect Binding: all the pages are cut and roughed up at the back or binding edge, then held together with adhesive. it's giving clean paperback vibes ๐Ÿ“š

Tape Binding: tape goes over the bind edge of a set. sometimes it has adhesive so it actually holds the set together, and sometimes it's just decorative on a set that's already edge stapled ๐ŸŽ€

SLITTING/CUTTING/TRIMMING

Trim: cutting the edges of a sheet or a set of sheets โœ‚๏ธ

Face Trim: cutting the edges of a booklet's sheets after they've been folded, to get rid of the "creep" or edge shingling that folding causes ๐Ÿ™ˆ

Gutter Trim: cutting a larger sheet into smaller ones and getting rid of the gutter between adjacent images. this needs at least two cuts for each gutter ๐Ÿ”ช

Tab Cutting: cutting the edge of a sheet to make an index tab, so people can find and grab things fast. the external tabs are placed one after another along the book edge so they're easy to see and hold ๐Ÿท๏ธ

Perforating: cutting a series of very small, closely spaced holes or slots into a sheet, so a part of it can be separated easily. it's sometimes used to make heavy-weight papers easier to bend or hinge ๐Ÿซง

Scoring: adding small linear grooves or impressions along a sheet so it folds easily. it's often used on heavy-weight sheets and book covers ๐Ÿ’…

Slitting: cutting a large sheet apart to make smaller sheets. it's usually done with a sharp circular roll system ๐ŸŒธ

STITCHING/STAPLING

Staple: binding a set of sheets together with a 'U' shaped piece of metal wire punched through the set. the ends get bent over, or 'clinched', to hold the staple in place. technically, 'stapler' refers to devices that use pre-cut metal staples, but people also use the word for devices that take wire spools and cut and form the staple themselves. (see the definition of Stitch) ๐Ÿ“Ž

Stitch: also binds a set together with a 'U' shaped piece of metal wire punched through it. the wire gets cut and formed into a 'U' shape in the stitcher head, and the length of the staple's legs often changes depending on how many sheets are being bound. the ends are bent over, or 'clinched', to hold it in place ๐Ÿงต

Stitching can also mean sewing the edges of a book's signatures together, so there are two meanings floating around, bestie ๐Ÿงš

Saddle Stitch: stapling a set along its center line as part of making a booklet. usually 2 or 3 staples get used ๐Ÿฃ

Dual Stapling: placing 2 staples along the bind edge of a set. they're usually located at 25% and 75% of the length of the bind edge. dual stapling happens a lot on the long edge, but legal documents are often dual stapled along the top, or short edge, of the set โš–๏ธ

Triple Stapling: same idea as above, but with 3 staples along the bind edge. it usually only applies to the long edge ๐ŸŒˆ

WRAPPING

Shrink Wrap: a thin plastic wrap that shrinks and wraps tightly around the stack when it's heated, so it's ready to ship ๐Ÿ›๏ธ

BANDING

Band Wrap: bundling a finished stack so it's ready to ship. it's also known as Strap Wrap ๐ŸŽ

ROTATING

Sheet Rotator: a device that rotates each sheet as it comes in from the Media Path, so it's in the right orientation for finisher processing ๐Ÿ”„


3. Finisher Subunits Integrated Into The Printer Model ๐ŸŽ€

okay so the Printer Finisher Device subunits are the ones that take media from one or more Printer Media Path subunits, then send it to one or more Printer Output subunits once all the finishing is done ๐Ÿ–จ๏ธโœจ the Printer Model is described in the Printer MIB [RFC3805]. it gets updated by adding the finisher subunit(s) and finisher supplies between the media path and the output subunits, and it looks like this:

                   +----------+
                 +----------+ |
                 |  Marker  | |
                 | Supplies |-+
                 +----------+
                       \
  +-----+               \ +------+                +--------+    +------+
  |     |                \|      |                |        |    |      |
+-----+ |    +-----+    +------+ |   +------+   +--------+ |  +------+ |
|Input|-+  +------+|    |Marker|-+  +------+|   |Finisher|-+  |Output|-+
|     |===>|      |+<==>|      |<==>|      |+==>|        |===>|      |
+-----+    +-+  +-+     +------+    +-+  +-+    +--------+    +------+
   \         |  ||                    |  ||         \
    \        |  ||                    |  ||          \
     \       |  ||                    |  ||    +----------+
  +-------+  |  |+--------------------|  ||    | Finisher |-+
  |       |  |  +---------------------+  ||    | Supplies | |
+-------+ |  |         Media Path        |+    +----------+ |
| Media |-+  +---------------------------+       |          |
|(opt.) |                                        +----------+
+-------+

4. Finishing Specifications ๐Ÿ’…

the Finisher MIB can provide most of the info needed to generate a Finishing Specification. that includes:

  1. Finishing operations that can be performed on media that are associated with a specific printer media path and output subunit.
  2. Combinations of operations that cannot be performed.
  3. The location of the operation on the medium, if applicable.
  4. The physical characteristics of the result of the operation. For example, the size and shape of a punched hole, or whether a fold operation creates a letter fold or a "Z" fold.

the Finisher MIB also lets an agent describe the order in which operations can be performed ๐Ÿง 

4.1. Multiple finDeviceTable Entries

each finishing operation the printer supports gets represented by one or more entries in the finDeviceTable. each entry defines a "logical" finishing device, since one finisher mechanism might be doing the job of several table entries. you can also get multiple entries when there are multiple finisher mechanisms that do the same type of operation ๐Ÿซถ

here's an example of multiple entries for one finisher device: a hole punch operation that makes more than one hole. it could be done with a single die punch that moves to each required position, or with a multi-die punch that makes all the holes at once. either way, each hole position can be defined as its own table entry ๐Ÿ•ณ๏ธ

in both cases, if the punch positions can be selected individually, you'd need a table entry for each position ๐Ÿ’–

for a multi-die punch, each head mechanism might have a different hole pattern or size. if those differences need to be disclosed properly, you'd need a table entry for each head mechanism ๐ŸŒŸ

4.2. Implicit Parameters

finishing operations that are specified by an enum define a standard operation. in lots of cases, when you specify the enum, a set of physical characteristics is implicitly included too. if explicit values for those characteristics aren't given in the attributes table, the values in this section are implied instead ๐Ÿงšโ€โ™€๏ธ

4.2.1. FinPunchPatternTC

here's the table of enum patterns, reference edges, axis offsets and hole spacing. the notes underneath it explain the details ๐Ÿ“

enum pattern       |Reference| Reference | Hole spacing
                   | Edge    |Axis Offset| (see note 1)
-------------------+---------+-----------+---------------------------
twoHoleUSTop(4)    | topEdge |   note 2  | 2.75 inches
threeHoleUS(5)     |  note 3 |   note 2  | 4.25 inches
twoHoleDIN(6)      |  note 4 |   note 5  | 80 mm
fourHoleDIN(7)     |  note 4 |   note 5  | 80 mm
twentyTwoHoleUS(8) |  note 3 |   note 2  | .5 inches
nineteenHoleUS(9)  |  note 3 |   note 9  | .5625 inches
twoHoleMetric(10)  |  note 6 |   note 5  | 80 mm
swedish4Hole(11)   |  note 4 |   note 5  | 21, 70, 21 mm
twoHoleUSSide(12)  |  note 3 |   note 2  | 2.75 inches
fiveHoleUS(13)     |  note 3 |   note 2  | 2, 2.25, 2.25, 2 in
sevenHoleUS(14)    |  note 3 |   note 2  | 1, 1, 2.25, 2.25, 1, 1 in
mixed7H4S(15)      |  note 4 |   note 5  | note 7
norweg6Hole(16)    |  note 4 |   note 5  | note 8
metric26Hole(17)   |  note 6 |   note 5  | 9.5 mm
metric30Hole(18)   |  note 4 |   note 5  | 9.5 mm

Notes:

  1. All hole to hole patterns are centered along the process edge.
  2. Offset is 0.18 inches to 0.51 inches.
  3. Reference edge is leftEdge(5) for letter and topEdge(3) for ledger.
  4. Reference edge is leftEdge(5) for A4 and topEdge(3) for A3.
  5. Offset is 4.5 mm to 13 mm.
  6. Reference edge is leftEdge(5) for B5 and topEdge(3) for B4.
  7. 7 holes and 4 slots are punched in a H-S-H-H-S-H-S-H-H-S-H pattern with 15, 25, 23, 20, 37, 37, 20, 23, 25, 15 mm spacing.
  8. 4 holes and 2 slots are punched in a H-H-S-S-H-H pattern with a 64, 18.5, 75, 18.5, 64 mm spacing.
  9. Offset is .188 inches.

4.2.2. FinPunchHoleTypeTC, punchHoleSizeMaxDim, punchHoleSizeMinDim

okay the hole punch lineup is here and it's giving organized ๐ŸŽ€ each pattern value gets its own hole description, so you can see exactly what each pattern punches ๐Ÿ•ณ๏ธโœจ

   enum pattern       | Hole Description
   -------------------+----------------------------------------
   twoHoleUSTop(4)    | round(3), .2 - .32 inch diameter
   threeHoleUS(5)     | round(3), .2 - .32 inch diameter
   twoHoleDIN(6)      | round(3),  5 - 8 mm diameter
   fourHoleDIN(7)     | round(3),  5 - 8 mm diameter
   twentyTwoHoleUS(8) | round(3), .2 - .32 inch diameter
   nineteenHoleUS(9)  | rectang(6), .313 inches X .125 inches
   twoHoleMetric(10)  | round(3),  5 - 8 mm diameter
   swedish4Hole(11)   | round(3),  5 - 8 mm diameter
   twoHoleUSSide(12)  | round(3), .2 - .32 inch diameter
   fiveHoleUS(13)     | round(3), .2 - .32 inch diameter
   sevenHoleUS(14)    | round(3), .2 - .32 inch diameter
   mixed7H4S(15)      | round(3),  5 - 8 mm diameter
                      | rectang(6),  12 mm X 6 mm
   norweg6Hole(16)    | round(3),  5 - 8 mm diameter
                      | rectang(6),  10 mm  X 5.5 mm
   metric26Hole(17)   | round(3),  5 - 8 mm
   metric30Hole(18)   | round(3),  5 - 8 mm

Note: these hole size ranges are typical and are only a reference ๐Ÿ“ Exact tolerances should be site defined, so check what your site wants before you trust these numbers ๐Ÿ’…

5. The Attribute Mechanism โœจ

okay so attributes are kinda like information objects, except they're identified by an enum instead of an OID ๐Ÿฆ‹ That means you can register brand new attributes without having to change the MIB, which is so efficient it's giving ๐Ÿ‘‘ Also, if an implementation doesn't have the functionality an attribute covers, it can just leave that attribute out entirely instead of returning some special placeholder value ๐Ÿ™Œ And the agent is free to create an attribute in the Attribute Table the second it knows the attribute's value ๐Ÿ’–

The agent materializes finishing subunit attributes in a four-indexed finDeviceAttributeTable:

  1. hrDeviceIndex - which device in the host
  2. finDeviceIndex - which finisher subunit in the printer device
  3. finDeviceAttributeTypeIndex - which attribute
  4. finDeviceAttributeInstanceIndex - which attribute instance for those attributes that can have multiple values per finishing subunit

5.1. Conformance of Attribute Implementation

An agent SHALL implement any attribute if (1) the device supports the functionality represented by the attribute and (2) the information is available to the agent. The agent MAY create the attribute row in the finDeviceAttributeTable when the information is available, or MAY create the row earlier with the designated 'unknown' value appropriate for that attribute. See next section ๐ŸŒธ

If the device does not implement or does not provide access to the information about an attribute, the agent SHOULD NOT create the corresponding row in the finDeviceAttributeTable ๐Ÿ™ˆ no row, no drama

5.2. Useful, 'Unknown', and 'Other' Values for Objects and Attributes

Some attributes have a 'useful' Integer32 value, some have a 'useful' OCTET STRING value, some MAY have either or both depending on implementation, and some MUST have both. See the finDeviceAttributeTypeTC textual convention for the specification of each attribute ๐Ÿงš

NOTE: okay this one is important bestie ๐Ÿ˜ญ In some instances, objects with a MAX-ACCESS of read-write will result in an SNMPv1 error or SNMPv2 exception during a write operation. The administrative security policy may restrict a class of users to read-only or, more importantly, the implementation may implement a subset of read-write objects as read-only. This should be expected to be the case for a device that can properly sense the value of an object and does not want the value to be externally modified.

In general, values for objects and attributes have been chosen so that a management application can tell whether a 'useful', 'unknown', or 'other' value is available ๐Ÿ“ When a useful value is not available for an object, that agent SHALL return a zero-length string for octet strings, the value 'unknown(2)' for enums, a '0' value for an object that represents an index in another table, and a value '-2' for counting integers.

Since each attribute is represented by a row consisting of both the finDeviceAttributeValueAsInteger and finDeviceAttributeValueAsOctets MANDATORY objects, SNMP requires that the agent SHALL always create an attribute row with both objects specified ๐Ÿซถ However, for most attributes the agent SHALL return a "useful" value for one of the objects and SHALL return the 'other' value for the other object. For integer only attributes, the agent SHALL always return a zero-length string value for the finDeviceAttributeValueAsOctets object. For octet string only attributes, the agent SHALL always return a '-1' value for the finDeviceAttributeValueAsInteger object ๐Ÿ’œ

5.3. Data Sub-types and Attribute Naming Conventions

Many attributes are sub-typed to give a more specific data type than Integer32 or OCTET STRING. The data sub-type of each attribute is indicated on the first line(s) of the description ๐ŸŽ€ Some attributes have several different data sub-type representations. When an attribute has both an Integer32 data sub-type and an OCTET STRING data sub-type, the attribute can be represented in a single row in the finDeviceAttributeTable. In this case, the data sub-type name is not included as the last part of the name of the attribute.

When the data sub-types cannot be represented by a single row in the finDeviceAttributeTable, each such representation is considered a separate attribute and is assigned a separate name and enum value. For these attributes, the name of the data sub-type is the last part of the name of the attribute โœจ

5.4. Single-Value (Row) Versus Multi-Value (MULTI-ROW) Attributes

Most attributes shall have only one row per finishing subunit. However, a few attributes can have multiple values per finishing subunit, where each value is a separate row in the finDeviceAttributeTable ๐Ÿฆ‹ Unless indicated with 'MULTI-ROW:' in the finDeviceAttributeTypeTC description, an agent SHALL ensure that each attribute occurs only once in the finDeviceAttributeTable for a finishing subunit.

Most of the 'MULTI-ROW' attributes do not allow duplicate values, i.e., the agent SHALL ensure that each value occurs only once for a finishing subunit. Only if the specification of the 'MULTI-ROW' attribute also says "There is no restriction on the same xxx occurring in multiple rows" can the agent allow duplicate values to occur for a single finishing subunit ๐Ÿ”ฅ no duplicates unless the spec explicitly says it's fine, periodt ๐Ÿ’…

5.5. Linked MUTI-ROW Values

Some MULTI-ROW attributes are intended to go together. Thus a set of value instances represent a single instance ๐ŸŒˆ For example, the puncher attributes indicate the location, maximum size, minimum size and shape of the various holes that the puncher can produce. So the first set of values could represent one kind of hole, and the second set another kind of hole, etc. It's like a little bundle of hole info, bestie ๐Ÿ•ณ๏ธ๐ŸŽ€

5.6. Index Value Attributes

A number of attributes are indexes in other tables. Such attribute names end with the word 'Index' ๐Ÿงš If the agent has not (yet) assigned an index value for a particular index attribute for a finishing subunit, the agent shall either: (1) return the value 0 or (2) not add this attribute to the finDeviceAttributeTable until the index value is assigned. In the interests of brevity, the semantics for 0 is specified once here and is not repeated for each index attribute specification, and a DEFVAL of 0 is indicated ๐ŸŒธ

5.7. Attribute Specifications โœจ

okay so this section is the official list of every attribute in finAttributeTypeTC, and I'm obsessed ๐Ÿซถ. The tags INTEGER: and OCTETS: tell you whether an attribute can be shown with finDeviceAttributeAsInteger or finDeviceAttributeAsOctets. Some attributes can go either way, and a few need both objects at once to show the value properly ๐Ÿ’….

NOTE - The enum assignments are grouped logically, with values assigned in groups of 10. That way, new values can be registered later and still land in the right group ๐Ÿงš

Values from 2**30 to 2**31-1 are reserved for private or experimental use, which matches the range reserved in IPP. Heads up, bestie: using those values might clash with other implementations ๐Ÿ˜ฌ. Implementers are still encouraged to request registration of enum values by following the procedures in Section 6.1 ๐ŸŒธ.

Here's the list of attribute types defined when this specification was finished:

finAttributeTypeIndex              Data type
---------------------              ---------
other(1),                          Integer32
                                   AND/OR
                                   OCTET STRING (SIZE(0..63))
   INTEGER: and/or OCTETS:  An attribute that is not currently
     approved and registered.

A. Generic finisher subunit attributes that apply to all finisher subunit types. (3..) ๐Ÿ’–

deviceName(3),                     OCTET STRING (SIZE(0..63))
   OCTETS:

This is the name given to this finisher device subunit ๐ŸŽ€.

deviceVendorName(4),               OCTET STRING (SIZE(0..63))
   OCTETS:

The name of the vendor who made this finisher device subunit ๐Ÿญ.

deviceModel(5),                    OCTET STRING (SIZE(0..63))
   OCTETS:

The model name of this finisher device subunit โœจ.

deviceVersion(6),                  OCTET STRING (SIZE(0..63))
   OCTETS:

A version string for this finisher device subunit ๐Ÿ”ข.

deviceSerialNumber(7),             OCTET STRING (SIZE(0..63))
   OCTETS:

The serial number assigned to this finisher device subunit ๐Ÿ”.

maximumSheets(8),                  Integer32 (-2..32767)
   INTEGER:

This is the maximum number of media sheets a finisher device can handle ๐Ÿ“„.

finProcessOffsetUnits(9),          PrtMediaUnitTC
   INTEGER:

An enumeration that sets the units of measure for finAxisOffset, finHeadLocation, punchHoleSizeLongDim, and punchHoleSizeShortDim ๐Ÿ“.

finReferenceEdge(10),              FinEdgeTC
   INTEGER:

An enumeration that picks which edge of the form is the reference for this finishing process. The Finishing Process Axis runs parallel to that edge ๐Ÿงญ.

finAxisOffset(11),                 Integer32 (-2..2147483647)
   INTEGER:

This sets how far the Finishing Process Axis sits from the parallel Reference Edge. If finEdgeTC is equal to TopEdge or RightEdge, the value you give is to be interpreted as a negative offset from the reference edge ๐Ÿ™ƒ. The units come from finProcessOffsetUnits.

finJogEdge(12),                    FinEdgeTC
   INTEGER:

An enumeration for a second edge of the document that the media gets lined up against. The jog edge has to be perpendicular to the edge set by finReferenceEdge ๐Ÿ“.

finHeadLocation(13),               Integer32 (-2..2147483647)
   INTEGER: MULTI-ROW:

This is where the Head Mechanism sits, measured along whichever of the 'X' or 'Y' axes is perpendicular to the Process Axis ๐ŸŽฏ. The units come from finProcessOffsetUnits.

finOperationRestrictions(14),      Integer32 (0..65535)
   INTEGER: MULTI-ROW:

This holds the finDeviceIndex of a finishing process that can't be combined with the one for this finDeviceAttributeTable instance ๐Ÿšซ. When that conflict happens, this attribute SHALL be presented in the attribute tables for both finishing processes that can't be combined. Non-negotiable, periodt ๐Ÿ’€.

finNumberOfPositions(15),          Integer32 (0..65535)
   INTEGER:

The total number of head positions for this finishing process ๐Ÿ“. Each position may be covered by its own head mechanism, or one head mechanism may move automatically between the positions ๐Ÿค–.

namedConfiguration(16),            OCTET STRING (SIZE(0..63))
   OCTETS:

An administratively defined name for the finishing specification configured on this device ๐Ÿท๏ธ.

finMediaTypeRestriction(17),       OCTET STRING (SIZE(0..63))
   OCTETS: MULTI-ROW:

The media type that can't be combined with the process for this finDeviceIndex in this finDeviceAttributeTable instance ๐Ÿ™…โ€โ™€๏ธ. The values match the ones defined for finSupplyMediaInputMediaName.

finPrinterInputTraySupported(18),  Integer32 (0..65535)
   INTEGER: MULTI-ROW:

This is the prtInputIndex value for the printer input tray this process can work with ๐Ÿ—‚๏ธ. If this attribute isn't present, the process can use any input tray in the printer. Picture a stapler: if you've got two letter trays, one holding A size and one holding B size, a two-position stapler might list upper-left and upper-right for the A tray, but only upper-left for the B tray ๐Ÿ“Ž.

finPreviousFinishingOperation(19), Integer32 (0..65535)
   INTEGER:

The finDeviceIndex of the previous finishing process, for setups where the processes run in a set order ๐Ÿ”. Each step in that fixed sequence either happens or doesn't, depending on the finishing instructions sent with the job. A value of 0 means this process is the first in the sequence 1๏ธโƒฃ. Finishing processes that aren't part of a fixed sequence SHALL NOT have this attribute ๐Ÿ™….

finNextFinishingOperation(20),     Integer32 (0..65535)
   INTEGER:

The finDeviceIndex of the next finishing process, for setups where the processes run in a set order ๐Ÿ”œ. Same deal as before: each step in the fixed sequence either happens or doesn't based on the job instructions. A value of 0 means this process is the last in the sequence ๐Ÿ. Finishing processes that aren't part of a fixed sequence SHALL NOT have this attribute either ๐Ÿ™….

B. Stitcher type-specific attributes (30..) ๐Ÿงต

stitchingType(30),                 FinStitchingTypeTC
   INTEGER: MULTI-ROW:

Extra detail about the stitching operation ๐Ÿชก.

stitchingDirection(31),            FinStitchingDirTypeTC
   INTEGER:

The orientation of the stitching process ๐Ÿงถ.

stitchingAngle(32),                FinStitchingAngleTypeTC
   INTEGER:

Enumerations describing the angle of the stitching process relative to the 'X' axis ๐Ÿ“.

C. Folder type-specific attributes (40..) ๐Ÿ“„

foldingType(40),                   FinFoldingTypeTC
   INTEGER:

Extra detail about the folding process ๐Ÿ—‚๏ธ.

D. Binder type-specific attributes (50..) ๐Ÿ“š

bindingType(50),                   FinBindingTypeTC
   INTEGER:

Extra detail about the binding process ๐Ÿ“–.

E. Trimmer type-specific attributes (60..) โœ‚๏ธ

Nothing is listed in this section yet ๐Ÿซ .

F. Die cutter type-specific attributes (70..) ๐Ÿ”ช

Nothing is listed in this section yet ๐Ÿซ .

G. Puncher type-specific attributes (80..) ๐Ÿ•ณ๏ธ

punchHoleType(80),                 FinPunchHoleTypeTC
   INTEGER:

Info about the shape of the punched hole ๐Ÿ”ต.

punchHoleSizeLongDim(81),          Integer32 (-2..2147483647)
   INTEGER:

The size of the punched hole along its longest dimension ๐Ÿ“. That dimension is usually measured parallel to either the long edge or the short edge of the media, and it's always measured 90 degrees from the shortest dimension ๐Ÿ”„. For a symmetrical hole, like a round or square one, the shortest and longest dimensions are identical ๐Ÿ’•. The units come from finProcessOffsetUnits.

punchHoleSizeShortDim(82),         Integer32 (-2..2147483647)
   INTEGER:

The size of the punched hole along its shortest dimension ๐Ÿ“. That one is also usually measured parallel to either the long edge or the short edge of the media, and it's always measured 90 degrees from the longest dimension ๐Ÿ”„. A symmetrical hole, like a round or square one, has matching shortest and longest dimensions ๐Ÿ’•. The units come from finProcessOffsetUnits.

punchPattern(83),                  FinPunchPatternTC
   INTEGER:

The hole pattern the punch process makes ๐ŸŽฒ.

H. Perforator type-specific attributes (90..) โญ

Nothing is listed in this section yet ๐Ÿซ .

I. Slitter type-specific attributes (100..) ๐Ÿ”ช

slittingType(100),                 FinSlittingTypeTC
   INTEGER:

Extra detail about the slitting process โœจ.

J. Separation cutter type-specific attributes (110..) ๐ŸŒ€

Nothing is listed in this section yet ๐Ÿซ .

K. Imprinter type-specific attributes (120..) ๐Ÿ–‹๏ธ

Nothing is listed in this section yet ๐Ÿซ .

L. Wrapper type-specific attributes (130..) ๐ŸŽ

wrappingType(130),                 FinWrappingTypeTC
   INTEGER:

Extra detail about the wrapping process ๐ŸŽ€.

M. Bander type-specific attributes (140..) ๐Ÿงท

Nothing is listed in this section yet ๐Ÿซ .

N. Make Envelopes type-specific attributes (150..) โœ‰๏ธ

Nothing is listed in this section yet ๐Ÿซ .

O. Stacker type-specific attributes (160..) ๐Ÿฅž

stackOutputType(160)               FinStackOutputTypeTC
   INTEGER:

Defines the job-to-job orientation the stacker produces ๐Ÿงญ.

stackOffset(161)                   Integer32 (-2..2147483647)
   INTEGER:

The copy-to-copy output stack offset, given as a positive offset distance ๐Ÿ“. The units come from finProcessOffsetUnits.

stackRotation(162)                 Integer32 (-2..180)
   INTEGER:

The copy-to-copy output stack rotation, in degrees ๐ŸŒ€. The value is the positive copy-to-copy rotation ๐Ÿ’œ.

6. Enumerations ๐Ÿ’…

Okay bestie, enums are sets of symbolic values you can use with one or more objects ๐ŸŒธ. The commonly used sets get a symbolic data type name (a textual convention) so they don't have to be written out in the SYNTAX clause of every single object. Way cleaner, no cap โœจ.

Textual conventions defined in the Finisher MIB or the companion IANA Finisher MIB are extensible by RFC publication or Designated Expert Review. Check the 'IANA Considerations' section of this Finisher MIB and the DESCRIPTION clause in MODULE-IDENTITY of IANA Finisher MIB for the details ๐Ÿฆ‹. All of these textual conventions are:

  • a) used more than once in the Finisher MIB itself; or
  • b) imported and used in any other, including vendor private, MIB modules.

The Finisher MIB also defines some special values for objects with the "Integer32" syntax, for conditions that sit outside the normal numeric range: other(-1), unknown(-2), and partial(-3) ๐Ÿงš. The 'partial' value means there is some supply remaining (but the amount is indeterminate), or there is some capacity remaining (but the amount is indeterminate). The Integer32 range field tells you which objects these special values are valid in ๐Ÿ’–.

6.1. Registering Additional Enumerated Values

The Finisher MIB and the companion IANA Finisher MIB each cover one category of textual convention, depending on how new enumerations get added ๐ŸŒˆ:

  • Type 1 - All of the legal values are defined in the Finisher MIB. Additional enumerated values require the publication of a new Finisher MIB.
  • Type 2 - All of the legal values are registered in the IANA Finisher MIB. Additional enumerated values require a Designated Expert Review defined in "Guidelines for Writing an IANA Considerations Section in RFCs" [RFC2434]. The Designated Expert will be selected by the IETF Area Director(s) of the Applications Area ๐Ÿ‘‘.

7. IANA Printer Finishing MIB Specification ๐ŸŽ€

Here's the IANA-maintained MIB module with all the finishing textual conventions. It's code, so it stays exactly as written ๐Ÿคž.

IANA-FINISHER-MIB DEFINITIONS ::= BEGIN
 -- http://www.iana.org/assignments/ianafinisher-mib

IMPORTS
    MODULE-IDENTITY,
        mib-2
            FROM SNMPv2-SMI                              -- [RFC2578]
    TEXTUAL-CONVENTION
            FROM SNMPv2-TC;                              -- [RFC2579]

ianafinisherMIB MODULE-IDENTITY
    LAST-UPDATED  "200406020000Z" -- June 2, 2004
    ORGANIZATION  "IANA"
    CONTACT-INFO  "Internet Assigned Numbers Authority

                  Postal: ICANN
                          4676 Admiralty Way, Suite 330
                          Marina del Rey, CA 90292

                  Tel:    +1 310 823 9358
                  E-Mail: iana@iana.org"

    DESCRIPTION   "This MIB module defines a set of finishing-related
                  TEXTUAL-CONVENTIONs for use in Finisher MIB (RFC 3806)
                  and other MIBs which need to specify finishing
                  mechanism details.

                  Any additions or changes to the contents of this MIB
                  module require either publication of an RFC, or
                  Designated Expert Review as defined in RFC 2434,
                  Guidelines for Writing an IANA Considerations Section
                  in RFCs.  The Designated Expert will be selected by
                  the IESG Area Director(s) of the Applications Area.

                  Copyright (C) The Internet Society (2004). The
                  initial version of this MIB module was published
                  in RFC 3806. For full legal notices see the RFC
                  itself or see:
                  http://www.ietf.org/copyrights/ianamib.html"

    REVISION      "200406020000Z"  -- June 2, 2004
    DESCRIPTION   "Original version, published in coordination
                  with Finisher MIB (RFC 3806)."

    ::= { mib-2 110 }

-- TEXTUAL-CONVENTIONs for this MIB module

FinDeviceTypeTC ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION
      "The defined finishing device subunit process
       enumerations."
    SYNTAX       INTEGER {
         other(1),
         unknown(2),
         stitcher(3),
         folder(4),
         binder(5),
         trimmer(6),
         dieCutter(7),
         puncher(8),
         perforater(9),
         slitter(10),
         separationCutter(11),
         imprinter(12),
         wrapper(13),
         bander(14),
         makeEnvelope(15),
         stacker(16),
         sheetRotator(17),
         inserter(18)
        }

FinAttributeTypeTC  ::= TEXTUAL-CONVENTION
    STATUS     current
    DESCRIPTION
        "This TEXTUAL-CONVENTION defines the set of enums for use in
         the finDeviceAttributeTable.  See section 5.7 for the complete
         specification of each attribute."
    SYNTAX       INTEGER {
         other(1),
         deviceName(3),
         deviceVendorName(4),
         deviceModel(5),
         deviceVersion(6),
         deviceSerialNumber(7),
         maximumSheets(8),
         finProcessOffsetUnits(9),
         finReferenceEdge(10),
         finAxisOffset(11),
         finJogEdge(12),
         finHeadLocation(13),
         finOperationRestrictions(14),
         finNumberOfPositions(15),
         namedConfiguration(16),
         finMediaTypeRestriction(17),
         finPrinterInputTraySupported(18),
         finPreviousFinishingOperation(19),
         finNextFinishingOperation(20),
         stitchingType(30),
         stitchingDirection(31),
         foldingType(40),
         bindingType(50),
         punchHoleType(80),
         punchHoleSizeLongDim(81),
         punchHoleSizeShortDim(82),
         punchPattern(83),
         slittingType(100),
         wrappingType(130),
         stackOutputType(160),
         stackOffset(161),
         stackRotation(162)
        }

FinEdgeTC ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION
      "Specifies an edge for a Finishing Process."
    SYNTAX       INTEGER {
         topEdge(3),
         bottomEdge(4),
         leftEdge(5),
         rightEdge(6)
        }

FinStitchingTypeTC ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION
      "The defined stitching type enumerations.  For the edgeStitch and
       stapleDual enums, the finReferenceEdge attribute is recommended
       to define the edge to which the operation applies."
    SYNTAX       INTEGER {
         other(1),         -- More information in other attributes
         unknown(2),
         stapleTopLeft(4),
         stapleBottomLeft(5),
         stapleTopRight(6),
         stapleBottomRight(7),
         saddleStitch(8),
         edgeStitch(9),
         stapleDual(10)
        }

FinStitchingDirTypeTC ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION
      "Defines the direction, relative to the top sheet in the output
       subunit, that the stitching operation was performed.  For a
       topDown(3) process, the staple will be clinched on the bottom
       of the stack.  This parameter can be used to determine what
       order the pages of a booklet are to be printed such that the
       staple clinch will be on the inside of the resulting booklet."
    SYNTAX       INTEGER {
         unknown(2),
         topDown(3),
         bottomUp(4)
        }

FinStitchingAngleTypeTC ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION
      "This enumeration provides a description of the angular
       orientation of each stitch in a single or multiple stitching
       operation, relative to the 'X' axis.  As with all finishing
       operations, the 'X' axis is always relative to the portrait
       orientation of the document regardless of the orientation
       of the printed image.  This enum is primarily applicable to
       corner stitching operations."
    SYNTAX       INTEGER {
         unknown(2),
         horizontal(3),
         vertical(4),
         slanted(5)
        }

FinFoldingTypeTC ::= TEXTUAL-CONVENTION
   STATUS       current
   DESCRIPTION

     "The defined folding device process enumerations."
   SYNTAX       INTEGER {
         other(1),        -- More information in other attributes
         unknown(2),
         zFold(3),
         halfFold(4),
         letterFold(5)
        }

FinBindingTypeTC ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION
      "The defined binding type enumerations."
    SYNTAX       INTEGER {
         other(1),          -- More information in other attributes
         unknown(2),
         tape(4),
         plastic(5),
         velo(6),
         perfect(7),
         spiral(8),
         adhesive(9),
         comb(10),
         padding(11)
        }

FinPunchHoleTypeTC ::= TEXTUAL-CONVENTION
   STATUS       current
   DESCRIPTION
     "The defined hole type punch process enumerations."
   SYNTAX       INTEGER {
         other(1),        -- More information in other attributes
         unknown(2),
         round(3),
         oblong(4),
         square(5),
         rectangular(6),
         star(7)
        }

FinPunchPatternTC ::= TEXTUAL-CONVENTION
   STATUS       current
   DESCRIPTION
     "The defined hole pattern punch process enumerations."
   SYNTAX       INTEGER {
         other(1),           --Pattern to be defined in other attributes
         unknown(2),
         twoHoleUSTop(4),    --Letter/legal, 8.5 inch edge
         threeHoleUS(5),     --Letter/ledger, 11 inch edge
         twoHoleDIN(6),      --A4/A3, 297 mm edge
         fourHoleDIN(7),     --A4/A3, 297 mm edge
         twentyTwoHoleUS(8), --Letter/ledger, 11 inch edge
         nineteenHoleUS(9),  --Letter/ledger, 11 inch edge
         twoHoleMetric(10),  --B5/B4, 257 mm edge
         swedish4Hole(11),   --A4/A3, 297 mm edge
         twoHoleUSSide(12),  --Letter/ledger, 11 inch edge
         fiveHoleUS(13),     --Letter/ledger, 11 inch edge
         sevenHoleUS(14),    --Letter/ledger, 11 inch edge
         mixed7H4S(15),      --A4/A3, 297 mm edge
         norweg6Hole(16),    --A4/A3, 297 mm edge
         metric26Hole(17),   --B5/B4, 257 mm edge
         metric30Hole(18)    --A4/A3, 297 mm edge
        }

FinSlittingTypeTC ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION
      "The defined slitting type enumerations."
    SYNTAX       INTEGER {
         other(1),         -- More information in other attributes
         unknown(2),
         slitAndSeparate(4),
         slitAndMerge(5)
        }

FinWrappingTypeTC ::= TEXTUAL-CONVENTION
   STATUS       current
   DESCRIPTION
     "The defined wrapping device process enumerations."
   SYNTAX       INTEGER {
         other(1),        -- More information in other attributes
         unknown(2),
         shrinkWrap(4),
         paperWrap(5)
        }

FinStackOutputTypeTC ::= TEXTUAL-CONVENTION
   STATUS       current
   DESCRIPTION
     "The defined stack output type enumerations."
   SYNTAX       INTEGER {
         other(1),        -- More information in other attributes
         unknown(2),
         straight(4),     -- No offset, one on top of another

         offset(5),
         crissCross(6)    -- Rotated

        }
END

8. Printer Finishing MIB Specification ๐Ÿ‘‘

Now the main Finisher MIB module, which kicks off by importing everything it needs from the other MIBs ๐Ÿ’œ.

Finisher-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, Integer32, mib-2
        FROM SNMPv2-SMI                                  -- [RFC2578]
    MODULE-COMPLIANCE, OBJECT-GROUP
        FROM SNMPv2-CONF                                 -- [RFC2580]
    hrDeviceIndex
        FROM HOST-RESOURCES-MIB                          -- [RFC2790]
    PrtInputTypeTC, PrtMarkerSuppliesTypeTC
        FROM IANA-PRINTER-MIB                            -- [RFC3805]
    printmib, PrtSubUnitStatusTC, PrtLocalizedDescriptionStringTC,
        PrtMarkerSuppliesSupplyUnitTC, PrtMediaUnitTC,
        PrtCapacityUnitTC, PrtMarkerSuppliesClassTC,
        PresentOnOff, prtMIBConformance
        FROM Printer-MIB                                 -- [RFC3805]
    FinDeviceTypeTC, FinAttributeTypeTC
        FROM IANA-FINISHER-MIB;

okay so this is where the finishing stuff gets real ๐ŸŽ€ the finisher device group is literally the list of every finishing process the printer can do, plus all the little settings you can poke at โœจ

finisherMIB MODULE-IDENTITY
    LAST-UPDATED "200406020000Z"
    ORGANIZATION "PWG IEEE/ISTO Printer Working Group"
    CONTACT-INFO

        "Harry Lewis
        IBM
        Phone (303) 924-5337
        Email: harryl@us.ibm.com

        Send comments to the printmib WG using the Finisher MIB
        Project (FIN) Mailing List:  fin@pwg.org

        For further information, access the PWG web page under 'Finisher
        MIB':      http://www.pwg.org/

        Implementers of this specification are encouraged to join the
        fin mailing list in order to participate in discussions on any
        clarifications needed and registration proposals being reviewed
        in order to achieve consensus."
    DESCRIPTION
        "The MIB module for management of printers.
         Copyright (C) The Internet Society (2004). This
         version of this MIB module was published
         in RFC 3806. For full legal notices see the RFC itself."
    REVISION "200406020000Z"
    DESCRIPTION
        "The original version of this MIB."
    ::= { mib-2  111 }

 -- Finisher Device Group (Mandatory)
--
-- A printer may support zero or more finishing subunits.  A
-- finishing device subunit may be associated with one or more
-- output subunits and one or more media path subunits.

finDevice  OBJECT IDENTIFIER  ::=  { printmib 30 }

finDeviceTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF FinDeviceEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
      "This table defines the finishing device subunits,
       including information regarding possible configuration
       options and the status for each finisher device subunit."
    ::= { finDevice 1 }

finDeviceEntry OBJECT-TYPE
    SYNTAX      FinDeviceEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
      "There is an entry in the finishing device table for each
       possible finisher process.  Each individual finisher process is
       implemented by a finishing device represented in this table."
    INDEX  { hrDeviceIndex, finDeviceIndex }
    ::= { finDeviceTable 1 }

FinDeviceEntry ::= SEQUENCE {
      finDeviceIndex                 Integer32,
      finDeviceType                  FinDeviceTypeTC,
      finDevicePresentOnOff          PresentOnOff,
      finDeviceCapacityUnit          PrtCapacityUnitTC,
      finDeviceMaxCapacity           Integer32,
      finDeviceCurrentCapacity       Integer32,
      finDeviceAssociatedMediaPaths  OCTET STRING,
      finDeviceAssociatedOutputs     OCTET STRING,
      finDeviceStatus                PrtSubUnitStatusTC,
      finDeviceDescription           PrtLocalizedDescriptionStringTC
     }

finDeviceIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..65535)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
      "A unique value used to identify a finisher process.
       Although these values may change due to a major
       reconfiguration of the printer system (e.g., the addition
       of new finishing processes), the values are normally
       expected to remain stable across successive power cycles."
    ::= { finDeviceEntry 1 }

finDeviceType OBJECT-TYPE
    SYNTAX      FinDeviceTypeTC
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "Defines the type of finishing process associated with this
       table row entry."
    ::= { finDeviceEntry 2 }

finDevicePresentOnOff OBJECT-TYPE
    SYNTAX      PresentOnOff
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "Indicates if this finishing device subunit is available
       and whether the device subunit is enabled."
    DEFVAL      { notPresent }
    ::= { finDeviceEntry 3 }

finDeviceCapacityUnit OBJECT-TYPE
    SYNTAX      PrtCapacityUnitTC
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "The unit of measure for specifying the capacity of this
       finisher device subunit."
    ::= { finDeviceEntry 4 }

finDeviceMaxCapacity OBJECT-TYPE
    SYNTAX      Integer32 (-2..2147483647)
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "The maximum capacity of this finisher device subunit in
       finDeviceCapacityUnits.  If the device can reliably sense
       this value, the value is sensed by the finisher device
       and is read-only: otherwise the value may be written by a
       management or control console application.  The value (-1)
       means other and specifically indicates that the device
       places no restrictions on this parameter.  The value (-2)
       means unknown."
    DEFVAL      { -2 }      -- unknown
    ::= { finDeviceEntry 5 }

finDeviceCurrentCapacity OBJECT-TYPE
    SYNTAX      Integer32 (-2..2147483647)
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "The current capacity of this finisher device subunit in
       finDeviceCapacityUnits.  If the device can reliably sense
       this value, the value is sensed by the finisher and is
       read-only: otherwise the value may be written by a
       management or control console application.  The value (-1)
       means other and specifically indicates that the device
       places no restrictions on this parameter.  The value (-2)
       means unknown."
    DEFVAL      { -2 }      -- unknown
    ::= { finDeviceEntry 6 }

finDeviceAssociatedMediaPaths OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(1..63))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "Indicates the media paths which can supply media for this
       finisher device.  The value of this object is a bit map in an
       octet string with each position representing the value of a
       prtMediaPathIndex.  For a media path that can be a source
       for this finisher device subunit, the bit position equal
       to one less than the value of prtMediaPathIndex will be set.
       The bits are numbered starting with the most significant bit of
       the first byte being bit 0, the least significant bit of the
       first byte being bit 7, the most significant of the second byte
       being bit 8, and so on."
    ::= { finDeviceEntry 7 }

finDeviceAssociatedOutputs OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(1..63))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "Indicates the printer output subunits this finisher device
       subunit services.  The value of this object is a bit map in an
       octet string with each position representing the value of a
       prtOutputIndex.  For an output subunit that is serviced
       by this finisher device subunit, the bit position equal
       to one less than the value of prtOutputIndex will be set.
       The bits are numbered starting with the most significant bit of
       the first byte being bit 0, the least significant bit of the
       first byte being bit 7, the most significant of the second byte
       being bit 8, and so on."
    ::= { finDeviceEntry 8 }

finDeviceStatus OBJECT-TYPE
    SYNTAX      PrtSubUnitStatusTC
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "Indicates the current status of this finisher device
       subunit."
    DEFVAL      { 5 }      -- unknown
    ::= { finDeviceEntry 9 }

finDeviceDescription OBJECT-TYPE
    SYNTAX      PrtLocalizedDescriptionStringTC
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "A free form text description of this device subunit in the
       localization specified by prtGeneralCurrentLocalization."
    ::= { finDeviceEntry 10 }


-- Finisher Supply Group (Mandatory)
--
-- A finisher device, but not all finisher devices, may have one or more
-- supplies associated with it.  For example a finisher may use both
-- binding tape and stitching wire supplies. A finisher may also have
-- more than one source for a given type of supply e.g., multiple supply
-- sources of ink for imprinters.

finSupply  OBJECT IDENTIFIER  ::=  { printmib 31 }

finSupplyTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF FinSupplyEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
      "Each unique source of supply is an entry in the finisher
       supply table. Each supply entry has its own
       characteristics associated with it such as colorant and
       current supply level."
    ::= { finSupply 1 }

finSupplyEntry OBJECT-TYPE
    SYNTAX     FinSupplyEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
      "A list of finisher devices, with their associated
       supplies and supplies characteristics."
    INDEX  { hrDeviceIndex, finSupplyIndex }
    ::= { finSupplyTable 1 }

FinSupplyEntry ::= SEQUENCE {
      finSupplyIndex               Integer32,
      finSupplyDeviceIndex         Integer32,
      finSupplyClass               PrtMarkerSuppliesClassTC,
      finSupplyType                PrtMarkerSuppliesTypeTC,
      finSupplyDescription         PrtLocalizedDescriptionStringTC,
      finSupplyUnit                PrtMarkerSuppliesSupplyUnitTC,
      finSupplyMaxCapacity         Integer32,
      finSupplyCurrentLevel        Integer32,
      finSupplyColorName           OCTET STRING
     }

finSupplyIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..65535)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
      "A unique value used by a finisher to identify this supply
       container/receptacle.  Although these values may change
       due to a major reconfiguration of the finisher (e.g., the
       addition of new supply sources to the finisher), values
       are normally expected to remain stable across successive
       power cycles."
    ::= { finSupplyEntry 1 }

finSupplyDeviceIndex OBJECT-TYPE
    SYNTAX      Integer32 (0..65535)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "The value of finDeviceIndex corresponding to the finishing
       device subunit with which this finisher supply is associated.
       The value zero indicates the associated finishing device is
       Unknown."
    ::= { finSupplyEntry 2 }

finSupplyClass OBJECT-TYPE
    SYNTAX      PrtMarkerSuppliesClassTC
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "This value indicates whether this supply entity
       represents a supply that is consumed or a container that
       is filled."
    ::= { finSupplyEntry 3 }

finSupplyType OBJECT-TYPE
    SYNTAX      PrtMarkerSuppliesTypeTC
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "The type of this supply."
    ::= { finSupplyEntry 4 }

finSupplyDescription OBJECT-TYPE
    SYNTAX      PrtLocalizedDescriptionStringTC
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "The description of this supply/receptacle in text useful
       for operators and management applications and in the
       localization specified by prtGeneralCurrentLocalization."
    ::= { finSupplyEntry 5 }

finSupplyUnit OBJECT-TYPE
    SYNTAX      PrtMarkerSuppliesSupplyUnitTC
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "Unit of measure of this finisher supply container or
       receptacle."
    ::= { finSupplyEntry 6 }

finSupplyMaxCapacity OBJECT-TYPE
    SYNTAX      Integer32 (-2..2147483647)
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "The maximum capacity of this supply container/receptacle
       expressed in Supply Units.  If this supply container/
       receptacle can reliably sense this value, the value is
       sensed  and is read-only; otherwise the value may be
       written by a control panel or management application.  The
       value (-1) means other and places no restrictions on this
       parameter.  The value (-2) means unknown."
    DEFVAL      { -2 }      -- unknown
    ::= { finSupplyEntry 7 }

Okay so the current level is basically the fill gauge for a supply ๐Ÿซง It means the amount left in a container, or the room left in a receptacle ๐Ÿ’–

finSupplyCurrentLevel OBJECT-TYPE
    SYNTAX      Integer32 (-3..2147483647)
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "The current level if this supply is a container; the
       remaining space if this supply is a receptacle. If this
       supply container/receptacle can reliably sense this value,
       the value is sensed and is read-only; otherwise the value
       may be written by a control panel or management
       application.  The value (-1) means other and places no
       restrictions on this parameter. The value (-2) means
       unknown.  A value of (-3) means that the printer knows there
       is some supply or remaining space."
    DEFVAL      { -2 }      -- unknown
    ::= { finSupplyEntry 8 }

There's a whole diagram that shows how the capacity pieces fit together, and it's giving main character energy ๐ŸŽจโœจ

--             Capacity Attribute Relationships
--
--                 MEDIA INPUT MEASUREMENT
--
--     _______ |                   |
--      |      |                   |
--      |      |                   |                   |
--      |      |_ _ _ _ _ _ _ _ _ _| ________________  |direction
--      |      |                   |      |            v
-- MaxCapacity |                   |      |
--      |      | Sheets remaining  | CurrentLevel
--      |      |                   |      |
--      v      |                   |      v
--     _______ +___________________+ _______

Next up is the color name for the supply ๐ŸŒˆ The value is a string of up to 63 octets, and the PWG media names spec has the recommended values, so that's the place to check ๐Ÿ’…

finSupplyColorName OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(0..63))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "The name of the color associated with this supply."

    REFERENCE
       "The PWG Standardized Media Names specification [PWGMEDIA],
        section 4 Media Color Names, contains the recommended values
        for this object. Implementers may add additional string values.
        The naming conventions in ISO 9070 are recommended in order to
        avoid potential name clashes."
    ::= { finSupplyEntry 9 }

Now we get to the media input group for finishers ๐Ÿงš A finisher can have one or more supply media inputs, for things like inserts and covers. This group is only needed when the finisher uses a media supply that the finishing process uses by itself, and isn't fed in through an input subunit that feeds the marker ๐ŸŽ€

-- Finisher Supply, Media Input Group (Conditionally Mandatory)
--
-- A finisher device may have one or more associated supply media
-- inputs.  Each entry in this table defines an input for a
-- supply media type such as inserts, covers, etc.
--
-- This group is mandatory only if the printer system contains a
-- finisher device that requires a media supply used exclusively by a
-- finishing process.  Examples are inserts or covers that are not
-- supplied by an input subunit that provides media to the marker.

finSupplyMediaInput  OBJECT IDENTIFIER  ::=  { printmib 32 }

finSupplyMediaInputTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF FinSupplyMediaInputEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
      "The input subunits associated with a finisher supply media
       are each represented by an entry in this table."
::= { finSupplyMediaInput 1 }

finSupplyMediaInputEntry OBJECT-TYPE
    SYNTAX     FinSupplyMediaInputEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
      "A list of finisher supply media input subunit features and
       characteristics."
    INDEX  { hrDeviceIndex, finSupplyMediaInputIndex }
    ::= { finSupplyMediaInputTable 1 }

FinSupplyMediaInputEntry ::= SEQUENCE {
      finSupplyMediaInputIndex            Integer32,
      finSupplyMediaInputDeviceIndex      Integer32,
      finSupplyMediaInputSupplyIndex      Integer32,
      finSupplyMediaInputType             PrtInputTypeTC,
      finSupplyMediaInputDimUnit          PrtMediaUnitTC,
      finSupplyMediaInputMediaDimFeedDir  Integer32,
      finSupplyMediaInputMediaDimXFeedDir Integer32,
      finSupplyMediaInputStatus           PrtSubUnitStatusTC,
      finSupplyMediaInputMediaName      OCTET STRING,
      finSupplyMediaInputName           OCTET STRING,
      finSupplyMediaInputDescription    PrtLocalizedDescriptionStringTC,
      finSupplyMediaInputSecurity       PresentOnOff,
      finSupplyMediaInputMediaWeight    Integer32,
      finSupplyMediaInputMediaThickness Integer32,
      finSupplyMediaInputMediaType      OCTET STRING
     }

Every entry in that table has a bunch of fields, so let's go through them one by one ๐Ÿฆ‹

finSupplyMediaInputIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..65535)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
      "A unique value used by a finisher to identify this supply
       media input subunit.  Although these values may change
       due to a major reconfiguration of the finisher (e.g., the
       addition of new supply media input sources to the
       finisher), values are normally expected to remain stable
       across successive power cycles."
    ::= { finSupplyMediaInputEntry 1 }

finSupplyMediaInputDeviceIndex OBJECT-TYPE
    SYNTAX      Integer32 (0..65535)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "The value of finDeviceIndex corresponding to the finishing
       device subunit with which this finisher media supply is
       associated.  The value zero indicates the associated device
       is unknown."
    ::= { finSupplyMediaInputEntry 2 }

finSupplyMediaInputSupplyIndex OBJECT-TYPE
    SYNTAX      Integer32 (0..65535)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "The value of finSupplyIndex corresponding to the finishing
       supply subunit with which this finisher media supply is
       associated.  The value zero indicates the associated finishing
       supply is unknown or there is no applicable finisher supply
       table entry."
    ::= { finSupplyMediaInputEntry 3 }

finSupplyMediaInputType OBJECT-TYPE
    SYNTAX      PrtInputTypeTC
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "The type of technology (discriminated primarily according
       to the feeder mechanism type) employed by the input
       subunit."
    ::= { finSupplyMediaInputEntry 4 }

finSupplyMediaInputDimUnit OBJECT-TYPE
    SYNTAX      PrtMediaUnitTC
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "The unit of measure for specifying dimensional values for
       this input device."
    ::= { finSupplyMediaInputEntry 5 }

finSupplyMediaInputMediaDimFeedDir OBJECT-TYPE
    SYNTAX      Integer32 (-2..2147483647)
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "This object provides the value of the dimension in the
       feed direction of the media that is placed or will be
       placed in this input device.  Feed dimension measurements
       are taken parallel to the feed direction of the device and
       measured in finSupplyMediaInputDimUnits.  If this input
       device can reliably sense this value, the value is sensed
       and is read-only access. Otherwise the value is read-write
       access and may be written by management or control panel
       applications. The value (-1) means other and specifically
       indicates that this device places no restrictions on this
       parameter. The value (-2) indicates unknown. "
    ::= { finSupplyMediaInputEntry 6 }

finSupplyMediaInputMediaDimXFeedDir OBJECT-TYPE
    SYNTAX      Integer32 (-2..2147483647)
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "This object provides the value of the dimension across the
       feed direction of the media that is placed or will be
       placed in this input device.  The cross feed direction is
       ninety degrees relative to the feed direction on this
       device and measured in finSupplyMediaInputDimUnits.  If
       this input device can reliably sense this value, the value
       is sensed and is read-only access. Otherwise the value is
       read-write access and may be written by management or
       control panel applications. The value (-1) means other and
       specifically indicates that this device places no
       restrictions on this parameter. The value (-2) indicates
       unknown. "
    ::= { finSupplyMediaInputEntry 7 }

finSupplyMediaInputStatus OBJECT-TYPE
    SYNTAX      PrtSubUnitStatusTC
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "This value indicates the current status of this input
       device."
    DEFVAL      { 5 }      -- unknown
    ::= { finSupplyMediaInputEntry 8 }

finSupplyMediaInputMediaName OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(0..63))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "The name of the current media contained in this input
       device. Examples are Engineering Manual Cover, Section A Tab
       Divider or any ISO standard names."
    ::= { finSupplyMediaInputEntry 9 }

finSupplyMediaInputName OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(0..63))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "The name assigned to this input subunit."
    ::= { finSupplyMediaInputEntry 10 }

finSupplyMediaInputDescription OBJECT-TYPE
    SYNTAX      PrtLocalizedDescriptionStringTC
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
      "A free form text description of this input subunit in the
       localization specified by prtGeneralCurrentLocalization."
    ::= { finSupplyMediaInputEntry 11 }

finSupplyMediaInputSecurity OBJECT-TYPE
    SYNTAX      PresentOnOff
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "Indicates if this subunit has some security associated
       with it."

    ::= { finSupplyMediaInputEntry 12 }

finSupplyMediaInputMediaWeight OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "The weight of the media associated with this Input device
       in grams per meter squared.  The value (-1) means other
       and specifically indicates that the device places no
       restriction on this parameter.  The value (-2) means
       unknown.  This object can be used to calculate the weight
       of individual pages processed by the document finisher.
       This value, when multiplied by the number of pages in a
       finished set, can be used to calculate the weight of a set
       before it is inserted into a mailing envelope."
    ::= { finSupplyMediaInputEntry 13 }

finSupplyMediaInputMediaThickness OBJECT-TYPE
    SYNTAX      Integer32 (-2..2147483647)
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "This object identifies the thickness of the input media
       processed by this document input subunit measured in
       micrometers.  This value may be used by devices (or
       operators) to set up proper machine tolerances for the
       feeder operation.  The value (-2) indicates that the media
       thickness is unknown or not used in the setup for this
       input subunit."
    ::= { finSupplyMediaInputEntry 14 }

finSupplyMediaInputMediaType OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(0..63))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "The name of the type of medium associated with this input
       subunit. "

    REFERENCE
       "The PWG Standardized Media Names specification [PWGMEDIA],
        section 3 Media Type Names, contains the recommended values
        for this object. Implementers may add additional string values.
        The naming conventions in ISO 9070 are recommended in order to
        avoid potential name clashes."
    ::= { finSupplyMediaInputEntry 15 }

Last bit for this part: the finisher device attribute group ๐ŸŒธ A finisher device can have attributes that no other object in the MIB covers, and this group is where those live. Every finisher device defined by the MIB needs at least one entry in here. If there's nothing else that fits, the deviceName(3) attribute MUST be returned ๐Ÿซถ

-- Finisher Device Attribute Group (Mandatory)
--
-- A finisher device subunit may have one or more parameters that
-- cannot be specified by any other objects in the MIB.  The
-- Device Attribute group facilitates the definition of these
-- parameters.  The objects which define the attributes are
-- read-write, to allow both Set and Get operations.
--
-- At least one table entry must exist for each finisher device defined
-- by the MIB.  If no other entry is possible for a finisher device, the
-- deviceName(3) attribute MUST be returned.

finDeviceAttribute  OBJECT IDENTIFIER  ::=  { printmib 33 }
finDeviceAttributeTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF FinDeviceAttributeEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
      "The attribute table defines special parameters that are
       applicable only to a minority of the finisher devices.
       An attribute table entry is used, rather than unique
       objects, to minimize the number of MIB objects and to
       allow for expansion without the addition of MIB objects.
       Each finisher device is represented by a separate row
       in the device subunit attribute table."
::= { finDeviceAttribute 1 }

finDeviceAttributeEntry OBJECT-TYPE
    SYNTAX     FinDeviceAttributeEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
      "Each entry defines a finisher function parameter that
       cannot be represented by an object in the finisher
       device subunit table."
    INDEX  { hrDeviceIndex, finDeviceIndex,
             finDeviceAttributeTypeIndex,
             finDeviceAttributeInstanceIndex }
::= { finDeviceAttributeTable 1 }

FinDeviceAttributeEntry ::= SEQUENCE {
      finDeviceAttributeTypeIndex        FinAttributeTypeTC,
      finDeviceAttributeInstanceIndex    Integer32,
      finDeviceAttributeValueAsInteger   Integer32,
      finDeviceAttributeValueAsOctets    OCTET STRING
     }

finDeviceAttributeTypeIndex OBJECT-TYPE
    SYNTAX      FinAttributeTypeTC
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
      "Defines the attribute type represented by this row."
    ::= { finDeviceAttributeEntry 1 }

finDeviceAttributeInstanceIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..65535)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
      "An index that allows the discrimination of an attribute
       instance when the same attribute occurs multiple times for
       a specific instance of a finisher function.  The value of
       this index shall be 1 if only a single instance of the
       attribute occurs for the specific finisher function.
       Additional values shall be assigned in a contiguous manner."
    ::= { finDeviceAttributeEntry 2 }

finDeviceAttributeValueAsInteger OBJECT-TYPE
    SYNTAX      Integer32 (-2..2147483647)
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "Defines the integer value of the attribute.  The value of
       the attribute is represented as an integer if the
       finAttributeTypeTC description for the attribute has the
       tag 'INTEGER:'.

       Depending upon the attribute enum definition, this object
       may be either an integer, a counter, an index, or an enum.
       Attributes for which the concept of an integer value is
       not meaningful SHALL return a value of -1 for this
       attribute."
    DEFVAL      { -2 }      -- unknown
    ::= { finDeviceAttributeEntry 3 }

finDeviceAttributeValueAsOctets OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(0..63))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "Contains the octet string value of the attribute.  The
       value of the attribute is represented as a string if the
       finAttributeTypeTC description for the attribute has the
       tag 'OCTETS:'.

       Depending upon the attribute enum definition, this object
       may be either a coded character set string (text) or a
       binary octet string.  Attributes for which the concept of
       an octet string value is not meaningful SHALL contain a
       zero length string."
    DEFVAL      { ''H }      -- empty string
    ::= { finDeviceAttributeEntry 4 }


-- Conformance Information

-- compliance statements

finMIBCompliance MODULE-COMPLIANCE
    STATUS  current
    DESCRIPTION
        "The compliance statement for agents that implement the
        finisher MIB."
    MODULE -- this module
    MANDATORY-GROUPS { finDeviceGroup, finSupplyGroup,
                       finDeviceAttributeGroup }

        OBJECT      finDevicePresentOnOff
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        OBJECT      finDeviceMaxCapacity
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        OBJECT      finDeviceCurrentCapacity
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        OBJECT      finSupplyMaxCapacity
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        OBJECT      finSupplyCurrentLevel
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        OBJECT      finSupplyMediaInputMediaDimFeedDir
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        OBJECT      finSupplyMediaInputMediaDimXFeedDir
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        OBJECT      finSupplyMediaInputMediaName
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        OBJECT      finSupplyMediaInputName
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        OBJECT      finSupplyMediaInputSecurity
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        OBJECT      finSupplyMediaInputMediaWeight
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        OBJECT      finSupplyMediaInputMediaThickness
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        OBJECT      finSupplyMediaInputMediaType
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        OBJECT      finDeviceAttributeValueAsInteger
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        OBJECT      finDeviceAttributeValueAsOctets
        MIN-ACCESS  read-only
        DESCRIPTION
            "It is conformant to implement this object as read-only."

        GROUP       finSupplyMediaInputGroup
        DESCRIPTION
            "This group is conditionally mandatory and must be included
             if a finisher device requires a media supply that is used
             exclusively by a finishing process."

    ::= { prtMIBConformance 5 }


finMIBGroups      OBJECT IDENTIFIER ::= { prtMIBConformance 6 }

finDeviceGroup OBJECT-GROUP
    OBJECTS { finDeviceType, finDevicePresentOnOff,
              finDeviceCapacityUnit, finDeviceMaxCapacity,
              finDeviceCurrentCapacity, finDeviceAssociatedMediaPaths,
              finDeviceAssociatedOutputs, finDeviceStatus,
              finDeviceDescription }
    STATUS  current
    DESCRIPTION
        "The finisher device group."
    ::= { finMIBGroups 1 }

finSupplyGroup OBJECT-GROUP
    OBJECTS { finSupplyDeviceIndex, finSupplyClass, finSupplyType,
              finSupplyDescription, finSupplyUnit, finSupplyMaxCapacity,
              finSupplyCurrentLevel, finSupplyColorName }
    STATUS  current
    DESCRIPTION
        "The finisher supply group."
    ::= { finMIBGroups 2 }

finSupplyMediaInputGroup OBJECT-GROUP
    OBJECTS { finSupplyMediaInputDeviceIndex,
              finSupplyMediaInputSupplyIndex, finSupplyMediaInputType,
              finSupplyMediaInputDimUnit,
              finSupplyMediaInputMediaDimFeedDir,
              finSupplyMediaInputMediaDimXFeedDir,
              finSupplyMediaInputStatus, finSupplyMediaInputMediaName,
              finSupplyMediaInputName, finSupplyMediaInputDescription,
              finSupplyMediaInputSecurity,
              finSupplyMediaInputMediaWeight,
              finSupplyMediaInputMediaThickness,
              finSupplyMediaInputMediaType }
    STATUS  current
    DESCRIPTION
        "The finisher supply, media input group."
    ::= { finMIBGroups 3 }

finDeviceAttributeGroup OBJECT-GROUP
    OBJECTS { finDeviceAttributeValueAsInteger,
              finDeviceAttributeValueAsOctets }
    STATUS  current
    DESCRIPTION
        "The finisher device attribute group.  This group is mandatory
         for a finisher device that contains an inserter subunit."
    ::= { finMIBGroups 4 }

END

9. IANA Considerations โœจ

okay bestie, IANA is the one holding onto the first version of the IANA Finisher MIB from section 7 of this doc ๐Ÿ—‚๏ธ and they keep it updated using the Process from section 6.1. The freshest, most official copy lives at http://www.iana.org/assignments/ianafinisher-mib ๐Ÿ’…

10. Internationalization Considerations ๐ŸŒ

the vibe here is "go check the Printer MIB" ๐ŸŒธ See [RFC3805] section 2.2.1.1, 'International Considerations' for the full tea.

11. References ๐Ÿ“š

11.1. Normative References ๐Ÿ’œ

  • [DPA] ISO/IEC 10175 Document Printing Application (DPA). See ftp://ftp.pwg.org/pub/pwg/dpa/
  • [LMO] Large Mailing Operations Specification, DMTF. See http://www.dmtf.org/tech/apps.html
  • [PWGMEDIA] IEEE-ISTO PWG "The Printer Working Group Standard for Media Standardized Names", IEEE-ISTO PWG 5101.1-2002.
  • [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
  • [RFC2434] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 2434, October 1998.
  • [RFC2578] McCloghrie, K., Perkins, D., and J. Schoenwaelder, "Structure of Management Information Version 2 (SMIv2)", STD 58, RFC 2578, April 1999.
  • [RFC2579] McCloghrie, K., Perkins, D., and J. Schoenwaelder, "Textual Conventions for SMIv2", STD 58, RFC 2579, April 1999.
  • [RFC2580] McCloghrie, K., Perkins, D., and J. Schoenwaelder, "Conformance Statements for SMIv2", STD 58, RFC 2580, April 1999.
  • [RFC2790] Waldbusser, S. and P. Grillo, "Host Resources MIB", RFC 2790, March 2000.
  • [RFC3805] Bergman, R., Lewis, H., and I. McDonald, "The Printer MIB v2", RFC 3805, June 2004.

11.2. Informative References ๐Ÿฆ‹

  • [RFC2911] Hastings, T. Ed., Herriot, R., deBry, R., Issacson, S., and P. Powell, "Internet Printing Protocol/1.1: Model and Semantics", RFC 2911, September 2000.
  • [RFC3410] Case, J., Mundy, R., Partain, D., and B. Stewart, "Introduction and Applicability Statements for Internet-Standard Management Framework", RFC 3410, December 2002.

12. Security Considerations โœจ

okay bestie, this part is serious but we're still gonna make it cute ๐ŸŽ€ There are a bunch of management objects in this MIB module with a MAX-ACCESS clause of read-write and/or read-create. ๐Ÿ˜ฌ Those objects might be sensitive or vulnerable depending on the network, and SET operations in a non-secure environment without proper protection can seriously mess with network operations ๐Ÿ’€ Here are the tables and objects and how sensitive or vulnerable each one is:

finDeviceTable:
   finDevicePresentOnOff -Possible severe inconvenience
   finDeviceMaxCapacity -Possible minor inconvenience
   finDeviceCurrentCapacity -Possible minor inconvenience
finSupplyTable:
   finSupplyMaxCapacity -Possible minor inconvenience
   finSupplyCurrentLevel -Possible minor inconvenience
finSupplyMediaInputTable
   finSupplyMediaInputMediaDimFeedDir -Possible severe inconvenience
   finSupplyMediaInputMediaDimXFeedDir -Possible severe inconvenience
   finSupplyMediaInputMediaName -Possible Minor inconvenience
   finSupplyMediaInputName -Possible Minor inconvenience
   finSupplyMediaInputSecurity -Possible Minor inconvenience
   finSupplyMediaInputMediaWeight -Possible Minor inconvenience
   finSupplyMediaInputMediaThickness -Possible Minor inconvenience
   finSupplyMediaInputMediaType -Possible Minor inconvenience
finDeviceAttributeTable
   finDeviceAttributeValueAsInteger -Possible Minor inconvenience
   finDeviceAttributeValueAsOctets -Possible Minor inconvenience

Heads up! SNMP versions before SNMPv3 did not come with adequate security ๐Ÿ™ˆ Even if the network itself is secure (for example, by using IPSec), there is still no control over who on that secure network is allowed to access and GET/SET (read/change/create/delete) the objects in this MIB module. Not a vibe ๐Ÿ˜ญ

It is RECOMMENDED that implementers consider the security features provided by the SNMPv3 framework (see [RFC3410], section 8), including full support for the SNMPv3 cryptographic mechanisms (for authentication and privacy). ๐Ÿ”โœจ

Further, deployment of SNMP versions prior to SNMPv3 is NOT RECOMMENDED. Instead, it is RECOMMENDED to deploy SNMPv3 and to enable cryptographic security. Then it's a customer or operator responsibility to make sure the SNMP entity giving access to an instance of this MIB module is configured properly, so that only the principals (users) with legitimate rights can GET or SET (change/create/delete) the objects ๐Ÿ‘‘

Where the operational capability of the printing device are especially vulnerable or difficult to administer, certain objects within this MIB have been tagged as READ-ONLY, which prevents modification ๐Ÿงš For all READ-WRITE objects in the MIB, the working group also included specific conformance guidelines saying vendors are free to implement certain objects as READ-ONLY. That's giving flexibility ๐Ÿ’œ because vendor vulnerabilities can differ from product to product. (See the conformance section about MIN-ACCESS clauses.)


13. Acknowledgements ๐ŸŒธ

The Printer MIB Working Group wants to give a super special thank you to the following people, who put in a serious effort to review this document and gave loads of suggestions for improvement ๐Ÿซถ

  • David Harrington - Enterasys Networks
  • Juergen Schoenwaelder - TU Braunschweig
  • Bert Wijnen - Lucent Technologies and IETF Op & Mngmt, Area Director

Other Participants:

  • Chuck Adams - Tektronix
  • Carlos Becerra - HP
  • Andy Davidson - Tektronix
  • Mabry Dozier - QMS
  • Lee Farrell - Canon
  • Jennifer Gattis - Duplo USA
  • Paul Gloger - Xerox
  • Richard Hart - Digital
  • Tom Hastings - Xerox
  • Scott Isaacson - Novell
  • David Kellerman - Northlake Software
  • Henrik Holst - i-data International
  • Rick Landau - Digital
  • Jay Martin - Underscore
  • Gary Padlipski - Xerox
  • Kevin Palmer - Duplo USA
  • Bob Pentecost - HP
  • Stuart Rowley - Kyocera
  • Yuki Sacchi - Japan Computer Industry
  • Philip Thambidunai - Okidata
  • William Wagner - DPI/Osicom
  • Chris Wellens - Interworking Labs
  • Don Wright - Lexmark
  • Lloyd Young - Lexmark

14. Authors' Addresses ๐Ÿ’Œ

Here's who to contact ๐Ÿ“ฎ Ron Bergman was the Editor:

Ron Bergman (Editor)
Hitachi Printing Solutions America
2635 Park Center Drive
Simi Valley, CA  93065-6209

Phone: 805-578-4421
Fax:  805-578-4001
EMail: Ron.Bergman@hitachi-ps.us

Then there's Harry Lewis, the Chairman:

Harry Lewis (Chairman)
IBM Corporation
6300 Diagonal Hwy
Boulder, CO 80301

Phone: (303) 924-5337
EMail: harryl@us.ibm.com

And last but definitely not least, Ira McDonald:

Ira McDonald
High North Inc.
P.O. Box 221
Grand Marais, MI  49839

Phone: (906) 494-2434 or (906) 494-2697
EMail: imcdonald@sharplabs.com

Send comments to the Printer Working Group (PWG) using the Finisher MIB Project (FIN) Mailing List: fin@pwg.org ๐Ÿ“จ

Implementers of this specification are encouraged to join this email distribution list ๐Ÿ™Œ That way you can take part in discussions of clarification issues and review registration proposals for additional attributes and enum values.

For further information, access the PWG web page under "FIN": http://www.pwg.org/ ๐ŸŒˆ


Copyright (C) The Internet Society (2004). This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights.

This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Intellectual Property ๐Ÿ’ผ

The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document, or the extent to which any license under such rights might or might not be available. It also doesn't represent that it has made any independent effort to identify any such rights. Information on the procedures for rights in RFC documents can be found in BCP 78 and BCP 79.

Copies of IPR disclosures made to the IETF Secretariat, any assurances of licenses to be made available, or the result of an attempt to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr.

The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please send that information to the IETF at ietf-ipr@ietf.org. ๐Ÿฆ‹

Acknowledgement ๐ŸŽ€

Funding for the RFC Editor function is currently provided by the Internet Society. โœจ๐Ÿ’–

๐Ÿ“ฆ where this page comes from