At 19:57 08/04/98 PDT, Paul Moore wrote:
> >You state that for non-printer MIB things you dont have to say what
> >device is because this is implicit in the OID. There is a level
> >The devices enumerated by the proposed IPP device list is not the
> >the device list in each printer. A printer will have a printer
> >disk, some RAM, etc.
>>>Yes, it is a level shift on purpose, because the "devices-supported" and the
>>>>"which-device" only apply to the attribute group names that start
>>with 'prt-'. The "devices-supported" and "which-devices" (being printers
>>only) have no meaning when accessing attribute group names that start
>>So which IPP fan-out device gets queried when I do a get attributes for
>non-prt MIB OIDS.
Any devices that the implementation supports through SNMP. So if the
implementation supports a printer, a disk, and memory device MIBs, then
the 'mib-' attribute group names can be used to access which ever SNMP
MIB devices are supported. Which actual device is specified explicitly in the
hrDeviceIndex OID sub-identifier in the 'mib-xxx', so which hrDeviceIndex
is explicit (not implicit) in each requested attribute. In the
following example, the printer is device 4 in the hrDeviceTable in the
Host Resources MIB. The name of the printer would be the one and only
value (and hence the first value) of the Printer's "devices-supported"
>From the MIB access paper:
The following rules are used to create IPP attribute names to represent MIB
1. The attribute name begins with "mib-".
2. The rest of the attribute name is the decimalized OBJECT IDENTIFIER of
the Object in the MIB. Each sub-identifier in the OID according to
[SMIv2], is separated by a PERIOD character (.). SNMP MIB table indexes
may be part of an OID and may be an integer (usual), string-valued
fixed-length, string-valued variable-length, object-identifier-valued, and
IpAddress-valued according to [SMIv2]. [SMIv2] specifies how each
sub-identifier for these index data types is represented. Each such
sub-identifier is separated by a PERIOD character (.).
NOTE: The "mib-..." names are intended primarily for accessing MIBs other
than the Printer MIB. However, the examples in this specification use the
Printer MIB, since that MIB is familiar MIB to the readers (and these
examples should work on an implementation the supports the "mib-" names).
For example: "prtInputMediaName" for device 4 tray 3 is represented as:
+-- specifies device 4 (which is the printer in
If the implementation had several printers (and other devices),
the hrDeviceTable would indicate which device numbers are used for
which devices, say, 4, 6, and 7 were printer devices. Then the
three values of the IPP Printer object's "devices-supported" would be
the names of the three printers, say, "peter", "paul", and "mary".
The clarification below is that the order of the printers in the
"devices-supported" attribute must be the same order as the hrDeviceTable,
so that doing a "MIB walk" with the 'mib-xxx' attribute gets the same printer
objects in the same order as using 'prt-xxx' attribute and stepping though
each device in order.
>>>> -----Original Message-----
>> From: Tom Hastings [SMTP:hastings at cp10.es.xerox.com]
>> Sent: Tuesday, August 04, 1998 6:40 PM
>> To: Paul Moore
>> Cc: 'ipp at pwg.org'
>> Subject: Re: IPP> Comments on MIB access document
>>>> You ask some good questions. Yes, it is true that the MIB access
>> proposal is not exactly the same as the current attribute of the
>> Printer and Job objects in IPP/1.0.
>>>> Here are my replies.
>>>> Several ISSUES are indicated that need to be resolved.
>>>> At 18:34 07/16/98 PDT, Paul Moore wrote:
>> >This document proposed many extremely significant changes to IPP. They
>> >so radical that I do not thing that they can be accepted simply as an
>> >optional extension to 1.0. Many of the issue it tries to solve are very
>> >valid - but this is not the right way to address them.
>>>> Do you have an alternative. The goal was to leverage the implementation
>> of Printer MIB agents that are in many network printers today. So that
>> an IPP printer implementation that chooses to support the MIB access
>> extension would be able to do so with minimal extra code in the printer.
>> The IPP Printer object implementation would pass the MIB attribute
>> to the SNMP agent, either through the front door using SNMP or through
>> the back door using internal calls. In either approach, the access to the
>> SNMP agent would use the Get and GetNext semantics to access the objects
>> in a subtree.
>> >The current model is very strong on hiding the physical details of
>> >out. The only thing exposed is a logical printer - the fact that this may
>> >represent multiple devices is deliberatly not exposed. This proposal
>> >this 180 degrees and explicitly exposes this. No comment on whether this
>> >good or bad - I merely point out that this is a BIG change to slip in via
>> >optional extension for accessing MIBs.
>>>> Yes, it is a change. But it is a natural kind of changes, since the
>> IPP Printer is a logical printer and the MIB is a physical concept.
>> This is a time-honored approach to system design. Some things you
>> want to hide and some things you don't.
>>>> However, even IPP/1.0 does have the 'stopped-partly' concept to reflect
>> the state of an IPP Printer that has some devices stopped and some not.
>> So the concept of multiple devices is already present in IPP 1.0.
>> See the figures in section 1.1 and 2.1 which both show multiple devices
>> for a single IPP Printer object.
>>>> Also for the simplest (and most likely) implementation, one IPP Printer
>> controls one device. So the difference between the logical and physical
>>>> There is no way to think of the Printer MIB as representing several
>> devices at once, so we couldn't keep the Printer MIB attributes at the
>> same level as the IPP Printer.
>> >Note that this is done for some non-MIB attributes as well.
>>>> Yes, in just the same way as the IPP/1.0 "document-format" input parameter
>>>> specializes certain Printer attribute values to the specified document
>> format, so that the Printer attribute isn't representing the
>> union across multiple document formats.
>> >The device is described as being an 'object'. This challenges the whole
>> >concept of an object in IPP. Everywhere else an Object can receive
>> >operations and has a URI; the device does neither. Having said that, a
>> >that does expose 'devices' and 'objects' but that does not represent such
>> >fundamental construct (device) as a object seems very strange.
>>>> Perhaps we should not call it an object, unless we have operations that
>> have a device as a target. We could be more vague, same as we have done
>> for documents, which are not described as objects. See section 2.2.
>>>> ISSUE: Should we change the description of a device so that it is not
>> an object?
>> >This scheme introduces a structured namespace. No comment on whether this
>> >good or bad - I merely point out that this is a BIG change from the flat
>> >list in the main model.
>>>> Agreed. The name space is structured to achieve the goal of simple
>> implementation without complex mapping tables from attribute keyword
>> names in English to Printer MIB objects. On the other hand, these
>> structured names are really "attribute group names" like we have
>> in IPP/1.0. In IPP/1.0, we have the attribute group names that can
>> be supplied in a Get-Printer-Attributes operation:
>>>> that return more than one attribute in the response.
>> >The printer MIB is given a special place in this scheme. What about the
>> >mib or the finisher mib.
>>>> I suggest that the Finisher MIB will add four structured attributes,
>> since it is an extension to the Printer MIB.
>>>> However, for any Job MIB attributes that we want to have access
>> to via IPP, we should add as real IPP attributes with U.S. English
>> There is a lot more overlap between Job MIB attributes and IPP job
>> already (on purpose).
>> >The MIB query is optional but is overloaded on the get attributes
>> >I cannot find out if a printer supports it without trying and failing.
>> >Normally such big pieces of functionality would be a separate operation.
>>>> As with any Get-Printer-Attributes query, any supported Operation
>> that is supplied with unsupported attribute values is ignored and does not
>>>> return an error. Instead, the IPP Printer returns
>> the "requested-attributes" operation attribute in the Unsupported
>> Attributes group  with only the values that are unsupported, i.e.,
>> with the keyword names of the unsupported attributes as the values.
>>>> So an application could supply unsupported MIB attributes along with
>> supported other attributes and still get back a response.
>>>> If we made it a separate operation, so that it could be queried as a value
>> in the Printer's "operations-supported" attribute, you would still need
>> to make a query if you wanted to find out. Instead, you can query
>> a required MIB object, such as 'prt-att-5-1' (prtGeneralConfigChanges)
>> to see if it comes back as an attribute with a value, or you get back
>> no attributes.
>>>> ISSUE: Should we add a note at to this method for testing as to whether
>> the MIB access feature is supported?
>> >What is the relationship between the information I obtain via the MIb
>> >and the data I obtain via the other queries? Will the result of querying
>> >job mib be the same as the result of doing a getjobs? What about
>> >printer-status and the MIB status?
>>>> Certainly the Job MIB should return both IPP jobs and non-IPP jobs, i.e.,
>> jobs submitted to the printer via some other job submission protocol.
>> Whether an IPP Get-Jobs operation also returns non-IPP jobs, would be
>> up to implementation. NOTE that if non-IPP jobs were returned, there
>> not be a "job-uri" attribute, even though there is a "job-id". On the
>> hand, there is no reason why an IPP Get-Jobs operation couldn't
>> manufacture a "job-uri" for each non-IPP job, as long as it produced
>> the same value for a job on successive queries.
>>>> ISSUE: Should we RECOMMEND that non-IPP jobs be accessible via Get-Jobs,
>> Cancel-Job, and Get-Job-Attributes? Should we REQUIRE it?
>> >If I dont say what device I want it will go to the 'first' one. What does
>> >first mean?
>>>> The first value in the corresponding IPP Printer object's
>> attribute. See lines 451-452.
>>>> > Is it guaranteed to be the same always?
>>>> The same unless the system is reconfigured.
>>>> >How do I support intelligent pools (If I send a PS file there is a choice
>> >two printers, if I send PCL there is a choice of 4. Only 2 printers are
>> >available for large jobs, but if i send a small job there is a choice of
>>>> ISSUE: Should the "document-format" input parameter affect which devices
>> are returned or not? If it MAY, then the first device in the
>> "devices-supported" might depend on which document-format value was
>> (and that the implementation supports the "document-format" specializing
>> the returned attributes).
>>>> My suggestion is that "document-format" NOT affect which devices are
>> returned. This is simpler and conforms to the definition that the
>> "document-format" input parameter only reflects what the IPP Printer
>> object uses to validate jobs which are all "xxx-supported" attribtes.
>> None of the Printer MIB attributes are of the form "xxx-supported".
>>>> >What should the device list return?
>>>> I suggest that the "devices-supported" Printer attribute not be affected
>> by the "document-format" input parameter, if supplied and if supported.
>>>> >What happens if a device is turned off?
>>>> ISSUE: Good question. I suggest that the IPP Printer return the
>> IPP out-of-band 'unknown' value for each attribute for a device that
>> is turned off. It should return real values for any other attributes.
>>>> If the first device is the device turned off, then a
>> Get-Printer-Attributes with no "which-device" supplied may get back
>> 'unknown' for each attribute, same as if a particular "which-device"
>> was supplied that was turned off.
>> >You state that for non-printer MIB things you dont have to say what the
>> >device is because this is implicit in the OID. There is a level shift
>> >The devices enumerated by the proposed IPP device list is not the same as
>> >the device list in each printer. A printer will have a printer device, a
>> >disk, some RAM, etc.
>>>> Yes, it is a level shift on purpose, because the "devices-supported" and
>> "which-device" only apply to the attribute group names that start
>> with 'prt-'. The "devices-supported" and "which-devices" (being printers
>> only) have no meaning when accessing attribute group names that start
>>>> ISSUE: How about saying that the list of devices supported by the
>> "devices-supported" Printer attribute is the subset
>> of the hrDeviceTable list of devices that are printers. For consistency
>> with MIB walks using the 'mib-att-xxx' group name, we should also specify
>> that the order of the printer devices in the hrDeviceTable be the same
>> as in the "devices-supported".
>> >You do not say what must happen if I send a valid query but the result is
>> >empty. I.e. read the alert table.
>>>> ISSUE: Good point. What should be returned with each SNMPv2 error?
>>>> We suggest the following mapping of SNMPv2 out-of-band values for SNMP
>> to IPP out-of-band value for attributes:
>>>> SNMPv2 out of band value IPP out-of-band value or action
>> ------------------------ -------------------------------
>> noSuchInstance 'no-value'
>> noSuchObject ignore the requested attribute and return
>> "requested-attributes" operation attribute
>> only the unsupported values in the
>> Attributes Group .
>>>> So if requesting the alert table and there are no entries, return:
>>>> 'prt-tab-18' = 'no-value'
>>>> We suggest the following mapping of SNMPv2 errors to IPP out-of-band
>> attribute values. An error cannot be returned, since other valid
>> attributes may be requested in the same request.
>>>> SNMP error SNMP version action or attribute value returned
>> ---------- ------------ ----------------------------------
>> noError(0) v1 return the requested value of the object
>> tooBig(1) v1 make repeated requests of smaller amounts
>> or chunk the responses back to the client
>> MUST not return an error
>> noSuchName(2) v1 compat only ignore the requested attribute and return
>> "requested-attributes" operation attribute
>> only the unsupported values in the
>> Attributes Group .
>> badValue(3) v1 only set can't happen
>> readOnly(4) v1 only set can't happen
>> genErr(5) v2 deprecated return 'server-error-internal-error'
>> noAccess(6) v2 return 'client-error-not-authorized
>> wrongType(7) v2 only set can't happen
>> wrongLength(8) v2 only set can't happen
>> wrongEncoding(9) v2 only set can't happen
>> wrongValue(10) v2 only set can't happen
>> noCreation(11) v2 only set can't happen
>> inconsistentValue(12) v2 only set can't happen
>> resourceUnavailable(13) v2 only set can't happen
>> commitFailed(14) v2 only set can't happen
>> undoFailed(15) v2 only set can't happen