CHANGES
=======

1.0.22
------

* Correct the offset to adjust for IPMIv2
* Allow things like multiple distinct users
* Improve (de)activate payload in virshbmc
* Protect Session.*_sessions operations
* Protect Console.pendingoutput operations
* Implement util.protect() lock manager
* Implement Serial-over-LAN (SOL) in BMC
* Pyghmi does not follow the pep8 standard

1.0.20
------

* Implement support for ThinkSystem servers
* Do not reuse an expired session
* Move raising sync login exception
* Fix get_network_channel for BMCs that dislike 0xe
* Fix cleanup loop of changing dictionary
* Abort MAC decode from FRU if not 'binary'
* Bypass eventlet sendto when detected
* Change the wording of setup event
* Set a 60 second timeout on web
* Support in-band IPMI for Linux systems
* Allow LookupError on decode
* Add referer header to https requests
* Fix issues with idle behavior

1.0.16
------

* Provide more consistent attributes

1.0.15
------

* Only complain about Device SDR if no SDRR
* Refactor Lenovo OEM support
* Add base for unittests and fix docs
* Correct offset of a capability bit

1.0.14
------

* IpmiServer to allow using IP version 4
* Improve .gitignore
* Raise IpmiException on error checking power state

1.0.13
------

* Consolidate IMM date string parsing
* Ignore KeyError on delete of missing sensor

1.0.12
------

* Fix bullet points in README.md
* Correct mistake with image name abbreviation
* Implement IMM remote media mount
* Recognize and use CSRF token
* Have range become xrange where available
* Fix webclient viability after error
* Remove xrange for run both Python 2 and Python 3
* Check for buffer and use memoryview if missing
* Add script to help build rpms
* Extend FPC status

1.0.11
------

* Improve SOL responsiveness

1.0.10
------

* Handle disconnect notification without session
* Fix error behavior when target has no SOL session
* Fix multiple console object behavior

1.0.9
-----

* Tolerate client reuse of UDP ports
* Fix errors in IPMI server
* Fix BMC compatibility with Python 2.6
* Fix raid driver bitmask
* Support NMI in bmc
* Implement identify workaround for ThinkServer SD350
* Declare strings explicitly as binary
* Supports cold reset in bmc

1.0.8
-----

* Implement Python3 compatibility
* Convert data tuple to a list

1.0.7
-----

* Correct firmware inventory issue on IBM M4 servers

1.0.6
-----

* Raise incurred exception if appropriate
* Fix FPC detection for Lenovo Nextscale
* Fix KeyError due to lazy use of raw_command

1.0.5
-----

* Disable futile attempts to correct uncorrectable time
* Remove errant IBM nextscale id
* Fix agentless error on M4 systems
* Add node status checks to FPC sensors
* Add Nextscale total power capacity as a sensor

1.0.4
-----

* Extend session keepalive
* Remove unused pngmath Sphinx extension

1.0.3
-----

* Allows BMCs to configure the event loop timeout
* Add Hardware inventory from Lenovo Agentless

1.0.2
-----

* Fix IPMI server functionality
* Add disk inventory when possible from Lenovo IMM

1.0.1
-----

* Cope with empty agentless fields
* Briefly cache adapter data
* Add 'Trusted IMM' to IMM inventory

1.0.0
-----

* Passthrough errors when not sent by BMC in MegaRAC
* Change strategy to identify IMM
* Do not hook generic vendor identifier
* Add support for IPv4-only environments
* Add system X firmware information
* Be apathetic about endianness of SOL port number
* Fix get_health with a NextScale FPC
* Implement MegaRAC IPv6 SNMP destinations
* Do not warn on nearly full SEL
* Fix use of weakref.ref
* Fix cyclic references in SDR
* Discard reference when no longer needed
* Remove a cyclical reference in Lenovo OEM
* Remove event related memory leak
* Change DIMM serial to show 0 padded hexadecimal
* Fix UUID padding problem
* Determine speed from clock by formula
* Avoid stall waiting on incommand
* Implement detach media
* Allow skipping retrieval of gateway mac addresses
* Provide attach remote media function
* Remove support for py33/py26
* Have ipv6 addresses always be represented as list
* Add support for OEM command for IPv6 address fetch
* Add a new README
* Change graphical console launcher to use base64 encoding
* Add support for TS graphical console fetching
* Rework wait behavior
* Fix synchronous logon premature exit

0.9.9
-----

* Fix 'uptime' time correction attempt
* Add OEM sensors for Lenovo Nextscale
* Deprecated tox -downloadcache option removed
* Add license parameter to setup.py
* Point to more specific page for pyghmi
* Update my email
* Add TLS support and TSM remote video (WIP)

0.9.8
-----

* Avoid abandoning retry when SOL packet is not ACK
* Change DIMM SN parsing in TS to match WebUI

0.9.7
-----

* Allow bind address to be specified
* Only bind on tmpsocket once

0.9.6
-----

* Fix exception on logout

0.9.5
-----

* Fix TSM detection

0.9.4
-----

* Add device ID fields to FRU 0

0.9.3
-----

* Fix raw_command hang when externally 'broken' or 'logged out'

0.9.2
-----

* Do not raise on bad/unsupported FRU data
* Implement custom timeout and apply to TSM NTP
* Handle missing UUID
* Workaround likely spec deviations and fix parsing
* Fix crash on missing "board_extra" field in FRU response

0.9.1
-----

* Stop spurious retry on incoming data

0.9.0
-----

* Fix chunk length when unicode on MCI
* Handle unicode DCMI data incoming
* Update .gitreview for new namespace
* Fixing fru date
* Fix TS inventory parsing bugs (DIMM, PSU)
* Change acknowledgement_timeout to acknowledge_timeout
* Fix attempt to fetch firmware on System X
* Fix attempt to get LED against System X
* Use alert set 1 unconditionally
* Add custom OEM domain name command for Lenovo ThinkServers
* Add custom OEM get remote KVM availability for Lenovo ThinkServers
* Implement NTP support for Lenovo Thinkserver
* Implement get/set of DCMI asset tag and MCI
* Add custom OEM PSU Based Power Capping config for Lenovo ThinkServers
* Autoenable alert policy for a destination
* Add reset bmc command
* Add NMI diag command
* Add RAID drive and controller to ThinkServer inventory
* Changing Lenovo custom get_leds method
* Add custom OEM firmware info parsing for Lenovo ThinkServers
* Silently ignore broken sensors rather than error
* Lessen degree of admin backoff
* Add disable user command
* Add LED parsing for Lenovo ThinkServers
* Add custom OEM inventory parsing for Lenovo ThinkServers
* Implement setting IPv4 configuration on target
* Implement read of IPv4 network configuration
* Reword some event/sensor text
* Provide numeric key data in state description
* Support 20 byte passwords
* Provide time data in alert decode
* Extend and document user_delete in ipmi.command
* Have session.py work better in Windows
* Fix PET acknowledge errors
* Provide useful error on bad username
* Gather Thinkserver CPU and Memory independently
* Handle Lenovo Thinkserver lacking OEM inventory
* Add record id to SEL data
* Provide extensibility to sensors by OEM
* Acknowledge PET alert on decode

0.8.0
-----

* Provide interface for decoding PET alerts
* Handle unknown entity ids
* Tolerate alternative return code for FRU size
* Remove libvirt from requirements
* Provide access to get/set community string
* Add serial field from SPD
* Implement OEM Inventory components
* Report/Configure LAN alert destinations
* Implement Thinkserver OEM SEL decode
* Fix behavior with some Lenovo Thinkservers
* Only conditionally delete fields from event
* Fix python2.6 usage of unpack_from
* For unspecified sensors use None as the component
* Update decode of HDD OEM events for Lenovo
* Declare one sort of 'non-redundancy' ok
* Add OEM event fixup
* Change event text based on assertion/deassertion
* Tolerate missing UUID
* Rename 'entity' to 'component'
* Leave numbers intact
* Flesh out and rework some sensor descriptions
* Break out of FRU read if zero data returned
* Fix time correction code
* Decrease severity of 'Disabled' presence
* Rename description field and split data out
* Implement event log retrieval from BMCs

0.7.1
-----

* Add system UUID to inventory

0.7.0
-----

* Fix parsing of 6bit ascii
* Clean up strings from FRU
* Add function to fetch a specific items inventory
* Tolerate errors in 'extra' fields
* Create framework for OEM extensions
* Implement FRU inventory

0.6.27
------

* Try setting optional byte in set user acess

0.6.26
------

* Reduce cost of packet transmit
* Ignore packet overrun in RAKP2 and RAKP4

0.6.25
------

* Streamline and simplify IO Polling

0.6.24
------

* Reduce severity of a non-redundant state
* Add missing generic discrete codes
* Fix exceptions on sdr read
* Move packet queue into IO thread
* Fix needless retries due to misdirected packets
* Handle concurrent session requests
* Added a BMC (IPMI) frontend for virsh
* Add a "--port" option to fakebmc

0.6.23
------

* Correct delay_xmit behavior

0.6.22
------

* Rework IO Worker thread behavior

0.6.21
------

* Correct redundant timedout calls in recursion
* Assign code to timeout behavior
* Gracefully handle error while acking SOL
* add more commands
* Enhance IpmiException to carry IPMI codenumber
* Allow request for single sensor by name
* Expose sensor description data
* Implement server side IPMI protocol
* Check for IPMIPASSWORD env var in pyghmiutil
* Run pep8 on files in bin/
* Provide access to chassis identify
* Implement retrieval of uefi flag in boot devs
* Recover from kill() while in command
* Remove overly aggressive packet processing
* Handle custom keepalive modifications on the fly
* Avoid exception on close
* Avoid recursing between keepalive and raw_command
* Work toward Python 3.4 support and testing
* Fix IO worker tolerance of errors
* Force non-numeric for compact sensor records
* Change to name-only lookups in RAKP
* Handle non-linear and unrecognized linearizations
* Add 'persistent' to return dict of get_bootdev
* Raise IpmiException on an error setting/getting the boot device
* Use get() to avoid KeyError on get_bootdev()
* Reduce severity of generic discrete assert to 'Ok'
* Tolerate more privilege degradation scenarios
* Fix concurrent raw_command calls to Session
* Don't defer custom keepalive expiry on all payloads
* Fix infinitely recursing custom keepalives
* Fix IPv4 operations where v6only behavior is default
* Fix pyghmicons script crash on idle
* Added password file support
* Correct pool usage count on failed login
* Correct console behavior when open session fails
* Deregister timeout on broken
* Correct ignoring socket when inappropriate
* Fix coping with incoming packet in incomplete state
* Fix unregister_keepalive when no keepalives registered
* Fix attribute error on particularly bad connections
* Handle packet loss correctly in logout/logon
* Avoid looping select() on sockets repeatedly
* Correct return value of set_bootdev
* Install scripts as well as library
* Remove references to custom keepalives on logout

0.6.1
-----

* Slow down to chunk-wise retrieval of SDR as needed
* Implement function to check SOL payload as keepalive
* Avoid zombie sessions corrupting living sessions
* Do not reuse a session that is not logged
* Break session objects on keepalive failures
* Use multiple sockets instead of one
* General cleanup of session
* Correct check for _sdr in command
* Clean up command.py
* Correct mistakes in constants
* Correct sensor offset for byte 5 state values
* Fix mass thread initialization of sessions
* Add sensor information from IPMI 2.0 rev 1.1
* Add optical and bios aliases for boot devices
* Auto degrade sessions to operator when admin is forbidden
* Add more missing sensor specific event information
* Add version change sensor information
* Gracefully flag unrecognized discrete sensor states
* Add discrete states for event log status sensors

0.5.9.3
-------

* Allow pyghmi to send break over IPMI SOL
* Switch from PyCrypto HMAC to standard python hmac
* Tolerate unicode strings as username and password
* Fix missing delay_xmit argument breaking power wait requests
* Fix race condition in requesting delays

0.5.9.1
-------

* Fix race condition on sending data

0.5.9
-----

* Fix large paste to SOL session
* Move previous fix out to command and console
* Fix session reuse stall for async usage
* Make pyghmi tolerate arbitrary threading models
* Do not count empty SOL data as keepalive data
* Use different timeout values for logon and retry
* Fix Console write race condition
* Reasonably relay IPMI errors to console handlers
* Allow special handling to preceed generic handler
* Fix exception if login times out
* Detect and notify Console users of disconnect
* Detect broken sessions
* Fix keepalive behavior on broken Sessions
* Add support for discrete sensors
* Add BMC bridge request extension
* Add 'get_health' to Command class
* Add 'get_sensor_data' to Command class
* Add support for retrieving SDR data
* Remove surviving 'callback' code
* Remove callback from session.py
* Add errors for activate session response codes
* Remove callback usage from console.py
* Fix some reentrant scenarios
* Have ipmi session objects reuse themselves
* Stop waiting on logout during atexit
* Change SOL code to not send empty data to caller

0.5.8
-----

* Use distinct exceptions for many cases
* Enhance filehandle registration
* Fix pyghmi behavior on BMC NACK

0.5.7
-----

* Update from requirements

0.5.6
-----

* Correct concatenation of string and int object

0.5.5
-----

* Expose wait_for_rsp class method via public classes

0.5.2
-----

* Fix mistake with external filehandle and solconnect

0.5.1
-----

* Change from poll(
* Have callback recognize any callable
* Add function to send sol data
* Add support for non standard ports
* Finalize rename to pyghmi
* Fix raw handling by ipmictl.py

0.5.0
-----

* Rework set_power handling of errors and noops
* Rename package from python-ipmi to pyghmi
* Change long timeout to select() from poll()
* Enhance wait behavior of set_power
* Rename to pyghmi
* Remove callback arguments from most functions
* Change session timer to monotonic when possible
* PEP8 compliance
* Add raw command to ipmictl
* Add session keepalive
* Add SOL support
* Add more constants to ipmi constant list
* Fix errors after git repo transition
* Correct spelling mistakes
* Rename _pack_payload to send_payload
* Fix all pep8 errors except E128 and E501
* Align to OpenStack Build Standards
* Added gitreview file
* fix setup to include the private parts of the project
* Reorganize pieces into 'private' to suggest to consumers the bits tehy need not think too hard about
* Change to setuptools
* Change requires to install_requires
* Attempt to indicate pycrypto dependency
* Reorganie things and add a setup.py for fun
* More style changes
* More cleanup, correct some syntax errors encountered trying to meet line length
* More style reworking
* Stylistic reworks
* More stylistic changes to ipmi_command.py
* Rename ipmi_syncexample to something less tounge twisting
* Rework docstrings
* Reorder imports
* Change one conditional to perhaps be a bit more readable
* Add name to TODOs that I put down
* Add LICENSE excerpt to each file
* Place project under Apache license 2.0
* Get acceptable copyright message in place
* Flesh out documentation
* Add sphinx 1.0 structure instead of older version
* Revert "Add sphinx doc generator bits"
* Add sphinx doc generator bits
* Add an example chunk of code showing how to code in a synchronous way to the python library
* Add set_power, with wait argument to not return until new state confirmed
* Add retry/timeout behavior to library
* Have get_power coded more similarly to get_bootdev
* Add boot device control functions
* Put IBM copyright into the files
* Add a convenience wrapper to do the higher layer simple commands
* Fix up error status situation
* Clean up ipmi_session a little bit
* Do some rewording
* Fix the integrity pad calculation (shame python doesn't have a 'use strict')
* Remove developer prints
* Fix decryption... mystery remains as to why logout and only logout seems to fail if aes is not enabled in ipmi 2.0 land.
* Have IPMI2 work for unencrypted, still sorting out decryption... encryption seems to work, but decrypting the response..
* Fix problem where the data from bmc was not being integrity checked in 1.5
* Fix problems with k1 and k2 key generation and HMAC on outgoing
* Almost working IPMI 2.0 support..... disable encryption to facilitate/narrow debug... currently integrity algorithm is apparantly failing to pass on *outgoing* packets, though RAKP4 incoming did pass
* More forcefully note the TODOs so people know when they hit them
* Python ipmi can now actually do commands using 1.5
* More work to make it get further on session establishment
* Milestone: can now receive and correctly parse get channel auth capabilities result
* Milestone: now able to craft valid Get channel authentication capabilities request and trigger response
* Get a lot closer to a working ipmi python implementation
* Break out constantns to a diff file
* More progress on perl to python port of ipmi
* Kick things off with a little bit of header data
