RFC 3239

Internet Printing Protocol (IPP): Requirements for Job, Printer, and Device Administrative Operations

πŸ“… published February 2002, from ietf

Internet Printing Protocol (IPP): Requirements for Job, Printer, and Device Administrative Operations ✨

Okay bestie, this is RFC 3239 πŸ–¨οΈπŸ’– It's written by C. Kugler and H. Lewis from IBM Corporation, plus T. Hastings from Xerox Corporation. The date is February 2002. It's Informational (so it's info for the Internet community, not a standard) πŸ“„. The title block doesn't list anything it obsoletes or updates, so it's standing on its own πŸ¦‹.

Request for Comments: 3239 Β· Network Working Group


Status of This Memo 🌸

This memo gives information to the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited.

Copyright (C) The Internet Society (2002). All Rights Reserved.

Abstract 🧚

okay so this doc lays out the requirements and use cases for some optional administrative operations you can use with the Internet Printing Protocol (IPP) versions 1.0 and 1.1 πŸ–¨οΈβœ¨ Some of these ops act on the IPP Job and Printer objects. The rest act on a brand new Device object that models a single output device way more closely πŸŽ€

Table of Contents πŸŽ€

   1  Introduction.....................................................2
   2  Terminology......................................................2
   3  Requirements and Use Cases.......................................3
   4  IANA Considerations.............................................10
   5  Internationalization Considerations.............................10
   6  Security Considerations.........................................10
   7  References......................................................11
   Appendix A: Description of base IPP documents......................12
   Authors' Addresses.................................................14
   Full Copyright Statement...........................................15

List of Tables

   Table 1 - List of Printer Operations and corresponding Device
      Operations ..................................................... 9

1. Introduction πŸ’–

The Internet Printing Protocol (IPP) is an application level protocol that you can use for distributed printing with Internet tools and technologies 🌐 IPP version 1.1 ([RFC2911, RFC2910]) is mostly about end user stuff, with a few admin ops thrown in (see Appendix A for a rundown of the base IPP docs) πŸ“š

This document defines the requirements and use cases for extra optional end user, operator, and administrator operations. These ops control Job objects, Printer objects (see [RFC2911]), and a new Device object πŸ¦‹ The Device object is basically one output device and has no notion of a job at all. The Printer object is a print service that does understand jobs and might represent one or more output devices πŸ–¨οΈβœ¨

The scope of IPP is described in RFC 2567 [RFC2567] "Design Goals for an Internet Printing Protocol". This document is not trying to revise or clarify that scope, and it's not making guesses about how much industry has adopted IPP or where things are trending πŸ™ˆ What it does do is extend the original set of operations, kind of like the Set1 extensions that were written for IPP/1.0 and later folded into IPP/1.1 πŸ“

2. Terminology πŸŽ€

This section defines the terms used throughout this document, plus the matching documents that define the administrative operations on Job, Printer, and Device objects πŸ“–

This document uses words like "client", "Printer", "Job", "attributes", "keywords", and "support". Those words have special meanings, and they're defined in the model terminology [RFC2911] in section 12.2 🌸

On top of that, these capitalized terms are defined:

  • IPP Printer object (or Printer for short): a software abstraction defined by [RFC2911] πŸ–¨οΈ
  • Printer Operation: an operation whose target is an IPP Printer object and whose effect is on the Printer object πŸ’…
  • Output Device: the physical imaging mechanism that an IPP Printer controls. Heads up: this term is capitalized in this spec (but not in [RFC2911]), and there's no formal object called an Output Device 🫢
  • Device Operation: an operation whose target is an IPP Printer object and whose defined effect is on an Output Device ✨
  • Output Device Fan-Out: a setup where an IPP Printer controls more than one output device 🌈
  • Printer fan-out: a setup where an IPP Printer object controls more than one Subordinate IPP Printer object πŸ‘‘
  • Printer fan-in: a setup where an IPP Printer object is controlled by more than one IPP Printer object πŸ¦‹
  • Subordinate Printer: an IPP Printer object that is controlled by another IPP Printer object. A Subordinate Printer can have one or more Subordinate Printers of its own 🧚
  • Leaf Printer: a Subordinate Printer that has no Subordinate Printers πŸƒ
  • Non-Leaf Printer: an IPP Printer object that has one or more Subordinate Printers 🌳
  • Chained Printer: a Non-Leaf Printer that has exactly one Subordinate Printer β›“οΈβœ¨
  • Job Creation operations: IPP operations that create a Job object, which are Print-Job, Print-URI, and Create-Job πŸ“

3. Requirements and Use Cases πŸ”₯

The Administrative operations for Job and Printer objects are going to be defined in one document [ipp-ops-set2]. The Administrative operations for Device objects get their own separate document. The requirements are all presented together here so you can see the parallelism πŸ‘―β€β™€οΈπŸ’•

  1. Have separate operations for affecting the IPP Printer versus affecting the Output Device. That way it's clear what each one is for, and implementers can implement one, the other, or both πŸ’–
  2. Support fan-out of Printer objects 🌸
  3. Support fan-out of Output Devices 🌸
  4. Support fan-in of Printer objects, as long as it doesn't make the semantics more complicated when fan-in isn't supported πŸ¦‹
  5. Support fan-in of output objects, as long as it doesn't make the semantics more complicated when fan-in isn't supported πŸ¦‹
  6. Instead of having operation attributes that change the behavior of an operation a lot, use separate operations. Then it's simple and clear for a client to see which semantics the Printer supports (by querying the operations-supported attribute), and it's simple to describe a Printer implementation in written docs (you just list the optional operations it supports) πŸ’…βœ¨
  7. Need a Printer Operation that stops a Printer object from accepting new IPP jobs. Jobs that were already accepted keep going unaffected, still getting scheduled and processed. Also need a companion operation that puts the Printer object back to accepting new IPP jobs πŸ›‘βž‘οΈβœ…
    • Usage: The operator is getting ready to take the IPP Printer out of service, or to change its configuration.
    • Suggested name and operations: Disable-Printer and Enable-Printer
  8. Need a Device Operation that stops an Output Device from accepting any new jobs from any job submission protocol. Also need a companion one that lets the Output Device accept jobs again πŸ”Œ
    • Usage: The operator is getting ready to take the Output Device out of service.
    • Suggested name and operations: Disable-Device and Enable-Device
  9. Need a Printer Operation that stops processing after the current IPP job finishes, and doesn't start any more IPP jobs (whether by scheduling them or sending them to the Output Device). It should still keep accepting new IPP jobs though πŸ™Œ Also need a companion operation that starts processing and sending IPP jobs again ▢️
    • Usage: The operator wants to gracefully stop the IPP Printer at the next job boundary. The Pause-Printer-After-Current-Job operation is also invoked implicitly by the Deactivate-Printer and Shutdown-Printer operations 🫧
    • Suggested name and operations: Pause-Printer-After-Current-Job, and (IPP/1.1) Resume-Printer
  10. Need a Device Operation that stops processing the current job "immediately", no matter what protocol it came in on. It's basically the Pause button on the Output Device, and it's for emergencies 🚨 Where it actually stops depends on the implementation. It could be mid page, end of page, end of sheet, or after a few sheets, for Output Devices that can't stop that fast. The paper path doesn't get run out. Also need a companion operation that starts processing the current any-protocol job again without losing anything 😭
    • Usage: The operator sees something bad about to happen, like the paper about to jam, the toner running out, the device overheating, or the device wanting more paper πŸ”₯
    • Suggested name and operations: Pause-Device-Now, Resume-Device
  11. Need a Printer Operation that stops processing IPP jobs after all the currently accepted jobs have been processed. Any newly accepted jobs go into the processing-held state 🧊
    • Usage: This lets an operator reconfigure the Output Device so that jobs waiting on resources (like special media) get a chance to run. Then the operator uses another operation after reconfiguring. They repeat the two operations to put the Output Device back on its normal media πŸ”
    • Suggested name and operations: Hold-New-Jobs, Release-Held-New-Jobs
  12. Need a Device Operation that stops processing the current any-protocol job at a convenient point, like after the current copy (or the end of the job, if it's the last or only copy). Also need a companion operation that starts processing the current any-protocol job, or the next job, without losing anything πŸ“„
    • Usage: The operator wants to empty an output bin that's nearly full. The paper path is run out πŸ—‚οΈ
    • Suggested name and operations: Pause-Device-After-Current-Copy, Resume-Device
  13. Need a Device Operation that always pauses on a device-defined boundary, no matter how many copies there are, so it doesn't break up a job. Also need a companion operation that starts processing the current any-protocol job, or the next job, without losing anything πŸŽ€
    • Usage: The operator wants to empty an output bin that's nearly full, but doesn't want to break up a job in case it has multiple copies. The paper path is run out 🧺
    • Suggested name and operations: Pause-Device-After-Current-Job, Resume-Device
  14. Need a Printer Operation that combines Disable-Printer and Pause-Printer-After-Current-Job, and rejects all other Job, Printer, and Device Operations. The exceptions are Job and Printer queries, the System Administrator's Set-Printer-Attributes, and the companion operation that resumes activity. In other words, this operation makes the Printer a read-only object in a graceful way for end users and the operator πŸ¦‹πŸ’œ

(Part 1 of 3 ✨ more RFC 3239 is coming, bestie 🫢)

Okay bestie, picking up right where we left off with item 14's usage πŸ’…

Usage: The administrator wants to reconfigure the Printer object using the Set-Printer-Attributes operation without disturbing the current in-process work πŸ–¨οΈ, but wants to make sure the operator isn't also trying to change the Printer object while it's running the Printer. Main character energy for the admin πŸ‘‘

Suggested name and operation: Deactivate-Printer, Activate-Printer πŸ¦‹

  1. Need a Device Operation that combines Disable-Device, Pause-Device-After-Current-Job, and rejects all other Device Operations, except Job and Printer queries and the companion operation to resume activity 🫢 In other words, this operation makes the Output Device a read-only object in a graceful manner. So soft, so calm 🧚

Usage: The field service person wants to open up the device without disturbing the current in-process work, perhaps to replace staples or replace the toner cartridge πŸ“

Suggested name and operation: Deactivate-Device, Activate-Device ✨

  1. Need a Printer Operation to recover from the IPP Printer software that has gotten confused (run out of heap memory or gotten into a state that it doesn't seem to be able to get out of) 😭 This is a condition that shouldn't happen, but does in real life. Any volatile information is saved if possible before the software is re-initialized. No companion operation is needed to undo this. We don't want to go back to the "confused" state :-) πŸ™ˆ

Usage: The IPP Printer software has gotten confused or isn't responding properly πŸ’€

Suggested name and operation: Restart-Printer πŸ”₯

  1. Need a Device Operation to recover from the Output Device hardware and software that has gotten confused (gotten into a state that it doesn't seem to be able to get out of, run out of heap memory, etc.) 😩 This is a condition that shouldn't happen, but does in real life. This is the same and has the same options as the Printer MIB reset. No companion operation is needed to undo this. We don't want to go back to the "confused" state :-) 🌈

Usage: The Output Device has gotten confused or needs resetting to some initial conditions πŸŽ€

Suggested name and operation: Reset-Device ⭐

  1. Need a Printer Operation to put the IPP Printer object out of business, with no way in the protocol to bring that instantiation back to life (but see Startup-Printer, which brings up exactly one new instantiation to life with the same URL) πŸ₯€ Any volatile information is saved if possible.

Usage: The Printer is being moved or the building's power is being shut off πŸ”Œ

Suggested name and operation: Shutdown-Printer 🫠

  1. Need a Printer Operation to bring an IPP Printer to life when there is an already running host 🌸

Usage: After the host is started (by means outside the IPP protocol), the operator is able to ask the host to bring up any number of Printer objects (that the host has been configured in some way), each with distinct URLs πŸ§šβ€β™€οΈ

Suggested name and operation: Startup-Printer πŸ’–

  1. Need a Device Operation to power off the Output Device after writing out any software state πŸ”‹ It is assumed that other operations have more gracefully prepared the Output Device for this drastic and immediate step. There is no companion Device Operation to bring the power back on πŸ™…β€β™€οΈ

Usage: The Output Device is going to be moved, the power in the building is going to be shut off, or the repair man has arrived and needs to take the Output Device apart πŸ› οΈ

Suggested name and operation: Power-Off-Device πŸ–€

  1. Need a Device Operation to start up a powered-off device ⚑

Usage: After a Power-Off-Device, if the device can be powered back up (possibly by an intervening host that supports the Device Operation) 🌞

Suggested name: Power-On-Device πŸ₯Ή

The tentative list of Printer and the corresponding Device Operations is shown in Table 1 πŸ“‹

Table 1 - List of Printer Operations and corresponding Device Operations

Printer Operation                   Corresponding Device Operation
                                    equivalent

Disable-Printer                     Disable-Device

Enable-Printer                      Enable-Device

Pause-Printer (IPP/1.1 - [RFC2911]  Pause-Device-Now
- one interpretation)

no                                  Pause-Device-After-Current-Copy

Pause-Printer-After-Current-Job     Pause-Device-After-Current-Job

Resume-Printer (IPP/1.1 -           Resume-Device
[RFC2911])

Hold-New-Jobs                       no

Release-Held-New-Jobs               no

Deactivate-Printer                  Deactivate-Device

Activate-Printer                    Activate-Device

Purge-Jobs (IPP/1.1 - [RFC2911])    Purge-Device

Restart-Printer                     Reset-Device

Shutdown-Printer                    Power-Off-Device

Startup-Printer                     Power-On-Device

There are no conformance dependencies between Printer Operations and Device Operations. Either may be supported without supporting the corresponding operations 🀝


4. IANA Considerations ✨

This document does not define anything to be registered πŸ“­ When a document is produced that defines operations that meet the requirements in this document, those operations will be registered according to the procedures in [RFC2911] section 6.4 πŸ—‚οΈ

5. Internationalization Considerations 🌍

This document has the same localization considerations as the [RFC2911] πŸ—£οΈ

6. Security Considerations 🚨

Heads up, this part is serious business πŸ”

This document defines the requirements for operations that are intended to be used by an operator or system administrator. These operations, when defined, would affect how the Printer behaves and establish policy and/or operating behavior that ordinary users shouldn't be able to perform πŸ™…β€β™€οΈ Printer implementations that support such operations should authenticate users and authorize them as being an operator or a system administrator for the system. Otherwise, unprivileged users could affect the policy and behavior of IPP Printers, thereby affecting other users 😀 Similarly, clients that support such operations should be prepared to provide the necessary authentication information 🫑 See the security provisions in [RFC2911] for authentication, such as TLS πŸ”’

7. References πŸ“š

  • [ipp-ntfy] Herriot, R., Hastings, T., Isaacson, S., Martin, J., deBry, R., Shepherd, M. and R. Bergman, "Internet Printing Protocol/1.1: IPP Event Notifications and Subscriptions", Work in Progress. πŸ””
  • [ipp-ops-set2] Kugler, C., Hastings, T. and H. Lewis, "Internet Printing Protocol (IPP): Job and Printer Administrative Operations", Work in Progress. πŸ›ŽοΈ
  • [RFC2565] Herriot, R., Butler, S., Moore, P. and R. Tuner, "Internet Printing Protocol/1.0: Encoding and Transport", RFC 2565, April 1999. 🎁
  • [RFC2566] deBry, R., Hastings, T., Herriot, R. and S. Isaacson, P. Powell, "Internet Printing Protocol/1.0: Model and Semantics", RFC 2566, April 1999. 🧁
  • [RFC2567] Wright, D., "Design Goals for an Internet Printing Protocol", RFC 2567, April 1999. 🎯
  • [RFC2568] Zilles, S., "Rationale for the Structure and Model and Protocol for the Internet Printing Protocol", RFC 2568, April 1999. 🧠
  • [RFC2569] Herriot, R., Hastings, T., Jacobs, N. and J. Martin, "Mapping between LPD and IPP Protocols", RFC 2569, April 1999. πŸ—ΊοΈ
  • [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol - HTTP/1.1", RFC 2616, June 1999. 🌐
  • [RFC2910] Herriot, R., Butler, S., Moore, P. and R. Tuner, "Internet Printing Protocol/1.1: Encoding and Transport", RFC 2910, September 2000. πŸͺ„
  • [RFC2911] deBry, R., Hastings, T., Herriot, R., Isaacson, S. and P. Powell, "Internet Printing Protocol/1.0: Model and Semantics", RFC 2911, September 2000. πŸ‘‘
  • [RFC3196] Hastings, T., Manros, C., Zehler, P., Kuger, C. and H. Holst, "Internet Printing Protocol/1.1: Implementer's Guide", RFC 3196, November 2001. πŸ’œ

Appendix A: Description of base IPP documents πŸŽ€

okay so bestie, this appendix is basically the reading list πŸ“šβœ¨ for the whole Internet Printing Protocol family. it lists every base IPP document and gives you the vibe check on each one πŸ’…

The base set of IPP documents includes:

   Design Goals for an Internet Printing Protocol [RFC2567]
   Rationale for the Structure and Model and Protocol for the
   Internet Printing Protocol [RFC2568]
   Internet Printing Protocol/1.1: Model and Semantics [RFC2911]
   Internet Printing Protocol/1.1: Encoding and Transport [RFC2910]
   Internet Printing Protocol/1.1: Implementer's Guide [RFC3196]
   Mapping between LPD and IPP Protocols [RFC2569]
   Internet Printing Protocol (IPP): IPP Event Notifications and
   Subscriptions [ipp-ntfy]

The "Design Goals for an Internet Printing Protocol" document takes a broad look at distributed printing functionality πŸ–¨οΈ and it runs through real-life scenarios that help pin down which features a printing protocol for the Internet actually needs 🌸. it identifies requirements for three types of users: end users, operators, and administrators πŸ‘‘. it calls out a subset of end user requirements that are satisfied in IPP/1.0 ✨. a few optional operator operations have been added to IPP/1.1 πŸ’œ.

The "Rationale for the Structure and Model and Protocol for the Internet Printing Protocol" document describes IPP from a high level view πŸ¦‹, defines a roadmap for the various documents that form the suite of IPP specification documents πŸ—ΊοΈ, and gives background and rationale for the IETF working group's major decisions 🧠. it's giving "why did we do it this way" energy and I'm obsessed πŸ™ˆ.

The "Internet Printing Protocol/1.1: Model and Semantics" document describes a simplified model with abstract objects, their attributes, and their operations 🧚. these are independent of encoding and transport, so no cap it's the big-picture brain of the family 🧠✨. it introduces a Printer and a Job object πŸ–¨οΈ. the Job object optionally supports multiple documents per Job πŸ“„. it also addresses security, internationalization, and directory issues πŸ”πŸŒ.

The "Internet Printing Protocol/1.1: Encoding and Transport" document is a formal mapping of the abstract operations and attributes defined in the model document onto HTTP/1.1 [RFC2616] 🌈. it defines the encoding rules for a new Internet MIME media type called "application/ipp" πŸ’–. it also defines the rules for transporting over HTTP a message body whose Content-Type is "application/ipp" πŸ“¦. and it defines the 'ippget' scheme for identifying IPP printers and jobs πŸ”–. this is the one that makes it all actually travel over the wire, iconic 🫢.

The "Internet Printing Protocol/1.1: Implementer's Guide" document gives insight and advice to implementers of IPP clients and IPP objects πŸ› οΈ. it's meant to help them understand IPP/1.1 and some of the considerations that may help with designing their client and/or IPP object implementations πŸ’…. for example, a typical order of processing requests is given, including error checking βœ…. motivation for some of the specification decisions is included too, so you get the why πŸ’­.

The "Mapping between LPD and IPP Protocols" document gives some advice to implementers of gateways between IPP and LPD (Line Printer Daemon) implementations πŸŒ‰. if you're bridging the old world and the new world, this is your bestie πŸ₯Ή.

The "IPP Event Notifications and Subscriptions" document defines an extension to IPP/1.0 [RFC2566, RFC2565] and IPP/1.1 [RFC2911, RFC2910] πŸ””. this extension lets a client subscribe to printing related Events and defines the semantics for delivering asynchronous Event Notifications to the specified Notification Recipient via a specified Delivery Method (i.e., protocols) defined in (separate) Delivery Method documents πŸ“¬πŸ”₯.


Authors' Addresses πŸ“‡

Carl Kugler
IBM
Boulder CO

Phone: (303) 924-5060
EMail:  kugler@us.ibm.com


Tom Hastings
Xerox Corporation
737 Hawaii St.  ESAE 231
El Segundo, CA  90245

Phone: 310-333-6413
Fax: 310-333-5514
EMail: hastings@cp10.es.xerox.com


Harry Lewis
IBM
Boulder CO

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

IPP Web Page:  http://www.pwg.org/ipp/
IPP Mailing List:  ipp@pwg.org

To subscribe to the ipp mailing list, send the following email:

   1) send it to majordomo@pwg.org
   2) leave the subject line blank
   3) put the following two lines in the message body:
        subscribe ipp
        end

Implementers of this specification document are encouraged to join the IPP Mailing List in order to participate in any discussions of clarification issues and review of registration proposals for additional attributes and values πŸ’¬. in order to reduce spam the mailing list rejects mail from non-subscribers, so you MUST subscribe to the mailing list in order to send a question or comment to the mailing list πŸš«πŸ“§.

heads up: the mailing list only lets subscribers post, so subscribe first or your message won't go through πŸ’€.

Copyright (C) The Internet Society (2002). All Rights Reserved. πŸ’œ

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. 🌍

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. ♾️

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS 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. 🫠


Acknowledgement πŸ™

Funding for the RFC Editor function is currently provided by the Internet Society. 🌸

πŸ“¦ where this page comes from