| rfc9271.original | rfc9271.txt | |||
|---|---|---|---|---|
| IETF R. Price, Ed. | Independent Submission R. Price, Ed. | |||
| Internet-Draft Network UPS Tools Project | Request for Comments: 9271 Network UPS Tools Project | |||
| Intended status: Informational 18 May 2022 | Category: Informational July 2022 | |||
| Expires: 19 November 2022 | ISSN: 2070-1721 | |||
| Uninterruptible Power Supply (UPS) Management Protocol -- Commands and | Uninterruptible Power Supply (UPS) Management Protocol -- Commands and | |||
| Responses | Responses | |||
| draft-rprice-ups-management-protocol-15 | ||||
| Abstract | Abstract | |||
| This document describes the command/response protocol currently used | This document describes the command/response protocol currently used | |||
| in the management of Uninterruptible Power Supply (UPS) units and | in the management of Uninterruptible Power Supply (UPS) units and | |||
| other power devices often deployed in small offices, and in IT | other power devices often deployed in small offices and in IT | |||
| installations subject to an erratic public power supply. The UPS | installations subject to an erratic public power supply. The UPS | |||
| units typically interface to an Attachment Daemon in the system they | units typically interface to an Attachment Daemon in the system they | |||
| protect. This daemon is in turn polled by a Management Daemon which | protect. This daemon is in turn polled by a Management Daemon that | |||
| notifies users and system administrators of power supply incidents, | notifies users and system administrators of power supply incidents | |||
| and automates system shutdown decisions. The commands and responses | and automates system shutdown decisions. The commands and responses | |||
| described by this document are exchanged between the UPS Attachment | described by this document are exchanged between the UPS Attachment | |||
| Daemon and the Management Daemon. The practice current when this | Daemon and the Management Daemon. The practice current when this | |||
| protocol was first developed risks weak security and this is | protocol was first developed risks weak security, and this is | |||
| addressed in the Security Considerations sections of this document. | addressed in the Security Considerations sections of this document. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
| provisions of BCP 78 and BCP 79. | published for informational purposes. | |||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This is a contribution to the RFC Series, independently of any other | |||
| and may be updated, replaced, or obsoleted by other documents at any | RFC stream. The RFC Editor has chosen to publish this document at | |||
| time. It is inappropriate to use Internet-Drafts as reference | its discretion and makes no statement about its value for | |||
| material or to cite them other than as "work in progress." | implementation or deployment. Documents approved for publication by | |||
| the RFC Editor are not candidates for any level of Internet Standard; | ||||
| see Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 19 November 2022. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9271. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. | |||
| described in Section 4.e of the Trust Legal Provisions and are | ||||
| provided without warranty as described in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction | |||
| 1.1. Current Practice . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Current Practice | |||
| 1.1.1. NUT Software Project . . . . . . . . . . . . . . . . 4 | 1.1.1. NUT Project | |||
| 1.1.2. The "Shutdown Story" . . . . . . . . . . . . . . . . 4 | 1.1.2. The Shutdown Story | |||
| 1.1.3. How to Read this Document . . . . . . . . . . . . . . 5 | 1.1.3. How to Read this Document | |||
| 1.2. Additional Information . . . . . . . . . . . . . . . . . 5 | 1.2. Additional Information | |||
| 1.3. Requirements Language . . . . . . . . . . . . . . . . . . 5 | 1.3. Requirements Language | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology | |||
| 2.1. Administrative User . . . . . . . . . . . . . . . . . . . 5 | 2.1. Administrative User | |||
| 2.2. Attachment Daemon . . . . . . . . . . . . . . . . . . . . 6 | 2.2. Attachment Daemon | |||
| 2.3. Driver . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.3. Driver | |||
| 2.4. Event . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.4. Event | |||
| 2.5. Instant Command . . . . . . . . . . . . . . . . . . . . . 6 | 2.5. Instant Command | |||
| 2.6. Management Daemon . . . . . . . . . . . . . . . . . . . . 7 | 2.6. Management Daemon | |||
| 2.7. Primary . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2.7. Primary | |||
| 2.8. Secondary . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.8. Secondary | |||
| 2.9. Session . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.9. Session | |||
| 2.10. UPS Status . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.10. UPS Status | |||
| 2.11. UPS Variable . . . . . . . . . . . . . . . . . . . . . . 8 | 2.11. UPS Variable | |||
| 3. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 9 | 3. Protocol Overview | |||
| 4. Protocol Specification . . . . . . . . . . . . . . . . . . . 11 | 4. Protocol Specification | |||
| 4.1. Notation Used in this Specification . . . . . . . . . . . 11 | 4.1. Notation Used in this Specification | |||
| 4.2. Commands . . . . . . . . . . . . . . . . . . . . . . . . 12 | 4.2. Commands | |||
| 4.2.1. ATTACH . . . . . . . . . . . . . . . . . . . . . . . 12 | 4.2.1. ATTACH | |||
| 4.2.2. DETACH . . . . . . . . . . . . . . . . . . . . . . . 13 | 4.2.2. DETACH | |||
| 4.2.3. FSD . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 4.2.3. FSD | |||
| 4.2.4. GET . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 4.2.4. GET | |||
| 4.2.4.1. GET CMDDESC . . . . . . . . . . . . . . . . . . . 14 | 4.2.4.1. GET CMDDESC | |||
| 4.2.4.2. GET DESC . . . . . . . . . . . . . . . . . . . . 14 | 4.2.4.2. GET DESC | |||
| 4.2.4.3. GET NUMATTACH . . . . . . . . . . . . . . . . . . 15 | 4.2.4.3. GET NUMATTACH | |||
| 4.2.4.4. GET TYPE . . . . . . . . . . . . . . . . . . . . 15 | 4.2.4.4. GET TYPE | |||
| 4.2.4.5. GET UPSDESC . . . . . . . . . . . . . . . . . . . 16 | 4.2.4.5. GET UPSDESC | |||
| 4.2.4.6. GET VAR . . . . . . . . . . . . . . . . . . . . . 17 | 4.2.4.6. GET VAR | |||
| 4.2.5. HELP . . . . . . . . . . . . . . . . . . . . . . . . 17 | 4.2.5. HELP | |||
| 4.2.6. INSTCMD . . . . . . . . . . . . . . . . . . . . . . . 17 | 4.2.6. INSTCMD | |||
| 4.2.7. LIST . . . . . . . . . . . . . . . . . . . . . . . . 18 | 4.2.7. LIST | |||
| 4.2.7.1. LIST CLIENT . . . . . . . . . . . . . . . . . . . 18 | 4.2.7.1. LIST CLIENT | |||
| 4.2.7.2. LIST CMD . . . . . . . . . . . . . . . . . . . . 19 | 4.2.7.2. LIST CMD | |||
| 4.2.7.3. LIST ENUM . . . . . . . . . . . . . . . . . . . . 19 | 4.2.7.3. LIST ENUM | |||
| 4.2.7.4. LIST RANGE . . . . . . . . . . . . . . . . . . . 20 | 4.2.7.4. LIST RANGE | |||
| 4.2.7.5. LIST RW . . . . . . . . . . . . . . . . . . . . . 20 | 4.2.7.5. LIST RW | |||
| 4.2.7.6. LIST UPS . . . . . . . . . . . . . . . . . . . . 21 | 4.2.7.6. LIST UPS | |||
| 4.2.7.7. LIST VAR . . . . . . . . . . . . . . . . . . . . 22 | 4.2.7.7. LIST VAR | |||
| 4.2.8. PASSWORD . . . . . . . . . . . . . . . . . . . . . . 23 | 4.2.8. PASSWORD | |||
| 4.2.9. PRIMARY . . . . . . . . . . . . . . . . . . . . . . . 23 | 4.2.9. PRIMARY | |||
| 4.2.10. PROTVER . . . . . . . . . . . . . . . . . . . . . . . 23 | 4.2.10. PROTVER | |||
| 4.2.11. SET . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 4.2.11. SET | |||
| 4.2.12. STARTTLS . . . . . . . . . . . . . . . . . . . . . . 24 | 4.2.12. STARTTLS | |||
| 4.2.12.1. Key Infrastructure and Self-signed | 4.2.12.1. Key Infrastructure and Self-Signed Certificates | |||
| Certificates . . . . . . . . . . . . . . . . . . . 25 | 4.2.13. USERNAME | |||
| 4.2.13. USERNAME . . . . . . . . . . . . . . . . . . . . . . 26 | 4.2.14. VER | |||
| 4.2.14. VER . . . . . . . . . . . . . . . . . . . . . . . . . 26 | 4.3. Summary of Responses | |||
| 4.3. Summary of Responses . . . . . . . . . . . . . . . . . . 26 | 4.3.1. Response When Command Succeeds | |||
| 4.3.1. Response when Command Succeeds . . . . . . . . . . . 26 | 4.3.2. Error Responses | |||
| 4.3.2. Error Responses . . . . . . . . . . . . . . . . . . . 27 | 4.4. An ABNF of the Commands | |||
| 4.4. An ABNF of the Commands . . . . . . . . . . . . . . . . . 31 | 4.4.1. Responses to Commands | |||
| 4.4.1. Responses to Commands . . . . . . . . . . . . . . . . 33 | 5. Statuses and Events | |||
| 5. Statuses and Events . . . . . . . . . . . . . . . . . . . . . 34 | 5.1. Status Symbols | |||
| 5.1. Status Symbols . . . . . . . . . . . . . . . . . . . . . 34 | 5.2. Events | |||
| 5.2. Events . . . . . . . . . . . . . . . . . . . . . . . . . 36 | 6. Security Considerations | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 38 | 6.1. Current General Security Practice | |||
| 6.1. Current General Security Practice . . . . . . . . . . . . 38 | 6.2. Communication Security Requirements | |||
| 6.2. Communication Security Requirements . . . . . . . . . . . 39 | 6.2.1. Certificate Security | |||
| 6.2.1. Certificate security . . . . . . . . . . . . . . . . 40 | 6.3. Attacks and Defenses | |||
| 6.3. Attacks and Defences . . . . . . . . . . . . . . . . . . 40 | 6.3.1. Eavesdropping | |||
| 6.3.1. Eavesdropping . . . . . . . . . . . . . . . . . . . . 40 | 6.3.1.1. Misplaced Declarations Requiring TLS | |||
| 6.3.1.1. Misplaced declarations requiring TLS . . . . . . 41 | 6.3.1.2. Weak Protection in Previous Version 2.7.4 | |||
| 6.3.1.2. Weak protection in previous version 2.7.4 . . . . 41 | 6.3.2. Man-in-the-Middle | |||
| 6.3.2. Man in the Middle . . . . . . . . . . . . . . . . . . 41 | 6.3.3. Masquerade Attack: Agent Verification | |||
| 6.3.3. Masquerade Attack: Agent Verification . . . . . . . . 41 | 6.3.4. Message Insertion, Deletion, and Modification | |||
| 6.3.4. Message insertion, deletion, modification . . . . . . 42 | 6.3.5. Replay | |||
| 6.3.5. Replay . . . . . . . . . . . . . . . . . . . . . . . 42 | 6.3.6. Denial of Service | |||
| 6.3.6. Denial of Service . . . . . . . . . . . . . . . . . . 42 | 7. IANA Considerations | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 42 | 8. Implementation Status | |||
| 8. Implementation Status . . . . . . . . . . . . . . . . . . . . 42 | 8.1. Inclusion in Software Distributions | |||
| 8.1. Inclusion in Software Distributions . . . . . . . . . . . 43 | 8.2. Recommended Minimum Support | |||
| 8.2. Recommended Minimum Support . . . . . . . . . . . . . . . 43 | 8.2.1. Desktop PC Variables | |||
| 8.2.1. Desktop PC Variables . . . . . . . . . . . . . . . . 43 | 8.2.2. Unattended Servers and Additional Variables | |||
| 8.2.2. Unattended Servers, Additional Variables . . . . . . 44 | 8.2.3. Commands and Other Technical Terms | |||
| 8.2.3. Commands and other Technical Terms . . . . . . . . . 44 | 8.2.4. Support for Earlier Versions | |||
| 8.2.4. Support for Earlier Versions . . . . . . . . . . . . 44 | 9. References | |||
| 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 44 | 9.1. Normative References | |||
| 10. Normative References . . . . . . . . . . . . . . . . . . . . 44 | 9.2. Informative References | |||
| 11. Informative References . . . . . . . . . . . . . . . . . . . 45 | Appendix A. Variables | |||
| Appendix A. Variables . . . . . . . . . . . . . . . . . . . . . 47 | A.1. Typical UPS Variables | |||
| A.1. Typical UPS Variables . . . . . . . . . . . . . . . . . . 48 | A.2. Typical UPS Readable and Writable Variables | |||
| A.2. Typical UPS Readable and Writable Variables . . . . . . . 52 | A.3. Typical UPS Instant Commands | |||
| A.3. Typical UPS Instant Commands . . . . . . . . . . . . . . 54 | Appendix B. The Shutdown Story for System and UPS | |||
| Appendix B. The Shutdown Story for System and UPS . . . . . . . 54 | Appendix C. Technical Terms: Historical Differences | |||
| Appendix C. Technical Terms: Historical Differences . . . . . . 56 | Appendix D. Security Defenses in Release 2.7.4 | |||
| Appendix D. Security Defences in Release 2.7.4 . . . . . . . . . 57 | D.1. Shims | |||
| D.1. Shims . . . . . . . . . . . . . . . . . . . . . . . . . . 57 | D.1.1. Attachment Daemon Shim | |||
| D.1.1. Attachment Daemon Shim . . . . . . . . . . . . . . . 58 | D.1.2. Management Daemon Shim | |||
| D.1.2. Management Daemon Shim . . . . . . . . . . . . . . . 58 | D.2. TLS Tunnels | |||
| D.2. TLS Tunnels . . . . . . . . . . . . . . . . . . . . . . . 58 | D.3. VPN | |||
| D.3. VPN . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 | D.4. VLAN | |||
| D.4. VLAN . . . . . . . . . . . . . . . . . . . . . . . . . . 59 | Appendix E. Administrative Security | |||
| Appendix E. Administrative Security . . . . . . . . . . . . . . 59 | E.1. Management of Administrative Users | |||
| E.1. Management of Administrative Users . . . . . . . . . . . 59 | E.2. An Administrative User of a Client Management Daemon | |||
| E.2. An Administrative User of a Client Management Daemon . . 61 | E.2.1. An Administrative User Logs into a Short Session | |||
| E.2.1. An Administrative User Logs into a Short Session . . 62 | E.2.2. An Administrative User Logs into a Long Session | |||
| E.2.2. An Administrative User Logs into a Long Session . . . 62 | Acknowledgments | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 62 | Author's Address | |||
| 1. Introduction | 1. Introduction | |||
| 1.1. Current Practice | 1.1. Current Practice | |||
| This document describes UPS management techniques and current UPS | This document describes UPS management techniques and current UPS | |||
| management practice published by the NUT (Network UPS Tools) Project. | management practice published by the Network UPS Tools (NUT) Project. | |||
| The document is based on version 2.8.0 of the NUT Project software | The document is based on version 2.8.0 of the NUT Project software, | |||
| which supports version 1.3 of the NUT protocol. | which supports version 1.3 of the NUT protocol. | |||
| Since May 2002, the protocol described by this document has been | Since May 2002, the protocol described by this document has been | |||
| operating on IANA port 3493/TCP (nut). | operating on IANA port 3493/TCP (nut). | |||
| 1.1.1. NUT Software Project | 1.1.1. NUT Project | |||
| The primary goal of the NUT (Network UPS Tools) Software Project | The primary goal of the Network UPS Tools (NUT) Project software | |||
| [NUT] is to provide support for Power Devices, such as | [NUT] is to provide support for power devices, such as UPSs. The | |||
| Uninterruptible Power Supplies. The Project has been in operation | project has been in operation since 1998, with a major rework in | |||
| since 1998 with a major rework in 2003. It operates through a user | 2003. It operates through a user mailing list [nut-upsuser], a | |||
| mailing list [nut-upsuser], a developer mailing list [nut-upsdev], a | developer mailing list [nut-upsdev], a website [NUT], and a GitHub | |||
| web site [NUT] and a GitHub repository [nut-repository]. See | repository [nut-repository]. See [githist] and Appendix J of | |||
| [githist] and [History] for a history of the project. | [History] for a history of the project. | |||
| 1.1.2. The "Shutdown Story" | 1.1.2. The Shutdown Story | |||
| "The Shutdown Story", see Appendix B, describes the current UPS | The Shutdown Story section (see Appendix B) describes the current UPS | |||
| management practice for performing a managed shutdown of unattended | management practice for performing a managed shutdown of unattended | |||
| infrastructure after an unscheduled failure of the public power | infrastructure after an unscheduled failure of the public power | |||
| supply in order to minimise the risk of corruption to data processed | supply in order to minimize the risk of corruption to data processed | |||
| by this infrastructure. | by this infrastructure. | |||
| 1.1.3. How to Read this Document | 1.1.3. How to Read this Document | |||
| As a simplification to ease reading, the term "UPS" is used when | As a simplification to ease reading, the term "UPS" is used when | |||
| "Managed Power Device" would be more complete. The reader should | "Managed Power Device" would be more complete. The reader should | |||
| understand the simple "UPS" to include other managed power devices. | understand the simple "UPS" to include other managed power devices. | |||
| The statuses and events appearing in this document are named with | The statuses and events appearing in this document are named with | |||
| short text-form names, some of which are abbreviations. A full list | short text-form names, some of which are abbreviations. A full list | |||
| of the statuses can be found in Section 5.1 while the events are | of the statuses can be found in Section 5.1, while the events are | |||
| listed in Section 5.2. | listed in Section 5.2. | |||
| This document refers to the "public power supply". Other texts | This document refers to the "public power supply". Other texts | |||
| frequently refer to "utility power", "input source power" or even | frequently refer to "utility power", "input source power", or even | |||
| "wall power". | "wall power". | |||
| 1.2. Additional Information | 1.2. Additional Information | |||
| Additional information about the NUT Project is available in the | Additional information about the NUT Project is available in the | |||
| project documentation [Documentation]. Requests for further | project documentation [Documentation]. Requests for further | |||
| information about this protocol and related technical matters may be | information about this protocol and related technical matters may be | |||
| addressed to the mailing list [nut-upsuser] of the NUT Project. | addressed to the mailing list [nut-upsuser] of the NUT Project. | |||
| 1.3. Requirements Language | 1.3. Requirements Language | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 2. Terminology | 2. Terminology | |||
| The following technical terms appear in this document. They are | The following technical terms appear in this document. They are | |||
| listed in alphabetical order. | listed in alphabetical order. | |||
| 2.1. Administrative User | 2.1. Administrative User | |||
| In current practice, the commands and other functions offered by the | In current practice, the commands and other functions offered by the | |||
| Attachment Daemon are made available to a set of users known as | Attachment Daemon are made available to a set of users known as | |||
| Management Daemons. These Management Daemons authenticate to the | Management Daemons. These Management Daemons authenticate to the | |||
| Attachment Daemon with basic credentials (username and password). | Attachment Daemon with basic credentials (username and password). | |||
| Although called "users", the administrative users are not system | Although called "users", the administrative users are not system | |||
| users, they are specific to an Attachment Daemon and are listed in a | users; they are specific to an Attachment Daemon and are listed in a | |||
| text file (currently upsd.users) which is read by the Attachment | text file (currently upsd.users) that is read by the Attachment | |||
| Daemon and which assigns to each of them the password, Instant | Daemon and that assigns to each of them the password, Instant | |||
| Commands and actions which are allowed, together with the Primary or | Commands, and actions that are allowed, together with the Primary or | |||
| Secondary status of the Management Daemon. For details, see | Secondary status of the Management Daemon. For details, see | |||
| Appendix E.1. For details of Primary see Section 2.7, and for | Appendix E.1. For details of the Primary, see Section 2.7; for | |||
| details of Secondary see Section 2.8. Typically a high-level user | details of the Secondary, see Section 2.8. Typically, a high-level | |||
| will be able to send command FSD but a low-level user might only be | user will be able to send command FSD, but a low-level user might | |||
| allowed to access the test panel. The security provisions for | only be allowed to access the test panel. The security provisions | |||
| administrative users are discussed in Appendix E. | for administrative users are discussed in Appendix E. | |||
| 2.2. Attachment Daemon | 2.2. Attachment Daemon | |||
| The Attachment Daemon retrieves status from the UPS and sends | The Attachment Daemon retrieves the status from the UPS and sends | |||
| commands to it often through a Driver specific to the hardware model | commands to it often through a Driver specific to the hardware model | |||
| and the connection medium, e.g., USB, serial. See Section 2.3. It | and the connection medium, e.g., USB, serial. See Section 2.3. It | |||
| maintains an abstracted view of the hardware through the use of | maintains an abstracted view of the hardware through the use of | |||
| hardware statuses. See Section 2.10. A Management Daemon may | hardware statuses. See Section 2.10. A Management Daemon may | |||
| consult the abstracted view using the commands described in this | consult the abstracted view using the commands described in this | |||
| document. | document. | |||
| See Section 8.2 for details of the recommended minimum support of | See Section 8.2 for details of the recommended minimum support of | |||
| variables which calls for Attachment Daemon support of statuses OB, | variables, which calls for Attachment Daemon support of statuses OB, | |||
| OL, LB and FSD. | OL, LB, and FSD. | |||
| The NUT Project has implemented an Attachment Daemon as program upsd | The NUT Project has implemented an Attachment Daemon as program upsd | |||
| and a set of hardware specific drivers, all written in K&R C. The | and a set of hardware-specific Drivers, all written in K&R C | |||
| Attachment Daemon is launched as system user "root", but for better | [C2ndEd]. The Attachment Daemon is launched as system user "root" | |||
| security, then drops privilege to run as a detached software service. | but for better security; then, it drops the privilege to run as a | |||
| detached software service. | ||||
| 2.3. Driver | 2.3. Driver | |||
| A Driver is that part of an Attachment Daemon which is specific to | A Driver is that part of an Attachment Daemon that is specific to the | |||
| the UPS hardware, the connection medium and the connection protocol, | UPS hardware, the connection medium, and the connection protocol, | |||
| e.g., USB, serial. In current practice the Attachment Daemon has a | e.g., USB, serial. In current practice, the Attachment Daemon has a | |||
| driver for each hardware interface type it supports. Although this | Driver for each hardware interface type it supports. Although this | |||
| document considers the driver to be part of the Attachment Daemon, | document considers the Driver to be part of the Attachment Daemon, | |||
| current practice is to see it as a separate software unit running as | current practice is to see it as a separate software unit running as | |||
| a daemon "in front of" the Attachment Daemon. The protocol for data | a daemon "in front of" the Attachment Daemon. The protocol for data | |||
| exchange between the Driver and the Attachment Daemon is outside the | exchange between the Driver and the Attachment Daemon is outside the | |||
| scope of this document. | scope of this document. | |||
| 2.4. Event | 2.4. Event | |||
| A UPS Event occurs in the Management Daemon when a change in UPS | A UPS event occurs in the Management Daemon when a change in the UPS | |||
| status is received from the Attachment Daemon. This event is | status is received from the Attachment Daemon. This event is | |||
| internal to the Management Daemon. See Section 5.2. | internal to the Management Daemon. See Section 5.2. | |||
| 2.5. Instant Command | 2.5. Instant Command | |||
| A command which when sent to the Attachment Daemon is passed to the | An Instant Command is a command that, when sent to the Attachment | |||
| driver and sent to the hardware without any configured delay to | Daemon, is passed to the Driver and sent to the hardware without any | |||
| perform a function. For example INSTCMD su700 test.panel.start . See | configured delay to perform a function. For example, INSTCMD su700 | |||
| Section 4.2.6. | test.panel.start. See Section 4.2.6. | |||
| 2.6. Management Daemon | 2.6. Management Daemon | |||
| The Management Daemon is primarily responsible for managing the | The Management Daemon is primarily responsible for managing the | |||
| hardware and orchestrating system-wide actions after a power event. | hardware and orchestrating system-wide actions after a power event. | |||
| Using commands sent to the Attachment Daemon it follows the status of | Using commands sent to the Attachment Daemon, it follows the status | |||
| the UPS and determines when UPS events occur. It takes decisions | of the UPS and determines when UPS events occur. It takes decisions | |||
| based on the events, such as calling for a system shutdown. See | based on the events, such as calling for a system shutdown. See | |||
| Appendix B. Although the term includes the word "Daemon" nothing | Appendix B. Although the term includes the word "Daemon", nothing | |||
| requires that it be implemented as a detached software service. The | requires that it be implemented as a detached software service. The | |||
| Management Daemon may also provide administrative functions such as a | Management Daemon may also provide administrative functions, such as | |||
| graphic interface to view the hardware activity. | a graphic interface to view the hardware activity. | |||
| There are several examples of a Management Daemon: the NUT Project | There are several examples of a Management Daemon: the NUT Project | |||
| provides upsmon which takes the system shutdown decision when the | provides upsmon, which takes the system shutdown decision when the | |||
| public power supply fails. Further configuration options such as | public power supply fails. Further configuration options, such as | |||
| timers are provided by helper program upssched. | timers, are provided by the helper program upssched. | |||
| Other programs represent the Management Daemon: | Other programs represent the Management Daemon: | |||
| * upsc reports the values of the variables defined for a given UPS, | * upsc reports the values of the variables defined for a given UPS; | |||
| see Table 6. | see Table 6. | |||
| * upsrw reports on and changes the values of the readable and | * upsrw reports on and changes the values of the readable and | |||
| writable configuration variables defined for a given UPS, see | writable configuration variables defined for a given UPS; see | |||
| Appendix A.2. | Appendix A.2. | |||
| * upscmd reports on and executes the instant action commands defined | * upscmd reports on and executes the instant action commands defined | |||
| for a given UPS, see Section 4.2.6. | for a given UPS; see Section 4.2.6. | |||
| * UPSmon.py is an experimental Python3 rewrite of upsmon and | * UPSmon.py is an experimental Python3 rewrite of upsmon and | |||
| upssched which includes support for TLS 1.3 [RFC8446]. | upssched that includes support for TLS 1.3 [RFC8446]. | |||
| 2.7. Primary | 2.7. Primary | |||
| When a power device such as a UPS unit supplies power to more than | When a power device, such as a UPS unit, supplies power to more than | |||
| one system, the computer running the driver is known as the Primary. | one system, the computer running the Driver is known as the Primary. | |||
| The others are Secondaries. See figure 4. Common current practice | The others are Secondaries. See Figure 4. Common current practice | |||
| for system administrators is to consider the Management Daemon in the | for system administrators is to consider the Management Daemon in the | |||
| Primary to be the Primary Management Daemon which is in charge of the | Primary to be the Primary Management Daemon that is in charge of the | |||
| shutdown of all the systems powered by the UPS. The Primary | shutdown of all the systems powered by the UPS. The Primary | |||
| Management Daemon sets status symbol FSD to order the secondaries to | Management Daemon sets status symbol FSD to order the Secondaries to | |||
| shut down. | shut down. | |||
| Note: Historically, the Primary was known as the "Master". | | Note: Historically, the Primary was known as the "Master". | |||
| 2.8. Secondary | 2.8. Secondary | |||
| When a hardware device such as a UPS unit supplies power to more than | When a hardware device, such as a UPS unit, supplies power to more | |||
| one system, the system which communicates directly with the UPS unit | than one system, the system that communicates directly with the UPS | |||
| e.g. using a USB, RS232, or network connection, is known as the | unit, e.g., using a USB, RS-232, or a network connection, is known as | |||
| Primariy. The other are Secondaries. There is no Attachment Daemon | the Primary. The others are Secondaries. There is no Attachment | |||
| in a Secondary. See figure 4. Common current practice for system | Daemon in a Secondary. See Figure 4. Common current practice for | |||
| administrators is to consider the Management Daemon in a Secondary to | system administrators is to consider the Management Daemon in a | |||
| be a Secondary Management Daemon which understands status symbol FSD | Secondary to be a Secondary Management Daemon that understands status | |||
| as an order to shut down. | symbol FSD as an order to shut down. | |||
| Note: Historically, the Secondary was known as the "Slave". | | Note: Historically, the Secondary was known as the "Slave". | |||
| 2.9. Session | 2.9. Session | |||
| The Management Daemon may initiate a TCP session with a specified | The Management Daemon may initiate a TCP session with a specified | |||
| device such as a UPS known to the Attachment Daemon. The session | device, such as a UPS known to the Attachment Daemon. The session | |||
| structure provides for audit and security as well as access to | structure provides for audit and security, as well as access to | |||
| mission critical UPS functions. For example good practice requires a | mission-critical UPS functions. For example, good practice requires | |||
| password protection for an Instant Command which turns off a UPS | password protection for an Instant Command that turns off a UPS | |||
| outlet. Other than the commands and responses used, the details of | outlet. Other than the commands and responses used, the details of | |||
| session management are outside the scope of this document. | session management are outside the scope of this document. | |||
| 2.10. UPS Status | 2.10. UPS Status | |||
| The status of a hardware device such as a UPS unit is a symbolic | The status of a hardware device, such as a UPS unit, is a symbolic | |||
| description of the state of the unit. It consists of a space | description of the state of the unit. It consists of a space- | |||
| separated list of symbols from the set {ALARM BOOST BYPASS CAL CHRG | separated list of symbols from the set {ALARM BOOST BYPASS CAL CHRG | |||
| COMM DISCHRG FSD LB NOCOMM OB OFF OL OVER RB TEST TRIM}. The symbols | COMM DISCHRG FSD LB NOCOMM OB OFF OL OVER RB TEST TRIM}. The symbols | |||
| TICK and TOCK are experimental additions to the statuses and are not | TICK and TOCK are experimental additions to the statuses and are not | |||
| in common current practice. See Section 5.1 which specifies each of | in common current practice. See Section 5.1, which specifies each of | |||
| these symbols. | these symbols. | |||
| See Section 8.2 for details of the recommended minimum support of | See Section 8.2 for details of the recommended minimum support of | |||
| status symbols OB, OL, LB and FSD. | status symbols OB, OL, LB, and FSD. | |||
| 2.11. UPS Variable | 2.11. UPS Variable | |||
| The metrics and identifiers provided by each UPS are represented by | The metrics and identifiers provided by each UPS are represented by | |||
| variables giving the value representing that metric or identifier, | variables giving the value representing that metric or identifier. | |||
| The UPS variable is an abstraction of the UPS hardware configuration | The UPS variable is an abstraction of the UPS hardware configuration | |||
| and activity maintained by the Attachment Daemon. See Appendix A | and activity maintained by the Attachment Daemon. See Appendix A, | |||
| which provides examples of variables. For example the variable | which provides examples of variables. For example, the variable | |||
| battery.charge contains the current charge of the UPS battery as a | battery.charge contains the current charge of the UPS battery as a | |||
| percentage value. | percentage value. | |||
| Note: Some variables are constants, e.g. battery type, manufacturer. | Note: Some variables are constants, e.g., battery type and | |||
| manufacturer. | ||||
| See Section 8.2 for details of the recommended minimum support of | See Section 8.2 for details of the recommended minimum support of | |||
| variables. A full list of possible variables is available in source | variables. A full list of possible variables is available in source | |||
| code file docs/nut-names.txt [gitvars] which serves as the Recording | code file docs/nut-names.txt [gitvars], which serves as the Recording | |||
| Document. | Document. | |||
| 3. Protocol Overview | 3. Protocol Overview | |||
| Figure 1 shows a reference configuration in which the command/ | Figure 1 shows a reference configuration in which the command/ | |||
| response protocol applies. The UPS shown is representative of all | response protocol applies. The UPS shown is representative of all | |||
| managed power devices, | managed power devices. | |||
| "The client" | "The client" | |||
| ,--------------, ,--------------, | ,--------------, ,--------------, | |||
| ,-----, | UPS | <-Commands | UPS | | ,-----, | UPS | <-Commands | UPS | | |||
| | UPS |---| Attachment |---------------| Management | | | UPS |---| Attachment |---------------| Management | | |||
| | |===| Daemon | Responses-> | Daemon | | | |===| Daemon | Responses-> | Daemon | | |||
| /-----\ '--------------' '--------------' | /-----\ '--------------' '--------------' | |||
| UPS Attachment UPS Management | UPS Attachment UPS Management | |||
| System Network System | System Network System | |||
| Figure 1: Reference Configuration | Figure 1: Reference Configuration | |||
| The reference configuration in figure 1 shows a single UPS unit which | The reference configuration in Figure 1 shows a single UPS unit that | |||
| has a power supply link (===) and a data link (---) attached to a | has a power supply link (===) and a data link (---) attached to a | |||
| system running an Attachment Daemon. The UPS provides power supply | system running an Attachment Daemon. The UPS provides power supply | |||
| protection to the system running the Attachment Daemon. | protection to the system running the Attachment Daemon. | |||
| In practice there may be more than one UPS unit, and a unit may | In practice, there may be more than one UPS unit, and a unit may | |||
| provide power protection to more than one system. The figure also | provide power protection to more than one system. The figure also | |||
| shows a single Management Daemon. In practice there may be more than | shows a single Management Daemon. In practice, there may be more | |||
| one Management Daemon, and any one Management Daemon may manage more | than one Management Daemon, and any one Management Daemon may manage | |||
| than one UPS Attachment Daemon. | more than one UPS Attachment Daemon. | |||
| The protocol applies to connections between the Attachment Daemon and | The protocol applies to connections between the Attachment Daemon and | |||
| the Management Daemon which act as *server* and *client* | the Management Daemon, which act as the *server* and *client*, | |||
| respectively. The Management Daemon sends commands over TCP to the | respectively. The Management Daemon sends commands over TCP to the | |||
| Attachment Daemon and receives responses over TCP from that daemon. | Attachment Daemon and receives responses over TCP from that daemon. | |||
| The two daemons may run in the same system, or may be connected | The two daemons may run in the same system or may be connected | |||
| through a local or wide area network. In simple cases, as shown in | through a local or wide area network. In simple cases, as shown in | |||
| figure 2, the Attachment Daemon and the Management Daemon are in the | Figure 2, the Attachment Daemon and the Management Daemon are in the | |||
| same system, the one protected by the UPS. The commands and | same system, the one protected by the UPS. The commands and | |||
| responses are exchanged through an internal loopback interface. | responses are exchanged through an internal loopback interface. | |||
| "The client" | "The client" | |||
| ,--------------------,---------------------, | ,--------------------,---------------------, | |||
| ,-----, | UPS <-Commands UPS | | ,-----, | UPS <-Commands UPS | | |||
| | UPS |---| Attachment | Management | | | UPS |---| Attachment | Management | | |||
| | |===| Daemon Responses-> Daemon | | | |===| Daemon Responses-> Daemon | | |||
| /-----\ '--------------------'---------------------' | /-----\ '--------------------'---------------------' | |||
| Internal | Internal | |||
| loopback | Loopback | |||
| UPS Attachment and Management System | UPS Attachment and Management System | |||
| Figure 2: Simplified single-system configuration | Figure 2: Simplified Single-System Configuration | |||
| The reference configuration does not require any specific design. | The reference configuration does not require any specific design. | |||
| For example figure 3 shows an arrangement in which the Attachment | For example, Figure 3 shows an arrangement in which the Attachment | |||
| Daemon is closely associated with, or even included in the UPS system | Daemon is closely associated with, or even included in, the UPS | |||
| setup. This is becoming more prevalent with the availability of low | system setup. This is becoming more prevalent with the availability | |||
| cost processors able to run the Attachment Daemon thereby effectively | of low-cost processors able to run the Attachment Daemon, thereby | |||
| creating a network attached UPS running a published protocol. | effectively creating a network-attached UPS running a published | |||
| protocol. | ||||
| "The client" | "The client" | |||
| ,-----,------------, ,--------------, | ,-----,------------, ,--------------, | |||
| | | UPS | <-Commands | UPS | | | | UPS | <-Commands | UPS | | |||
| | UPS - Attachment |---------------| Management | | | UPS - Attachment |---------------| Management | | |||
| | | Daemon | Responses-> | Daemon | | | | Daemon | Responses-> | Daemon | | |||
| /-----'------------\ '--------------' | /-----'------------\ '--------------' | |||
| UPS Attachment UPS Management | UPS Attachment UPS Management | |||
| System Network System | System Network System | |||
| Figure 3: UPS and Attachment Daemon integration | Figure 3: UPS and Attachment Daemon Integration | |||
| As the power requirements for processors decrease, it is becoming | As the power requirements for processors decrease, it is becoming | |||
| increasingly common to use a single UPS to protect multiple systems | increasingly common to use a single UPS to protect multiple systems, | |||
| as shown in figure 4. However there is only one data line (---) from | as shown in Figure 4. However, there is only one data line (---) | |||
| the UPS to the Primary system. The others have only power | from the UPS to the Primary system. The others have only power | |||
| connections (===) to the UPS, and are known as Secondaries. A | connections (===) to the UPS and are known as Secondaries. A | |||
| Secondary does not run an Attachment Daemon, it connects over a | Secondary does not run an Attachment Daemon; it connects over a | |||
| network to the Attachment Daemon in the Primary. Figure 4 shows the | network to the Attachment Daemon in the Primary. Figure 4 shows the | |||
| Attachment Daemon and the Primary Management Daemon in the same | Attachment Daemon and the Primary Management Daemon in the same | |||
| system. This is common practice but it is not a technical | system. This is common practice, but it is not a technical | |||
| requirement. | requirement. | |||
| "The client" | "The client" | |||
| ,--------------------,---------------------, | ,--------------------,---------------------, | |||
| ,-----, | UPS <-Commands Primary | | ,-----, | UPS <-Commands Primary | | |||
| | |---| Attachment | Management | Primary | | |---| Attachment | Management | Primary | |||
| | |===| Daemon Responses-> Daemon | | | |===| Daemon Responses-> Daemon | | |||
| | | '--------------------'---------------------' | | | '--------------------'---------------------' | |||
| | UPS | ^ | | UPS | ^ | |||
| | | '<-Commands---Responses->, | | | '<-Commands---Responses->, | |||
| | | v | | | v | |||
| | | ,--------------,-----------------, | | | ,--------------,-----------------, | |||
| | |============| | Secondary | | | |============| | Secondary | | |||
| /-----\ | | Management | Secondary | /-----\ | | Management | Secondary | |||
| | | Daemon | | | | Daemon | | |||
| '--------------'-----------------' | '--------------'-----------------' | |||
| Figure 4: UPS protects multiple systems | Figure 4: UPS Protects Multiple Systems | |||
| | Note: Should the Primary fail or go off-line, the fate of the | | Note: Should the Primary fail or go offline, the fate of the | |||
| | Secondaries depends on the UPS status when the Primary failed. | | Secondaries depends on the UPS status when the Primary failed. | |||
| | If the UPS had status OL the Secondary continues operation, but | | If the UPS had status OL, the Secondary continues operation, | |||
| | if the UPS had status OB the Secondary may choose to shut down | | but if the UPS had status OB, the Secondary may choose to shut | |||
| | as a precaution. | | down as a precaution. | |||
| 4. Protocol Specification | 4. Protocol Specification | |||
| This specification includes only the commands and their responses. | This specification includes only the commands and their responses. | |||
| An implementation of the Attachment Daemon has an internal state | An implementation of the Attachment Daemon has an internal state | |||
| machine, and some complex implementations of the Management Daemon | machine, and some complex implementations of the Management Daemon | |||
| include an internal state machine; for example to assist the system | include an internal state machine, for example, to assist the system | |||
| shutdown of a complex installation. The Management Daemon is | shutdown of a complex installation. The Management Daemon is | |||
| required to remember the previous ups.status value it received from | required to remember the previous ups.status value it received from | |||
| the Attachment Daemon and compare it with the next. Other than that | the Attachment Daemon and compare it with the next. Other than that, | |||
| the management protocol used between them is effectively stateless. | the management protocol used between them is effectively stateless. | |||
| See for example Section 5.2 which shows a map of the new ups.status | For example, see Section 5.2, which shows a map of the new ups.status | |||
| response and the previous ups.status response to an Event which is | response and the previous ups.status response to an event, which is | |||
| taken as the basis for Management Daemon action. | taken as the basis for Management Daemon action. | |||
| 4.1. Notation Used in this Specification | 4.1. Notation Used in this Specification | |||
| The character set used for commands and responses is US-ASCII, see | The character set used for commands and responses is US-ASCII; see | |||
| [RFC0020]. | [RFC0020]. | |||
| Multi-word elements are contained between QUOTATION MARK characters | Multi-word elements are contained between quotation mark characters | |||
| for easier parsing. E.g., "UPS on fire". Embedded quotation marks | for easier parsing, e.g., "UPS on fire". Embedded quotation marks | |||
| are escaped with REVERSE SLANT \ often known as backslashes. | are escaped with reverse slant (\), often known as backslashes. | |||
| Embedded backslashes are also escaped by representing them as \\. | Embedded backslashes are also escaped by representing them as \\. | |||
| Commands and responses have no leading or trailing whitespace, and | Commands and responses have no leading or trailing blank space and | |||
| are terminated with a single new line character LINE FEED (LF). | are terminated with a single new line character line feed (LF). | |||
| White space within commands and responses is reduced to one SPACE | Blank space within commands and responses is reduced to one space | |||
| (SP). | (SP). | |||
| 4.2. Commands | 4.2. Commands | |||
| The commands address the UPS to which they apply by <upsname> where | The commands address the UPS to which they apply by <upsname>, where | |||
| * <upsname> ::= <ups>[@<hostname>[:<port>]] | * <upsname> ::= <ups>[@<hostname>[:<port>]] | |||
| * <ups> is defined by the Attachment Daemon configuration files. | * <ups> is defined by the Attachment Daemon configuration files. | |||
| * The default <hostname> is localhost | * The default <hostname> is localhost. | |||
| * The <port> is the number of the TCP port on which the Attachment | * The <port> is the number of the TCP port on which the Attachment | |||
| Daemon is listening. The default is 3493. This is supported by | Daemon is listening. The default is 3493. This is supported by | |||
| all current Management Daemons. | all current Management Daemons. | |||
| Examples: myups, UPS-97B@bigserver.example.com | Examples: myups, UPS-97B@bigserver.example.com | |||
| ABNF: see variable upsname in Figure 5. | ABNF: See variable upsname in Figure 5. | |||
| Note: Experimental Management Daemons use an extended form of | Note: Experimental Management Daemons use an extended form of | |||
| <upsname> in configuration files and in program parameters, where | <upsname> in configuration files and in program parameters, where: | |||
| * <upsname> ::= [<group>:]<ups>[@<hostname>[:<port>]] | * <upsname> ::= [<group>:]<ups>[@<hostname>[:<port>]] | |||
| * <group> is an experimental extension to provide for groups of | * <group> is an experimental extension to provide for groups of | |||
| UPSs. It is not in common current practice. | UPSs. It is not in common current practice. | |||
| * <ups> is defined by the Attachment Daemon configuration files. | * <ups> is defined by the Attachment Daemon configuration files. | |||
| * The default <hostname> is localhost | * The default <hostname> is localhost. | |||
| Examples: ups-1@example.com:3493, HB:heartbeat1@example.com:3493 | Examples: ups-1@example.com:3493, HB:heartbeat1@example.com:3493 | |||
| | _Implementation note:_ In the current implementation, the names | | _Implementation note:_ In the current implementation, the names | |||
| | of commands and subcommands are not case sensitive. For | | of commands and subcommands are not case sensitive. For | |||
| | example GET VAR may be written as Get var, but in this | | example, GET VAR may be written as Get var, but in this | |||
| | specification they are always written in upper case. | | specification, they are always written in uppercase. | |||
| | Similarly, <upsname> and <varname> are not case sensitive. For | | Similarly, <upsname> and <varname> are not case sensitive. For | |||
| | example UPS341 ups.id may be written as ups341 Ups.Id, but in | | example, UPS341 ups.id may be written as ups341 Ups.Id, but in | |||
| | this specification <varname> is always written in lower case. | | this specification, <varname> is always written in lower case. | |||
| 4.2.1. ATTACH | 4.2.1. ATTACH | |||
| In a configuration such as that shown in Figure 4 in which a UPS | In a configuration like the one shown in Figure 4, in which a UPS | |||
| protects more than one system, the Primary Management Daemon needs to | protects more than one system, the Primary Management Daemon needs to | |||
| know how many Secondaries are currently "_active_", i.e., powered by | know how many Secondaries are currently _active_, i.e., powered by | |||
| the UPS, either from the public power supply or from battery power. | the UPS, either from the public power supply or from battery power. | |||
| The Attachment Daemon supports this by keeping a count of all the | The Attachment Daemon supports this by keeping a count of all the | |||
| "_active_" systems powered by a UPS. The count is initialised, one | _active_ systems powered by a UPS. The count is initialized, one | |||
| Secondary at a time by the ATTACH command, which should be understood | Secondary at a time by the ATTACH command, which should be understood | |||
| as "_count this Secondary as active_". ATTACH is one of three | as _count this Secondary as active_. ATTACH is one of three commands | |||
| commands for Secondary counting: command DETACH decrements the count | for Secondary counting. Additionally, command DETACH decrements the | |||
| and a Management Daemon may read the count at any time using command | count, and a Management Daemon may read the count at any time using | |||
| NUMATTACH. | the command NUMATTACH. | |||
| The ATTACH command is also sent to the Attachment Daemon for the | The ATTACH command is also sent to the Attachment Daemon for the | |||
| Primary so during normal, fully protected operation, the count is 1 | Primary, so during normal, fully protected operation, the count is 1 | |||
| for the Primary + the number of secondaries. During a full system | for the Primary + the number of Secondaries. During a full system | |||
| shutdown, the count drops as each Secondary Management Daemon | shutdown, the count drops as each Secondary Management Daemon | |||
| executes command DETACH during its own shutdown. When the count | executes command DETACH during its own shutdown. When the count | |||
| drops to 1, only the Primary is "_active_" and it knows that all the | drops to 1, only the Primary is _active_, and it knows that all the | |||
| secondaries have shut down. | Secondaries have shut down. | |||
| Command: ATTACH <upsname> | Command: ATTACH <upsname> | |||
| If the command succeeds, the response is OK, otherwise see the error | If the command succeeds, the response is OK; otherwise, see the error | |||
| responses in Section 4.3.2. | responses in Section 4.3.2. | |||
| ABNF: See variable attach in Figure 5, | ABNF: See variable attach in Figure 5. | |||
| Note: Historically, this command was known as LOGIN. Since that | | Note: Historically, this command was known as LOGIN. However, | |||
| LOGIN was not the conventional user access to a shell or program the | | because LOGIN was not the conventional user access to a shell | |||
| name was changed to avoid confusion. | | or program, the name was changed to avoid confusion. | |||
| 4.2.2. DETACH | 4.2.2. DETACH | |||
| This companion command to ATTACH reduces the count of "active" | This companion command to ATTACH reduces the count of "active" | |||
| Secondaries. It should be understood as "_this Secondary is no | Secondaries. It should be understood as _this Secondary is no longer | |||
| longer active_", and is usually used during system shutdown to | active_ and is usually used during system shutdown to decrement a | |||
| decrement a count of how many Secondaries are still "active". | count of how many Secondaries are still _active_. | |||
| Command: DETACH | Command: DETACH | |||
| If the command succeeds, the response is OK Goodbye, otherwise see | If the command succeeds, the response is OK Goodbye; otherwise, see | |||
| the error responses in Section 4.3.2. | the error responses in Section 4.3.2. | |||
| ABNF: See variable detach in Figure 5, | ABNF: See variable detach in Figure 5. | |||
| Note: Historically, this command was known as LOGOUT. | | Note: Historically, this command was known as LOGOUT. | |||
| 4.2.3. FSD | 4.2.3. FSD | |||
| A Management Daemon which is Primary and has the required authority, | A Management Daemon that is Primary and has the required authority | |||
| uses this command to set status symbol FSD meaning "Forced Shutdown" | uses this command to set status symbol FSD, meaning "Forced | |||
| in the Attachment Daemon. In current practice the Primary Management | Shutdown", in the Attachment Daemon. In current practice, the | |||
| Daemon uses the symbol to tell the Secondaries to shut down. | Primary Management Daemon uses the symbol to tell the Secondaries to | |||
| shut down. | ||||
| Command: FSD <upsname> | Command: FSD <upsname> | |||
| If the command succeeds, the response is OK FSD-SET, otherwise see | If the command succeeds, the response is OK FSD-SET; otherwise, see | |||
| the error responses in Section 4.3.2. | the error responses in Section 4.3.2. | |||
| ABNF: See variable fsd in Figure 5. | ABNF: See variable fsd in Figure 5. | |||
| In current practice, commands such as FSD are made available only to | In current practice, commands such as FSD are made available only to | |||
| a privileged administrative user authorized to send such a mission | a privileged administrative user authorized to send such a mission- | |||
| critical command. The security provisions for administrative users | critical command. The security provisions for administrative users | |||
| are discussed in Appendix E. | are discussed in Appendix E. | |||
| Note: The symbol "FSD" is also used for an Event. See Table 5. | Note: The symbol FSD is also used for an event. See Table 5. | |||
| 4.2.4. GET | 4.2.4. GET | |||
| Retrieve a single response from the Attachment Daemon. | Retrieve a single response from the Attachment Daemon. | |||
| ABNF: See variable get in Figure 5. | ABNF: See variable get in Figure 5. | |||
| The possible sub-commands are: | The possible subcommands are listed in the sections below. | |||
| 4.2.4.1. GET CMDDESC | 4.2.4.1. GET CMDDESC | |||
| Retrieve a text description of a command. | Retrieve a text description of a command. | |||
| Command: GET CMDDESC <upsname> <cmdname> | Command: GET CMDDESC <upsname> <cmdname> | |||
| Response: CMDDESC <upsname> <cmdname> "<description>" | Response: CMDDESC <upsname> <cmdname> "<description>" | |||
| For example: GET CMDDESC su700 load.on and response CMDDESC su700 | For example: command GET CMDDESC su700 load.on and response CMDDESC | |||
| load.on "Turn on the load immediately" | su700 load.on "Turn on the load immediately" | |||
| This is like GET DESC, but it applies to an Instant Command;. See | This is like GET DESC, but it applies to an Instant Command. See | |||
| Section 4.2.4.2. | Section 4.2.4.2. | |||
| 4.2.4.2. GET DESC | 4.2.4.2. GET DESC | |||
| Retrieve a text description of a UPS variable. See Section 2.11. | Retrieve a text description of a UPS variable. See Section 2.11. | |||
| Command: GET DESC <upsname> <varname> | Command: GET DESC <upsname> <varname> | |||
| Response: DESC <upsname> <varname> "<description>" | Response: DESC <upsname> <varname> "<description>" | |||
| where <description> is a string that gives a brief explanation of the | <description> is a string that gives a brief explanation of the named | |||
| named variable. The Attachment Daemon MAY return "Unavailable" if | variable. The Attachment Daemon MAY return "Unavailable" if the file | |||
| the file which provides this description is not installed. | that provides this description is not installed. | |||
| For example command GET DESC su700 ups.status and response DESC su700 | For example: command GET DESC su700 ups.status and response DESC | |||
| ups.status "UPS status" | su700 ups.status "UPS status" | |||
| 4.2.4.3. GET NUMATTACH | 4.2.4.3. GET NUMATTACH | |||
| Retrieve the count kept by the Attachment Daemon of all the | Retrieve the count kept by the Attachment Daemon of all the _active_ | |||
| "_active_" systems protected by this UPS. | systems protected by this UPS. | |||
| Command: GET NUMATTACH <upsname> | Command: GET NUMATTACH <upsname> | |||
| Response: NUMATTACH <upsname> <value> | Response: NUMATTACH <upsname> <value> | |||
| where <value> is a count of the Primary and the number of Secondaries | <value> is a count of the Primary and the number of Secondaries | |||
| currently powered by this UPS. | currently powered by this UPS. | |||
| For example command GET ATTACH su700 and response NUMATTACH su700 1 | For example: command GET ATTACH su700 and response NUMATTACH su700 1 | |||
| This information is needed by the Management Daemon to determine how | This information is needed by the Management Daemon to determine how | |||
| many Secondaries are still connected during the system shutdown | many Secondaries are still connected during the system shutdown | |||
| process. | process. | |||
| Note: Historically, this sub-command was known as NUMLOGINS. Since | | Note: Historically, this subcommand was known as NUMLOGINS. | |||
| LOGIN was not the conventional user access to a shell or program the | | Since LOGIN was not the conventional user access to a shell or | |||
| name was changed to avoid confusion. | | program, the name was changed to avoid confusion. | |||
| 4.2.4.4. GET TYPE | 4.2.4.4. GET TYPE | |||
| Retrieve the type of a UPS variable. See Section 2.11. | Retrieve the type of a UPS variable. See Section 2.11. | |||
| Command: GET TYPE <upsname> <varname> | Command: GET TYPE <upsname> <varname> | |||
| Response: TYPE <upsname> <varname> <type>... | Response: TYPE <upsname> <varname> <type>... | |||
| where <type>... can be one or more of the following tokens. Multiple | <type>... can be one or more of the following tokens. Multiple types | |||
| types may be returned. | may be returned. | |||
| For example command GET TYPE su700 input.transfer.low and response | For example: command GET TYPE su700 input.transfer.low and response | |||
| TYPE su700 input.transfer.low ENUM | TYPE su700 input.transfer.low ENUM | |||
| +==============+=============================================+ | ||||
| | Type | Meaning | | ||||
| +==============+=============================================+ | ||||
| | RW | This is a read/write variable. It may be | | ||||
| | | read with command GET VAR, see | | ||||
| | | Section 4.2.4.6, and set to a different | | ||||
| | | value with command SET, see Section 4.2.11. | | ||||
| +--------------+---------------------------------------------+ | ||||
| | ENUM | An enumerated type, which supports specific | | ||||
| | | predetermined values. | | ||||
| +--------------+---------------------------------------------+ | ||||
| | STRING:n | This is a string of maximum length n. | | ||||
| +--------------+---------------------------------------------+ | ||||
| | RANGE | This is a number, either integer or float, | | ||||
| | | comprised in the range which may be seen | | ||||
| | | with the command LIST RANGE, see | | ||||
| | | Section 4.2.7.4. | | ||||
| +--------------+---------------------------------------------+ | ||||
| | NUMBER | This is a single numeric value, either | | ||||
| | | integer or float. | | ||||
| +--------------+---------------------------------------------+ | ||||
| Table 1: Variable Types | +==============+==============================================+ | |||
| | Type | Meaning | | ||||
| +==============+==============================================+ | ||||
| | RW | This is a read/write variable. It may be | | ||||
| | | read with command GET VAR (see | | ||||
| | | Section 4.2.4.6) and set to a different | | ||||
| | | value with command SET (see Section 4.2.11). | | ||||
| +--------------+----------------------------------------------+ | ||||
| | ENUM | This is an enumerated type, which supports | | ||||
| | | specific predetermined values. | | ||||
| +--------------+----------------------------------------------+ | ||||
| | STRING:n | This is a string of maximum length n. | | ||||
| +--------------+----------------------------------------------+ | ||||
| | RANGE | This is a number, either integer or float, | | ||||
| | | comprised in the range that may be seen with | | ||||
| | | the command LIST RANGE (see | | ||||
| | | Section 4.2.7.4). | | ||||
| +--------------+----------------------------------------------+ | ||||
| | NUMBER | This is a single numeric value, either | | ||||
| | | integer or float. | | ||||
| +--------------+----------------------------------------------+ | ||||
| Table 1: Variable Types | ||||
| Notes: | Notes: | |||
| * ENUM, STRING:n and RANGE are usually associated with RW, but not | * ENUM, STRING:n, and RANGE are usually associated with RW but not | |||
| always. The default <type>, when omitted, is numeric, so either | always. The default <type>, when omitted, is numeric, so either | |||
| integer or float. Each Driver is then responsible for handling | integer or float. Each Driver is then responsible for handling | |||
| values as either integer or float. | values as either integer or float. | |||
| * Current practice is to represent floating point values using a | * Current practice is to represent floating point values using a | |||
| decimal (base 10) US English-based representation. Hexadecimal, | decimal (base 10) English-based representation. Hexadecimals, | |||
| exponents, and comma for thousands separator are not allowed. For | exponents, and commas used as separators for thousands are not | |||
| example: "1200.20" is valid, while "1,200.20" and "1200,20" are | allowed. For example, "1200.20" is valid, while "1,200.20" and | |||
| not valid. | "1200,20" are not valid. | |||
| 4.2.4.5. GET UPSDESC | 4.2.4.5. GET UPSDESC | |||
| Retrieve a text description of a UPS. | Retrieve a text description of a UPS. | |||
| Command: GET UPSDESC <upsname> | Command: GET UPSDESC <upsname> | |||
| Response: UPSDESC <upsname> "<description>" | Response: UPSDESC <upsname> "<description>" | |||
| where <description> is defined by the Attachment Daemon | <description> is defined by the Attachment Daemon configuration. If | |||
| configuration. If it is not set, current practice is for the | it is not set, current practice is for the Attachment Daemon to | |||
| Attachment Daemon to return "Unavailable". | return "Unavailable". | |||
| For example command GET UPSDESC su700 and response UPSDESC su700 | For example: command GET UPSDESC su700 and response UPSDESC su700 | |||
| "Development box" | "Development box" | |||
| This can be used to provide human-readable descriptions instead of a | This can be used to provide human-readable descriptions, instead of a | |||
| cryptic ups@hostname string. | cryptic ups@hostname string. | |||
| 4.2.4.6. GET VAR | 4.2.4.6. GET VAR | |||
| Retrieve the value of a UPS variable. See Section 2.11. | Retrieve the value of a UPS variable. See Section 2.11. | |||
| Command: GET VAR <upsname> <varname> | Command: GET VAR <upsname> <varname> | |||
| Response: VAR <upsname> <varname> "<value>" | Response: VAR <upsname> <varname> "<value>" | |||
| For example command GET VAR su700 ups.status and response VAR su700 | For example: command GET VAR su700 ups.status and response VAR su700 | |||
| ups.status "OB LB" | ups.status "OB LB" | |||
| 4.2.5. HELP | 4.2.5. HELP | |||
| Return a list of the commands supported by the Attachment Daemon. | Return a list of the commands supported by the Attachment Daemon. | |||
| This command is intended for human as well as program use. | This command is intended for human, as well as program, use. | |||
| Command HELP | Command: HELP | |||
| For example, the following command line sequence executed on an | For example: the following command line sequence executed on an | |||
| Attachment Daemon: | Attachment Daemon | |||
| netcat localhost 3493 | netcat localhost 3493 | |||
| HELP | HELP | |||
| Commands: HELP VER GET LIST SET INSTCMD ATTACH DETACH | Commands: HELP VER GET LIST SET INSTCMD ATTACH DETACH | |||
| USERNAME PASSWORD STARTTLS | USERNAME PASSWORD STARTTLS | |||
| ABNF: See variable help in Figure 5. | ABNF: See variable help in Figure 5. | |||
| Note: Historically, this command also returned LOGIN and LOGOUT. | | Note: Historically, this command also returned LOGIN and | |||
| Since LOGIN was not the conventional user access to a shell or | | LOGOUT. Because LOGIN was not the conventional user access to | |||
| program, the command names were changed to ATTACH and DETACH to avoid | | a shell or program, the command names were changed to ATTACH | |||
| confusion. | | and DETACH to avoid confusion. | |||
| 4.2.6. INSTCMD | 4.2.6. INSTCMD | |||
| Send an Instant Command to the UPS. | Send an Instant Command to the UPS. | |||
| Command: INSTCMD <upsname> <cmdname> | Command: INSTCMD <upsname> <cmdname> | |||
| where <upsname> is the name of the UPS and <cmdname> is the Instant | <upsname> is the name of the UPS, and <cmdname> is the Instant | |||
| Command to be issued to that UPS. See Appendix A.3 for examples of | Command to be issued to that UPS. See Appendix A.3 for examples of | |||
| instant commands. | Instant Commands. | |||
| If the command succeeds, the response is OK, otherwise see the error | If the command succeeds, the response is OK; otherwise, see the error | |||
| responses, Section 4.3.2. | responses in Section 4.3.2. | |||
| For example the command: INSTCMD su700 test.panel.start and the | For example: command INSTCMD su700 test.panel.start and response OK | |||
| response OK | ||||
| ABNF: See variable instcmd in Figure 5. | ABNF: See variable instcmd in Figure 5. | |||
| 4.2.7. LIST | 4.2.7. LIST | |||
| All the LIST commands produce a response with a common format. The | All the LIST commands produce a response with a common format. The | |||
| response will begin with BEGIN LIST and then repeat the initial | response begins with BEGIN LIST and then repeats the initial query. | |||
| query. A list then follows, with as many lines as are necessary. | A list then follows, with as many lines as are necessary. The | |||
| The response ends with END LIST followed by the initial query. | response ends with END LIST, followed by the initial query. | |||
| The formatting may seem a bit redundant, but it makes a different | The formatting may seem a bit redundant, but it makes a different | |||
| form of client possible. A client can send a LIST command and then | form of client possible. A client can send a LIST command and then | |||
| wait for the response. When it arrives, the Management Daemon | wait for the response. When it arrives, the Management Daemon | |||
| doesn't need a complicated state machine to remember which list is | doesn't need a complicated state machine to remember which list is | |||
| which. | which. | |||
| Note: The current NUT Project implementation of the Attachment | Note: The current NUT Project implementation of the Attachment | |||
| Daemon, upsd, sends back the response to the LIST command as a | Daemon, upsd, sends back the response to the LIST command as a | |||
| sequence of messages. The Management Daemon should continue reading | sequence of messages. The Management Daemon should continue reading | |||
| these messages until it receives the line beginning END LIST. | these messages until it receives the line beginning END LIST. | |||
| ABNF: See variable list in Figure 5. | ABNF: See the variable list in Figure 5. | |||
| The possible subcommands are: | The possible subcommands are listed in the sections below. | |||
| 4.2.7.1. LIST CLIENT | 4.2.7.1. LIST CLIENT | |||
| The command calls for the Attachment Daemon to report all the current | The command calls for the Attachment Daemon to report all the current | |||
| Management Daemon clients of a given UPS. | Management Daemon clients of a given UPS. | |||
| Command: LIST CLIENT <upsname> | Command: LIST CLIENT <upsname> | |||
| The response is | Response: | |||
| BEGIN LIST CLIENT <upsname> | BEGIN LIST CLIENT <upsname> | |||
| CLIENT <upsname> <client_IP_address> | CLIENT <upsname> <client_IP_address> | |||
| ... | ... | |||
| END LIST CLIENT <upsname> | END LIST CLIENT <upsname> | |||
| For example, the command LIST CLIENT ups1 and the response: | For example: command LIST CLIENT ups1 and response | |||
| BEGIN LIST CLIENT ups1 | BEGIN LIST CLIENT ups1 | |||
| CLIENT ups1 ::1 | CLIENT ups1 ::1 | |||
| CLIENT ups1 203.0.113.1 | CLIENT ups1 203.0.113.1 | |||
| END LIST CLIENT ups1 | END LIST CLIENT ups1 | |||
| 4.2.7.2. LIST CMD | 4.2.7.2. LIST CMD | |||
| The command calls for the Attachment Daemon to report a list of the | The command calls for the Attachment Daemon to report a list of the | |||
| Instant Commands which the Management Daemon may send to the | Instant Commands that the Management Daemon may send to the | |||
| Attachment Daemon. This Instant Command list is the abstracted view | Attachment Daemon. This Instant Command list is the abstracted view | |||
| of the UPS hardware capabilities. An economical UPS will support few | of the UPS hardware capabilities. An economical UPS will support few | |||
| or no Instant Commands but a professional model should support more. | or no Instant Commands, but a professional model should support more. | |||
| Command: LIST CMD <upsname> | Command: LIST CMD <upsname> | |||
| The response is: | Response: | |||
| BEGIN LIST CMD <upsname> | BEGIN LIST CMD <upsname> | |||
| CMD <upsname> <cmdname> | CMD <upsname> <cmdname> | |||
| ... | ... | |||
| END LIST CMD <upsname> | END LIST CMD <upsname> | |||
| where <upsname> is the name of the UPS, and <cmdname> is the name of | <upsname> is the name of the UPS, and <cmdname> is the name of the | |||
| the Instant Command which may be issued to the UPS. | Instant Command that may be issued to the UPS. | |||
| For example the command: LIST CMD su700 and the response: | For example: command LIST CMD su700 and response | |||
| BEGIN LIST CMD su700 | BEGIN LIST CMD su700 | |||
| CMD su700 load.on | CMD su700 load.on | |||
| CMD su700 test.panel.start | CMD su700 test.panel.start | |||
| ... | ... | |||
| END LIST CMD su700 | END LIST CMD su700 | |||
| 4.2.7.3. LIST ENUM | 4.2.7.3. LIST ENUM | |||
| The command calls for the Attachment Daemon to report the set of | The command calls for the Attachment Daemon to report the set of | |||
| possible values of a UPS variable which has predetermined values. | possible values of a UPS variable that has predetermined values. | |||
| Command: LIST ENUM <upsname> <varname> | Command: LIST ENUM <upsname> <varname> | |||
| The response is: | Response: | |||
| BEGIN LIST ENUM <upsname> <varname> | BEGIN LIST ENUM <upsname> <varname> | |||
| ENUM <upsname> <varname> "<value>" | ENUM <upsname> <varname> "<value>" | |||
| ... | ... | |||
| END LIST ENUM <upsname> <varname> | END LIST ENUM <upsname> <varname> | |||
| where <upsname> is the name of the UPS, <varname> is the UPS variable | ||||
| and <value> is one of the possible values of that UPS variable. Note | ||||
| that in current practice the output is an unordered list. Note also | ||||
| that the QUOTATION MARKS are part of the response. | ||||
| For example the command: LIST ENUM su700 input.transfer.low and the | <upsname> is the name of the UPS, <varname> is the UPS variable, and | |||
| response: | <value> is one of the possible values of that UPS variable. Note | |||
| that, in current practice, the output is an unordered list. Also | ||||
| note that the quotation marks are part of the response. | ||||
| For example: command LIST ENUM su700 input.transfer.low and response | ||||
| BEGIN LIST ENUM su700 input.transfer.low | BEGIN LIST ENUM su700 input.transfer.low | |||
| ENUM su700 input.transfer.low "103" | ENUM su700 input.transfer.low "103" | |||
| ENUM su700 input.transfer.low "100" | ENUM su700 input.transfer.low "100" | |||
| ... | ... | |||
| END LIST ENUM su700 input.transfer.low | END LIST ENUM su700 input.transfer.low | |||
| 4.2.7.4. LIST RANGE | 4.2.7.4. LIST RANGE | |||
| The command calls for the Attachment Daemon to report the interval in | The command calls for the Attachment Daemon to report the interval in | |||
| which valid values of UPS variable lie. | which valid values of UPS variable lie. | |||
| Command: LIST RANGE <upsname> <varname> | Command: LIST RANGE <upsname> <varname> | |||
| The response is: | Response: | |||
| BEGIN LIST RANGE <upsname> <varname> | BEGIN LIST RANGE <upsname> <varname> | |||
| RANGE <upsname> <varname> "<min>" "<max>" | RANGE <upsname> <varname> "<min>" "<max>" | |||
| ... | ... | |||
| END LIST RANGE <upsname> <varname> | END LIST RANGE <upsname> <varname> | |||
| where <upsname> is the name of the UPS, <varname> is the UPS variable | <upsname> is the name of the UPS, <varname> is the UPS variable, and | |||
| and {<min>,<max>} is the interval of valid values of that UPS | {<min>,<max>} is the interval of valid values of that UPS variable. | |||
| variable. Note that the QUOTATION MARKS are part of the response. | Note that the quotation marks are part of the response. | |||
| For example, the command LIST RANGE su700 input.transfer.low and the | For example: command LIST RANGE su700 input.transfer.low and response | |||
| response: | ||||
| BEGIN LIST RANGE su700 input.transfer.low | BEGIN LIST RANGE su700 input.transfer.low | |||
| RANGE su700 input.transfer.low "90" "105" | RANGE su700 input.transfer.low "90" "105" | |||
| END LIST RANGE su700 input.transfer.low | END LIST RANGE su700 input.transfer.low | |||
| 4.2.7.5. LIST RW | 4.2.7.5. LIST RW | |||
| The command calls for the Attachment Daemon to report a list of the | The command calls for the Attachment Daemon to report a list of the | |||
| UPS variables associated with a given UPS which may be read and | UPS variables associated with a given UPS that may be read and | |||
| written by the Management Daemon. These variables are the abstracted | written by the Management Daemon. These variables are the abstracted | |||
| view of the UPS hardware capabilities. An economical UPS may support | view of the UPS hardware capabilities. An economical UPS may support | |||
| few variables but a professional model should support at least the | few variables, but a professional model should support at least the | |||
| variables which are needed for an automatic shutdown and restart, see | variables that are needed for an automatic shutdown and restart; see | |||
| Appendix B. See also Section 8.2 for details of the recommended | Appendix B. Also, see Section 8.2 for details of the recommended | |||
| minimum support of variables. A full list of variables is available | minimum support of variables. A full list of variables is available | |||
| in source code file docs/nut-names.txt [gitvars] which serves as the | in source code file docs/nut-names.txt [gitvars], which serves as the | |||
| Recording Document. | Recording Document. | |||
| Command: LIST RW <upsname> | Command: LIST RW <upsname> | |||
| The response is: | Response: | |||
| BEGIN LIST RW <upsname> | BEGIN LIST RW <upsname> | |||
| RW <upsname> <varname> "<value>" | RW <upsname> <varname> "<value>" | |||
| ... | ... | |||
| END LIST RW <upsname> | END LIST RW <upsname> | |||
| where <upsname> is the name of the UPS, <varname> is the UPS variable | <upsname> is the name of the UPS, <varname> is the UPS variable, and | |||
| and <value> is the value of that UPS variable. Note that the | <value> is the value of that UPS variable. Note that the quotation | |||
| QUOTATION MARKS are part of the response. | marks are part of the response. | |||
| For example the command: LIST RW su700 and the response: | For example: command LIST RW su700 and response | |||
| BEGIN LIST RW su700 | BEGIN LIST RW su700 | |||
| RW su700 output.voltage.nominal "115" | RW su700 output.voltage.nominal "115" | |||
| RW su700 ups.delay.shutdown "020" | RW su700 ups.delay.shutdown "020" | |||
| ... | ... | |||
| END LIST RW su700 | END LIST RW su700 | |||
| 4.2.7.6. LIST UPS | 4.2.7.6. LIST UPS | |||
| The command calls for the Attachment Daemon to report a list of the | The command calls for the Attachment Daemon to report a list of the | |||
| UPS units to which it is attached. | UPS units to which it is attached. | |||
| Command: LIST UPS | Command: LIST UPS | |||
| The response is: | Response: | |||
| BEGIN LIST UPS | BEGIN LIST UPS | |||
| UPS <upsname> "<description>" | UPS <upsname> "<description>" | |||
| ... | ... | |||
| END LIST UPS | END LIST UPS | |||
| where <upsname> is the name of a UPS, and <description> is the | <upsname> is the name of a UPS, and <description> is the description | |||
| description maintained by the Attachment Daemon if available. It is | maintained by the Attachment Daemon, if available. It is set to | |||
| set to "Unavailable" otherwise. Note that the QUOTATION MARKS are | "Unavailable" otherwise. Note that the quotation marks are part of | |||
| part of the response. | the response. | |||
| This command can also be used to determine what values of <upsname> | This command can also be used to determine what values of <upsname> | |||
| are valid before calling other functions on the server. This is also | are valid before calling other functions on the server. This is also | |||
| a good way to handle situations where a single Attachment Daemon | a good way to handle situations where a single Attachment Daemon | |||
| supports multiple UPS's. It is also useful for clients which perform | supports multiple UPSs. It is also useful for clients that perform a | |||
| a UPS discovery process. | UPS discovery process. | |||
| For example, the response: | For example: response | |||
| BEGIN LIST UPS | BEGIN LIST UPS | |||
| UPS su700 "Development box" | UPS su700 "Development box" | |||
| END LIST UPS | END LIST UPS | |||
| 4.2.7.7. LIST VAR | 4.2.7.7. LIST VAR | |||
| The command calls for the Attachment Daemon to report a list of all | The command calls for the Attachment Daemon to report a list of all | |||
| the UPS variables which it maintains for a given UPS, and the values | the UPS variables that it maintains for a given UPS and the values of | |||
| of those UPS variables. | those UPS variables. | |||
| Command: LIST VAR <upsname> | Command: LIST VAR <upsname> | |||
| The response is: | Response: | |||
| BEGIN LIST VAR <upsname> | BEGIN LIST VAR <upsname> | |||
| VAR <upsname> <varname> "<value>" | VAR <upsname> <varname> "<value>" | |||
| ... | ... | |||
| END LIST VAR <upsname> | END LIST VAR <upsname> | |||
| where <upsname> is the name of the UPS, <varname> is the UPS variable | <upsname> is the name of the UPS, <varname> is the UPS variable, and | |||
| and <value> is the value of that variable. Note that the QUOTATION | <value> is the value of that variable. Note that the quotation marks | |||
| MARKS are part of the response. | are part of the response. | |||
| The response to this command lists the UPS variables available for | The response to this command lists the UPS variables available for | |||
| this UPS and their current values. For example the command LIST VAR | this UPS and their current values. | |||
| su700 and the response: | ||||
| For example: command LIST VAR su700 and response | ||||
| BEGIN LIST VAR su700 | BEGIN LIST VAR su700 | |||
| VAR su700 ups.mfr "Example Mfg" | VAR su700 ups.mfr "Example Mfg" | |||
| VAR su700 ups.mfr.date "10/17/96" | VAR su700 ups.mfr.date "10/17/96" | |||
| ... | ... | |||
| END LIST VAR su700 | END LIST VAR su700 | |||
| See Section 8.2 for details of the recommended minimum support of | See Section 8.2 for details of the recommended minimum support of | |||
| variables. A full list of variables is available in source code file | variables. A full list of variables is available in source code file | |||
| docs/nut-names.txt [gitvars] which serves as the Recording Document. | docs/nut-names.txt [gitvars], which serves as the Recording Document. | |||
| 4.2.8. PASSWORD | 4.2.8. PASSWORD | |||
| This command is a companion to USERNAME, and is used by a Management | This command is a companion to USERNAME and is used by a Management | |||
| Daemon to specify the password required to enter a Session with the | Daemon to specify the password required to enter a session with the | |||
| Attachment Daemon, see Section 2.9. | Attachment Daemon; see Section 2.9. | |||
| Command: PASSWORD <password> | Command: PASSWORD <password> | |||
| If the command succeeds, the response is OK, otherwise see the error | If the command succeeds, the response is OK; otherwise, see the error | |||
| responses, Section 4.3.2. | responses in Section 4.3.2. | |||
| For examples of the use of commands USERNAME and PASSWORD by | For examples of the use of commands USERNAME and PASSWORD by | |||
| administrative users, see Appendix E.2. | administrative users, see Appendix E.2. | |||
| ABNF: See variable password in Figure 5. | ABNF: See variable session-password in Figure 5. | |||
| 4.2.9. PRIMARY | 4.2.9. PRIMARY | |||
| In current practice, the Attachment Daemon records in local file | In current practice, the Attachment Daemon records in local file | |||
| upsd.users that an administrative user is a Primary. See | upsd.users that an administrative user is a Primary. See | |||
| Appendix E.1 for an example. When a Management Daemon starts up and | Appendix E.1 for an example. When a Management Daemon starts up and | |||
| opens a Session with the Attachment Daemon, it lays claim to being a | opens a session with the Attachment Daemon, it lays claim to being a | |||
| Primary by sending command PRIMARY to the Attachment Daemon, thus | Primary by sending command PRIMARY to the Attachment Daemon, thus | |||
| claiming that it has the required authority to perform such critical | claiming that it has the required authority to perform critical | |||
| actions as setting status symbol FSD. | actions, such as setting status symbol FSD. | |||
| Command: PRIMARY <upsname> | Command: PRIMARY <upsname> | |||
| where <upsname> is the name of the UPS. | <upsname> is the name of the UPS. | |||
| If the Attachment Daemon has the authority, the response is OK, | If the Attachment Daemon has the authority, the response is OK; | |||
| otherwise see the error responses in Section 4.3.2. | otherwise, see the error responses in Section 4.3.2. | |||
| Note: Historically, this command was known as MASTER. | | Note: Historically, this command was known as MASTER. | |||
| 4.2.10. PROTVER | 4.2.10. PROTVER | |||
| Return the version of the command/response protocol used by the | Return the version of the command/response protocol used by the | |||
| Attachment Daemon. This command is intended for human as well as | Attachment Daemon. This command is intended for human, as well as | |||
| program use. | program, use. | |||
| Command PROTVER | Command: PROTVER | |||
| For example, the following command line sequence in the Attachment | For example: the following command line sequence in the Attachment | |||
| Daemon: | Daemon | |||
| netcat localhost 3493 | netcat localhost 3493 | |||
| PROTVER | PROTVER | |||
| 1.3 | 1.3 | |||
| Notes: | Notes: | |||
| 1. There are no QUOTATION MARKS in the response. | 1. There are no quotation marks in the response. | |||
| 2. The version of the protocol returned by PROTVER is different to | 2. The version of the protocol returned by PROTVER is different than | |||
| the implementation version of the Attachment Daemon returned by | the implementation version of the Attachment Daemon returned by | |||
| VER. | VER. | |||
| 3. To ease migration, NUT version 2.8.0 also supports the equivalent | 3. To ease migration, NUT version 2.8.0 also supports the equivalent | |||
| NETVER command used in previous releases. See Section 8.2.4. | NETVER command used in previous releases. See Section 8.2.4. | |||
| ABNF: See variable protver in Figure 5. | ABNF: See variable protver in Figure 5. | |||
| 4.2.11. SET | 4.2.11. SET | |||
| The command calls for the Attachment Daemon to set a UPS variable to | The command calls for the Attachment Daemon to set a UPS variable to | |||
| a given value. Whether this has an effect on the UPS hardware is | a given value. Whether this has an effect on the UPS hardware is | |||
| specific to the Driver and the UPS model. Some variables are read- | specific to the Driver and the UPS model. Some variables are read- | |||
| only due to the design of the UPS or its driver. | only due to the design of the UPS or its Driver. | |||
| Command: SET VAR <upsname> <varname> "<value>" | Command: SET VAR <upsname> <varname> "<value>" | |||
| where <upsname> is the name of the UPS, <varname> is the UPS variable | <upsname> is the name of the UPS, <varname> is the UPS variable, and | |||
| and <value> is the value to be assigned to that variable. Note that | <value> is the value to be assigned to that variable. Note that the | |||
| the QUOTATION MARKS are part of the command. | quotation marks are part of the command. | |||
| If the command succeeds, the response is OK, otherwise see the error | If the command succeeds, the response is OK; otherwise, see the error | |||
| responses in Section 4.3.2. | responses in Section 4.3.2. | |||
| For example the command: SET VAR su700 ups.id "My UPS" and the | For example: command SET VAR su700 ups.id "My UPS" and response OK | |||
| response OK | ||||
| ABNF: See variable set in Figure 5. | ABNF: See the variable set in Figure 5. | |||
| 4.2.12. STARTTLS | 4.2.12. STARTTLS | |||
| The client tells the Attachment Daemon to switch to TLS [RFC8446] | The client tells the Attachment Daemon to switch to communication | |||
| encrypted communication. When the client receives OK it also | encrypted by TLS [RFC8446]. When the client receives OK, it also | |||
| switches to TLS encryption. | switches to TLS encryption. | |||
| Command: STARTTLS | Command: STARTTLS | |||
| If the command succeeds, the response is OK STARTTLS, otherwise see | If the command succeeds, the response is OK STARTTLS; otherwise, see | |||
| the error responses in Section 4.3.2. | the error responses in Section 4.3.2. | |||
| If the client does not send command STARTTLS to the Attachment Daemon | If the client does not send command STARTTLS to the Attachment | |||
| communication continues unencrypted, however an Attachment Daemon MAY | Daemon, communication continues unencrypted; however, an Attachment | |||
| refuse unencrypted communication. | Daemon MAY refuse unencrypted communication. | |||
| NUT 2.8.0 supports the encryption of communications between the | NUT 2.8.0 supports the encryption of communications between the | |||
| Attachment Daemon and the Management Daemon using TLS 1.3 [RFC8446] | Attachment Daemon and the Management Daemon using TLS 1.3 [RFC8446] | |||
| with X.509 v3 certificates as defined by [RFC5280] and updates. See | with X.509 v3 certificates, as defined by [RFC5280] and updates. See | |||
| Appendix D for details of the encryption of communications in | Appendix D for details of the encryption of communications in | |||
| previous relase 2.7.4. | previous release 2.7.4. | |||
| ABNF: See variable starttls in Figure 5. | ABNF: See variable starttls in Figure 5. | |||
| 4.2.12.1. Key Infrastructure and Self-signed Certificates | 4.2.12.1. Key Infrastructure and Self-Signed Certificates | |||
| _The very restricted nature of UPS management makes it of interest to | _The very restricted nature of UPS management makes it of interest to | |||
| consider self-signed certificates._ | consider self-signed certificates._ | |||
| In the World Wide Web, there are millions of servers and hundreds of | In the World Wide Web, there are millions of servers and hundreds of | |||
| millions of potential clients for each one. The servers do not know | millions of potential clients for each one. The servers do not know | |||
| who their clients will be, so they entrust the management of a Public | who their clients will be, so they entrust the management of a Public | |||
| Key Infrastructure (PKI) to Certificate Authorities that they trust, | Key Infrastructure (PKI) to Certificate Authorities that they trust. | |||
| for some value of trust. The encryption of communications between | The encryption of communications between the client and server | |||
| client and server requires that the browsers carry a list of | requires that the browsers carry a list of Certificate Authorities | |||
| Certificate Authorities which the clients have to trust. _This is a | that the clients have to trust. _This is a many-to-many | |||
| many-to-many relationship._ | relationship._ | |||
| The management of UPS units is not a many-to-many relationship, it is | The management of UPS units is not a many-to-many relationship; it is | |||
| frequently one-to-one. In the closely restrained world of UPS | frequently one to one. In the closely restrained world of UPS | |||
| management, there are a very limited number of clients for each | management, there are a very limited number of clients for each | |||
| server, rarely more than three, and unlike the World Wide Web the | server, rarely more than three, and unlike the World Wide Web, the | |||
| server administrators know exactly who they are. These clients visit | server administrators know exactly who they are. These clients visit | |||
| very few servers, typically one only. This situation is totally | very few servers, typically one only. This situation is totally | |||
| different to the World Wide Web. The use of external Certificate | different from the World Wide Web. The use of external Certificate | |||
| Authorities is a potential security weakness that must be accepted | Authorities is a potential security weakness that must be accepted | |||
| for the World Wide Web, but which can be avoided for UPS management | for the World Wide Web but which can be avoided for UPS management by | |||
| by either generating locally the private and public keys, or for | either generating the private and public keys locally or, for larger | |||
| larger organisations, using a Private Key Infrastructure.. | organizations, using a PKI. | |||
| The security policies for UPS management may be subordinate to an | The security policies for UPS management may be subordinate to an | |||
| organisation's own internal IT security plans and procedures, | organization's own internal IT security plans and procedures, | |||
| possibly based on [RFC7030] and [RFC8894], but in simple cases it is | possibly based on [RFC7030] and [RFC8894], but in simple cases, it is | |||
| possible to obtain better security using self-signed certificates. | possible to obtain better security using self-signed certificates. | |||
| 4.2.13. USERNAME | 4.2.13. USERNAME | |||
| The Attachment Daemon limits access to clients whose credentials | The Attachment Daemon limits access to clients whose credentials | |||
| match those in the file upsd.users. There is no anonymous access. A | match those in the file upsd.users. There is no anonymous access. A | |||
| Management Daemon program or script uses command USERNAME and its | Management Daemon program or script uses command USERNAME and its | |||
| companion command PASSWORD to open a Session with the Attachment | companion command PASSWORD to open a session with the Attachment | |||
| Daemon for an administrative user. Note that this command is for | Daemon for an administrative user. Note that this command is for | |||
| program or script use and is not the familiar login command typed on | program or script use and is not the familiar login command typed on | |||
| a command line to gain access to a shell. | a command line to gain access to a shell. | |||
| Command: USERNAME <username> | Command: USERNAME <username> | |||
| If the command succeeds, the response is OK, otherwise see the error | If the command succeeds, the response is OK; otherwise, see the error | |||
| responses in Section 4.3.2. | responses in Section 4.3.2. | |||
| For examples of the use of commands USERNAME and PASSWORD by | For examples of the use of commands USERNAME and PASSWORD by | |||
| administrative users, see Appendix E.2. | administrative users, see Appendix E.2. | |||
| ABNF: See variable username in Figure 5. | ABNF: See variable session-username in Figure 5. | |||
| 4.2.14. VER | 4.2.14. VER | |||
| Return the implementation version of the Attachment Daemon. This | Return the implementation version of the Attachment Daemon. This | |||
| command is intended for human as well as program use. | command is intended for human, as well as program, use. | |||
| Command VER | Command: VER | |||
| For example, the following command line sequence: | For example: the following command line sequence | |||
| netcat localhost 3493 | netcat localhost 3493 | |||
| VER | VER | |||
| Network UPS Tools upsd 2.8.0 - http://www.networkupstools.org/ | Network UPS Tools upsd 2.8.0 - http://www.networkupstools.org/ | |||
| Notes: | Notes: | |||
| 1. There are no QUOTATION MARKS in the response. | 1. There are no quotation marks in the response. | |||
| 2. The implementation version of the Attachment Daemon returned by | 2. The implementation version of the Attachment Daemon returned by | |||
| VER is different to the protocol version returned by PROTVER. | VER is different than the protocol version returned by PROTVER. | |||
| ABNF: See variable ver in Figure 5. | ABNF: See variable ver in Figure 5. | |||
| 4.3. Summary of Responses | 4.3. Summary of Responses | |||
| 4.3.1. Response when Command Succeeds | 4.3.1. Response When Command Succeeds | |||
| If the command succeeds, the response has the following command- | If the command succeeds, the response has the following command- | |||
| dependent form: | dependent form: | |||
| +==========+======================+================+============+ | +==========+=====================+================+============+ | |||
| | Command | Response | Reference | Note | | | Command | Response | Reference | Note | | |||
| +==========+======================+================+============+ | +==========+=====================+================+============+ | |||
| | ATTACH | OK | Section 4.2.1 | Was LOGIN | | | ATTACH | OK | Section 4.2.1 | Was LOGIN | | |||
| +----------+----------------------+----------------+------------+ | +----------+---------------------+----------------+------------+ | |||
| | DETACH | OK Goodbye | Section 4.2.2 | Was LOGOUT | | | DETACH | OK Goodbye | Section 4.2.2 | Was LOGOUT | | |||
| +----------+----------------------+----------------+------------+ | +----------+---------------------+----------------+------------+ | |||
| | FSD | OK FSD-SET | Section 4.2.3 | | | | FSD | OK FSD-SET | Section 4.2.3 | | | |||
| +----------+----------------------+----------------+------------+ | +----------+---------------------+----------------+------------+ | |||
| | GET | Sub command specific | Section 4.2.4 | | | | GET | Subcommand specific | Section 4.2.4 | | | |||
| +----------+----------------------+----------------+------------+ | +----------+---------------------+----------------+------------+ | |||
| | HELP | List of commands | Section 4.2.5 | | | | HELP | List of commands | Section 4.2.5 | | | |||
| +----------+----------------------+----------------+------------+ | +----------+---------------------+----------------+------------+ | |||
| | INSTCMD | OK | Section 4.2.6 | | | | INSTCMD | OK | Section 4.2.6 | | | |||
| +----------+----------------------+----------------+------------+ | +----------+---------------------+----------------+------------+ | |||
| | LIST | Sub command specific | Section 4.2.7 | | | | LIST | Subcommand specific | Section 4.2.7 | | | |||
| +----------+----------------------+----------------+------------+ | +----------+---------------------+----------------+------------+ | |||
| | PASSWORD | OK | Section 4.2.8 | | | | PASSWORD | OK | Section 4.2.8 | | | |||
| +----------+----------------------+----------------+------------+ | +----------+---------------------+----------------+------------+ | |||
| | PRIMARY | OK | Section 4.2.9 | | | | PRIMARY | OK | Section 4.2.9 | | | |||
| +----------+----------------------+----------------+------------+ | +----------+---------------------+----------------+------------+ | |||
| | PROTVER | Protocol version | Section 4.2.10 | Was NETVER | | | PROTVER | Protocol version | Section 4.2.10 | Was NETVER | | |||
| +----------+----------------------+----------------+------------+ | +----------+---------------------+----------------+------------+ | |||
| | SET | OK | Section 4.2.11 | | | | SET | OK | Section 4.2.11 | | | |||
| +----------+----------------------+----------------+------------+ | +----------+---------------------+----------------+------------+ | |||
| | STARTTLS | OK STARTTLS | Section 4.2.12 | | | | STARTTLS | OK STARTTLS | Section 4.2.12 | | | |||
| +----------+----------------------+----------------+------------+ | +----------+---------------------+----------------+------------+ | |||
| | USERNAME | OK | Section 4.2.13 | | | | USERNAME | OK | Section 4.2.13 | | | |||
| +----------+----------------------+----------------+------------+ | +----------+---------------------+----------------+------------+ | |||
| | VER | Program version | Section 4.2.14 | | | | VER | Program version | Section 4.2.14 | | | |||
| +----------+----------------------+----------------+------------+ | +----------+---------------------+----------------+------------+ | |||
| Table 2: Response if command succeeds | Table 2: Response If Command Succeeds | |||
| 4.3.2. Error Responses | 4.3.2. Error Responses | |||
| Error responses have the following format: | Error responses have the following format: | |||
| ERR <error-name> [<extra>] | ERR <error-name> [<extra>] | |||
| where <error-name> is a single word token taken from the 27 | <error-name> is a single word token taken from the 27 characters A-Z | |||
| characters A-Z and HYPHEN (MINUS). Implementations MAY if needed add | and hyphen (-). Implementations MAY, if needed, add an additional, | |||
| an additional optional <extra>. Current practice does not make use | optional <extra>. Current practice does not make use of this | |||
| of this possibility. | possibility. | |||
| The <error-name> may have one of the following values: | The <error-name> may have one of the following values: | |||
| +==============================+==================================+ | +==============================+==================================+ | |||
| | The error name token | Meaning | | | The Error Name Token | Meaning | | |||
| | <error-name> | | | | <error-name> | | | |||
| +==============================+==================================+ | +==============================+==================================+ | |||
| | ACCESS-DENIED | The client's host and/or | | | ACCESS-DENIED | The client's host and/or | | |||
| | | authentication details supplied | | | | authentication details supplied | | |||
| | | by USERNAME and PASSWORD are not | | | | by USERNAME and PASSWORD are not | | |||
| | | sufficient to execute the | | | | sufficient to execute the | | |||
| | | requested command. | | | | requested command. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | ALREADY-ATTACHED | The client has already sent a | | | ALREADY-ATTACHED | The client has already sent a | | |||
| | | successful ATTACH command for a | | | | successful ATTACH command for a | | |||
| | | given UPS and can't do it again. | | | | given UPS and can't do it again. | | |||
| | | | | ||||
| | | Note: Historically, this error | | ||||
| | | response was ALREADY-LOGGED-IN. | | ||||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | ALREADY-SET-PASSWORD | The client has already supplied | | | ALREADY-SET-PASSWORD | The client has already supplied | | |||
| | | a PASSWORD and is attempting to | | | | a PASSWORD and is attempting to | | |||
| | | repeat the command in the same | | | | repeat the command in the same | | |||
| | | Session. | | | | session. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | ALREADY-SET-USERNAME | The client has already supplied | | | ALREADY-SET-USERNAME | The client has already supplied | | |||
| | | a USERNAME, and is attempting to | | | | a USERNAME and is attempting to | | |||
| | | repeat the command within the | | | | repeat the command within the | | |||
| | | same Session. | | | | same session. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | CMD-NOT-SUPPORTED | The specified UPS doesn't | | | CMD-NOT-SUPPORTED | The specified UPS doesn't | | |||
| | | support the Instant Command. | | | | support the Instant Command. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | DATA-STALE | The Attachment Daemon is | | | DATA-STALE | The Attachment Daemon is | | |||
| | | connected to the Driver for the | | | | connected to the Driver for the | | |||
| | | UPS, but that driver isn't | | | | UPS, but that Driver isn't | | |||
| | | providing regular updates or has | | | | providing regular updates or has | | |||
| | | specifically marked the data as | | | | specifically marked the data as | | |||
| | | stale. Current practice is for | | | | stale. Current practice is for | | |||
| | | the Attachment Daemon to refuse | | | | the Attachment Daemon to refuse | | |||
| | | to provide the Management Daemon | | | | to provide the Management Daemon | | |||
| | | with variables on stale units to | | | | with variables on stale units to | | |||
| | | avoid false readings. | | | | avoid false readings. | | |||
| | | | | | | | | |||
| | | This generally means that the | | | | This generally means that the | | |||
| | | Driver is running, but it has | | | | Driver is running, but it has | | |||
| | | lost communication with the | | | | lost communication with the | | |||
| | | hardware. Check the physical | | | | hardware. Check the physical | | |||
| | | connection to the equipment. | | | | connection to the equipment. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | DRIVER-NOT-CONNECTED | The Attachment Daemon can't | | | DRIVER-NOT-CONNECTED | The Attachment Daemon can't | | |||
| | | perform the requested command, | | | | perform the requested command, | | |||
| | | since the Driver for that UPS is | | | | since the Driver for that UPS is | | |||
| | | not connected. This usually | | | | not connected. This usually | | |||
| | | means that the driver is not | | | | means that the Driver is not | | |||
| | | running, or if it is, is | | | | running or, if it is, is | | |||
| | | misconfigured. | | | | misconfigured. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | FEATURE-NOT-CONFIGURED | This instance of the Attachment | | | FEATURE-NOT-CONFIGURED | This instance of the Attachment | | |||
| | | Daemon hasn't been configured | | | | Daemon hasn't been configured | | |||
| | | properly to allow the requested | | | | properly to allow the requested | | |||
| | | feature to operate. In current | | | | feature to operate. In current | | |||
| | | practice this error response is | | | | practice, this error response is | | |||
| | | possible only for command | | | | possible only for command | | |||
| | | STARTTLS. | | | | STARTTLS. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | FEATURE-NOT-SUPPORTED | This instance of Attachment | | | FEATURE-NOT-SUPPORTED | This instance of Attachment | | |||
| | | Daemon does not support the | | | | Daemon does not support the | | |||
| | | requested feature. In current | | | | requested feature. In current | | |||
| | | practice this error response is | | | | practice, this error response is | | |||
| | | possible only for command | | | | possible only for command | | |||
| | | STARTTLS. | | | | STARTTLS. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | INSTCMD-FAILED | The Attachment Daemon failed to | | | INSTCMD-FAILED | The Attachment Daemon failed to | | |||
| | | deliver the Instant Command | | | | deliver the Instant Command | | |||
| | | request to the Driver. No | | | | request to the Driver. No | | |||
| | | further information is available | | | | further information is available | | |||
| | | to the client. This typically | | | | to the client. This typically | | |||
| | | indicates a dead or broken | | | | indicates a dead or broken | | |||
| | | driver. | | | | Driver. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | INVALID-ARGUMENT | The client sent an argument to a | | | INVALID-ARGUMENT | The client sent an argument to a | | |||
| | | command which is not recognized | | | | command that is not recognized | | |||
| | | or is otherwise not valid in | | | | or is otherwise not valid in | | |||
| | | this context. This is typically | | | | this context. This is typically | | |||
| | | caused by sending a valid | | | | caused by sending a valid | | |||
| | | command such as GET with a | | | | command, such as GET, with a | | |||
| | | subcommand which is not valid. | | | | subcommand that is not valid. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | INVALID-PASSWORD | The client sent a non valid | | | INVALID-PASSWORD | The client sent a nonvalid | | |||
| | | PASSWORD. | | | | PASSWORD. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | INVALID-USERNAME | The client sent an non valid | | | INVALID-USERNAME | The client sent a nonvalid | | |||
| | | USERNAME. | | | | USERNAME. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | INVALID-VALUE | The value specified in the | | | INVALID-VALUE | The value specified in the | | |||
| | | request is not valid. This | | | | request is not valid. This | | |||
| | | usually applies to a SET of an | | | | usually applies to a SET of an | | |||
| | | ENUM type which is using a value | | | | ENUM type that is using a value | | |||
| | | not in the list of allowed | | | | not in the list of allowed | | |||
| | | values. See Section 4.2.7.3. | | | | values. See Section 4.2.7.3. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | PASSWORD-REQUIRED | The command requires a PASSWORD | | | PASSWORD-REQUIRED | The command requires a PASSWORD | | |||
| | | for authentication, but the | | | | for authentication, but the | | |||
| | | client hasn't provided one. | | | | client hasn't provided one. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | READONLY | The requested variable in a SET | | | READONLY | The requested variable in a SET | | |||
| | | command is not writable. | | | | command is not writable. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| skipping to change at page 31, line 9 ¶ | skipping to change at line 1398 ¶ | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | USERNAME-REQUIRED | The command requires a USERNAME | | | USERNAME-REQUIRED | The command requires a USERNAME | | |||
| | | for authentication, but the | | | | for authentication, but the | | |||
| | | client hasn't provided one. | | | | client hasn't provided one. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| | VAR-NOT-SUPPORTED | The specified UPS doesn't | | | VAR-NOT-SUPPORTED | The specified UPS doesn't | | |||
| | | support the UPS variable in the | | | | support the UPS variable in the | | |||
| | | command. | | | | command. | | |||
| +------------------------------+----------------------------------+ | +------------------------------+----------------------------------+ | |||
| Table 3: Error responses | Table 3: Error Responses | |||
| | Note: Historically, this error response was ALREADY-LOGGED-IN. | ||||
| 4.4. An ABNF of the Commands | 4.4. An ABNF of the Commands | |||
| This section repeats the syntax of Section 4.2, but in Augmented | This section repeats the syntax of Section 4.2 but in Augmented | |||
| Bachus-Naur Form (ABNF). It does not define any additional feature. | Backus-Naur Form (ABNF). It does not define any additional features. | |||
| For further details of each command and the response, see | For further details of each command and the response, see | |||
| Section 4.2. | Section 4.2. | |||
| The commands may be presented in ABNF [RFC5234][RFC7405], and | The commands may be presented in ABNF [RFC5234] [RFC7405] and | |||
| represented using ASCII [RFC0020]. | represented using US-ASCII [RFC0020]. | |||
| Current practice tolerates mixed case command names, but it is | Current practice tolerates mixed-case command names, but it is | |||
| RECOMMENDED to use upper case only for commands. See Figure 5. | RECOMMENDED to use uppercase only for commands. See Figure 5. | |||
| ;------------------------------------------------------------------- | ;------------------------------------------------------------------- | |||
| ; This grammar is case sensitive. Terminal keywords SHOULD be | ; This grammar is case sensitive. Terminal keywords SHOULD be | |||
| ; written in upper case as shown. | ; written in uppercase, as shown. | |||
| ; The following basic rules written with upper case names are | ; The following basic rules written with uppercase names are | |||
| ; taken from RFC5234 Appendix B.1. | ; taken from RFC 5234, Appendix B.1. | |||
| SP = 1*%x20 ; At least one SPACE | SP = 1*%x20 ; At least one SPACE | |||
| LF = %x0A ; Linefeed | LF = %x0A ; Linefeed | |||
| DIGIT = %x30-39 ; Digit 0 through 9 | DIGIT = %x30-39 ; Digit 0 through 9 | |||
| ALPHA = %x41-5A / %x61-7A ; A-Z / a-z | ALPHA = %x41-5A / %x61-7A ; A-Z / a-z | |||
| DQUOTE = %x22 ; Double quote " | DQUOTE = %x22 ; Double quote " | |||
| VCHAR = %x21-7E ; Visible (printing) characters | VCHAR = %x21-7E ; Visible (printing) characters | |||
| ; Additional basic rules needed by this grammar | ; Additional basic rules needed by this grammar | |||
| LC = %x61-7A ; Letter a through z | LC = %x61-7A ; Letter a through z | |||
| DOT = 1%x2E ; Exactly one . | DOT = 1%x2E ; Exactly one . | |||
| COLON = 1%x3A ; Exactly one : | COLON = 1%x3A ; Exactly one : | |||
| AT = 1%x40 ; Exactly one @ | AT = 1%x40 ; Exactly one @ | |||
| SEP = 1"-" / 1"_" / 1"." ; A single - or _ or . | SEP = 1"-" / 1"_" / 1"." ; A single - or _ or . | |||
| JOIN = COLON / AT ; A single : or @ | JOIN = COLON / AT ; A single : or @ | |||
| ; Frequently used in this grammar | ; Frequently used in this grammar | |||
| cmdname = 1*LC *62(DOT 1*LC) ; E.g. load.off.delay | cmdname = 1*LC *62(DOT 1*LC) ; E.g., load.off.delay | |||
| upschar = DIGIT / ALPHA / SEP | upschar = DIGIT / ALPHA / SEP | |||
| ups = 1*ALPHA *62upschar ; E.g. Example-Mfg-999 | ups = 1*ALPHA *62upschar ; E.g., Example-Mfg-999 | |||
| group = ups ; E.g. HB (Not in common use) | group = ups ; E.g., HB (Not in common use) | |||
| hostname = ups ; E.g. example.com | hostname = ups ; E.g., example.com | |||
| port = 1*5DIGIT ; E.g. 3493 | port = 1*5DIGIT ; E.g., 3493 | |||
| upsname = [group COLON] ups [AT hostname [COLON port]] | upsname = [group COLON] ups [AT hostname [COLON port]] | |||
| ; Fully Qualified UPS name | ; Fully Qualified UPS name | |||
| ; E.g. HB:heartbeat1@example.com:3493 | ; E.g., | |||
| ; HB:heartbeat1@example.com:3493 | ||||
| username = ups ; E.g. Power-Dept.6 | username = ups ; E.g., Power-Dept.6 | |||
| varname = 1*LC *62( DOT 1*(DIGIT / LC) ) | varname = 1*LC *62( DOT 1*(DIGIT / LC) ) | |||
| ; E.g. outlet.1.status | ; E.g., outlet.1.status | |||
| ;------------------------------------------------------------------- | ;------------------------------------------------------------------- | |||
| commandLine = command LF ; LF is a single %x0A | commandLine = command LF ; LF is a single %x0A | |||
| command = attach / detach / fsd / get / help / instcmd / | command = attach / detach / fsd / get / help / instcmd / | |||
| list / password / primary / protver / set / | list / password / primary / protver / set / | |||
| starttls / username / ver | starttls / username / ver | |||
| ; | ; | |||
| attach = "ATTACH" SP upsname | attach = "ATTACH" SP upsname | |||
| ; | ; | |||
| detach = "DETACH" | detach = "DETACH" | |||
| ; | ; | |||
| skipping to change at page 32, line 47 ¶ | skipping to change at line 1486 ¶ | |||
| listrw / listups / listvar | listrw / listups / listvar | |||
| ; | ; | |||
| listclient = "CLIENT" SP upsname | listclient = "CLIENT" SP upsname | |||
| listcmd = "CMD" SP upsname | listcmd = "CMD" SP upsname | |||
| listenum = "ENUM" SP upsname SP varname | listenum = "ENUM" SP upsname SP varname | |||
| listrange = "RANGE" SP upsname SP varname | listrange = "RANGE" SP upsname SP varname | |||
| listrw = "RW" SP upsname | listrw = "RW" SP upsname | |||
| listups = "UPS" | listups = "UPS" | |||
| listvar = "VAR" SP upsname | listvar = "VAR" SP upsname | |||
| ; | ; | |||
| password = "PASSWORD" SP *63VCHAR | session-password = "PASSWORD" SP *63VCHAR | |||
| ; A sequence of printable characters defined | ; A sequence of printable characters defined | |||
| ; in a server configuration file. Local | ; in a server configuration file. Local | |||
| ; security practices may mandate a minimum | ; security practices may mandate a minimum | |||
| ; and maximum number of characters. | ; and maximum number of characters. | |||
| ; | ; | |||
| primary = "PRIMARY" SP upsname | primary = "PRIMARY" SP upsname | |||
| ; | ; | |||
| protver = "PROTVER" | protver = "PROTVER" | |||
| ; | ; | |||
| value = *63VCHAR ; Local practices may limit the choice of | value = *63VCHAR ; Local practices may limit the choice of | |||
| ; characters, and require non US-ASCII. | ; characters and require non-US-ASCII. | |||
| set = "SET" SP %s"VAR" SP upsname SP varname SP DQUOTE value DQUOTE | set = "SET" SP %s"VAR" SP upsname SP varname SP | |||
| DQUOTE value DQUOTE | ||||
| ; | ; | |||
| starttls = "STARTTLS" | starttls = "STARTTLS" | |||
| ; | ; | |||
| username = "USERNAME" SP username | session-username = "USERNAME" SP username | |||
| ; | ; | |||
| ver = "VER" | ver = "VER" | |||
| ;------------------------------------------------------------------- | ;------------------------------------------------------------------- | |||
| Figure 5: ABNF for the Commands | Figure 5: ABNF for the Commands | |||
| Notes: | Notes: | |||
| 1. _Implementation note:_ The ABNF is written using the provisions | 1. _Implementation note:_ The ABNF is written using the provisions | |||
| of [RFC5234] [RFC7405] which are US-ASCII based [RFC0020]. | of [RFC5234] and [RFC7405], which are US-ASCII based [RFC0020]. | |||
| 2. The grammar is case sensitive. The terminal key words SHOULD be | 2. The grammar is case sensitive. The terminal key words SHOULD be | |||
| written in upper case as specified. | written in uppercase, as specified. | |||
| 3. The repetition factor in front of an expression has the form | 3. The repetition factor in front of an expression has the form | |||
| <min>*<max> where <min> is the minimum number of repetitions and | <min>*<max>, where <min> is the minimum number of repetitions, | |||
| <max> is the maximum number. | and <max> is the maximum number. | |||
| 4. If <min> is omitted its value is 0. If <max> is omitted, its | 4. If <min> is omitted, its value is 0. If <max> is omitted, its | |||
| value is infinity. | value is infinity. | |||
| 5. The notation n*n meaning "exactly n copies" may be written as n. | 5. The notation n*n, meaning "exactly n copies", may be written as | |||
| n. | ||||
| 6. Square brackets around an expression mean that the expression is | 6. Square brackets around an expression mean that the expression is | |||
| optional. This could be written as 0*1. | optional. This could be written as 0*1. | |||
| 4.4.1. Responses to Commands | 4.4.1. Responses to Commands | |||
| The responses to the commands are encoded in US-ASCII [RFC0020] and | The responses to the commands are encoded in US-ASCII [RFC0020] and | |||
| fall into two groups: | fall into two groups: | |||
| 1. Short replies to action commands, see Section 4.3. | 1. Short replies to action commands; see Section 4.3. | |||
| 2. Long replies to requests for information. In this case the reply | 2. Long replies to requests for information. In this case, the | |||
| is sent in a sequence of messages. The last message will contain | reply is sent in a sequence of messages. The last message will | |||
| a line beginning END LIST . See for example Section 4.2.7.1. | contain a line beginning END LIST . For example, see | |||
| Section 4.2.7.1. | ||||
| 5. Statuses and Events | 5. Statuses and Events | |||
| 5.1. Status Symbols | 5.1. Status Symbols | |||
| These symbols resume the abstracted view of the UPS hardware | These symbols resume the abstracted view of the UPS hardware | |||
| maintained by the Attachment Daemon. The variable ups.status | maintained by the Attachment Daemon. The variable ups.status | |||
| contains one or more space-separated status symbols which together | contains one or more space-separated status symbols, which together | |||
| describe the UPS state at that instant. In current practice the | describe the UPS state at that instant. In current practice, the | |||
| Management Daemon will poll variable ups.status every 5 seconds with | Management Daemon will poll variable ups.status every 5 seconds with | |||
| a command such as GET VAR su700 ups.status and response such as VAR | a command, such as GET VAR su700 ups.status, and a response, such as | |||
| su700 ups.status "OB LB" to discover changes in the UPS status. | VAR su700 ups.status "OB LB", to discover changes in the UPS status. | |||
| These changes will indicate UPS events. | These changes will indicate UPS events. | |||
| +=========+======================================================+ | +=========+======================================================+ | |||
| | Status | Meaning | | | Status | Meaning | | |||
| | Symbol | | | | Symbol | | | |||
| +=========+======================================================+ | +=========+======================================================+ | |||
| | ALARM | The UPS reports that it requires intervention. | | | ALARM | The UPS reports that it requires intervention. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | BOOST | The UPS has determined that the voltage level of the | | | BOOST | The UPS has determined that the voltage level of the | | |||
| | | public power supply is too low, and is boosting it | | | | public power supply is too low and is boosting it to | | |||
| | | to the required level. The UPS continues to supply | | | | the required level. The UPS continues to supply the | | |||
| | | the protected system from the public power supply. | | | | protected system from the public power supply. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | BYPASS | The UPS is feeding current directly from the public | | | BYPASS | The UPS is feeding current directly from the public | | |||
| | | power supply to the protected system. The backup | | | | power supply to the protected system. The backup | | |||
| | | facilities are disconnected. This state allows | | | | facilities are disconnected. This state allows | | |||
| | | maintenance personnel to change the batteries | | | | maintenance personnel to change the batteries | | |||
| | | without interrupting the protected system. | | | | without interrupting the protected system. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | CAL | The UPS is calibrating itself, for example to | | | CAL | The UPS is calibrating itself, for example, to | | |||
| | | determine at what charge the LB status is raised or | | | | determine at what charge the LB status is raised or | | |||
| | | lowered. | | | | lowered. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | CHRG | The UPS battery is charging. This usually implies | | | CHRG | The UPS battery is charging. This usually implies | | |||
| | | that the UPS also has status OL, but may not be the | | | | that the UPS also has status OL but may not be the | | |||
| | | case if the UPS also has status OFF. | | | | case if the UPS also has status OFF. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | COMM | The Attachment Daemon has effective contact with the | | | COMM | The Attachment Daemon has effective contact with the | | |||
| | | UPS. | | | | UPS. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | DISCHRG | The UPS battery is discharging. This usually | | | DISCHRG | The UPS battery is discharging. This usually | | |||
| | | implies that the UPS also has status OB, but may not | | | | implies that the UPS also has status OB but may not | | |||
| | | be the case if the UPS also has status OFF. | | | | be the case if the UPS also has status OFF. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | FSD | This "Forced Shutdown" status signals that the final | | | FSD | This "Forced Shutdown" status signals that the final | | |||
| | | shutdown sequence has begun. | | | | shutdown sequence has begun. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | LB | Low Battery. The battery level of the UPS is below | | | LB | Low Battery. The battery level of the UPS is below | | |||
| | | a chosen limit. The UPS may be in status OL or OB. | | | | a chosen limit. The UPS may be in status OL or OB. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | NOCOMM | The Attachment Daemon has no effective contact with | | | NOCOMM | The Attachment Daemon has no effective contact with | | |||
| | | the UPS. | | | | the UPS. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | OB | On Battery. The UPS is taking energy from it's | | | OB | On Battery. The UPS is taking energy from its | | |||
| | | battery. The battery is discharging. A UPS must | | | | battery. The battery is discharging. A UPS must | | |||
| | | have status OB or OL, otherwise it is deemed dead. | | | | have status OB or OL; otherwise, it is deemed dead. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | OFF | The UPS is in state "Off". It does not react to | | | OFF | The UPS is in state "Off". It does not react to | | |||
| | | failure in the public power supply. The exact | | | | failure in the public power supply. The exact | | |||
| | | meaning depends on the model. | | | | meaning depends on the model. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | OL | Online. The UPS is online, receiving energy from | | | OL | Online. The UPS is online, receiving energy from | | |||
| | | the public power supply. The battery is charging. | | | | the public power supply. The battery is charging. | | |||
| | | A UPS must have status OB or OL, otherwise it is | | | | A UPS must have status OB or OL; otherwise, it is | | |||
| | | deemed dead. | | | | deemed dead. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | OVER | Overloaded. The UPS reports that the load on it is | | | OVER | Overloaded. The UPS reports that the load on it is | | |||
| | | beyond it's normal operating maximum. | | | | beyond its normal operating maximum. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | RB | Replace battery. The UPS reports that it's battery/ | | | RB | Replace battery. The UPS reports that its battery | | |||
| | | batteries should be replaced. | | | | or batteries should be replaced. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | TEST | Under test. The UPS is currently undergoing a test, | | | TEST | Under test. The UPS is currently undergoing a test | | |||
| | | which may have been called for manually or | | | | that may have been requested manually or internally. | | |||
| | | internally. | | ||||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | TICK | Heartbeat. A software UPS in the Attachment Daemon | | | TICK | Heartbeat. A software UPS in the Attachment Daemon | | |||
| | | provides a regular signal monitored by the | | | | provides a regular signal monitored by the | | |||
| | | Management Daemon as a way of verifying effective | | | | Management Daemon as a way of verifying effective | | |||
| | | end-to-end management. TICK and TOCK are | | | | end-to-end management. TICK and TOCK are | | |||
| | | companions, they are considered experimental. | | | | companions; they are considered experimental. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | TOCK | Heartbeat. See TICK | | | TOCK | Heartbeat. See TICK | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| | TRIM | The UPS has determined that the voltage level of the | | | TRIM | The UPS has determined that the voltage level of the | | |||
| | | public power supply is too high, and is reducing it | | | | public power supply is too high and is reducing it | | |||
| | | to the required level. The UPS continues to supply | | | | to the required level. The UPS continues to supply | | |||
| | | the protected system from the public power supply. | | | | the protected system from the public power supply. | | |||
| +---------+------------------------------------------------------+ | +---------+------------------------------------------------------+ | |||
| Table 4: UPS Status Symbols | Table 4: UPS Status Symbols | |||
| 5.2. Events | 5.2. Events | |||
| A Management Daemon detects the occurrence of a UPS Event from a | A Management Daemon detects the occurrence of a UPS event from a | |||
| change in the UPS status received from the Attachment Daemon. The | change in the UPS status received from the Attachment Daemon. The | |||
| following table summarizes the process. A status of "none" means | following table summarizes the process. A status of "none" means | |||
| that the status symbol is not present in the variable ups.status. | that the status symbol is not present in the variable ups.status. | |||
| The Management Daemon should retrieve the variable ups.status from | The Management Daemon should retrieve the variable ups.status from | |||
| the Attachment Daemon at regular intervals. If the interval is too | the Attachment Daemon at regular intervals. If the interval is too | |||
| short, compute and network resources will be wasted, but if the | short, compute and network resources will be wasted, but if the | |||
| interval is too large, the Management Daemon risks missing short- | interval is too large, the Management Daemon risks missing short- | |||
| lived changes in the UPS status. | lived changes in the UPS status. | |||
| A default value of 5 seconds is RECOMMENDED, but an implementation | A default value of 5 seconds is RECOMMENDED, but an implementation | |||
| MAY make this value configurable. By default the "old" status is | MAY make this value configurable. By default, the "old" status is | |||
| therefore the previous value retrieved 5 seconds ago. | therefore the previous value retrieved 5 seconds ago. | |||
| Current practice is for the Management Daemon to assign names to | Current practice is for the Management Daemon to assign names to | |||
| certain events. These is shown in the table in parentheses. | certain events. These are shown in the table in parentheses. | |||
| +=======+=========+===============++=========+========+=============+ | +=======+=========+===============++=========+========+=============+ | |||
| |Old | New |Event || Old | New |Event | | |Old | New |Event || Old | New |Event | | |||
| |status | status | || status | status | | | |Status | Status | || Status | Status | | | |||
| +=======+=========+===============++=========+========+=============+ | +=======+=========+===============++=========+========+=============+ | |||
| |none | ALARM |Alarm on || ALARM | none |Alarm off | | |none | ALARM |Alarm on || ALARM | none |Alarm off | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | BOOST |Boosting || BOOST | none |Not boosting | | |none | BOOST |Boosting || BOOST | none |Not boosting | | |||
| | | |voltage || | | | | | | |voltage || | | | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | BYPASS |Bypass on || BYPASS | none |Bypass off | | |none | BYPASS |Bypass on || BYPASS | none |Bypass off | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | CAL |Calibrating || CAL | none |Not | | |none | CAL |Calibrating || CAL | none |Not | | |||
| | | | || | |calibrating | | | | | || | |calibrating | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | CHRG |Charging || CHRG | none |Not charging | | |none | CHRG |Charging || CHRG | none |Not charging | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | COMM |UPS || COMM | none |See note 4 | | |none | COMM |UPS || COMM | none |See note 4 | | |||
| | | |communicating || | | | | | | |communicating || | | | | |||
| | | |(Event COMMOK) || | | | | | | |(event COMMOK) || | | | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | DISCHRG |Discharging || DISCHRG | none |Not | | |none | DISCHRG |Discharging || DISCHRG | none |Not | | |||
| | | | || | |discharging | | | | | || | |discharging | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | FSD |System shutdown|| FSD | none |Shutdown | | |none | FSD |System shutdown|| FSD | none |Shutdown | | |||
| | | |(Events FSD, || | |abandoned. | | | | |(events FSD, || | |abandoned. | | |||
| | | |SHUTDOWN) || | |See note 1 | | | | |SHUTDOWN) || | |See note 1 | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | LB |Low battery. || LB | none |Battery not | | |none | LB |Low battery. || LB | none |Battery not | | |||
| | | |See note 2 || | |low | | | | |See note 2 || | |low | | |||
| | | |(Event LOWBATT)|| | | | | | | |(event LOWBATT)|| | | | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | NOCOMM |UPS dead? See || NOCOMM | none |See note 4 | | |none | NOCOMM |UPS dead? See || NOCOMM | none |See note 4 | | |||
| | | |note 4 || | | | | | | |note 4 || | | | | |||
| | | |(Events || | | | | | | |(events || | | | | |||
| | | |COMMBAD, || | | | | | | |COMMBAD, || | | | | |||
| | | |NOCOMM) || | | | | | | |NOCOMM) || | | | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | OFF |UPS turned off || OFF | none |UPS not | | |none | OFF |UPS turned off || OFF | none |UPS not | | |||
| | | | || | |turned off | | | | | || | |turned off | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |OB | OL |Receiving power|| OL | OB |Power lost | | |OB | OL |Receiving power|| OL | OB |Power lost | | |||
| | | |(Event ONLINE) || | |(Event | | | | |(event ONLINE) || | |(event | | |||
| | | | || | |ONBATT) | | | | | || | |ONBATT) | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | OVER |UPS overloaded || OVER | none |Overload gone| | |none | OVER |UPS overloaded || OVER | none |Overload gone| | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | RB |Replace battery|| RB | none |Replacement | | |none | RB |Replace battery|| RB | none |Replacement | | |||
| | | |(Event || | |canceled | | | | |(event || | |canceled | | |||
| | | |REPLBATT) || | | | | | | |REPLBATT) || | | | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | TEST |Test starts || TEST | none |Test finished| | |none | TEST |Test starts || TEST | none |Test finished| | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | TICK |Heartbeat || TICK | none |No heartbeat.| | |none | TICK |Heartbeat || TICK | none |No heartbeat.| | |||
| | | |event. See || | |See note 3 | | | | |event. See || | |See note 3 | | |||
| | | |note 3 || | | | | | | |note 3 || | | | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | TOCK |Heartbeat || TOCK | none |No heartbeat.| | |none | TOCK |Heartbeat || TOCK | none |No heartbeat.| | |||
| | | |event. See || | |See note 3 | | | | |event. See || | |See note 3 | | |||
| | | |note 3 || | | | | | | |note 3 || | | | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| |none | TRIM |Trimming || TRIM | none |Not trimming | | |none | TRIM |Trimming || TRIM | none |Not trimming | | |||
| | | |voltage || | | | | | | |voltage || | | | | |||
| +-------+---------+---------------++---------+--------+-------------+ | +-------+---------+---------------++---------+--------+-------------+ | |||
| Table 5: Event deduction from status changes | Table 5: Event Deduction from Status Changes | |||
| Notes | ||||
| 1. Current practice does not include this event. | ||||
| 2. If the status OB is present, current practice takes Management | ||||
| Daemon reception of LB as an order to perform an emergency system | ||||
| shutdown. | ||||
| 3. The use of a software defined UPS to provide a heartbeat is | ||||
| experimental and is not part of common current practice. | ||||
| 4. Current practice is: if the UPS has not responded for 15 seconds, | Notes: | |||
| the Management Daemon assumes that the UPS is "_dead_" (Event | 1. Current practice does not include this event. | |||
| NOCOMM), and if the last known OL/OB status was OB a system | 2. If the status OB is present, current practice takes Management | |||
| shutdown, command FSD, is called for. | Daemon reception of LB as an order to perform an emergency | |||
| system shutdown. | ||||
| 3. The use of a software-defined UPS to provide a heartbeat is | ||||
| experimental and is not part of common current practice. | ||||
| 4. Current practice is the following: if the UPS has not | ||||
| responded for 15 seconds, the Management Daemon assumes that | ||||
| the UPS is _dead_ (event NOCOMM), and if the last known OL/OB | ||||
| status was OB, a system shutdown (command FSD) is requested. | ||||
| 6. Security Considerations | 6. Security Considerations | |||
| 6.1. Current General Security Practice | 6.1. Current General Security Practice | |||
| Experience over the last 20 years shows that new UPS management | Experience over the last 20 years shows that new UPS management | |||
| software releases are not frequent, and when installed, stay | software releases are not frequent and, when installed, stay | |||
| unmodified for some years. This is probably because UPS management | unmodified for some years. This is probably because UPS management | |||
| is a mature activity, part of site mangement. A limited number of | is a mature activity, part of site management. A limited number of | |||
| system administrators have access to the UPS hardware and software | system administrators have access to the UPS hardware and software | |||
| and tend to assume a certain "security by obscurity" since many | and tend to assume a certain "security by obscurity" since many | |||
| installations have a configuration as shown in figure 6 which uses | installations have a configuration like the one shown in Figure 6, | |||
| port 3493/TCP (nut) between the two daemons running in the same | which uses port 3493/TCP (nut) between the two daemons running in the | |||
| system. The traffic is often not encrypted, and when encrypted uses | same system. The traffic is often not encrypted, and when it is | |||
| deprecated early versions of SSL/TLS. | encrypted, it uses deprecated early versions of SSL/TLS. | |||
| ,-----, ,--------------------,---------------------, | ,-----, ,--------------------,---------------------, | |||
| | UPS |---| Attachment <-Commands Management | | | UPS |---| Attachment <-Commands Management | | |||
| | |===| Daemon Responses-> Daemon | | | |===| Daemon Responses-> Daemon | | |||
| /-----\ '--------------------'---------------------' | /-----\ '--------------------'---------------------' | |||
| Listens on | Listens on | |||
| port 3493/TCP | port 3493/TCP | |||
| for localhost | for localhost | |||
| Figure 6: Common single-system configuration | Figure 6: Common Single-System Configuration | |||
| This situation is now changing as low cost processors become | This situation is now changing as low-cost processors become | |||
| available, costing significantly less than a UPS unit. This | available, costing significantly less than a UPS unit. This | |||
| evolution makes it interesting to shift to a configuration as shown | evolution makes it interesting to shift to a configuration like the | |||
| in figure 7, but it also exacerbates the security weakness of figure | one shown in Figure 7, but it also exacerbates the security weakness | |||
| 6 since the traffic between the daemons is now over an exposed | of Figure 6, since the traffic between the daemons is now over an | |||
| network. | exposed network. | |||
| ,-----,------------, ,--------------, | ,-----,------------, ,--------------, | |||
| | UPS - Attachment | <-Commands | Management | | | UPS - Attachment | <-Commands | Management | | |||
| | | Daemon | Responses-> | Daemon | | | | Daemon | Responses-> | Daemon | | |||
| /-----'------------\ '--------------' | /-----'------------\ '--------------' | |||
| Listens on | Listens on | |||
| port 3493/TCP | port 3493/TCP | |||
| Figure 7: Integration of UPS and Attachment Daemon | Figure 7: Integration of UPS and Attachment Daemon | |||
| These security issues raised by UPS management are those of the power | These security issues raised by UPS management are those of the power | |||
| industry in general: they are addressed in detail in IEC Technical | industry in general; they are addressed in detail in IEC Technical | |||
| Specification 62351 [IEC62351-1]. In addition to equipment security, | Specification 62351 [IEC62351-1]. In addition to equipment security, | |||
| cyber security is now an essential consideration. | cyber security is now an essential consideration. | |||
| Quoting from IEC 62351-1[IEC62351-1], Introduction to the standard, | Quoting from IEC 62351-1[IEC62351-1], Introduction to the standard, | |||
| clause 5.2.3.5: | clause 5.2.3.5: | |||
| | With the computer systems for power operations presumably kept | | With the computer systems for power operations presumably kept | |||
| | isolated from the Internet, many utility personnel do not see any | | isolated from the Internet, many utility personnel do not see any | |||
| | reason for adding security measures to these systems. However, as | | reason for adding security measures to these systems. However, as | |||
| | clearly seen from these Subclauses, this may not be true anymore | | clearly seen from these Subclauses, this may not be true anymore | |||
| | as networking becomes more prevalent and additional information | | as networking becomes more prevalent and additional information | |||
| | access requirements grow. | | access requirements grow. | |||
| In IEC 62351-1[IEC62351-1] clause 5.3.5 lists typical security | In IEC 62351-1[IEC62351-1], clause 5.3.5 lists typical security | |||
| attacks: Eavesdropping, Masquerade, Man-in-the-Middle, Replay, | attacks: Eavesdropping, Masquerade, Man-in-the-Middle, Replay, and | |||
| Resource Exhaustion. RFC3552 [RFC3552] adds message insersion / | Resource Exhaustion. [RFC3552] adds message insertion/deletion/ | |||
| deletion / modification, and denial of service. | modification and denial of service. | |||
| Let's look more closely at these requirements: | Let's look more closely at these requirements: | |||
| * Eavesdropping, see Section 6.3.1 | * Eavesdropping; see Section 6.3.1 | |||
| * Man-in-the-Middle, see Section 6.3.2 | * Man-in-the-Middle; see Section 6.3.2 | |||
| * Masquerade, see Section 6.3.3 | * Masquerade; see Section 6.3.3 | |||
| * Message insersion, deletion, modification, see Section 6.3.4 | * Message insertion, deletion, and modification; see Section 6.3.4 | |||
| * Replay, see Section 6.3.5 | * Replay; see Section 6.3.5 | |||
| * Resource Exhaustion, Denial of Service, see Section 6.3.6 | * Resource Exhaustion and Denial of Service; see Section 6.3.6 | |||
| 6.2. Communication Security Requirements | 6.2. Communication Security Requirements | |||
| Enforcing secure communication requires tightening up the Attachment | Enforcing secure communication requires tightening up the Attachment | |||
| Daemon to require the use of command STARTTLS for commands sent over | Daemon to require the use of command STARTTLS for commands sent over | |||
| the global Internet. In such a situation an Attachment Daemon | the global Internet. In such a situation, an Attachment Daemon | |||
| listening for traffic other than from the localhost: | listening for traffic other than from localhost: | |||
| 1. SHOULD require and accept command STARTTLS, | 1. SHOULD require and accept command STARTTLS, | |||
| 2. MUST encrypt all communication with a Management Daemon, | 2. MUST encrypt all communication with a Management Daemon, and | |||
| 3. SHALL refuse all non-encrypted commands except an initial | 3. SHALL refuse all non-encrypted commands, except an initial | |||
| STARTTLS. | STARTTLS. | |||
| Notes: | Notes: | |||
| * The SHOULD rather than MUST in Section 6.2, Paragraph 2, Item 1 | * The SHOULD, rather than MUST, in Section 6.2, Paragraph 2, Item 1 | |||
| above allows system administrators to enforce secure communication | above allows system administrators to enforce secure communication | |||
| using other techniques which do not involve the STARTTLS command. | using other techniques that do not involve the STARTTLS command. | |||
| * If an Attachment Daemon requires that all commands be encrypted as | * If an Attachment Daemon requires that all commands be encrypted as | |||
| required by the MUST in Section 6.2, Paragraph 2, Item 2 above, | required by the MUST in Section 6.2, Paragraph 2, Item 2 above, | |||
| then automatically each Management Daemon MUST encrypt as well, | then, automatically, each Management Daemon MUST encrypt as well, | |||
| since it has to do so in order to gain access. | since it has to do so in order to gain access. | |||
| * The SHALL in Section 6.2, Paragraph 2, Item 3 above applies to | * The SHALL in Section 6.2, Paragraph 2, Item 3 above applies to | |||
| traffic from the global Internet. An Attachment Daemon MAY accept | traffic from the global Internet. An Attachment Daemon MAY accept | |||
| unencrypted commands from localhost if the local installation's | unencrypted commands from localhost if the local installation's | |||
| security practices allow it, for example in a dedicated appliance. | security practices allow it, for example, in a dedicated | |||
| appliance. | ||||
| Firewalls SHOULD be used to restrict the communication between the | Firewalls SHOULD be used to restrict the communication between the | |||
| Attachment Daemon and the accepted Management Daemons, prohibiting | Attachment Daemon and the accepted Management Daemons, prohibiting | |||
| and discarding traffic from any systems that are not part of the | and discarding traffic from any systems that are not part of the | |||
| envisioned power management setup. Note: See Section 6.2, Paragraph | envisioned power management setup. Note: See Section 6.2, Paragraph | |||
| 4, Item 1 above on the use of SHOULD. | 4, Item 1 above on the use of SHOULD. | |||
| 6.2.1. Certificate security | 6.2.1. Certificate Security | |||
| In long-lived installations such as those found in UPS management, | In long-lived installations, such as those found in UPS management, | |||
| careful certificate management is essential, whether the certificate | careful certificate management is essential, whether the certificate | |||
| is provided by a Certificate Authority, or is a self-signed | is provided by a Certificate Authority or is a self-signed | |||
| certificate. For example the specification of expiration times of | certificate. For example, the expiration times of both the | |||
| both the certificate containing the public key and the signing | certificate containing the public key and the signing certificate | |||
| certificate. | should be specified. | |||
| 6.3. Attacks and Defences | 6.3. Attacks and Defenses | |||
| 6.3.1. Eavesdropping | 6.3.1. Eavesdropping | |||
| The defence against eavesdropping is encryption of the commands and | The defense against eavesdropping is encryption of the commands and | |||
| responses passed between client Management Daemon and server | responses passed between the client Management Daemon and server | |||
| Attachment Daemon. The protocol provides command STARTTLS, see | Attachment Daemon. The protocol provides command STARTTLS, see | |||
| Section 4.2.12, which calls on the Attachment Daemon to support TLS | Section 4.2.12, which calls on the Attachment Daemon to support TLS | |||
| encryption of the communication. If this command is accepted, the | encryption of the communication. If this command is accepted, the | |||
| Management Daemon also encrypts. | Management Daemon also encrypts. | |||
| In current NUT Project practice, the use of TLS is optional, however | In current NUT Project practice, the use of TLS is optional; however, | |||
| a Management Daemon may refuse to accept unencrypted communication. | a Management Daemon may refuse to accept unencrypted communication. | |||
| This is done by setting declarations FORCESSL to 1 and CERTVERIFY to | This is done by setting declarations FORCESSL to 1 and CERTVERIFY to | |||
| 1 in the Management Daemon configuration file. | 1 in the Management Daemon configuration file. | |||
| 6.3.1.1. Misplaced declarations requiring TLS | 6.3.1.1. Misplaced Declarations Requiring TLS | |||
| A further weakness is that the FORCESSL and CERTVERIFY declarations | A further weakness is that the FORCESSL and CERTVERIFY declarations, | |||
| which enforce use of encryption are in the client Management Daemon | which enforce use of encryption, are in the client Management Daemon | |||
| configuration file and not in the Attachment Daemon. Secure practice | configuration file and not in the Attachment Daemon. Secure practice | |||
| requires enforcement by the server Attachment Daemon rather than a | requires enforcement by the server Attachment Daemon, rather than a | |||
| possibly rogue client Management Daemon out on the Internet. | possibly rogue client Management Daemon out on the Internet. | |||
| This weakness may be mitigated with strict firewall rules which would | This weakness may be mitigated with strict firewall rules that would | |||
| prevent the rogue client Management Daemon from accessing the | prevent the rogue client Management Daemon from accessing the | |||
| Attachment Daemon. | Attachment Daemon. | |||
| 6.3.1.2. Weak protection in previous version 2.7.4 | 6.3.1.2. Weak Protection in Previous Version 2.7.4 | |||
| Although version 2.8.0 of NUT supports TLS 1.3 [RFC8446] with X.509 | Although version 2.8.0 of NUT supports TLS 1.3 [RFC8446] with X.509 | |||
| v3 certificates as defined by RFC5280 [RFC5280], previous version | v3 certificates as defined by [RFC5280], previous version 2.7.4 only | |||
| 2.7.4 only supported earlier SSL/TLS versions. To overcome this | supported earlier SSL/TLS versions. To overcome this weakness, The | |||
| weakness, The following techniques have been used: | following techniques have been used: | |||
| * Shims, see Appendix D.1 | * Shims; see Appendix D.1 | |||
| * TLS tunnel, see Appendix D.2 | * TLS tunnel; see Appendix D.2 | |||
| * Virtual Private Network, VPN, see Appendix D.3 | * Virtual Private Network (VPN); see Appendix D.3 | |||
| * Virtual Local Area network, VLAN, see Appendix D.4 | * Virtual Local Area Network (VLAN); see Appendix D.4 | |||
| 6.3.2. Man in the Middle | 6.3.2. Man-in-the-Middle | |||
| The protocol relies on TLS encryption to prevent man-in-the-middle | The protocol relies on TLS encryption to prevent man-in-the-middle | |||
| attacks. See Appendix D for defense methods used for previous NUT | attacks. See Appendix D for defense methods used for previous NUT | |||
| version 2.7.4. | version 2.7.4. | |||
| 6.3.3. Masquerade Attack: Agent Verification | 6.3.3. Masquerade Attack: Agent Verification | |||
| The protocol allows a malicious client acting as an Management Daemon | The protocol allows a malicious client acting as a Management Daemon | |||
| to send command FSD to an Attachment Daemon to shut down a working | to send command FSD to an Attachment Daemon to shut down a working | |||
| system and it's power supply as described in The Shutdown Story, see | system and its power supply, as described in The Shutdown Story | |||
| Appendix B. Similarly, a malicious client could turn off the UPS | section (see Appendix B). Similarly, a malicious client could turn | |||
| power outlets causing the system to fail. | off the UPS power outlets, causing the system to fail. | |||
| The protocol provides commands USERNAME, see Section 4.2.13, and | The protocol provides commands USERNAME (see Section 4.2.13) and | |||
| PASSWORD, see Section 4.2.8, which allow an administrative user in a | PASSWORD (see Section 4.2.8), which allow an administrative user in a | |||
| Management Daemon to authenticate itself to the Attachment Daemon, as | Management Daemon to authenticate itself to the Attachment Daemon, as | |||
| a defence against masquerade attacks. The administrative user name | a defense against masquerade attacks. The administrative username | |||
| and password need protection against local malicious users. This is | and password need protection against local malicious users. This is | |||
| done by restricting access to the configuration files. | done by restricting access to the configuration files. | |||
| 6.3.4. Message insertion, deletion, modification | 6.3.4. Message Insertion, Deletion, and Modification | |||
| The protocol relies on TLS encryption to prevent message insertion, | The protocol relies on TLS encryption to prevent message insertion, | |||
| deletion and modification attacks. See Appendix D for defense | deletion, and modification attacks. See Appendix D for defense | |||
| methods used for previous NUT version 2.7.4. | methods used for previous NUT version 2.7.4. | |||
| 6.3.5. Replay | 6.3.5. Replay | |||
| There are two cases: | There are two cases: | |||
| 1. The replay is from a system other than an approved Management | 1. The replay is from a system other than an approved Management | |||
| Daemon: the protocol relies on a firewall to block the traffic. | Daemon, i.e., the protocol relies on a firewall to block the | |||
| traffic. | ||||
| 2. The replay is from an approved Management Daemon: the protocol | 2. The replay is from an approved Management Daemon. i.e., the | |||
| relies on the Management Daemon's own security to prevent | protocol relies on the Management Daemon's own security to | |||
| unauthorised access. | prevent unauthorized access. | |||
| 6.3.6. Denial of Service | 6.3.6. Denial of Service | |||
| The protocol relies on a very tightly specified firewall to prevent | The protocol relies on a very tightly specified firewall to prevent | |||
| denial of service attacks. Only designated client Management Daemons | denial-of-service attacks. Only designated client Management Daemons | |||
| should be able to reach the server Attachment Daemon. | should be able to reach the server Attachment Daemon. | |||
| 7. IANA Considerations | 7. IANA Considerations | |||
| The protocol specified by this text runs over port 3493/TCP (nut) | The protocol specified by this text runs over port 3493/TCP (nut), | |||
| registered by the NUT (Network UPS Tools) project. | which is registered by the Network UPS Tools (NUT) Project. | |||
| This document will be added to the registration's reference field. | This document has been added to the registration's Reference field in | |||
| the "Service Name and Transport Protocol Port Number Registry" | ||||
| [Registry]. | ||||
| 8. Implementation Status | 8. Implementation Status | |||
| This section presents a very short summary of the status of the | This section presents a very short summary of the status of the | |||
| Network UPS Tools project. | Network UPS Tools project. | |||
| * May 1996: The first hack as a cron job. | * May 1996: The first hack as a cron job. | |||
| * September 1997: The first server-client code. | * September 1997: The first server-client code. | |||
| * March 1998: First public release. | * March 1998: First public release. | |||
| * June 1999: Code rewrite with a UPS driver smartups, an Attachment | * June 1999: Code rewrite with a UPS Driver smartups, an Attachment | |||
| Daemon upsd and a simple Management Daemon. | Daemon upsd, and a simple Management Daemon. | |||
| * September 1999: The project became "Network UPS Tools". The | * September 1999: The project became "Network UPS Tools". The | |||
| Management Daemon upsmon supported primary/secondary | Management Daemon upsmon supported Primary/Secondary | |||
| configurations. | configurations. | |||
| * June 2001: Common core for multiple drivers. | * June 2001: Common core for multiple Drivers. | |||
| * May 2002: IANA granted port 3493/TCP (nut). August: release | * May 2002: IANA granted port 3493/TCP (nut). August: release | |||
| 1.0.0. November: OpenSSL support. | 1.0.0. November: OpenSSL support. | |||
| * April 2003: The initial set of command and variable names was | * April 2003: The initial set of command and variable names was | |||
| designed. | designed. | |||
| * February 2005: Arnaud Quette took over the project lead from | * February 2005: Arnaud Quette took over the project lead from | |||
| Russell Kroll. | Russell Kroll. | |||
| * March 2016: Version 2.7.4 released, supported over 100 device | * March 2016: Version 2.7.4 released, supported over 100 device | |||
| manufacturers and hundreds of UPS models. | manufacturers and hundreds of UPS models. | |||
| * November 2020: Evgeny "Jim" Klimov took over project lead from | * November 2020: Evgeny "Jim" Klimov took over project lead from | |||
| Arnaud Quette. | Arnaud Quette. | |||
| * May 2022: Version 2.8.0 released, supporting protocol version 1.3. | * May 2022: Version 2.8.0 released, supporting protocol version 1.3. | |||
| See [githist] and [History] for a detailed history of the NUT | See [githist] and Appendix J [History] for a detailed history of the | |||
| Project. | NUT Project. | |||
| 8.1. Inclusion in Software Distributions | 8.1. Inclusion in Software Distributions | |||
| The programs upsd, upsmon, upssched, upsc, upscmd and upsrw have been | The programs upsd, upsmon, upssched, upsc, upscmd, and upsrw have | |||
| included in the package known as "nut" in the package systems of many | been included in the package known as "nut" in the package systems of | |||
| distributions: all the major Linux distributions, and Unix | many distributions, i.e., all the major Linux distributions and Unix | |||
| distributions such as OpenBSD and OpenSolaris. A Microsoft Windows | distributions, such as OpenBSD and OpenSolaris. A Microsoft Windows | |||
| version has been developed but was not maintained. | version has been developed but was not maintained. | |||
| 8.2. Recommended Minimum Support | 8.2. Recommended Minimum Support | |||
| The features provided by current UPS units vary widely. However | The features provided by current UPS units vary widely. However, | |||
| experience shows that a minimum feature set is needed for | experience shows that a minimum feature set is needed for | |||
| satisfactory use of the NUT Project software. A full list of | satisfactory use of the NUT Project software. A full list of | |||
| variables is available in source code file docs/nut-names.txt | variables is available in source code file docs/nut-names.txt | |||
| [gitvars] which serves as the Recording Document. | [gitvars], which serves as the Recording Document. | |||
| 8.2.1. Desktop PC Variables | 8.2.1. Desktop PC Variables | |||
| The following variables form a minimum set suitable for Desktop PC. | The following variables form a minimum set suitable for a desktop PC. | |||
| It is expected that on public power supply failure, the PC will be | It is expected that, on public power supply failure, the PC will be | |||
| halted. It will not restart automatically when power returns. | halted. It will not restart automatically when power returns. | |||
| * battery.charge | * battery.charge | |||
| * battery.charge.low | * battery.charge.low | |||
| * device.mfr | * device.mfr | |||
| * device.model | * device.model | |||
| * ups.status with the minimum status symbol set OL OB LB FSD, see | * ups.status with the minimum status symbol set OL OB LB FSD; see | |||
| Section 5.1. | Section 5.1 | |||
| 8.2.2. Unattended Servers, Additional Variables | 8.2.2. Unattended Servers and Additional Variables | |||
| The following additional variables are needed in a minimum set | The following additional variables are needed in a minimum set | |||
| suitable for an unattended server. It is expected that on public | suitable for an unattended server. It is expected that, on public | |||
| power supply failure, the server will be halted. It will restart | power supply failure, the server will be halted. It will restart | |||
| automatically when power returns. | automatically when power returns. | |||
| * battery.date | * battery.date | |||
| * device.serial | * device.serial | |||
| * ups.delay.shutdown | * ups.delay.shutdown | |||
| * ups.delay.start | * ups.delay.start | |||
| 8.2.3. Commands and other Technical Terms | 8.2.3. Commands and Other Technical Terms | |||
| Satisfactory use of the NUT Project software requires support for all | Satisfactory use of the NUT Project software requires support for all | |||
| the commands specified in protocol version 1.3, software version | the commands specified in protocol version 1.3, software version | |||
| 2.8.0. | 2.8.0. | |||
| 8.2.4. Support for Earlier Versions | 8.2.4. Support for Earlier Versions | |||
| In order to ease migration from software version 2.7.4 which | In order to ease migration from software version 2.7.4, which | |||
| supported protocol version 1.2, software version 2.8.0 also supports | supported protocol version 1.2, software version 2.8.0 also supports | |||
| the technical terms used in protocol version 1.2. See Appendix C for | the technical terms used in protocol version 1.2. See Appendix C for | |||
| the differences. | the differences. | |||
| 9. Acknowledgments | 9. References | |||
| This document is based on the NUT Project documentation [devguide]. | ||||
| The editor acknowledges the work of Charles Lepple, Arjen de Korte, | ||||
| Arnaud Quette, Jim Klimov, Russell Kroll, Manuel Wolfshant, Greg | ||||
| Troxel, Mark Hansen and many others who contribute to the nut-upsuser | ||||
| [nut-upsuser]. and nut-upsdev [nut-upsdev] mailing lists. | ||||
| The source for this document is marked up using an SGML DTD [SGML] | ||||
| and an XML meta-DTD as defined by HyTime Annex A [HyTimeA]. Unlike | ||||
| XML, SGML offers markup minimisation, and the source document takes | ||||
| advantage of this. The osgmlnorm [sgmlnorm] program generates XML | ||||
| which program xml2rfc [RFC7991] uses to prepare the HTML and text | ||||
| renderings. The editor acknowledges the help received from Carsten | ||||
| Bormann and Julian Reschke in the xml2rfc mailing list. | ||||
| Many helpful comments were received from Eliot Lear, Bart Smit, David | ||||
| Zomaya, Joyce Norris, and Ted Mittelstaedt. | ||||
| 10. Normative References | 9.1. Normative References | |||
| [RFC0020] Cerf, V., "ASCII format for network interchange", STD 80, | [RFC0020] Cerf, V., "ASCII format for network interchange", STD 80, | |||
| RFC 20, DOI 10.17487/RFC0020, October 1969, | RFC 20, DOI 10.17487/RFC0020, October 1969, | |||
| <https://www.rfc-editor.org/info/rfc20>. | <https://www.rfc-editor.org/info/rfc20>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| skipping to change at page 45, line 27 ¶ | skipping to change at line 2067 ¶ | |||
| <https://www.rfc-editor.org/info/rfc5234>. | <https://www.rfc-editor.org/info/rfc5234>. | |||
| [RFC7405] Kyzivat, P., "Case-Sensitive String Support in ABNF", | [RFC7405] Kyzivat, P., "Case-Sensitive String Support in ABNF", | |||
| RFC 7405, DOI 10.17487/RFC7405, December 2014, | RFC 7405, DOI 10.17487/RFC7405, December 2014, | |||
| <https://www.rfc-editor.org/info/rfc7405>. | <https://www.rfc-editor.org/info/rfc7405>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| 11. Informative References | 9.2. Informative References | |||
| [devguide] "Network UPS Tools (NUT) Project Developer Guide", | [C2ndEd] Kernighan, B. and D. Ritchie, "The C Programming | |||
| Language", 2nd edition, Prentice Hall Software Series, | ||||
| ISBN 0-13-110362-8, 1988. | ||||
| [devguide] Kroll, R., Quette, A., Lepple, C., and P. Selinger, | ||||
| "Network UPS Tools Project Developer Guide", | ||||
| <https://networkupstools.org/docs/developer-guide.chunked/ | <https://networkupstools.org/docs/developer-guide.chunked/ | |||
| ar01s09.html>. | ar01s09.html>. | |||
| [Documentation] | [Documentation] | |||
| "Network UPS Tools Documentation", | "Network UPS Tools Documentation", | |||
| <https://networkupstools.org/documentation.html>. | <https://networkupstools.org/documentation.html>. | |||
| [githist] "GitHub Network UPS Tools code repository, project | [githist] "The Network UPS Tools repository, project history", July | |||
| history", | 2022, | |||
| <https://github.com/networkupstools/nut/blob/master/docs/ | <https://github.com/networkupstools/nut/blob/master/docs/ | |||
| history.txt>. | history.txt>. | |||
| [gitstats] "GitHub Network UPS Tools code repository, status names", | [gitvars] "The Network UPS Tools repository, variable names", April | |||
| <https://github.com/networkupstools/nut/blob/master/ | 2022, | |||
| clients/status.h>. | ||||
| [gitvars] "GitHub Network UPS Tools code repository, variable | ||||
| names", | ||||
| <https://github.com/networkupstools/nut/blob/master/docs/ | <https://github.com/networkupstools/nut/blob/master/docs/ | |||
| nut-names.txt>. | nut-names.txt>. | |||
| [History] "Network UPS Tools User Manual, Appendix J Project | [History] Kroll, R., Quette, A., and A. de Korte, "Network UPS Tools | |||
| history", | User Manual", May 2022, | |||
| <https://networkupstools.org/docs/user-manual.pdf>. | <https://networkupstools.org/docs/user-manual.pdf>. | |||
| [HyTimeA] "International Standard ISO/IEC 10744 -- Hypermedia/Time- | [HyTimeA] ISO/IEC, "Information technology -- Hypermedia/Time-based | |||
| based Structuring Language, Annex A, SGML Extended | Structuring Language (HyTime)", ISO/IEC 10744:1997, August | |||
| Facilities", ISO/IEC JTC 1/SC 34 Document description and | 1997. | |||
| processing languages, 1997. | ||||
| [IEC62351-1] | [IEC62351-1] | |||
| "IEC TS 62351-1 Power systems management and associated | IEC, "Power systems management and associated information | |||
| information exchange -- Data and communications security. | exchange -- Data and communications security. Part 1: | |||
| Part 1: Communication network and system security -- | Communication network and system security -- Introduction | |||
| Introduction to security issues", IEC Technical | to security issues", 35 pages, TC 57 - Power systems | |||
| Specification Reference number IEC/TS 62351-1:2007(E), 35 | management and associated information exchange, IEC TS | |||
| pages, CHF 205, Technical Committee TC 57 - Power systems | 62351-1:2007, May 2007, <https://nanopdf.com/download/ | |||
| management and associated information exchange, 15 May | technical-iec-specification-ts-62351-1_pdf>. | |||
| 2007, <https://nanopdf.com/download/technical-iec- | ||||
| specification-ts-62351-1_pdf>. | ||||
| [Library] "GitHub Network UPS Tools, Devices Dumps Library", | [Library] "Devices Dumps Library", | |||
| <https://networkupstools.org/ddl/>. | <https://networkupstools.org/ddl/>. | |||
| [NUT] "Network UPS Tools (NUT) Project", | [NUT] "Network UPS Tools, Devices Dumps Library", | |||
| <https://www.networkupstools.org>. | <https://www.networkupstools.org>. | |||
| [nut-repository] | [nut-repository] | |||
| "GitHub Repository for the Network UPS Tools (NUT) | "The Network UPS Tools repository", | |||
| Project", <https://github.com/networkupstools/nut/>. | <https://github.com/networkupstools/nut/>. | |||
| [nut-upsdev] | [nut-upsdev] | |||
| "Network UPS Tools (NUT) Project Mailing List for | NUT, "Network UPS Tools (NUT) Project Mailing List for | |||
| developers", <https://alioth-lists.debian.net/cgi- | Developers", <https://alioth-lists.debian.net/cgi- | |||
| bin/mailman/listinfo/nut-upsdev>. | bin/mailman/listinfo/nut-upsdev>. | |||
| [nut-upsuser] | [nut-upsuser] | |||
| "Network UPS Tools (NUT) Project Mailing List for users", | NUT, "Network UPS Tools (NUT) Project Mailing List for | |||
| <https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/ | Users", <https://alioth-lists.debian.net/cgi- | |||
| nut-upsuser>. | bin/mailman/listinfo/nut-upsuser>. | |||
| [Registry] "Service Name and Transport Protocol Port Number | [Registry] IANA, "Service Name and Transport Protocol Port Number | |||
| Registry", Publisher: IANA, | Registry", <https://www.iana.org/assignments/service- | |||
| <https://www.iana.org/assignments/service-names-port- | names-port-numbers/service-names-port-numbers.xhtml>. | |||
| numbers/service-names-port-numbers.xhtml>. | ||||
| [RFC3552] Rescorla, E. and B. Korver, "Guidelines for Writing RFC | [RFC3552] Rescorla, E. and B. Korver, "Guidelines for Writing RFC | |||
| Text on Security Considerations", BCP 72, RFC 3552, | Text on Security Considerations", BCP 72, RFC 3552, | |||
| DOI 10.17487/RFC3552, July 2003, | DOI 10.17487/RFC3552, July 2003, | |||
| <https://www.rfc-editor.org/info/rfc3552>. | <https://www.rfc-editor.org/info/rfc3552>. | |||
| [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | |||
| Housley, R., and W. Polk, "Internet X.509 Public Key | Housley, R., and W. Polk, "Internet X.509 Public Key | |||
| Infrastructure Certificate and Certificate Revocation List | Infrastructure Certificate and Certificate Revocation List | |||
| (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | |||
| <https://www.rfc-editor.org/info/rfc5280>. | <https://www.rfc-editor.org/info/rfc5280>. | |||
| [RFC7030] Pritikin, M., Ed., Yee, P., Ed., and D. Harkins, Ed., | [RFC7030] Pritikin, M., Ed., Yee, P., Ed., and D. Harkins, Ed., | |||
| "Enrollment over Secure Transport", RFC 7030, | "Enrollment over Secure Transport", RFC 7030, | |||
| DOI 10.17487/RFC7030, October 2013, | DOI 10.17487/RFC7030, October 2013, | |||
| <https://www.rfc-editor.org/info/rfc7030>. | <https://www.rfc-editor.org/info/rfc7030>. | |||
| [RFC7991] Hoffman, P., "The "xml2rfc" Version 3 Vocabulary", | [RFC7991] Hoffman, P., "The "xml2rfc" Version 3 Vocabulary", | |||
| RFC 7991, December 2016, | RFC 7991, DOI 10.17487/RFC7991, December 2016, | |||
| <https://www.rfc-editor.org/info/rfc7991>. | <https://www.rfc-editor.org/info/rfc7991>. | |||
| [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
| <https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| [RFC8894] Gutmann, P., "Simple Certificate Enrolment Protocol", | [RFC8894] Gutmann, P., "Simple Certificate Enrolment Protocol", | |||
| RFC 8894, DOI 10.17487/RFC8894, September 2020, | RFC 8894, DOI 10.17487/RFC8894, September 2020, | |||
| <https://www.rfc-editor.org/info/rfc8894>. | <https://www.rfc-editor.org/info/rfc8894>. | |||
| [SGML] Goldfarb, Charles F., "The SGML Handbook", | [SGML] Goldfarb, C., "The SGML Handbook", Oxford University | |||
| ISBN 0-19-853737-9, 1990. | Press, ISBN-10 0-19-853737-9, 1990. | |||
| [sgmlnorm] Clark, James., "SGMLNORM An SGML System Conforming to | [sgmlnorm] OpenJade Project, "OpenJade Distribution Page", | |||
| International Standard ISO 8879 -- Standard Generalized | <http://openjade.sourceforge.net/>. | |||
| Markup Language", <http://www.jclark.com/sp/sgmlnorm.htm>. | ||||
| [stunnel] Trojnara, Michal., "Stunnel proxy adds TLS encryption | [stunnel] "Stunnel", <https://www.stunnel.org/>. | |||
| functionality to existing clients and servers", | ||||
| <https://www.stunnel.org/>. | ||||
| Appendix A. Variables | Appendix A. Variables | |||
| The UPS variables represent the abstracted state of the UPS unit. | The UPS variables represent the abstracted state of the UPS unit. | |||
| Certain variables represent not only the state of some hardware | Certain variables represent not only the state of some hardware | |||
| feature, but also provide tunable values and instant commands, see | feature but also provide tunable values and Instant Commands; see | |||
| Section 2.5. The full set of variables is recorded in the reference | Section 2.5. The full set of variables is recorded in the reference | |||
| document for variable names [gitvars]. | document for variable names [gitvars]. | |||
| The number of variables used in a given deployment depends on the | The number of variables used in a given deployment depends on the | |||
| sophistication of the UPS product: this annex shows a typical example | sophistication of the UPS product; this annex shows a typical example | |||
| of the subset of variables used for a reasonably complete "consumer | of the subset of variables used for a reasonably complete "consumer | |||
| grade" UPS. The NUT Project maintains a large library of the | grade" UPS. The NUT Project maintains a large library of the | |||
| variable subsets [Library] used by different UPS models. | variable subsets [Library] used by different UPS models. | |||
| Note that successive versions of a given product may add or delete | Note that successive versions of a given product may add or delete | |||
| features causing a change in the subset of variables used. An | features, causing a change in the subset of variables used. An | |||
| example is the removal of ups.delay.start from a "consumer grade" | example is the removal of ups.delay.start from a "consumer grade" | |||
| UPS. The manufacturer reserves the feature for the "professional" | UPS. The manufacturer reserves the feature for the "professional" | |||
| product. | product. | |||
| An implementation of a Management Daemon acting as a utility program | An implementation of a Management Daemon acting as a utility program | |||
| may provide a listing of the variables available for a given product, | may provide a listing of the variables available for a given product, | |||
| for example utility program upsc as included in the NUT package, see | for example, utility program upsc, as included in the NUT package; | |||
| Section 2.6, Paragraph 3. | see Section 2.6, Paragraph 3. | |||
| The following sections illustrate the use of variables by taking the | The following sections illustrate the use of variables by taking the | |||
| values associated with a typical product. The example is a 1600Va | values associated with a typical product. The example is a 1600 Va | |||
| 1000W UPS. | 1000 W UPS. | |||
| A.1. Typical UPS Variables | A.1. Typical UPS Variables | |||
| +===============================+============+====================+ | +===============================+============+====================+ | |||
| | Variable | Typical | Default | | | Variable | Typical | Default | | |||
| | | value | description | | | | Value | Description | | |||
| +===============================+============+====================+ | +===============================+============+====================+ | |||
| | battery.charge | 100 | "Battery charge | | | battery.charge | 100 | "Battery charge | | |||
| | | | (percent of full)" | | | | | (percent of full)" | | |||
| +-------------------------------+------------+--------------------+ | +-------------------------------+------------+--------------------+ | |||
| | battery.charge.low | 20 | "Remaining battery | | | battery.charge.low | 20 | "Remaining battery | | |||
| | | | level when UPS | | | | | level when UPS | | |||
| | | | switches to LB | | | | | switches to LB | | |||
| | | | (percent)" | | | | | (percent)" | | |||
| +-------------------------------+------------+--------------------+ | +-------------------------------+------------+--------------------+ | |||
| | battery.runtime | 1481 | "Battery runtime | | | battery.runtime | 1481 | "Battery runtime | | |||
| skipping to change at page 52, line 7 ¶ | skipping to change at line 2369 ¶ | |||
| | | | started (seconds)" | | | | | started (seconds)" | | |||
| +-------------------------------+------------+--------------------+ | +-------------------------------+------------+--------------------+ | |||
| | ups.vendorid | 0999 | "Vendor ID for USB | | | ups.vendorid | 0999 | "Vendor ID for USB | | |||
| | | | devices" | | | | | devices" | | |||
| +-------------------------------+------------+--------------------+ | +-------------------------------+------------+--------------------+ | |||
| Table 6: Typical UPS Variables | Table 6: Typical UPS Variables | |||
| A.2. Typical UPS Readable and Writable Variables | A.2. Typical UPS Readable and Writable Variables | |||
| Some of the features of a UPS are represented by variables which may | Some of the features of a UPS are represented by variables that may | |||
| be tuned by the user. The following variables are typical of such | be tuned by the user. The following variables are typical of such | |||
| tunable features. The precise list depends on the model of UPS. An | tunable features. The precise list depends on the model of UPS. An | |||
| implementation of a Management Daemon acting as a utility program may | implementation of a Management Daemon acting as a utility program may | |||
| provide a listing of the variables available, as well as acting on | provide a listing of the variables available, as well as acting on | |||
| them, for example utility program upsrw as included in the NUT | them, for example, utility program upsrw, as included in the NUT | |||
| package, see Section 2.6, Paragraph 3. | package; see Section 2.6, Paragraph 3. | |||
| +========================+============+=========================+ | +========================+============+=========================+ | |||
| | Variable | Typical | Default description | | | Variable | Typical | Default Description | | |||
| | | value | provided as response to | | | | Value | Provided as Response to | | |||
| | | | the command GET DESC | | | | | the Command GET DESC | | |||
| +========================+============+=========================+ | +========================+============+=========================+ | |||
| | battery.charge.low | 20 | "Remaining battery | | | battery.charge.low | 20 | "Remaining battery | | |||
| | | | level when UPS switches | | | | | level when UPS switches | | |||
| | | | to LB (percent)" | | | | | to LB (percent)" | | |||
| +------------------------+------------+-------------------------+ | +------------------------+------------+-------------------------+ | |||
| | input.transfer.high | 264 | "High voltage transfer | | | input.transfer.high | 264 | "High voltage transfer | | |||
| | | | point (V)" | | | | | point (V)" | | |||
| +------------------------+------------+-------------------------+ | +------------------------+------------+-------------------------+ | |||
| | input.transfer.low | 184 | "Low voltage transfer | | | input.transfer.low | 184 | "Low voltage transfer | | |||
| | | | point (V)" | | | | | point (V)" | | |||
| skipping to change at page 53, line 46 ¶ | skipping to change at line 2418 ¶ | |||
| +------------------------+------------+-------------------------+ | +------------------------+------------+-------------------------+ | |||
| | ups.delay.shutdown | 20 | "Interval to wait after | | | ups.delay.shutdown | 20 | "Interval to wait after | | |||
| | | | shutdown with delay | | | | | shutdown with delay | | |||
| | | | command (seconds)" | | | | | command (seconds)" | | |||
| +------------------------+------------+-------------------------+ | +------------------------+------------+-------------------------+ | |||
| | ups.delay.start | 30 | "Interval to wait | | | ups.delay.start | 30 | "Interval to wait | | |||
| | | | before (re)starting the | | | | | before (re)starting the | | |||
| | | | load (seconds)" | | | | | load (seconds)" | | |||
| +------------------------+------------+-------------------------+ | +------------------------+------------+-------------------------+ | |||
| Table 7: Typical readable and writable UPS Variables | Table 7: Typical Readable and Writable UPS Variables | |||
| A.3. Typical UPS Instant Commands | A.3. Typical UPS Instant Commands | |||
| Some of the features of a UPS are actions known as instant commands, | Some of the features of a UPS are actions known as Instant Commands | |||
| see Section 2.5, which may be ordered by the user. The following | (see Section 2.5), which may be ordered by the user. The following | |||
| variables represent such instant commands. The precise list depends | variables represent such Instant Commands. The precise list depends | |||
| on the model of UPS. An implementation of a Management Daemon acting | on the model of UPS. An implementation of a Management Daemon acting | |||
| as a utility program may provide a listing of the variables | as a utility program may provide a listing of the variables | |||
| available, as well as acting on them, for example utility program | available, as well as acting on them, for example, utility program | |||
| upscmd as included in the NUT package, see Section 2.6, Paragraph 3. | upscmd, as included in the NUT package; see Section 2.6, Paragraph 3. | |||
| +==================+==========================================+ | +==================+==========================================+ | |||
| | Command | Meaning | | | Command | Meaning | | |||
| +==================+==========================================+ | +==================+==========================================+ | |||
| | beeper.disable | Disable the UPS beeper | | | beeper.disable | Disable the UPS beeper | | |||
| +------------------+------------------------------------------+ | +------------------+------------------------------------------+ | |||
| | beeper.enable | Enable the UPS beeper | | | beeper.enable | Enable the UPS beeper | | |||
| +------------------+------------------------------------------+ | +------------------+------------------------------------------+ | |||
| | beeper.mute | Temporarily mute the UPS beeper | | | beeper.mute | Temporarily mute the UPS beeper | | |||
| +------------------+------------------------------------------+ | +------------------+------------------------------------------+ | |||
| skipping to change at page 55, line 14 ¶ | skipping to change at line 2476 ¶ | |||
| ,------------------SERVER------------------, | ,------------------SERVER------------------, | |||
| | | | | | | | | |||
| ,-----, | UPS <-Commands UPS | | ,-----, | UPS <-Commands UPS | | |||
| | UPS |---| Attachment | Management | | | UPS |---| Attachment | Management | | |||
| | |===| Daemon Responses-> Daemon | | | |===| Daemon Responses-> Daemon | | |||
| /-----\ '--------------------'---------------------' | /-----\ '--------------------'---------------------' | |||
| Internal | Internal | |||
| loopback | loopback | |||
| Figure 8: Long-running unattended server | Figure 8: Long-Running Unattended Server | |||
| 1. _The public power supply is on_ -- The system runs normally. | 1. _The public power supply is on._ The system runs normally. | |||
| Every 5 seconds, variable ups.status reports OL. -- _Days, | Every 5 seconds, variable ups.status reports OL. _Days, weeks, | |||
| weeks, months go by..._ | months go by..._ | |||
| 2. _Winter storm. Tree falls on power lines. The public power | 2. _Winter storm. Tree falls on power lines. The public power | |||
| supply fails_ -- The server remains operational running on the | supply fails._ The server remains operational, running on the | |||
| UPS battery. The Management Daemon polls the Attachment Daemon, | UPS battery. The Management Daemon polls the Attachment Daemon | |||
| and detects status change OL->OB. | and detects status change OL->OB. | |||
| 3. The Management Daemon logs warning messages. The server is | 3. The Management Daemon logs warning messages. The server is | |||
| still operational running on the UPS battery. -- _Minutes go | still operational, running on the UPS battery. _Minutes go | |||
| by..._ | by..._ | |||
| 4. The battery discharges below the level specified by variable | 4. The battery discharges below the level specified by variable | |||
| battery.charge.low. The server remains operational, but the UPS | battery.charge.low. The server remains operational, but the UPS | |||
| battery will not last much longer. The Management Daemon polls | battery will not last much longer. The Management Daemon polls | |||
| the Attachment Daemon, and detects status change OB->OB+LB. | the Attachment Daemon and detects status change OB->OB+LB. | |||
| 5. The Management Daemon logs the low battery event. | 5. The Management Daemon logs the low battery event. | |||
| 6. The Management Daemon decides to call for a system shutdown. It | 6. The Management Daemon decides to call for a system shutdown. It | |||
| sets status FSD in the Attachment Daemon to call on any | sets status FSD in the Attachment Daemon to call on any | |||
| secondaries to shut down and waits for command GET NUMATTACH to | Secondaries to shut down and waits for command GET NUMATTACH to | |||
| report one single attachment, i.e. the Primary itself. The | report one single attachment, i.e., the Primary itself. The | |||
| Management Daemon then issues the system shutdown command for | Management Daemon then issues the system shutdown command for | |||
| itself. | itself. | |||
| 7. The operating system's shutdown process takes over. During the | 7. The operating system's shutdown process takes over. During the | |||
| system shutdown, a NUT Project specific script or an equivalent | system shutdown, a specific script to the NUT Project or an | |||
| systemd service unit runs the command upsdrvctl shutdown. This | equivalent system service unit runs the command upsdrvctl | |||
| tells the UPS that it is to shut down N seconds later where the | shutdown. This tells the UPS that it is to shut down N seconds | |||
| default is N=20. Note that the "shutdown" of a UPS removes | later where the default is N=20. Note that the "shutdown" of a | |||
| power from the outlet sockets, but may not turn the UPS off | UPS removes power from the outlet sockets but may not turn the | |||
| completely. A delayed shutdown is sometimes audible, and the | UPS off completely. A delayed shutdown is sometimes audible, | |||
| characteristic beeping of the UPS stops. | and the characteristic beeping of the UPS stops. | |||
| 8. The system shuts down and powers down, hopefully before the N=20 | 8. The system shuts down and powers down, hopefully before the N=20 | |||
| seconds have passed. | seconds have passed. | |||
| 9. _N seconds after item 7_ -- The UPS shuts down, i.e., it turns | 9. _N seconds after item 7_ The UPS shuts down, i.e., it turns off | |||
| off its outlet sockets when N=20 seconds have passed. With some | its outlet sockets when N=20 seconds have passed. With some UPS | |||
| UPS units, there is an audible "clunk". | units, there is an audible "clunk". | |||
| What if the public power supply returns before the UPS shuts | What if the public power supply returns before the UPS shuts | |||
| down? The UPS unit should be able to wait a configurable time | down? The UPS unit should be able to wait a configurable time | |||
| with default 30 seconds. These two timers start from the moment | with default 30 seconds. These two timers start from the moment | |||
| the UPS receives the upsdrvctl shutdown command. -- _Minutes, | the UPS receives the upsdrvctl shutdown command. _Minutes, | |||
| hours, days go by..._ | hours, days go by..._ | |||
| 10. _Some time later, maybe much later, the public power supply | 10. _Some time later, maybe much later, the public power supply | |||
| returns_ -- The UPS reconnects it's outlets to send power to the | returns._ The UPS reconnects its outlets to send power to the | |||
| protected system. | protected system. | |||
| 11. The system BIOS option "Restore power on AC return" or "Restore | 11. The system BIOS option "Restore power on AC return" or "Restore | |||
| to previous state" has hopefully been selected and the system | to previous state" has hopefully been selected and the system | |||
| powers up. The bootstrap process of the operating system | powers up. The bootstrap process of the operating system | |||
| begins. | begins. | |||
| 12. The operating system starts the Attachment Daemon and the | 12. The operating system starts the Attachment Daemon and the | |||
| Management Daemon. The Attachment Daemon starts the Driver and | Management Daemon. The Attachment Daemon starts the Driver and | |||
| scans the UPS. The UPS status becomes OL+LB. | scans the UPS. The UPS status becomes OL+LB. | |||
| 13. After some time, the battery charges above the | 13. After some time, the battery charges above the | |||
| battery.charge.low threshold and the Attachment Daemon declares | battery.charge.low threshold, and the Attachment Daemon declares | |||
| the status change OL+LB->OL. We are now back in the same | the status change OL+LB->OL. We are now back in the same | |||
| situation as 1 above. | situation as item 1 above. | |||
| Appendix C. Technical Terms: Historical Differences | Appendix C. Technical Terms: Historical Differences | |||
| This appendix lists the major differences between the technical terms | This appendix lists the major differences between the technical terms | |||
| used in NUT software release 2.8.0 and documented in this text, and | used in NUT software release 2.8.0 and documented in this text, as | |||
| those used in previous version 2.7.4 of the NUT Project. | well as those used in previous version 2.7.4 of the NUT Project. | |||
| +===================+========================+===========+ | +===================+========================+===========+ | |||
| | Term in previous | Term in this document, | Reference | | | Term in Previous | Term in this Document, | Reference | | |||
| | release NUT 2.7.4 | release NUT 2.8.0 | | | | Release NUT 2.7.4 | Release NUT 2.8.0 | | | |||
| +===================+========================+===========+ | +===================+========================+===========+ | |||
| | ALREADY-LOGGED-IN | ALREADY-ATTACHED | Table 3 | | | ALREADY-LOGGED-IN | ALREADY-ATTACHED | Table 3 | | |||
| +-------------------+------------------------+-----------+ | +-------------------+------------------------+-----------+ | |||
| | ALREADY-SSL-MODE | TLS-ALREADY-ENABLED | Table 3 | | | ALREADY-SSL-MODE | TLS-ALREADY-ENABLED | Table 3 | | |||
| +-------------------+------------------------+-----------+ | +-------------------+------------------------+-----------+ | |||
| | LOGIN | ATTACH | Section | | | LOGIN | ATTACH | Section | | |||
| | | | 4.2.1 | | | | | 4.2.1 | | |||
| +-------------------+------------------------+-----------+ | +-------------------+------------------------+-----------+ | |||
| | LOGOUT | DETACH | Section | | | LOGOUT | DETACH | Section | | |||
| | | | 4.2.2 | | | | | 4.2.2 | | |||
| skipping to change at page 57, line 32 ¶ | skipping to change at line 2578 ¶ | |||
| | NETVER | PROTVER | Section | | | NETVER | PROTVER | Section | | |||
| | | | 4.2.10 | | | | | 4.2.10 | | |||
| +-------------------+------------------------+-----------+ | +-------------------+------------------------+-----------+ | |||
| | NUMLOGINS | NUMATTACH | Section | | | NUMLOGINS | NUMATTACH | Section | | |||
| | | | 4.2.4.3 | | | | | 4.2.4.3 | | |||
| +-------------------+------------------------+-----------+ | +-------------------+------------------------+-----------+ | |||
| | Slave | Secondary | Section | | | Slave | Secondary | Section | | |||
| | | | 2.8 | | | | | 2.8 | | |||
| +-------------------+------------------------+-----------+ | +-------------------+------------------------+-----------+ | |||
| Table 9 | Table 9: Technical Terms: Historical Differences | |||
| Appendix D. Security Defences in Release 2.7.4 | Appendix D. Security Defenses in Release 2.7.4 | |||
| Previous NUT version 2.7.4 did not provide support for TLS 1.3 | Previous NUT version 2.7.4 did not provide support for TLS 1.3 | |||
| [RFC8446]. The following subsections describe mitigating techniques. | [RFC8446]. The following subsections describe mitigating techniques. | |||
| D.1. Shims | D.1. Shims | |||
| Previous version 2.7.4 of NUT did not support TLS 1.3 [RFC8446]. | Previous version 2.7.4 of NUT did not support TLS 1.3 [RFC8446]. | |||
| Where such protection is needed for version 2.7.4, a possible | Where such protection is needed for version 2.7.4, a possible | |||
| technique introduces shims between the Attachment Daemon and the | technique introduces shims between the Attachment Daemon and the | |||
| network, and between the network and the Management Daemon as shown | network and between the network and the Management Daemon, as shown | |||
| in figure 9. These shims provide TLS 1.3 support, thus allowing the | in Figure 9. These shims provide TLS 1.3 support, thus allowing the | |||
| Attachment Daemon and Management Daemon to continue temporarily | Attachment Daemon and Management Daemon to continue temporarily | |||
| without native TLS. The technique has been successfully tested. | without having TLS implementations themselves. The technique has | |||
| been successfully tested. | ||||
| TLS shim listens TLS shim listens | TLS shim listens TLS shim listens | |||
| on port TBD1/TCP on port 3493/TCP | on port TBD1/TCP on port 3493/TCP | |||
| ,-----,------------,----, ,----,--------------, | ,-----,------------,----, ,----,--------------, | |||
| | UPS - Attachment |TLS | <-STARTTLS | TLS| Management | | | UPS - Attachment |TLS | <-STARTTLS | TLS| Management | | |||
| | | Daemon |shim| OK--> |shim| Daemon | | | | Daemon |shim| OK--> |shim| Daemon | | |||
| /-----'------------'----\ '----'--------------' | /-----'------------'----\ '----'--------------' | |||
| Listens on | Listens on | |||
| port 3493/TCP | port 3493/TCP | |||
| Figure 9: Shims provide TLS support during migration | Figure 9: Shims Provide TLS Support During Migration | |||
| D.1.1. Attachment Daemon Shim | D.1.1. Attachment Daemon Shim | |||
| The shim in front of the Attachment Daemon listens to incoming | The shim in front of the Attachment Daemon listens to incoming | |||
| traffic on port TBD1/TCP. When it receives the command STARTTLS it | traffic on port TBD1/TCP. When it receives the command STARTTLS, it: | |||
| 1. Returns OK to the client and sets up TLS encapsulation. | 1. returns OK to the client and sets up TLS encapsulation. | |||
| 2. Does not send STARTTLS to the Attachment Daemon port 3493/TCP. | 2. does not send STARTTLS to the Attachment Daemon port 3493/TCP. | |||
| All other commands and responses are passed through. | All other commands and responses are passed through. | |||
| Note: Port TBD1/TCP is not specified by this text. | Note: Port TBD1/TCP is not specified by this text. | |||
| D.1.2. Management Daemon Shim | D.1.2. Management Daemon Shim | |||
| The shim in front of the Management Daemon listens for incoming | The shim in front of the Management Daemon listens for incoming | |||
| traffic on port 3493/TCP. When it receives the command STARTTLS it | traffic on port 3493/TCP. When it receives the command STARTTLS, it: | |||
| 1. Returns FEATURE-NOT-CONFIGURED to the client. | 1. returns FEATURE-NOT-CONFIGURED to the client. | |||
| 2. Sends STARTTLS to the Attachment Daemon on port TBD1/TCP. | 2. sends STARTTLS to the Attachment Daemon on port TBD1/TCP. | |||
| All other commands and responses are passed through. | All other commands and responses are passed through. | |||
| D.2. TLS Tunnels | D.2. TLS Tunnels | |||
| Another technique is the use of TLS tunnels [RFC8446], using a | Another technique is the use of TLS tunnels [RFC8446], using a | |||
| software such as stunnel [stunnel] which adds OpenSSL-based TLS | software, such as stunnel [stunnel], which adds OpenSSL-based TLS | |||
| support without modifying the Attachment Daemon or Management Daemon. | support without modifying the Attachment Daemon or Management Daemon. | |||
| The NUT Project has no procedure to enforce this on sites. | The NUT Project has no procedure to enforce this on sites. | |||
| D.3. VPN | D.3. VPN | |||
| A further option to secure communications is very similar to TLS | A further option to secure communications is very similar to TLS | |||
| tunnelling [RFC8446] and consists of routing the NUT traffic through | tunneling [RFC8446] and consists of routing the NUT traffic through a | |||
| a Virtual Private Network, VPN. | Virtual Private Network (VPN). | |||
| D.4. VLAN | D.4. VLAN | |||
| A fourth option is to isolate the UPS management traffic at the | A fourth option is to isolate the UPS management traffic at the | |||
| network switching level using a Virtual LAN, VLAN technique. | network switching level using a Virtual LAN (VLAN) technique. | |||
| ,-------------, ,-------------, | ,-------------, ,-------------, | |||
| ,-----, | Attachment | | Management | | ,-----, | Attachment | | Management | | |||
| | UPS |---| Daemon | | Daemon | | | UPS |---| Daemon | | Daemon | | |||
| | | |-------------| UPS |-------------| | | | |-------------| UPS |-------------| | |||
| | |===| | Management | UPS | | | |===| | Management | UPS | | |||
| /-----\ | Protected |~~~~~~~~~~~~~~~| Management | | /-----\ | Protected |~~~~~~~~~~~~~~~| Management | | |||
| | Server | VLAN | Client | | | Server | VLAN | Client | | |||
| | | '-------------' | | | '-------------' | |||
| '-------------' | '-------------' | |||
| Production | VLAN | Production | VLAN | |||
| ,---|-------, | ,---|-------, | |||
| ,-----------,| | ,-----------,| | |||
| ,-----------,|' | ,-----------,|' | |||
| | Clients |' | | Clients |' | |||
| '-----------' | '-----------' | |||
| Figure 10: UPS Management Protocol runs over its own VLAN | Figure 10: UPS Management Protocol Runs over Its Own VLAN | |||
| In Figure 10 there are two VLANS: The main traffic between the | In Figure 10, there are two VLANS: the main traffic between the | |||
| protected server and its clients uses the production VLAN. The UPS | protected server and its clients using the production VLAN. The UPS | |||
| management traffic between the Attachment and Management Daemons uses | management traffic between the Attachment and Management Daemons uses | |||
| the UPS management VLAN marked as ~~~~~~~~~~~~~. | the UPS management VLAN marked as ~~~~~~~~~~~~~. | |||
| Appendix E. Administrative Security | Appendix E. Administrative Security | |||
| Administrative commands such as FSD, INSTCMD and SET are powerful and | Administrative commands, such as FSD, INSTCMD, and SET, are powerful | |||
| can have a deep effect on system integrity, For example, the command | and can have a deep effect on system integrity. For example, the | |||
| FSD is involved in mission critical system shutdown decisions. | command FSD is involved in mission-critical system shutdown | |||
| Access to them needs to be managed and restricted. This clause | decisions. Access to them needs to be managed and restricted. This | |||
| presents the current practice. | section presents the current practice. | |||
| E.1. Management of Administrative Users | E.1. Management of Administrative Users | |||
| The Attachment Daemon maintains a file (currently upsd.users) | The Attachment Daemon maintains a file (currently upsd.users) that | |||
| defining each administrative user. Note that these users are | defines each administrative user. Note that these users are | |||
| independent of those recorded in file /etc/passwd. Each | independent of those recorded in file /etc/passwd. Each | |||
| administrative user gets its own section in file upsd.users. The | administrative user gets its own section in file upsd.users. The | |||
| declarations in that section set the parameters which define that | declarations in that section set the parameters that define that | |||
| user's privileges. The section begins with the name of the user | user's privileges. The section begins with the name of the user | |||
| enclosed in square brackets, OPENING BRACKET [ and CLOSING BRACKET ], | enclosed in square brackets, opening bracket ([) and closing bracket | |||
| and continues until the next user name in brackets or EOF. | (]), and continues until the next username in brackets or EOF. | |||
| For example the following file declares two administrative users | For example, the following file declares two administrative users, | |||
| admin and pfy: | admin and pfy: | |||
| [admin] | [admin] | |||
| password = sekret | password = sekret | |||
| upsmon master | upsmon master | |||
| actions = SET | actions = SET | |||
| instcmds = ALL | instcmds = ALL | |||
| [pfy] | [pfy] | |||
| password = sekret | password = sekret | |||
| instcmds = test.panel.start | instcmds = test.panel.start | |||
| instcmds = test.panel.stop | instcmds = test.panel.stop | |||
| Within each section the administrative user declarations are: | Within each section, the administrative user declarations are: | |||
| +=============+==========================================+ | +=============+==========================================+ | |||
| | Declaration | Meaning | | | Declaration | Meaning | | |||
| +=============+==========================================+ | +=============+==========================================+ | |||
| | actions | Allow the user to do certain things in | | | actions | Allow the user to do certain things in | | |||
| | | the Attachment Daemon. To specify | | | | the Attachment Daemon. To specify | | |||
| | | multiple actions, use multiple instances | | | | multiple actions, use multiple instances | | |||
| | | of the declaration. Valid actions are: | | | | of the declaration. Valid actions are: | | |||
| | | | | | | | | |||
| | | * FSD Set the "Forced Shutdown" flag | | | | * FSD Set the "Forced Shutdown" flag | | |||
| | | for this UPS. See Section 4.2.3. | | | | for this UPS. See Section 4.2.3. | | |||
| | | | | | | | | |||
| | | * SET Change the value of a UPS | | | | * SET Change the value of a UPS | | |||
| | | variable. See Section 4.2.11. | | | | variable. See Section 4.2.11. | | |||
| +-------------+------------------------------------------+ | +-------------+------------------------------------------+ | |||
| | instcmds | Let a user initiate specific instant | | | instcmds | Let a user initiate specific Instant | | |||
| | | commands. See Section 4.2.6. Use value | | | | Commands. See Section 4.2.6. Use value | | |||
| | | ALL to grant all commands automatically. | | | | ALL to grant all commands automatically. | | |||
| | | To specify multiple commands, use | | | | To specify multiple commands, use | | |||
| | | multiple instances of the instcmds | | | | multiple instances of the instcmds | | |||
| | | field. For the full list of what a | | | | field. For the full list of what a | | |||
| | | given UPS supports, use client upscmd -l | | | | given UPS supports, use client upscmd -l | | |||
| | | supplied by the NUT Project. The LIST | | | | supplied by the NUT Project. The LIST | | |||
| | | CMD command is issued within the client | | | | CMD command is issued within the client | | |||
| | | upscmd. | | | | upscmd. | | |||
| +-------------+------------------------------------------+ | +-------------+------------------------------------------+ | |||
| | password | Set the password for this user. _Your | | | password | Set the password for this user. _Your | | |||
| | | password should be more secure than the | | | | password should be more secure than the | | |||
| | | examples shown._ | | | | examples shown._ | | |||
| +-------------+------------------------------------------+ | +-------------+------------------------------------------+ | |||
| | upsmon | Add the necessary actions for a | | | upsmon | Add the necessary actions for a | | |||
| | | Management Daemon to process a system | | | | Management Daemon to process a system | | |||
| | | shutdown. In current practice the value | | | | shutdown. In current practice, the | | |||
| | | is still master or slave. Note that | | | | value is still master or slave. Note | | |||
| | | there is no EQUALS =. | | | | that there is no EQUALS =. | | |||
| +-------------+------------------------------------------+ | +-------------+------------------------------------------+ | |||
| Table 10: Administrative user declarations | Table 10: Administrative User Declarations | |||
| E.2. An Administrative User of a Client Management Daemon | E.2. An Administrative User of a Client Management Daemon | |||
| The following examples show the current security practices for | The following examples show the current security practices for | |||
| administrative users of a client Management Daemon They also | administrative users of a client Management Daemon. They also | |||
| illustrate the command pair USERNAME and PASSWORD. See | illustrate the command pair USERNAME and PASSWORD. See Sections | |||
| Section 4.2.13 and Section 4.2.8. | 4.2.13 and 4.2.8. | |||
| E.2.1. An Administrative User Logs into a Short Session | E.2.1. An Administrative User Logs into a Short Session | |||
| In this simple example of current practice, the system administrator | In this simple example of current practice, the system administrator | |||
| sets the battery level at which an Attachment Daemon will raise the | sets the battery level at which an Attachment Daemon will raise the | |||
| status LB, represented by variable battery.charge.low, to 35% of full | status LB, represented by variable battery.charge.low, to 35% of full | |||
| charge. A system administrator types the following command to call | charge. A system administrator types the following command to call | |||
| the client upsrw supplied by the NUT Project. | the client upsrw supplied by the NUT Project. | |||
| upsrw -s battery.charge.low=35 -u admin -p sekret UPS-1@example.com | upsrw -s battery.charge.low=35 -u admin -p sekret UPS-1@example.com | |||
| Option -s specifies the variable and the value, option -u specifies | Option -s specifies the variable and the value, option -u specifies | |||
| the USERNAME, option -p specifies the PASSWORD, and UPS-1@example.com | the USERNAME, option -p specifies the PASSWORD, and UPS-1@example.com | |||
| is the UPS. The USERNAME and PASSWORD commands are issued within the | is the UPS. The USERNAME and PASSWORD commands are issued within the | |||
| client upsrw and the Session is of short duration. | client upsrw, and the session is of short duration. | |||
| Note: Your password should be stronger than the example shown. | Note: Your password should be stronger than the example shown. | |||
| E.2.2. An Administrative User Logs into a Long Session | E.2.2. An Administrative User Logs into a Long Session | |||
| In this second example of current practice, the long-running | In this second example of current practice, the long-running | |||
| Management Daemon upsmon which is responsible for initiating system | Management Daemon upsmon, which is responsible for initiating system | |||
| shutdowns and which is provided by the NUT Project issues commands | shutdowns and which is provided by the NUT Project, issues commands | |||
| USERNAME and PASSWORD when it starts up. The data values needed for | USERNAME and PASSWORD when it starts up. The data values needed for | |||
| the USERNAME and PASSWORD commands are provided by a configuration | the USERNAME and PASSWORD commands are provided by a configuration | |||
| file upsmon.conf which contains the line | file upsmon.conf, which contains the line: | |||
| MONITOR UPS-1@example.com 1 admin sekret master | MONITOR UPS-1@example.com 1 admin sekret master | |||
| This says that the UPS to be monitored is UPS-1@example.com, it | This says that the UPS to be monitored is UPS-1@example.com. It | |||
| provides 1 single power supply, the administrative user is admin with | provides 1 single power supply. The administrative user is admin | |||
| password sekret. The Management Daemon acts as a Primary, although | with password sekret. The Management Daemon acts as a Primary, | |||
| current practice still uses the former term master. | although current practice still uses the former term master. | |||
| The USERNAME and PASSWORD commands are contained within the client | The USERNAME and PASSWORD commands are contained within the client | |||
| upsmon and the Session is of long duration. | upsmon, and the session is of long duration. | |||
| Acknowledgments | ||||
| This document is based on the NUT Project documentation [devguide]. | ||||
| The editor acknowledges the work of Charles Lepple, Arjen de Korte, | ||||
| Arnaud Quette, Jim Klimov, Russell Kroll, Manuel Wolfshant, Greg | ||||
| Troxel, Mark Hansen, and many others who contribute to the | ||||
| nut-upsuser [nut-upsuser] and nut-upsdev [nut-upsdev] mailing lists. | ||||
| Earlier draft versions of this document were prepared using an SGML | ||||
| DTD [SGML] and an XML meta-DTD defined by HyTime Annex A [HyTimeA]. | ||||
| Unlike XML, SGML offers markup minimization, and the earlier drafts | ||||
| took advantage of this. The osgmlnorm [sgmlnorm] program generated | ||||
| the XML that was used as input to xml2rfc [RFC7991], which then | ||||
| created the document's current source. The editor acknowledges the | ||||
| help received from Carsten Bormann and Julian Reschke in the xml2rfc | ||||
| mailing list. | ||||
| Many helpful comments were received from Eliot Lear, Bart Smit, David | ||||
| Zomaya, Joyce Norris, and Ted Mittelstaedt. | ||||
| Author's Address | Author's Address | |||
| Roger Price (editor) | Roger Price (editor) | |||
| Network UPS Tools Project | Network UPS Tools Project | |||
| France | France | |||
| Email: ietf@rogerprice.org | Email: ietf@rogerprice.org | |||
| End of changes. 393 change blocks. | ||||
| 864 lines changed or deleted | 863 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||