CHANGES
=======

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
