idnits 2.17.1 draft-rprice-ups-management-protocol-02.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- == There are 18 instances of lines with non-RFC2606-compliant FQDNs in the document. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (6 March 2021) is 1147 days in the past. Is this intentional? Checking references for intended status: Informational ---------------------------------------------------------------------------- No issues found here. Summary: 0 errors (**), 0 flaws (~~), 2 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 IETF R. Price, Ed. 3 Internet-Draft Network UPS Tools Project 4 Intended status: Informational 6 March 2021 5 Expires: 7 September 2021 7 Uninterruptible Power Supply (UPS) Management Protocol -- Commands and 8 Responses 9 draft-rprice-ups-management-protocol-02 11 Abstract 13 This text describes the command/response protocol currently used in 14 the management of Uninterruptible Power Supply (UPS) units and other 15 power devices often deployed in small offices, and in IT 16 installations subject to an erratic public power supply. The UPS 17 units typically interface to an Attachment Daemon in the system they 18 protect. This daemon is in turn polled by a Management Daemon which 19 notifies users and system administrators of power supply incidents, 20 and takes system shutdown decisions. The commands and responses 21 described by this text are exchanged between the UPS Attachment 22 Daemon and the Management Daemon. Current practice leads to weak 23 security and this is addressed in the Security and IANA 24 Considerations. 26 Status of This Memo 28 This Internet-Draft is submitted in full conformance with the 29 provisions of BCP 78 and BCP 79. 31 Internet-Drafts are working documents of the Internet Engineering 32 Task Force (IETF). Note that other groups may also distribute 33 working documents as Internet-Drafts. The list of current Internet- 34 Drafts is at https://datatracker.ietf.org/drafts/current/. 36 Internet-Drafts are draft documents valid for a maximum of six months 37 and may be updated, replaced, or obsoleted by other documents at any 38 time. It is inappropriate to use Internet-Drafts as reference 39 material or to cite them other than as "work in progress." 41 This Internet-Draft will expire on 7 September 2021. 43 Copyright Notice 45 Copyright (c) 2021 IETF Trust and the persons identified as the 46 document authors. All rights reserved. 48 This document is subject to BCP 78 and the IETF Trust's Legal 49 Provisions Relating to IETF Documents (https://trustee.ietf.org/ 50 license-info) in effect on the date of publication of this document. 51 Please review these documents carefully, as they describe your rights 52 and restrictions with respect to this document. Code Components 53 extracted from this document must include Simplified BSD License text 54 as described in Section 4.e of the Trust Legal Provisions and are 55 provided without warranty as described in the Simplified BSD License. 57 Table of Contents 59 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 60 1.1. How to read this text . . . . . . . . . . . . . . . . . . 4 61 1.2. Current practice . . . . . . . . . . . . . . . . . . . . 4 62 1.3. Requirements Language . . . . . . . . . . . . . . . . . . 4 63 1.4. Comments . . . . . . . . . . . . . . . . . . . . . . . . 4 64 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 65 2.1. Attachment Daemon . . . . . . . . . . . . . . . . . . . . 5 66 2.2. Driver . . . . . . . . . . . . . . . . . . . . . . . . . 5 67 2.3. Event . . . . . . . . . . . . . . . . . . . . . . . . . . 5 68 2.4. Instant Command . . . . . . . . . . . . . . . . . . . . . 5 69 2.5. Management Daemon . . . . . . . . . . . . . . . . . . . . 5 70 2.6. NUT (Network UPS Tools) Project . . . . . . . . . . . . . 6 71 2.7. Primary . . . . . . . . . . . . . . . . . . . . . . . . . 6 72 2.8. Secondary . . . . . . . . . . . . . . . . . . . . . . . . 6 73 2.9. Session . . . . . . . . . . . . . . . . . . . . . . . . . 6 74 2.10. UPS status . . . . . . . . . . . . . . . . . . . . . . . 7 75 2.11. UPS variable . . . . . . . . . . . . . . . . . . . . . . 7 76 3. Protocol overview . . . . . . . . . . . . . . . . . . . . . . 7 77 4. Protocol specification . . . . . . . . . . . . . . . . . . . 9 78 4.1. Notation used in this specification . . . . . . . . . . . 9 79 4.2. Commands . . . . . . . . . . . . . . . . . . . . . . . . 10 80 4.2.1. "FSD" . . . . . . . . . . . . . . . . . . . . . . . . 10 81 4.2.2. "GET" . . . . . . . . . . . . . . . . . . . . . . . . 10 82 4.2.2.1. "CMDDESC" . . . . . . . . . . . . . . . . . . . . 10 83 4.2.2.2. "DESC" . . . . . . . . . . . . . . . . . . . . . 11 84 4.2.2.3. "NUMLOGINS" . . . . . . . . . . . . . . . . . . . 11 85 4.2.2.4. "TYPE" . . . . . . . . . . . . . . . . . . . . . 11 86 4.2.2.5. "UPSDESC" . . . . . . . . . . . . . . . . . . . . 12 87 4.2.2.6. "VAR" . . . . . . . . . . . . . . . . . . . . . . 13 88 4.2.3. "HELP" . . . . . . . . . . . . . . . . . . . . . . . 13 89 4.2.4. "INSTCMD" . . . . . . . . . . . . . . . . . . . . . . 13 90 4.2.5. "LIST" . . . . . . . . . . . . . . . . . . . . . . . 13 91 4.2.5.1. "CLIENT" . . . . . . . . . . . . . . . . . . . . 14 92 4.2.5.2. "CMD" . . . . . . . . . . . . . . . . . . . . . . 14 93 4.2.5.3. "ENUM" . . . . . . . . . . . . . . . . . . . . . 15 94 4.2.5.4. "RANGE" . . . . . . . . . . . . . . . . . . . . . 15 95 4.2.5.5. "RW" . . . . . . . . . . . . . . . . . . . . . . 16 96 4.2.5.6. "UPS" . . . . . . . . . . . . . . . . . . . . . . 16 97 4.2.5.7. "VAR" . . . . . . . . . . . . . . . . . . . . . . 17 98 4.2.6. "LOGIN" . . . . . . . . . . . . . . . . . . . . . . . 17 99 4.2.7. "LOGOUT" . . . . . . . . . . . . . . . . . . . . . . 18 100 4.2.8. "PASSWORD" . . . . . . . . . . . . . . . . . . . . . 18 101 4.2.9. "PRIMARY" . . . . . . . . . . . . . . . . . . . . . . 18 102 4.2.10. "PROTVER" . . . . . . . . . . . . . . . . . . . . . . 18 103 4.2.11. "SET" . . . . . . . . . . . . . . . . . . . . . . . . 19 104 4.2.12. "STARTTLS" . . . . . . . . . . . . . . . . . . . . . 19 105 4.2.13. "USERNAME" . . . . . . . . . . . . . . . . . . . . . 19 106 4.2.14. "VER" . . . . . . . . . . . . . . . . . . . . . . . . 20 107 4.3. Error responses . . . . . . . . . . . . . . . . . . . . . 20 108 5. Statuses and Events . . . . . . . . . . . . . . . . . . . . . 23 109 5.1. Status symbols . . . . . . . . . . . . . . . . . . . . . 23 110 5.2. Events . . . . . . . . . . . . . . . . . . . . . . . . . 26 111 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27 112 6.1. Namespaces used by Command, Responses, Statuses and 113 Variables . . . . . . . . . . . . . . . . . . . . . . . . 28 114 6.2. Port name and number used to manage UPS units . . . . . . 28 115 6.2.1. Current situation . . . . . . . . . . . . . . . . . . 28 116 6.2.1.1. Port nut/3493 . . . . . . . . . . . . . . . . . . 28 117 6.2.1.2. Port ups/401 . . . . . . . . . . . . . . . . . . 28 118 6.2.2. Request to IANA . . . . . . . . . . . . . . . . . . . 29 119 7. Security Considerations . . . . . . . . . . . . . . . . . . . 29 120 7.1. Agent verification . . . . . . . . . . . . . . . . . . . 29 121 7.2. Encryption . . . . . . . . . . . . . . . . . . . . . . . 30 122 7.3. Current security practice . . . . . . . . . . . . . . . . 30 123 7.4. Security needs . . . . . . . . . . . . . . . . . . . . . 31 124 7.4.1. Attachment Daemon shim . . . . . . . . . . . . . . . 31 125 7.4.2. Management Daemon shim . . . . . . . . . . . . . . . 31 126 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 32 127 9. Normative References . . . . . . . . . . . . . . . . . . . . 32 128 10. Informative References . . . . . . . . . . . . . . . . . . . 32 129 Appendix A. Variables and Instant Commands . . . . . . . . . . . 33 130 A.1. UPS variables . . . . . . . . . . . . . . . . . . . . . . 33 131 A.2. UPS readable and writable variables . . . . . . . . . . . 37 132 A.3. UPS Instant Commands . . . . . . . . . . . . . . . . . . 39 133 Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 39 134 B.1. Changes in version 01 . . . . . . . . . . . . . . . . . . 39 135 B.2. Changes in version 02 . . . . . . . . . . . . . . . . . . 40 136 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 40 138 1. Introduction 139 1.1. How to read this text 141 The editor recommends that you read the HTML version of this text. 142 It renders the protocol symbols such as "OL" correctly without 143 quotation marks. 145 To lighten the text, the term "UPS" is used when "Managed Power 146 Device" would be more complete. The reader should understand the 147 simple "UPS" to include other managed power devices. 149 | 150 | // Ed: To be removed. The Idnits tool signals false positives 151 | when 152 | // reading variable names such as "ups.delay.shutdown". It 153 | wrongly 154 | // assumes that they are domain names and applies RFC2606 which 155 | calls 156 | // for use of domain names such as "example.com" 158 1.2. Current practice 160 This text documents UPS management techniques and current UPS 161 management practice published by the NUT Project (2.6) which has been 162 operational since 1998. 164 Since May 2002, the protocol described by this text has been 165 operating on IANA port nut/3493 running over TCP. 167 | Historically, the previous number 3305 was a relic of the 168 | original code's ancestry, and conflicted with other services. 169 | UDP support was dropped in July 2003. It had been deprecated 170 | for some time and was only capable of the simplest query 171 | commands as authentication is impossible over a UDP socket. 173 1.3. Requirements Language 175 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 176 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 177 document are to be interpreted as described in RFC 2119 [RFC2119]. 179 1.4. Comments 181 The editor welcomes comments. Technical matters should be addressed 182 to the NUT Project (2.6)'s mailing list [mailinglist]. Editorial 183 matters may be addressed directly to the editor, email: 184 "ietf@rogerprice.org" . 186 2. Terminology 188 The following technical terms appear in this text. 190 2.1. Attachment Daemon 192 The Attachment Daemon talks to the UPS units or other power devices 193 often through a Driver (2.2) specific to the hardware model and the 194 connection medium, e.g. USB, serial. It maintains an abstracted 195 view of the hardware through the use of hardware statuses 2.10. A 196 Management Daemon (2.5) may consult the abstracted view using the 197 commands described in this text. Although the term "Attachment 198 Daemon" includes the word "daemon" nothing requires that it be 199 implemented as a detached software service. An Attachment Daemon 200 must support statuses (2.10) OB and OL. It must also support status 201 LB if the UPS provides such information. 203 2.2. Driver 205 A Driver is that part of an Attachment Daemon which is specific to 206 the hardware, the connection medium and the connection protocol, e.g. 207 USB, serial. In current practice the Attachment Daemon has a driver 208 for each hardware interface type it supports. Although this text 209 considers the driver to be part of the Attachment Daemon, current 210 practice is to see it as a separate software unit running as an 211 unattached daemon "in front of" the Attachment Daemon. The protocol 212 between the driver and the attachment daemon may use [RFC1628]. 214 2.3. Event 216 An Event is a change in UPS status (2.10) detected by the Management 217 Daemon (2.5) 219 2.4. Instant Command 221 A command which when sent to the Attachment Daemon (2.1) causes the 222 hardware to immediately perform a function. For example "INSTCMD 223 su700 test.panel.start" 225 2.5. Management Daemon 227 The Management Daemon is primarily responsible for managing the 228 hardware and the system reaction to power loss. Using commands sent 229 to the Attachment Daemon (2.1) it follows the status of the UPS and 230 determines when UPS events occur. It takes decisions based on the 231 events, such a calling for a system shutdown. Although the term 232 includes the word "daemon" nothing requires that it be implemented as 233 a detached software service. The Management Daemon may also provide 234 administrative functions such as a graphic interface to view the 235 hardware activity. 237 2.6. NUT (Network UPS Tools) Project 239 The primary goal of the NUT project [NUT] is to provide support for 240 Power Devices, such as Uninterruptible Power Supplies. The Project 241 has been in operation since 1998 with a major rework in 2003. It 242 operates through a mailing list [mailinglist] and a web site [NUT]. 244 2.7. Primary 246 When a power device such as a UPS unit supplies power to more than 247 one system, the one to which the data lead is connected is known as 248 the primary. The others are secondary. See figure 4. Common 249 current practice for system administrators is to consider the 250 Management Daemon (2.5) in the primary to be the Primary Management 251 Daemon which is in charge of the shutdown of all the systems powered 252 by the UPS. The Primary Management Daemon sets status symbol "FSD" 253 to order the secondaries to shut down. 255 | Note: Historically, the primary was known as the "Master". 257 2.8. Secondary 259 When a hardware device such as a UPS unit supplies power to more than 260 one system, the one to which the data lead is connected is known as 261 the Primary (2.7). The other are secondaries. There is no 262 Attachment Daemon (2.1) in a secondary. See figure 4. Common 263 current practice for system administrators is to consider the 264 Management Daemon (2.5) in a secondary to be a Secondary Management 265 Daemon which understands status symbol "FSD" as an order to shut 266 down. 268 | Note: Historically, the secondary was known as the "Slave". 270 2.9. Session 272 The Management Daemon (2.5) may open a session with a specified 273 device such as a UPS known to the Attachment Daemon (2.1). The 274 session structure provides for audit and security as well as access 275 to mission critical UPS functions. For example good practice 276 requires a password protection for an instant command (2.4) which 277 turns off a UPS outlet. Other than the commands and responses used, 278 the details of session management are outside the scope of this text. 280 2.10. UPS status 282 The status of a hardware device such as a UPS unit is a symbolic 283 description of the state of the unit. It consists of a space 284 separated list of symbols from the set {"ALARM" "BOOST" "BYPASS" 285 "CAL" "CHRG" "COMM" "DISCHRG" "FSD" "LB" "NOCOMM" "OB" "OFF" "OVER" 286 "RB" "RB" "TEST" "TRIM"}. The symbols "TICK" and "TOCK" are 287 experimental additions to the status and are not in common current 288 practice. See the appendix (5.1) which specifies each of these 289 symbols. The statuses "LB", "OB" and "OL" are considered fundamental 290 and are supported for all units. Other statuses depend on the 291 feature set of the hardware. 293 2.11. UPS variable 295 The features provided by each UPS are represented by variables giving 296 the current value attached to that feature. The UPS variable is an 297 abstraction of the UPS hardware configuration and activity maintained 298 by the Attachment Daemon (2.1). See the appendix (Section A.1, 299 Paragraph 1) which provides a non exhaustive list of variables. For 300 example the variable "battery.charge" contains the current charge of 301 the UPS battery as a percentage value. 303 3. Protocol overview 305 Figure 1 shows a reference configuration in which the command/ 306 response protocol applies. The UPS shown is representative of all 307 power devices, 309 "The client" 310 ,--------------, ,--------------, 311 ,-----, | UPS | <-Commands | UPS | 312 | UPS |---| Attachment |---------------| Management | 313 | |===| Daemon | Responses-> | Daemon | 314 /-----\ '--------------' '--------------' 315 UPS Attachment UPS Management 316 System Network System 318 Figure 1: Reference Configuration 320 The reference configuration in figure 1 shows a single UPS unit which 321 has a power supply link ("===") and a data link ("---") attached to a 322 system running an Attachment Daemon (2.1). The UPS provides power 323 supply protection to the system running the Attachment Daemon. The 324 data link may use [RFC1628]. 326 In practice there may be more than one UPS unit, and a unit may 327 provide power protection to more than one system. The figure also 328 shows a single Management Daemon (2.5). In practice there may be 329 more than one Management Daemon, and any one Management Daemon may 330 manage more than one UPS Attachment Daemon. 332 The protocol applies to connections between the Management Daemon and 333 the Attachment daemon. The Management Daemon is known as the 334 *client*. It sends commands over TCP to the Attachment Daemon and 335 receives responses over TCP from that daemon. 337 The two daemons may run in the same system, or may be connected 338 through a local or wide area network. In simple cases, as shown in 339 figure 2, the Attachment Daemon (2.1) and the Management Daemon (2.5) 340 are in the same system, the one protected by the UPS. The commands 341 and responses are exchanged through an internal loopback interface. 343 "The client" 344 ,--------------------,---------------------, 345 ,-----, | UPS <-Commands UPS | 346 | UPS |---| Attachment | Management | 347 | |===| Daemon Responses-> Daemon | 348 /-----\ '--------------------'---------------------' 349 Internal 350 loopback 351 UPS Attachment and Management System 353 Figure 2: Simplified single-system configuration 355 The reference configuration does not require any specific design. 356 For example figure 3 shows an arrangement in which the Attachment 357 Daemon (2.1) is closely associated with, or even included in the UPS 358 system setup. This is becoming more prevalent with the availability 359 of low cost processors able to run the Attachment Daemon (2.1) 361 "The client" 362 ,-----,------------, ,--------------, 363 | | UPS | <-Commands | UPS | 364 | UPS - Attachment |---------------| Management | 365 | | Daemon | Responses-> | Daemon | 366 /-----'------------\ '--------------' 367 UPS Attachment UPS Management 368 System Network System 370 Figure 3: UPS and Attachment Daemon integration 372 As the power requirements for processors decrease, it is becoming 373 increasingly common to use a single UPS to protect multiple systems 374 as shown in figure 4. However there is only one data line ("---") 375 from the UPS to the Primary (2.7) system. The others have only power 376 connections ("===") to the UPS, and each is known as a Secondary 377 (2.8). A Secondary (2.8) does not run an Attachment Daemon (2.1), it 378 connects over a network to the Attachment Daemon (2.1) in the 379 primary. Figure 4 shows the Attachment Daemon (2.1) and the primary 380 Management Daemon (2.5) in the same system. This is common practice 381 but it is not a technical requirement. 383 "The client" 384 ,--------------------,---------------------, 385 ,-----, | UPS <-Commands Primary | 386 | |---| Attachment | Management | Primary 387 | |===| Daemon Responses-> Daemon | 388 | | '--------------------'---------------------' 389 | UPS | ^ 390 | | '<-Commands---Responses->, 391 | | v 392 | | ,--------------,-----------------, 393 | |============| | Secondary | 394 /-----\ | | Management | Secondary 395 | | Daemon | 396 '--------------'-----------------' 398 Figure 4: UPS protects multiple systems 400 4. Protocol specification 402 This specification includes only the commands and their responses. 403 An implementation of the Attachment Daemon (2.1) has an internal 404 state machine, and some complex implementations of the Management 405 Daemon (2.5) include an internal state machine; for example to assist 406 the system shutdown of a complex installation. However the 407 management protocol used between them is effectively stateless. Most 408 responses received by the Management Daemon (2.5) are sufficient in 409 themselves, and at most require knowledge of the previous response to 410 that command. See for example table (5.2) which maps the new 411 "ups.status" response and the previous "ups.status" response to an 412 Event (5.2) which is taken as the basis for Management Daemon (2.5) 413 action. 415 4.1. Notation used in this specification 417 The character set used for commands and responses is UTF-8 but 418 current practice is to limit the character set used to the single 419 byte UTF-8 characters 0-127. 421 Multi-word elements are contained within U+0022 QUOTATION MARK 422 characters for easier parsing. E.g. ""UPS on fire"". Embedded 423 quotation marks are escaped with U+005C REVERSE SOLIDUS \ often known 424 as backslashes. Embedded backslashes are also escaped by 425 representing them as \\. 427 Commands and responses have no leading or trailing whitespace, and 428 are terminated with a single new line character U+000A LINE FEED 429 (LF). 431 White space within commands and responses is reduced to one U+0020 432 (SP) SPACE. 434 4.2. Commands 436 4.2.1. "FSD" 438 A Management Daemon (2.5) which is Primary (2.7) and has the required 439 authority, uses this command to set status symbol "FSD" in the 440 Attachment Daemon (2.1). Current practice uses the symbol to tell 441 each Secondary (2.8) system to shut down. It has the same value as 442 the pair of status symbols "OB" "LB". 444 Command: "FSD " The response is: "OK FSD-SET" if 445 the command is successful. 447 Current practice requires that an application introduce security 448 controls in its session management to defend against abusive use of 449 this command. The details are outside the scope of this text. 451 4.2.2. "GET" 453 Retrieve a single response from the server. The possible sub- 454 commands are: 456 4.2.2.1. "CMDDESC" 458 Command: "GET CMDDESC " 460 Response: CMDDESC "" 462 For example: "GET CMDDESC su700 load.on" and response "CMDDESC su700 463 load.on "Turn on the load immediately"" 465 This is like "DESC", but it applies to an instant command (2.4). 467 4.2.2.2. "DESC" 469 Command: "GET DESC " 471 Response: "DESC """ 473 where is a string that gives a brief explanation of the 474 named variable. The Attachment Daemon (2.1) may return "Unavailable" 475 if the file which provides this description is not installed. 477 For example command "GET DESC su700 ups.status" and response "DESC 478 su700 ups.status "UPS status"" 480 4.2.2.3. "NUMLOGINS" 482 Command: "GET NUMLOGINS " 484 Response: "NUMLOGINS " 486 where is the number of clients which have succeeded in doing 487 a LOGIN to this UPS. 489 For example command "GET NUMLOGINS su700" and response "NUMLOGINS 490 su700 1" 492 This information may be needed by the Management Daemon (2.5) to 493 determine how many clients are still connected when starting the 494 system shutdown process. 496 4.2.2.4. "TYPE" 498 Command: "GET TYPE " 500 Response: "TYPE ..." 502 where can be one or more of the following tokens. Multiple 503 types may be returned. 505 For example command "GET TYPE su700 input.transfer.low" and response 506 "TYPE su700 input.transfer.low ENUM" 507 +==============+============================================+ 508 | Type | Meaning | 509 +==============+============================================+ 510 | RW | This variable may be set to another value | 511 | | with command "SET" | 512 +--------------+--------------------------------------------+ 513 | ENUM | An enumerated type, which supports | 514 | | specific pre-determined values | 515 +--------------+--------------------------------------------+ 516 | STRING:n | This is a string of maximum length "n" | 517 +--------------+--------------------------------------------+ 518 | RANGE | This is a number, either integer or float, | 519 | | comprised in the range which may be seen | 520 | | with the command LIST RANGE (4.2.5.4) | 521 +--------------+--------------------------------------------+ 522 | NUMBER | This is a single numeric value, either | 523 | | integer or float | 524 +--------------+--------------------------------------------+ 526 Table 1: Variable types 528 Notes: 530 * "ENUM", "STRING:n" and "RANGE", are usually associated with "RW", 531 but not always. The default , when omitted, is numeric, so 532 either integer or float. Each Driver (2.2) is then responsible 533 for handling values as either integer or float. 535 * Current practice is to represent floating point values using 536 locale "C.utf8" which is a decimal (base 10) US English-based 537 representation. Hexadecimal, exponents, and comma for thousands 538 separator are not allowed. For example: "1200.20" is valid, while 539 "1,200.20" and "1200,20" are invalid. 541 4.2.2.5. "UPSDESC" 543 Command: "GET UPSDESC " 545 Response: "UPSDESC """ 547 where is defined by the Attachment Daemon (2.1) 548 configuration. If it is not set, current practice is for the 549 Attachment Daemon (2.1) to return "Unavailable". 551 For example command "GET UPSDESC su700" and response "UPSDESC su700 552 "Development box"" 553 This can be used to provide human-readable descriptions instead of a 554 cryptic "upsname@hostname" string. 556 4.2.2.6. "VAR" 558 Command: "GET VAR " 560 Response: "VAR """ 562 For example command "GET VAR su700 ups.status" and response "VAR 563 su700 ups.status "OB LB"" 565 4.2.3. "HELP" 567 Return a list of the commands supported by the Attachment Daemon 568 (2.1). This command is intended for human as well as program use. 570 Command "HELP" 572 For example, the following command line sequence executed on an 573 Attachment Daemon (2.1): 575 netcat localhost 3493 576 HELP 577 Commands: HELP VER GET LIST SET INSTCMD LOGIN LOGOUT 578 LOGOUT USERNAME PASSWORD STARTTLS 580 4.2.4. "INSTCMD" 582 Send an instant command (2.4) to the UPS. 584 Command: "INSTCMD " The response is: 585 "OK" 587 where "" is the name of the UPS and "" is the 588 instant command (2.4) to be issued to that UPS. 590 For example the command: "INSTCMD su700 test.panel.start" and the 591 response "OK" 593 4.2.5. "LIST" 595 The "LIST" commands all produce a response with a common container 596 format. The response will begin with "BEGIN LIST" and then repeat 597 the initial query. A list then follows, with as many lines as are 598 necessary. The response ends with "END LIST" followed by the initial 599 query. 601 The formatting may seem a bit redundant, but it makes a different 602 form of client possible. A client can send a "LIST" query and then 603 go off and wait for the response. When it arrives, the Management 604 Daemon (2.5) doesn't need a complicated state machine to remember 605 which list is which. 607 The possible subcommands are: 609 4.2.5.1. "CLIENT" 611 The command calls for the Attachment Daemon (2.1) to report all the 612 current Management Daemon (2.5) clients of a given UPS. See command 613 LOGIN (4.2.6). 615 Command: "LIST CLIENT " The response is 617 BEGIN LIST CLIENT 618 CLIENT 619 ... 620 END LIST CLIENT 622 For example, the command "LIST CLIENT ups1" and the response: 624 BEGIN LIST CLIENT ups1 625 CLIENT ups1 ::1 626 CLIENT ups1 198.51.100.2 627 END LIST CLIENT ups1 629 4.2.5.2. "CMD" 631 The command calls for the Attachment Daemon (2.1) to report a list of 632 each UPS instant command (2.4) which the Management Daemon (2.5) may 633 sent to the Attachment Daemon (2.1). This instant command (2.4) list 634 is the abstracted view of the UPS hardware capabilities. An 635 economical UPS will support few or no instant command (2.4) but a 636 professional model should support more. 638 Command: "LIST CMD " The response is: 640 BEGIN LIST CMD 641 CMD 642 ... 643 END LIST CMD 645 where "" is the name of the UPS, and "" is the name 646 of the command which may be issued to the UPS. 648 For example the command: "LIST CMD su700" and the response: 650 BEGIN LIST CMD su700 651 CMD su700 load.on 652 CMD su700 test.panel.start 653 ... 654 END LIST CMD su700 656 4.2.5.3. "ENUM" 658 The command calls for the Attachment Daemon (2.1) to report the set 659 of possible values of a UPS variable which has predetermined values. 661 Command: "LIST ENUM " The response is: 663 BEGIN LIST ENUM 664 ENUM "" 665 ... 666 END LIST ENUM 668 where "" is the name of the UPS, "" is the UPS 669 variable and "" is one of the possible values of the UPS 670 variable. Note that the U+0022 QUOTATION MARK characters are part of 671 the response. 673 For example the command: "LIST ENUM su700 input.transfer.low" and the 674 response: 676 BEGIN LIST ENUM su700 input.transfer.low 677 ENUM su700 input.transfer.low "103" 678 ENUM su700 input.transfer.low "100" 679 ... 680 END LIST ENUM su700 input.transfer.low 682 4.2.5.4. "RANGE" 684 The command calls for the Attachment Daemon (2.1) to report the 685 interval in which valid values of a UPS variable lie. 687 Command: "LIST RANGE " The response is: 689 BEGIN LIST RANGE 690 RANGE "" "" 691 ... 692 END LIST RANGE 694 where "" is the name of the UPS, "" is the UPS 695 variable and {"",""} is the interval of valid values of the 696 UPS variable. Note that the U+0022 QUOTATION MARK characters are 697 part of the response. 699 For example, the command "LIST RANGE su700 input.transfer.low" and 700 the response: 702 BEGIN LIST RANGE su700 input.transfer.low 703 RANGE su700 input.transfer.low "90" "100" 704 RANGE su700 input.transfer.low "102" "105" 705 ... 706 END LIST RANGE su700 input.transfer.low 708 4.2.5.5. "RW" 710 The command calls for the Attachment Daemon (2.1) to report a list of 711 the UPS variables associated with a given UPS which may be read and 712 written by the Management Daemon (2.5). These variables are the 713 abstracted view of the UPS hardware capabilities. An economical UPS 714 will support few variables but a professional model should support at 715 least the variables which are needed for automatic shutdown and 716 restart. 718 Command: "LIST RW " The response is: 720 BEGIN LIST RW 721 RW "" 722 ... 723 END LIST RW 725 where "" is the name of the UPS, "" is the UPS 726 variable and "" is the value of the UPS variable. Note that 727 the U+0022 QUOTATION MARK characters are part of the response. 729 For example the command: "LIST RW su700" and the response: 731 BEGIN LIST RW su700 732 RW su700 output.voltage.nominal "115" 733 RW su700 ups.delay.shutdown "020" 734 ... 735 END LIST RW su700 737 4.2.5.6. "UPS" 739 Command: "LIST UPS" The response is: 741 BEGIN LIST UPS 742 UPS "" 743 ... 744 END LIST UPS 745 where is the name of a UPS, and is the value 746 of the description maintained by the Attachment Daemon (2.1) if 747 available. It is set to "Unavailable" otherwise. Note that the 748 U+0022 QUOTATION MARK characters are part of the response. 750 This command can also be used to determine what values of 751 are valid before calling other functions on the server. This is also 752 a good way to handle situations where a single Attachment Daemon 753 (2.1) supports multiple UPS's. It is also useful for clients which 754 perform a UPS discovery process. 756 For example, the response: 758 BEGIN LIST UPS 759 UPS su700 "Development box" 760 END LIST UPS 762 4.2.5.7. "VAR" 764 Command: "LIST VAR " The response is: 766 BEGIN LIST VAR 767 VAR "" 768 ... 769 END LIST VAR 771 where "" is the name of the UPS, "" is the UPS 772 variable and "" is the value of the UPS variable. Note that 773 the U+0022 QUOTATION MARK characters are part of the response. 775 The response to this command lists the UPS variables available for 776 this UPS and their current values. For example the command "LIST VAR 777 su700" and the response: 779 BEGIN LIST VAR su700 780 VAR su700 ups.mfr "APC" 781 VAR su700 ups.mfr.date "10/17/96" 782 ... 783 END LIST VAR su700 785 4.2.6. "LOGIN" 787 The Attachment Daemon (2.1) provides facilities to limit access to 788 the UPS unit(s) to which it is attached. A system administrator 789 performs a login to open a Session (2.9) and gain access to a UPS, 790 and a logout when the Session (2.9) is no longer needed. 792 Command: "LOGIN " The response is "OK" if the 793 login is successful. 795 | Current practice is for the command "LOGIN" to allow connection 796 | to the Attachment Daemon (2.1). If there are two UPS units 797 | attached to the Attachment Daemon (2.1) logging into the first 798 | will automatically log into the second as well. 800 4.2.7. "LOGOUT" 802 The Attachment Daemon (2.1) provides facilities to limit access to 803 the UPS unit(s) to which it is attached. A system administrator 804 performs a login to open a Session (2.9) and gain access, and a 805 logout when the Session (2.9) is no longer needed. The command 806 "LOGOUT" allows the system administrator to disconnect gracefully. 808 Command: "LOGOUT" with the response "OK Goodbye" if the disconnection 809 was successful. 811 4.2.8. "PASSWORD" 813 The Management Daemon (2.5) specifies a password required to enter a 814 Session (2.9) with the Attachment Daemon (2.1). 816 Command: "PASSWORD " The response is: "OK" if the 817 command is successful. 819 4.2.9. "PRIMARY" 821 The Attachment Daemon (2.1) uses this command within a Session (2.9) 822 to claim that it is a Primary (2.7) and has the required authority to 823 perform such critical actions as setting status symbol "FSD". 825 Command: "PRIMARY " with response: "OK" if the Attachment 826 Daemon (2.1) does have such authority. 828 where "" is the name of the UPS. 830 | Note: Historically, this command was known as "MASTER". 832 4.2.10. "PROTVER" 834 Return the implementation version of the command/response protocol 835 used by the Attachment Daemon (2.1). This command is intended for 836 human as well as program use. 838 Command "PROTVER" 839 For example, the following command line sequence in the Attachment 840 Daemon (2.1): 842 netcat localhost 3493 843 PROTVER 844 1.2 846 | Note: Historically, this command was known as "NETVER" and 847 | current practice is to use "NETVER" instead of "PROTVER" 849 4.2.11. "SET" 851 The command calls for the Attachment Daemon (2.1) to set a UPS 852 variable to a given value. Whether this has an effect on the UPS 853 hardware is specific to the Driver (2.2) and the UPS model. 855 Command: "SET VAR """ The 856 response is: "OK" 858 where "" is the name of the UPS, "" is the UPS 859 variable and "" is the value to be assigned to the UPS 860 variable. Note that the U+0022 QUOTATION MARK characters are part of 861 the command. 863 For example the command: "SET VAR su700 ups.id "My UPS"" and the 864 response "OK" 866 4.2.12. "STARTTLS" 868 The client tells the Attachment Daemon (2.1) to switch to TLS 869 encrypted communication. When the client receives "OK" it also 870 switches to TLS encryption. 872 Command: "STARTTLS" The response is: "OK STARTTLS" if the 873 command is successful. 875 4.2.13. "USERNAME" 877 The Session (2.9) may require that the Management Daemon (2.5) 878 identifies a "UPS management user" who has been authorized to send 879 commands to the Attachment Daemon (2.1). In current practice, this 880 "user" is specific to UPS management and is not a user of the 881 operating system. The technique for specifying this UPS management 882 user is specific to the implementation, and may be done with a 883 configuration file. 885 Command: "USERNAME " The response is "OK" if the 886 command is successful. 888 4.2.14. "VER" 890 Return the implementation version of the Attachment Daemon (2.1). 891 This command is intended for human as well as program use. 893 Command "VER" 895 For example, the following command line sequence: 897 netcat localhost 3493 898 VER 899 Network UPS Tools upsd 2.7.4 - http://www.networkupstools.org/ 901 4.3. Error responses 903 Error responses have the following format: 905 ERR [] 907 where "" is a single word token taken from the 27 908 characters A-Z and HYPHEN-MINUS U+002D. Implementations may if 909 needed add an additional optional "". Current practice does 910 not make use of this possibility. 912 The "" may have one of the following values: 914 +==============================+=================================+ 915 | The error name token | Meaning | 916 | "" | | 917 +==============================+=================================+ 918 | ACCESS-DENIED | The client's host and/or | 919 | | authentication details | 920 | | (username, password) are not | 921 | | sufficient to execute the | 922 | | requested command. | 923 +------------------------------+---------------------------------+ 924 | ALREADY-LOGGED-IN | The client has already sent a | 925 | | successful "LOGIN" command for | 926 | | a given UPS and can't do it | 927 | | again. | 928 | | | 929 | | Note: Current practice is to | 930 | | impose a limit of one "LOGIN" | 931 | | record per connection. If | 932 | | there are two UPS's attached to | 933 | | the Attachment Daemon (2.1), | 934 | | logging into one of them | 935 | | automatically logs into the | 936 | | other as well. See command | 937 | | LOGIN (4.2.6). | 938 +------------------------------+---------------------------------+ 939 | ALREADY-SET-PASSWORD | The client has already supplied | 940 | | a PASSWORD and is attempting to | 941 | | repeat the command in the same | 942 | | Session (2.9). | 943 +------------------------------+---------------------------------+ 944 | ALREADY-SET-USERNAME | The client has already supplied | 945 | | a USERNAME, and is attempting | 946 | | to repeat the command within | 947 | | the same Session (2.9). | 948 +------------------------------+---------------------------------+ 949 | ALREADY-SSL-MODE | TLS/SSL mode is already enabled | 950 | | on this connection, so the | 951 | | Attachment Daemon (2.1) can't | 952 | | start it again. | 953 +------------------------------+---------------------------------+ 954 | CMD-NOT-SUPPORTED | The specified UPS doesn't | 955 | | support the instant command | 956 | | (2.4) command. | 957 +------------------------------+---------------------------------+ 958 | DATA-STALE | The Attachment Daemon (2.1) is | 959 | | connected to the Driver (2.2) | 960 | | for the UPS, but that driver | 961 | | isn't providing regular updates | 962 | | or has specifically marked the | 963 | | data as stale. Current | 964 | | practice is for the Attachment | 965 | | Daemon (2.1) to refuse to | 966 | | provide the Management Daemon | 967 | | (2.5) with variables on stale | 968 | | units to avoid false readings. | 969 | | | 970 | | This generally means that the | 971 | | Driver (2.2) is running, but it | 972 | | has lost communication with the | 973 | | hardware. Check the physical | 974 | | connection to the equipment. | 975 +------------------------------+---------------------------------+ 976 | DRIVER-NOT-CONNECTED | The Attachment Daemon (2.1) | 977 | | can't perform the requested | 978 | | command, since the Driver (2.2) | 979 | | for that UPS is not connected. | 980 | | This usually means that the | 981 | | driver is not running, or if it | 982 | | is, is misconfigured. | 983 +------------------------------+---------------------------------+ 984 | FEATURE-NOT-CONFIGURED | This instance of the Attachment | 985 | | Daemon (2.1) hasn't been | 986 | | configured properly to allow | 987 | | the requested feature to | 988 | | operate. In current practice | 989 | | this error response is possible | 990 | | only for command "STARTTLS". | 991 +------------------------------+---------------------------------+ 992 | FEATURE-NOT-SUPPORTED | This instance of Attachment | 993 | | Daemon (2.1) does not support | 994 | | the requested feature. In | 995 | | current practice this error | 996 | | response is possible only for | 997 | | command "STARTTLS". | 998 +------------------------------+---------------------------------+ 999 | INSTCMD-FAILED | The Attachment Daemon (2.1) | 1000 | | failed to deliver the instant | 1001 | | command (2.4) request to the | 1002 | | Driver (2.2). No further | 1003 | | information is available to the | 1004 | | client. This typically | 1005 | | indicates a dead or broken | 1006 | | driver. | 1007 +------------------------------+---------------------------------+ 1008 | INVALID-ARGUMENT | The client sent an argument to | 1009 | | a command which is not | 1010 | | recognized or is otherwise | 1011 | | invalid in this context. This | 1012 | | is typically caused by sending | 1013 | | a valid command such as "GET" | 1014 | | with an invalid subcommand. | 1015 +------------------------------+---------------------------------+ 1016 | INVALID-PASSWORD | The client sent an invalid | 1017 | | password. | 1018 +------------------------------+---------------------------------+ 1019 | INVALID-USERNAME | The client sent an invalid | 1020 | | username. | 1021 +------------------------------+---------------------------------+ 1022 | INVALID-VALUE | The value specified in the | 1023 | | request is not valid. This | 1024 | | usually applies to a "SET" of | 1025 | | an "ENUM" type which is using a | 1026 | | value not in the list of | 1027 | | allowed values. | 1028 +------------------------------+---------------------------------+ 1029 | PASSWORD-REQUIRED | The command requires a password | 1030 | | for authentication, but the | 1031 | | client hasn't provided one. | 1032 +------------------------------+---------------------------------+ 1033 | READONLY | The requested variable in a | 1034 | | "SET" command is not writable. | 1035 +------------------------------+---------------------------------+ 1036 | SET-FAILED | The Attachment Daemon (2.1) | 1037 | | failed to deliver the set | 1038 | | request to the Driver (2.2). | 1039 | | This is similar to "INSTCMD- | 1040 | | FAILED". | 1041 +------------------------------+---------------------------------+ 1042 | TOO-LONG | The requested value in a "SET" | 1043 | | command is too long. | 1044 +------------------------------+---------------------------------+ 1045 | UNKNOWN-COMMAND | The Attachment Daemon (2.1) | 1046 | | doesn't recognize the command. | 1047 +------------------------------+---------------------------------+ 1048 | UNKNOWN-UPS | The UPS specified in the | 1049 | | request is not known to the | 1050 | | Attachment Daemon (2.1). This | 1051 | | usually means that it didn't | 1052 | | match anything in the | 1053 | | Attachment Daemon (2.1) | 1054 | | configuration. | 1055 +------------------------------+---------------------------------+ 1056 | USERNAME-REQUIRED | The command requires a username | 1057 | | for authentication, but the | 1058 | | client hasn't provided one. | 1059 +------------------------------+---------------------------------+ 1060 | VAR-NOT-SUPPORTED | The specified UPS doesn't | 1061 | | support the UPS variable (2.11) | 1062 | | in the command. | 1063 +------------------------------+---------------------------------+ 1065 Table 2: Error responses 1067 5. Statuses and Events 1069 5.1. Status symbols 1071 These symbols resume the abstracted view of the UPS hardware 1072 maintained by the Attachment Daemon (2.1). The variable "ups.status" 1073 contains one or more space-separated status symbols which together 1074 describe the UPS state at that instant. In current practice the 1075 Management Daemon (2.5) will poll variable "ups.status" every 5 1076 seconds with a command such as "GET VAR su700 ups.status" and 1077 response "VAR su700 ups.status "OB LB"" to discover changes in the 1078 UPS status. These changes will indicate UPS events. 1080 +=========+====================================================+ 1081 | Symbol | Meaning | 1082 +=========+====================================================+ 1083 | ALARM | The UPS reports that it requires intervention. | 1084 +---------+----------------------------------------------------+ 1085 | BOOST | The UPS has determined the voltage level of the | 1086 | | public supply is too low, and is boosting it to | 1087 | | the required level. The UPS continues to supply | 1088 | | the protected system from the public supply. | 1089 +---------+----------------------------------------------------+ 1090 | BYPASS | The UPS is feeding current directly from the | 1091 | | public supply to the protected system. The backup | 1092 | | facilities are disconnected. This state allows | 1093 | | maintenance personnel to change the batteries | 1094 | | without interrupting the protected system. | 1095 +---------+----------------------------------------------------+ 1096 | CAL | The UPS is calibrating itself, for example to | 1097 | | determine at what charge the "LB" status is raised | 1098 | | or lowered. | 1099 +---------+----------------------------------------------------+ 1100 | CHRG | The UPS battery is charging. This usually implies | 1101 | | that the UPS also has status "OL", but may not be | 1102 | | the case if the UPS also has status "OFF". | 1103 | | | 1104 | | Note: "OL" does not imply "CHRG" if the battery is | 1105 | | floating. | 1106 +---------+----------------------------------------------------+ 1107 | COMM | The Attachment Daemon (2.1) has effective contact | 1108 | | with the UPS. | 1109 +---------+----------------------------------------------------+ 1110 | DISCHRG | The UPS battery is discharging. This usually | 1111 | | implies that the UPS also has status "OB", but may | 1112 | | not be the case if the UPS also has status "OFF". | 1113 | | | 1114 | | Note: "OB" does not imply "DISCHRG" if the battery | 1115 | | is floating. | 1116 +---------+----------------------------------------------------+ 1117 | FSD | This "Forced Shut Down" status signals that the | 1118 | | final shutdown sequence has begun. | 1119 +---------+----------------------------------------------------+ 1120 | LB | Low Battery. The battery level of the UPS is | 1121 | | below a chosen limit. The UPS may be in status OL | 1122 | | or OB. | 1123 +---------+----------------------------------------------------+ 1124 | NOCOMM | The Attachment Daemon (2.1) has no effective | 1125 | | contact with the UPS. | 1126 +---------+----------------------------------------------------+ 1127 | OB | On Battery. The UPS is offline, taking energy | 1128 | | from it's battery. The battery is discharging. A | 1129 | | UPS must have status "OB" or "OL", otherwise it is | 1130 | | deemed dead. | 1131 +---------+----------------------------------------------------+ 1132 | OFF | The UPS is in state "Off". It does not react to | 1133 | | failure in the public power supply. The exact | 1134 | | meaning depends on the model. | 1135 +---------+----------------------------------------------------+ 1136 | OL | OnLine. The UPS is online, receiving energy from | 1137 | | the public supply. The battery is charging. A | 1138 | | UPS must have status "OB" or "OL", otherwise it is | 1139 | | deemed dead. | 1140 +---------+----------------------------------------------------+ 1141 | OVER | Overloaded. The UPS reports that the load on it | 1142 | | is beyond it's normal operating maximum. | 1143 +---------+----------------------------------------------------+ 1144 | RB | Replace battery. The UPS reports that it's | 1145 | | battery/batteries should be replaced. | 1146 +---------+----------------------------------------------------+ 1147 | TEST | Under test. The UPS is currently undergoing a | 1148 | | test, which may have been called for manually or | 1149 | | internally. | 1150 +---------+----------------------------------------------------+ 1151 | TICK | Heartbeat. A software UPS in the Attachment | 1152 | | Daemon (2.1) provides a regular signal monitored | 1153 | | by the Management Daemon (2.5) as a way of | 1154 | | verifying effective end-to-end management. "TICK" | 1155 | | and "TOCK" are companions. | 1156 +---------+----------------------------------------------------+ 1157 | TOCK | Heartbeat. See "TICK" | 1158 +---------+----------------------------------------------------+ 1159 | TRIM | The UPS has determined that the voltage level of | 1160 | | the public supply is too high, and is reducing it | 1161 | | to the required level. The UPS continues to | 1162 | | supply the protected system from the public | 1163 | | supply. | 1164 +---------+----------------------------------------------------+ 1166 Table 3: UPS status symbols 1168 5.2. Events 1170 A Management Daemon (2.5) deduces the occurrence of a UPS Event from 1171 a change in the UPS status (2.10) received from the Attachment Daemon 1172 (2.1). The following table summarizes the process. A status of 1173 "none" means that the status symbol is not present in the variable 1174 "ups.status". In current practice, the variable "ups.status" is 1175 retrieved every 5 seconds. The "old" status is therefore the 1176 previous value retrieved 5 seconds ago. 1178 Current practice is for the Management Daemon (2.5) to assign names 1179 to certain events. These is shown in the table in parentheses. 1181 +=======+=========+===============++=========+========+=============+ 1182 |Old | New |Event || Old | New |Event | 1183 |status | status | || status | status | | 1184 +=======+=========+===============++=========+========+=============+ 1185 |none | ALARM |Alarm on || ALARM | none |Alarm off | 1186 +-------+---------+---------------++---------+--------+-------------+ 1187 |none | BOOST |Boosting || BOOST | none |Not boosting | 1188 | | |voltage || | | | 1189 +-------+---------+---------------++---------+--------+-------------+ 1190 |none | BYPASS |Bypass on || BYPASS | none |Bypass off | 1191 +-------+---------+---------------++---------+--------+-------------+ 1192 |none | CAL |Calibrating || CAL | none |Not | 1193 | | | || | |calibrating | 1194 +-------+---------+---------------++---------+--------+-------------+ 1195 |none | CHRG |Charging || CHRG | none |Not charging | 1196 +-------+---------+---------------++---------+--------+-------------+ 1197 |none | COMM |UPS || COMM | none |[Note 5] | 1198 | | |communicating || | | | 1199 | | |("COMMOK") || | | | 1200 +-------+---------+---------------++---------+--------+-------------+ 1201 |none | DISCHRG |Discharging || DISCHRG | none |Not | 1202 | | | || | |discharging | 1203 +-------+---------+---------------++---------+--------+-------------+ 1204 |none | FSD |System shutdown|| FSD | none |Shutdown | 1205 | | |("FSD") || | |abandoned | 1206 | | |("SHUTDOWN") || | |[Note 1] | 1207 +-------+---------+---------------++---------+--------+-------------+ 1208 |none | LB |Low battery || LB | none |Battery not | 1209 | | |[Note 2] || | |low | 1210 | | |("LOWBATT") || | | | 1211 +-------+---------+---------------++---------+--------+-------------+ 1212 |none | NOCOMM |UPS dead? || NOCOMM | none |[Note 5] | 1213 | | |[Note 5] || | | | 1214 | | |("COMMBAD") || | | | 1215 | | |("NOCOMM") || | | | 1216 +-------+---------+---------------++---------+--------+-------------+ 1217 |none | OFF |UPS turned off || OFF | none |UPS not | 1218 | | | || | |turned off | 1219 +-------+---------+---------------++---------+--------+-------------+ 1220 |OB | OL |Receiving wall || OL | OB |Wall power | 1221 | | |power || | |lost | 1222 | | |("ONLINE") || | |("ONBATT") | 1223 +-------+---------+---------------++---------+--------+-------------+ 1224 |none | OVER |UPS overloaded || OVER | none |Overload gone| 1225 +-------+---------+---------------++---------+--------+-------------+ 1226 |none | RB |Replace battery|| RB | none |Replacement | 1227 | | |("REPLBATT") || | |canceled | 1228 +-------+---------+---------------++---------+--------+-------------+ 1229 |none | TEST |Test starts || TEST | none |Test finished| 1230 +-------+---------+---------------++---------+--------+-------------+ 1231 |none | TICK |Heartbeat event|| TICK | none |No heartbeat | 1232 | | |[Note 4] || | |[Note 4] | 1233 +-------+---------+---------------++---------+--------+-------------+ 1234 |none | TOCK |Heartbeat event|| TOCK | none |No heartbeat | 1235 | | |[Note 4] || | |[Note 4] | 1236 +-------+---------+---------------++---------+--------+-------------+ 1237 |none | TRIM |Trimming || TRIM | none |Not trimming | 1238 | | |voltage || | | | 1239 +-------+---------+---------------++---------+--------+-------------+ 1241 Table 4: Event deduction from status changes 1243 Notes 1245 1. Current practice does not include this event. 1246 2. If the status "OB" is present, current practice takes Management 1247 Daemon (2.5) reception of "LB" as an order to perform an 1248 emergency system shutdown. 1249 3. (For future use) 1250 4. The use of a software defined UPS to provide a heartbeat is 1251 experimental and is not part of common current practice. 1252 5. Current practice is: if the UPS has not responded for 15 seconds, 1253 the Management Daemon (2.5) assumes that the UPS is "dead" 1254 ("NOCOMM"), and if the last known "OL"/"OB" status was "OB" a 1255 system shutdown ("FSD") is called for. 1257 6. IANA Considerations 1259 // Ed: See Guidelines for Writing an IANA Considerations Section in 1260 // RFCs [RFC8126] 1262 This text raises five matters which fall within IANA Considerations: 1264 1. The namespaces occupied by the protocol commands (4.2) described 1265 in this text. 1267 2. The namespaces occupied by the protocol responses (4.3) described 1268 in this text. 1270 3. The namespace occupied by UPS status (2.10) names, 1272 4. The namespace occupied by UPS variable (2.11) names, 1274 5. The port name and port number used to manage UPS units. 1276 6.1. Namespaces used by Command, Responses, Statuses and Variables 1278 Current NUT Project (2.6) experience after more than 20 years is that 1279 the UPS management area advances slowly, and that there are few 1280 requests to modify or extend the Commands, Responses, Statuses and 1281 Variables. When this does occur, the NUT Project (2.6) has been able 1282 to settle the matter without difficulty in the project mailing list. 1283 It is therefore proposed to not burden IANA with this namespace 1284 management and to continue with the current process in which the 1285 project in its mailing list acts as a Working Group, 1287 6.2. Port name and number used to manage UPS units 1289 6.2.1. Current situation 1291 See the IANA [Registry] for the latest situation. 1293 6.2.1.1. Port nut/3493 1295 In 2002 IANA assigned port nut/3493 to project lead Russell Kroll, 1296 and updated the assignment to the NUT Project (2.6) itself in 2020. 1298 6.2.1.2. Port ups/401 1300 In 2008 IANA assigned ups/401 "Uninterruptible Power Supply" to Mr. 1301 Charles Bennett as both assignee and contact. We have been unable to 1302 find any protocol document or other published activity report for 1303 this port. Mr. Bennett himself died in 2015, see obituary [Bennett]. 1304 Since his email address was registered by IANA as "bennettc@ohio.edu" 1305 it is possible that the University of Ohio is a successor in 1306 interest. The editor tried to contact the IT support department of 1307 the university by email and telephone but was rejected. 1308 // Ed: My non-contact was Mr. Keith Brock, IT Support Senior 1309 // Specialist, brock@ohio.edu +1 740 597 2136 1311 6.2.2. Request to IANA 1313 The NUT Project (2.6) is mindful of IANA's position 1315 | that the applicant MUST NOT use the requested port in 1316 | implementations deployed for use on the public Internet prior to 1317 | the completion of the assignment 1319 in clause 8.1.1 of [RFC6335] and makes the following requests to 1320 assist the security migration strategy described in Section 7.4, 1321 Paragraph 1. 1323 1. The NUT Project (2.6) wishes to use the existing UPS Management 1324 Protocol as described in this text on existing port ups/401 for 1325 full security access to the Attachment Daemon (2.1), i.e. command 1326 "STARTTLS" must be issued, accepted and applied. 1328 2. The NUT Project (2.6) requests that IANA consider transferring 1329 port ups/401 to the NUT Project (2.6) and would appreciate IANA 1330 Expert advice on this matter. 1332 7. Security Considerations 1334 A functioning power supply is vital to a computing system. The 1335 Management Daemon (2.5) is able to shut down a working system and 1336 it's power supply: this raises multiple security issues. Most of 1337 these are well known IT issues concerning system protection and 1338 disaster recovery, and are beyond the scope of this text. However 1339 the protocol itself has security considerations: 1341 1. It should not be possible for non-authorized agents to open 1342 sessions and send mission-critical commands such as "FSD 1343 " to the Attachment Daemon (2.1). 1344 2. It should not be possible to intercept the traffic between the 1345 Attachment Daemon (2.1) and the Management Daemon (2.5). 1347 The following facilities address these requirements. 1349 7.1. Agent verification 1351 The protocol provides commands "LOGIN" and "PASSWORD" which allow a 1352 Management Daemon (2.5) to authenticate itself to the Attachment 1353 Daemon (2.1). The password needs protection from sniffing: This is 1354 done by encrypting the traffic. 1356 7.2. Encryption 1358 The protocol provides command "STARTTLS" which calls on the 1359 Attachment Daemon (2.1) to support TLS encryption of the 1360 communication. If this command is accepted, the Management Daemon 1361 (2.5) must also encrypt. 1363 At present the command "STARTTLS" is too frequently refused, and 1364 traffic proceeds unencrypted, with for example plain text 1365 transmission of passwords. 1367 7.3. Current security practice 1369 Experience over the last 20 years shows that new UPS management 1370 software releases are not frequent, and when installed, stay 1371 unmodified for some years. This is probably because UPS management 1372 is a mature hardware dependent activity. A limited number of system 1373 administrators have access to the UPS hardware and software and tend 1374 to assume a certain "security by obscurity" since many installations 1375 have a configuration as shown in figure 5 which uses port nut/3493 1376 between the two daemons running in the same system. The traffic is 1377 often not encrypted, and when encrypted uses deprecated early 1378 versions of SSL/TLS. 1380 ,-----, ,--------------------,---------------------, 1381 | UPS |---| Attachment <-Commands Management | 1382 | |===| Daemon Responses-> Daemon | 1383 /-----\ '--------------------'---------------------' 1384 Listens on 1385 port nut/3493 1386 for localhost 1388 Figure 5: Common single-system configuration 1390 This situation is now changing as low cost processors become 1391 available, costing significantly less than a UPS unit. This 1392 evolution makes it interesting to shift to a configuration as shown 1393 in figure 6, but it also exacerbates the security weakness of figure 1394 5 since the traffic between the daemons is now over an exposed 1395 network. 1397 ,-----,------------, ,--------------, 1398 | UPS - Attachment | <-Commands | Management | 1399 | | Daemon | Responses-> | Daemon | 1400 /-----'------------\ '--------------' 1401 Listens on 1402 port nut/3493 1404 Figure 6: Integration of UPS and Attachment Daemon 1406 7.4. Security needs 1408 UPS management needs to move to a more secure practice in which all 1409 traffic is encrypted, but this cannot be imposed by a wave of the 1410 hand. The ideal would be an easy-to-follow migration plan which 1411 provides the required encryption but tolerates the slow moving 1412 updates of the UPS software. A possible technique introduces shims 1413 between the Attachment Daemon (2.1) and the network, and between the 1414 network and the Management Daemon (2.5) as shown in figure 7. These 1415 shims provide TLS support, allowing the Attachment Daemon (2.1) and 1416 Management Daemon (2.5) to continue temporarily without native TLS. 1417 The technique has been successfully tested, but the principal 1418 difficulty is that the shims make use of a second port which is not 1419 currently available. 1421 TLS shim listens TLS shim listens 1422 on port ?? on port 3493 1423 ,-----,------------,----, ,----,--------------, 1424 | UPS - Attachment |TLS | <-STARTTLS | TLS| Management | 1425 | | Daemon |shim| OK--> |shim| Daemon | 1426 /-----'------------'----\ '----'--------------' 1427 Listens on 1428 port nut/3493 1430 Figure 7: Shims provide TLS support during migration 1432 7.4.1. Attachment Daemon shim 1434 The shim in front of the Attachment Daemon (2.1) listens to incoming 1435 traffic on a port to be specified. When it receives the command 1436 "STARTTLS" it 1438 1. Returns "OK" to the client and sets up TLS encapsulation. 1439 2. Does not send "STARTTLS" to the Attachment Daemon (2.1) port 1440 nut/3493. 1442 All other commands and responses are passed through. 1444 7.4.2. Management Daemon shim 1446 The shim in front of the Management Daemon (2.5) listens for incoming 1447 traffic on port nut/3493. When it receives the command "STARTTLS" it 1449 1. Returns "FEATURE-NOT-CONFIGURED" to the client. 1450 2. Sends "STARTTLS" to the Attachment Daemon (2.1) on a port to be 1451 specified. 1453 All other commands and responses are passed through. 1455 8. Acknowledgments 1457 This text is based on the NUT Project (2.6) documentation 1458 [developerguide]. The editor acknowledges the work of Charles 1459 Lepple, Arjen de Korte, Arnaud Quette, Jim Klimov, Russell Kroll, and 1460 many others who contribute to the nut-upsuser mailing list 1461 [mailinglist]. 1463 The source for the text is marked up using an SGML DTD [SGML] and an 1464 XML meta-DTD as defined by HyTime Annex A [HyTimeA]. The "sgmlnorm" 1465 [sgmlnorm] program generates XML which program "xml2rfc" [RFC7991] 1466 uses to prepare the text. The editor acknowledges the help received 1467 from Carsten Bormann and Julian Reschke in the xml2rfc mailing list. 1469 9. Normative References 1471 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1472 Requirement Levels", BCP 14, RFC 2119, 1473 DOI 10.17487/RFC2119, March 1997, 1474 . 1476 10. Informative References 1478 [Bennett] "Charles Bennett Obituary", Publisher: Jagers and Sons 1479 Funeral Home, 24 Morris Ave., Athens OH, 1480 . 1483 [developerguide] 1484 "Network UPS Tools (NUT) Project Developer Guide", 1485 . 1488 [HyTimeA] "International Standard ISO/IEC 10744 -- Hypermedia/Time- 1489 based Structuring Language, Annex A, SGML Extended 1490 Facilities", ISO/IEC JTC 1/SC 34 Document description and 1491 processing languages, 1997. 1493 [mailinglist] 1494 "Network UPS Tools (NUT) Project Mailing List", 1495 . 1498 [NUT] "Network UPS Tools (NUT) Project", 1499 . 1501 [Registry] "Service Name and Transport Protocol Port Number 1502 Registry", Publisher: IANA, 1503 . 1506 [RFC1628] Case, J., Ed., "UPS Management Information Base", 1507 RFC 1628, DOI 10.17487/RFC1628, May 1994, 1508 . 1510 [RFC6335] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S. 1511 Cheshire, "Internet Assigned Numbers Authority (IANA) 1512 Procedures for the Management of the Service Name and 1513 Transport Protocol Port Number Registry", BCP 165, 1514 RFC 6335, DOI 10.17487/RFC6335, August 2011, 1515 . 1517 [RFC7991] Hoffman, P., "The "xml2rfc" Version 3 Vocabulary", 1518 RFC 7991, December 2016, 1519 . 1521 [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for 1522 Writing an IANA Considerations Section in RFCs", BCP 26, 1523 RFC 8126, DOI 10.17487/RFC8126, June 2017, 1524 . 1526 [SGML] Goldfarb, Charles F., "The SGML Handbook", 1527 ISBN 0-19-853737-9, 1990. 1529 [sgmlnorm] Clark, James., "SGMLNORM An SGML System Conforming to 1530 International Standard ISO 8879 -- Standard Generalized 1531 Markup Language", . 1533 Appendix A. Variables and Instant Commands 1535 A.1. UPS variables 1537 The UPS variables represent the abstracted state of the UPS unit. 1538 The number of variables depends on the sophistication of the product. 1539 Those shown here are a typical example. An implementation of a 1540 Management Daemon (2.5) acting as a utility program may provide a 1541 listing of the variables available, as well as acting on them. 1542 // Ed: NUT: upsc 1543 +===============================+============+====================+ 1544 | Variable | Typical | Default | 1545 | | value | description | 1546 +===============================+============+====================+ 1547 | battery.charge | 100 | "Battery charge | 1548 | | | (percent of full)" | 1549 +-------------------------------+------------+--------------------+ 1550 | battery.charge.low | 20 | "Remaining battery | 1551 | | | level when UPS | 1552 | | | switches to LB | 1553 | | | (percent)" | 1554 +-------------------------------+------------+--------------------+ 1555 | battery.runtime | 1481 | "Battery runtime | 1556 | | | (seconds)" | 1557 +-------------------------------+------------+--------------------+ 1558 | battery.type | PbAc | "Battery | 1559 | | | chemistry" | 1560 +-------------------------------+------------+--------------------+ 1561 | device.mfr | WhizBang | "" | 1562 +-------------------------------+------------+--------------------+ 1563 | device.model | Economy | "" | 1564 | | 1700 | | 1565 +-------------------------------+------------+--------------------+ 1566 | device.serial | 1234567890 | "" | 1567 +-------------------------------+------------+--------------------+ 1568 | device.type | ups | "" | 1569 +-------------------------------+------------+--------------------+ 1570 | driver.name | usbhid-ups | "Driver name" | 1571 +-------------------------------+------------+--------------------+ 1572 | driver.parameter.lowbatt | 37 | "Driver parameter: | 1573 | | | " | 1574 +-------------------------------+------------+--------------------+ 1575 | driver.parameter.offdelay | 30 | "Driver parameter: | 1576 | | | " | 1577 +-------------------------------+------------+--------------------+ 1578 | driver.parameter.ondelay | 40 | "Driver parameter: | 1579 | | | " | 1580 +-------------------------------+------------+--------------------+ 1581 | driver.parameter.pollfreq | 30 | "Driver parameter: | 1582 | | | " | 1583 +-------------------------------+------------+--------------------+ 1584 | driver.parameter.pollinterval | 2 | "Driver parameter: | 1585 | | | " | 1586 +-------------------------------+------------+--------------------+ 1587 | driver.parameter.port | auto | "Driver parameter: | 1588 | | | " | 1589 +-------------------------------+------------+--------------------+ 1590 | driver.parameter.synchronous | no | "Driver parameter: | 1591 | | | " | 1592 +-------------------------------+------------+--------------------+ 1593 | driver.parameter.vendorid | 0999 | "Driver parameter: | 1594 | | | " | 1595 +-------------------------------+------------+--------------------+ 1596 | driver.version | 2.7.4 | "Driver version - | 1597 | | | NUT release" | 1598 +-------------------------------+------------+--------------------+ 1599 | driver.version.data | HID 1.39 | "" | 1600 +-------------------------------+------------+--------------------+ 1601 | driver.version.internal | 0.41 | "Internal driver | 1602 | | | version" | 1603 +-------------------------------+------------+--------------------+ 1604 | input.transfer.high | 264 | "High voltage | 1605 | | | transfer point | 1606 | | | (V)" | 1607 +-------------------------------+------------+--------------------+ 1608 | input.transfer.low | 184 | "Low voltage | 1609 | | | transfer point | 1610 | | | (V)" | 1611 +-------------------------------+------------+--------------------+ 1612 | outlet.1.desc | PowerShare | "Outlet | 1613 | | Outlet 1 | description" | 1614 +-------------------------------+------------+--------------------+ 1615 | outlet.1.id | 2 | "Outlet system | 1616 | | | identifier" | 1617 +-------------------------------+------------+--------------------+ 1618 | outlet.1.status | on | "Outlet switch | 1619 | | | status" | 1620 +-------------------------------+------------+--------------------+ 1621 | outlet.1.switchable | no | "Outlet switch | 1622 | | | ability" | 1623 +-------------------------------+------------+--------------------+ 1624 | outlet.2.desc | PowerShare | "Outlet | 1625 | | Outlet 2 | description" | 1626 +-------------------------------+------------+--------------------+ 1627 | outlet.2.id | 3 | "Outlet system | 1628 | | | identifier" | 1629 +-------------------------------+------------+--------------------+ 1630 | outlet.2.status | on | "Outlet switch | 1631 | | | status" | 1632 +-------------------------------+------------+--------------------+ 1633 | outlet.2.switchable | no | "Outlet switch | 1634 | | | ability" | 1635 +-------------------------------+------------+--------------------+ 1636 | outlet.desc | Main | "Outlet | 1637 | | Outlet | description" | 1638 +-------------------------------+------------+--------------------+ 1639 | outlet.id | 1 | "Outlet system | 1640 | | | identifier" | 1641 +-------------------------------+------------+--------------------+ 1642 | outlet.power | 25 | "" | 1643 +-------------------------------+------------+--------------------+ 1644 | outlet.switchable | no | "Outlet switch | 1645 | | | ability" | 1646 +-------------------------------+------------+--------------------+ 1647 | output.frequency.nominal | 50 | "Nominal output | 1648 | | | frequency (Hz)" | 1649 +-------------------------------+------------+--------------------+ 1650 | output.voltage | 230.0 | "Output voltage | 1651 | | | (V)" | 1652 +-------------------------------+------------+--------------------+ 1653 | output.voltage.nominal | 230 | "Nominal output | 1654 | | | voltage (V)" | 1655 +-------------------------------+------------+--------------------+ 1656 | ups.beeper.status | enabled | "UPS beeper | 1657 | | | status" | 1658 +-------------------------------+------------+--------------------+ 1659 | ups.delay.shutdown | 20 | "Interval to wait | 1660 | | | after shutdown | 1661 | | | with delay command | 1662 | | | (seconds)" | 1663 +-------------------------------+------------+--------------------+ 1664 | ups.delay.start | 30 | "Interval to wait | 1665 | | | before | 1666 | | | (re)starting the | 1667 | | | load (seconds)" | 1668 +-------------------------------+------------+--------------------+ 1669 | ups.firmware | 02 | "UPS firmware" | 1670 +-------------------------------+------------+--------------------+ 1671 | ups.load | 20 | "Load on UPS | 1672 | | | (percent of full)" | 1673 +-------------------------------+------------+--------------------+ 1674 | ups.mfr | WhizBang | "UPS manufacturer" | 1675 +-------------------------------+------------+--------------------+ 1676 | ups.model | Economy | "UPS model" | 1677 | | 1700 | | 1678 +-------------------------------+------------+--------------------+ 1679 | ups.power.nominal | 1700 | "UPS power rating | 1680 | | | (VA)" | 1681 +-------------------------------+------------+--------------------+ 1682 | ups.productid | ffff | "Product ID for | 1683 | | | USB devices" | 1684 +-------------------------------+------------+--------------------+ 1685 | ups.serial | 000000000 | "UPS serial | 1686 | | | number" | 1687 +-------------------------------+------------+--------------------+ 1688 | ups.status | OL | "UPS status" | 1689 +-------------------------------+------------+--------------------+ 1690 | ups.timer.shutdown | 0 | "Time before the | 1691 | | | load will be | 1692 | | | shutdown | 1693 | | | (seconds)" | 1694 +-------------------------------+------------+--------------------+ 1695 | ups.timer.start | 0 | "Time before the | 1696 | | | load will be | 1697 | | | started (seconds)" | 1698 +-------------------------------+------------+--------------------+ 1699 | ups.vendorid | 0999 | "Vendor ID for USB | 1700 | | | devices" | 1701 +-------------------------------+------------+--------------------+ 1703 Table 5: Typical UPS Variables 1705 A.2. UPS readable and writable variables 1707 Some of the features of a UPS are represented by variables which may 1708 be tuned by the user. The following variables are typical of such 1709 tunable features. The precise list depends on the model of UPS. An 1710 implementation of a Management Daemon (2.5) acting as a utility 1711 program may provide a listing of the variables available, as well as 1712 acting on them. 1713 // Ed: NUT: upsrw 1714 +========================+============+=========================+ 1715 | Variable | Typical | Default description | 1716 | | value | provided as response to | 1717 | | | the command "GET DESC" | 1718 +========================+============+=========================+ 1719 | battery.charge.low | 20 | "Remaining battery | 1720 | | | level when UPS switches | 1721 | | | to LB (percent)" | 1722 +------------------------+------------+-------------------------+ 1723 | input.transfer.high | 264 | "High voltage transfer | 1724 | | | point (V)" | 1725 +------------------------+------------+-------------------------+ 1726 | input.transfer.low | 184 | "Low voltage transfer | 1727 | | | point (V)" | 1728 +------------------------+------------+-------------------------+ 1729 | outlet.1.desc | PowerShare | "Outlet description" | 1730 | | Outlet 1 | | 1731 +------------------------+------------+-------------------------+ 1732 | outlet.2.desc | PowerShare | "Outlet description" | 1733 | | Outlet 2 | | 1734 +------------------------+------------+-------------------------+ 1735 | outlet.2.switchable | no | "Outlet switch ability" | 1736 +------------------------+------------+-------------------------+ 1737 | outlet.desc | Main | "Outlet description" | 1738 | | Outlet | | 1739 +------------------------+------------+-------------------------+ 1740 | outlet.power | 25 | "Description | 1741 | | | unavailable" | 1742 +------------------------+------------+-------------------------+ 1743 | output.voltage.nominal | 230 | "Nominal output voltage | 1744 | | | (V)" | 1745 +------------------------+------------+-------------------------+ 1746 | ups.delay.shutdown | 20 | "Interval to wait after | 1747 | | | shutdown with delay | 1748 | | | command (seconds)" | 1749 +------------------------+------------+-------------------------+ 1750 | ups.delay.start | 30 | "Interval to wait | 1751 | | | before (re)starting the | 1752 | | | load (seconds)" | 1753 +------------------------+------------+-------------------------+ 1755 Table 6: Typical readable and writable UPS Variables 1757 A.3. UPS Instant Commands 1759 Some of the features of a UPS are actions which may be ordered by the 1760 user. The following variables represent such actions. The precise 1761 list depends on the model of UPS. An implementation of a Management 1762 Daemon (2.5) acting as a utility program may provide a listing of the 1763 variables available, as well as acting on them. 1764 // Ed: NUT: upscmd 1766 +==================+==========================================+ 1767 | Command | Meaning | 1768 +==================+==========================================+ 1769 | beeper.disable | Disable the UPS beeper | 1770 +------------------+------------------------------------------+ 1771 | beeper.enable | Enable the UPS beeper | 1772 +------------------+------------------------------------------+ 1773 | beeper.mute | Temporarily mute the UPS beeper | 1774 +------------------+------------------------------------------+ 1775 | load.off | Turn off the load immediately | 1776 +------------------+------------------------------------------+ 1777 | load.off.delay | Turn off the load with a delay (seconds) | 1778 +------------------+------------------------------------------+ 1779 | load.on | Turn on the load immediately | 1780 +------------------+------------------------------------------+ 1781 | load.on.delay | Turn on the load with a delay (seconds) | 1782 +------------------+------------------------------------------+ 1783 | shutdown.return | Turn off the load and return when power | 1784 | | is back | 1785 +------------------+------------------------------------------+ 1786 | shutdown.stayoff | Turn off the load and remain off | 1787 +------------------+------------------------------------------+ 1788 | shutdown.stop | Stop a shutdown in progress | 1789 +------------------+------------------------------------------+ 1791 Table 7: Typical Instant Commands 1793 Appendix B. Change Log 1795 This section is to be removed before publishing as an RFC. 1797 // Ed: To be removed on publication. 1799 B.1. Changes in version 01 1801 1. There is exactly one newline (4.1) at the end of commands and 1802 responses. 1803 2. Added descriptions to variables in Annex (A). 1805 3. Added clause Event (5.2). 1807 B.2. Changes in version 02 1809 1. Extended acknowledgments. 1810 2. Added reference to possible use of RFC1628 between driver and 1811 Attachment Daemon (2.1). 1812 3. Clarified response to command "LIST CLIENT". 1814 Author's Address 1816 Roger Price (editor) 1817 Network UPS Tools Project 1818 La Gaude 1819 France 1821 Phone: +33 493 24 43 57 1822 Email: ietf@rogerprice.org