## 2020-01-01 CORE 6.0.0
* New
    * beta release of the python based tk GUI, use **coretk-gui** to try it out, plan will be to eventually sunset the old GUI once this is good enough
        * this GUI will allow us to provide enhancements and a consistent python dev environment for developers
* Major Changes
    * python3.6+ support only, due  to python2 EOL https://pyfound.blogspot.com/2019/12/python-2-sunset.html
    * distributed sessions now leverages the fabric library for sending remote SSH commands
* Enhancements
    * changed usage of bridge-utils to using ip based bridge commands due to deprecation
    * installation.sh script to help automate a standard make install or dev install
    * when sessions are created without an id they will now always start from 1 and return the next unused id
    * gRPC is now running by default
* Session API
    * removed **create_emane_network** and **create_wlan_network** to help force using **add_node** for all cases
    * removed **session.master** as it was only used for previous distributed sessions
    * updated **add_node** to allow providing a custom class for node creation
* gRPC API
    * added get all services configurations
    * added get all wlan configurations
    * added start/stop session calls, provides more freedom for startup and shutdown logic
    * session events now have a session id to help differentiate which session they are coming from
    * throughput events now require a session id and responses include session id for differentiating data
    * session events can now be subscribed to with a subset of events or all
    * emane model config data now include interface ids properly
    * sessions returned from get sessions call may include file names when created from xml
    * when opening an xml the session can now be started or not
    * edit node will now broadcast the edit for others to listen to
    * all config responses will now be in the form of a mapped value of key to ConfigOption, or a list of these when retrieving all, sometimes the config response may be wrapped in a different message to include other metadata
* Bugfixes
    * \#311 - initialize ebtables chains for wlan networks only
    * \#312 - removed sudo from init script
    * \#313 - check if interface exists before flushing, previously would log an exception that didn't matter
    * \#314 - node locations stored as floats instead of ints to avoid mobility calculations due to loss of precision
    * \#321 - python installation path will be based on distr ibution/python building it
    * emane options xml parsing didn't properly take into account the **emane_prefix** configuration
    * updates services that checked for ipv4/ipv6 addresses to not fail for valid ipv6 addresses with a decimal
* Documentation
    * updated NRL links to new GitHub locations
    * updates for distributed session
    * updates to dev guide
    * updates to examples LXD/Docker setup
    * updates to FRR service documentation
    * gRPC get node service file will not throw an exception when node doesn't exist

## 2019-10-12 CORE 5.5.2
* gRPC
    * Added emane_link API for linking/unlinking EMANE nodes within the GUI
* Bugfixes
    * Fixed python3 issues when configuring WLAN nodes
    * Fixed issue due to refactoring when running distributed
    * Fixed issue when running python script from GUI

## 2019-10-09 CORE 5.5.1
* Bugfix
    * Fixed issue with 5.5.0 refactoring causing issues in python2.
    * Fixed python3 issues with NRL services

## 2019-10-03 CORE 5.5.0
* Documentation
    * updated dependencies for building OSPF MDR on installation page
    * added python/pip instruction on installation page
    * added ethtool dependency for CORE
* GUI
    * removed experimental OVS node to avoid confusion and issues related to using it
* Daemon
    * fixed core-daemon --ovs flag back to working order for running CORE using OVS bridges instead of Linux bridges
    * updated requirements.txt to refer to configparser 4.0.2, due to 4.0.1 removal by developers
    * update to fail fast for dependent executables that are not found within PATH
    * update to not load services that fail during service.on_load and move on
* Build
    * fixed issue with configure script when using option flags
    * python install path will use the native install path for AM_PATH_PYTHON, instead of coercing to python3
* Issues
    * \#271 - OVS node error in GUI
    * \#291 - configparser 4.0.1 issue
    * \#290 - python3 path issue when building

## 2019-09-23 CORE 5.4.0
* Documentation
    * Updates to documentation dev guide
* Improvements
    * Added support for Pipenv for development
    * Added configuration to leverage pre-commit during development
    * Added configuration to leverage isort, black, and flake8 during development
    * Added Github Actions to help verify pull requests in the same way as pre-commit
* Issues
    * \#279 - WLAN configuration does not get set by default
    * \#272 - error installing python package futures==3.2.0
* Pull Requests
    * \#275 - Disable MAC learning on WLAN
    * \#281 - Bumped jackson version on corefx

## 2019-07-05 CORE 5.3.1
* Documentation
    * Updates to provide more information regarding several of the included services
* Issues
    * \#252 - fixed changing wlan configurations during runtime
    * \#256 - fixed mobility waypoint comparison for python3
    * \#174 - turn tx/rx checksums off by default as they will never be valid for virtual interfaces
    * \#259 - fixes for distributed EMANE
    * \#260 - fixed issue with how execfile was being used due to it not existing within python3

## 2019-06-10 CORE 5.3.0
* Enhancements
    * python 2 / 3 support
    * added new API using [gRPC](https://grpc.io/)
    * --grpc --grpc-port --grpc-address flags added to core-daemon
    * core.api.grpc.client.CoreGrpcClient, provides a convenience wrapper for leveraging the API
* Docs
    * Updates to installation instructions for latest changes
* Services
    * Added FRR service
* EMANE
    * Added EMANE prefix configuration when looking for emane model manifest files
    * requires configuring **emane_prefix** in /etc/core/core.conf
* Cleanup
    * Refactoring of the core python package structure, trying to help provide better organization and 
  logical groupings
* Issues
    * \#246 - Fixed network to network link handling when reading xml files
    * \#236 - Fixed storing/reading of link configuration values within xml files 
    * \#170 - FRR Service
    * \#155 - EMANE path configuration
    * \#233 - Python 3 support
    * \#245 - Fixed bidirectional link configurations when reading from xml files
    * \#208 - gRPC API
    * Fixed link configuration dup handling when loaded from xml files

## 2019-06-07 CORE 5.2.2
* Enhancements:
    * adds back in core-daemon udp support for coresendmsg, people may have depended on previously for certain scenarios
* Bug Fixes:
    * fixes issue in GUI that would prevent moving nodes during mobility scenarios

## 2019-03-25 CORE 5.2.1
* Packaging:
    * documentation no longer builds by default, must use configure flag
    * added configure flag to allow only building vcmd
    * sphinx will no long be required when not building documentation
* Services:
    * Added source NAT service
    * Fixed DHCP service for Ubuntu 18.04
* BUGFIXES:
    * \#188 - properly remove session on delete TLV API call
    * \#192 - updated default gnome terminal command for nodes to be Ubuntu 18.04 compatible
    * \#193 - updates to service validation, will retry on failure and better exception logging
    * \#195 - TLV link message data fix
    * \#196 - fix to avoid clearing out default services
    * \#197 - removed wireless_link_all API from EmuSession
    * \#216 - updated default WLAN bandwidth to 54Mbps
    * \#223 - fix to saving RJ45 to session XML files

## 2018-05-22 CORE 5.1
* DAEMON:
    * removed and cleared out code that is either legacy or no longer supported (Xen, BSD, Kernel patching, RPM/DEB 
 specific files)
    * default nodes are now set in the node map
    * moved ns3 and netns directories to the top of the repo
    * changes to make use of fpm as the tool for building packages
    * removed usage of logzero to avoid dependency issues for built packages
    * removed daemon addons directory
    * added CoreEmu to core.emulator.coreemu to help begin serving as the basis for a more formal API for scripting 
 and creating new external APIs out of
    * cleaned up logging, moved more logging to DEBUG from INFO, tried to mold INFO message to be more simple and 
 informative
    * EMANE 1.0.1-1.21 supported
    * updates to leverage EMANE python bindings for dynamically parsing phy/mac manifest files
    * example custom EMANE model lives under /usr/share/core/examples/myemane/examplemodel.py
    * EMANE TDMA model now supports an option to start a TDMA schedule when running
    * fixed issues with coresendmsg script due to code refactoring
    * added make target for generating documentation "make doc"
    * Python 2.7+ is now required
    * ns3 is no longer bundled by default, but will be produced as a separate package for installation
* GUI:
    * updated broken help links in GUI Help->About
* Packaging:
    * fixed PYTHON_PATH to PYTHONPATH in sysv script
    * added make command to leverage FPM as the tool for creating deb/rpm packages going forward, there is documentation 
 within README.md to try it out
* TEST:
    * fixed some broken tests
    * new test cases based on CoreEmu usage
* BUGFIXES:
    * \#142 - duplication of custom services
    * \#136 - sphinx-apidoc command not found
    * \#137 - make command fails when using distclean
 
## 2017-09-01 CORE 5.0
* DEVELOPMENT:
    * support for editorconfig to help standardize development across IDEs, from the defined configuration file
    * support for sonarqube analysis, from the defined configuration file
* DAEMON:
    * code cleanup and improvements to adhere to coding standards (SonarQube)
    * leverage "logzero" module to make easy usage of the standard logging module
    * improvements to documentation across the code base
    * initial work to separate the dependence on TCP API messaging from the core library (easier core scripting)
    * beta support for running core in Open vSwitch mode, leveraging Open vSwitch bridges, instead of Linux bridges
* SERVICES:
    * added Ryu SDN controller service
    * added Open vSwitch service
* TEST:
    * added unit/integration tests to support validating changes going forward
* BUGFIXES:
    * merged pull requests for: #115, #110, #109, #107, #106, #105, #103, #102, #101, #96

## 2015-06-05 CORE 4.8
* EMANE:
    * support for EMANE 0.9.2
    * run emane in each container when using EMANE 0.9.2
    * support using separate control networks for EMANE OTA and event traffic
* GUI:
    * fixed an issue where the adjacency widget lines pointed to old node positions
    * fixed an issue where not all EMANE 0.9.x IEEE 802.11 MAC parameter were configurable
    * fixed an issue related to running python scripts from the GUI when using tcl/tk version 8.6
    * improved batch mode execution to display the check emulation light status
    * improved managing multiple sessions
    * improved support for using multiple canvases
    * added a reload option to the file menu to revert back to a saved scenario
* DAEMON:
    * support exporting scenarios in NRL Network Modeling Framework 1.0 XML format
    * support importing scenarios in NRL Network Modeling Framework 1.0 XML format
    * support exporting the deployed scenario state in NRL NMF XML 1.0 format
    * improved EMANE post-startup processing to better synchronize distributed emulations
    * improved how addresses are assigned to tun/tap devices
    * added support for python state-change callbacks
* SERVICES:
    * added mgen sink and mgen actor services
    * added oslrv2 and olsr.org services
    * added a docker service
* BUILD:
    * improved the install/uninstall process
    * improved debian and rpm packaging
* BUGFIXES:
    * updated the http service for ubuntu 14.04
    * improved included examples
    * shortened the length of network interface names
    * improved how the core system service manages running the core daemon
    * fixed an issues related to applying session configuration setting
    * improved detecting when a distributed emulation is already running
    * improved documentation

## 2014-08-06 CORE 4.7
* EMANE:
    * support for EMANE 0.9.1
    * fix error when using Comm Effect model with loss/duplicate string values
    * enable flow control in virtual transport if enabled in the MAC model
    * fix bug #150 where EMANE event service/address port were not used
* GUI:
    * support Tcl/Tk 8.6 when available
    * added --(a)ddress and --(p)ort arguments to core-gui command-line
    * added File > Execute XML or Python script... option
    * added File > Execute Python script with options... menu item
    * when executing Python script from GUI, run in background thread, wait for
    RUNTIME state
    * enter RUNTIME state when start button pressed with empty canvas
    * added support for asymmetric link effects
    * support link delays up to 274 seconds (netem maximum)
    * allow runtime changes of WLAN link effects
* DAEMON:
    * set NODE_NAME, NODE_NUMBER, SESSION_SHORT in default vnoded environment
    * changed host device naming to use veth, tap prefixes; b.n.SS for bridges
    * allow parsing XML files into live running session
    * enable link effects between hub/switch and hub/switch connections
    * update MDR service to use broadcast interfaces for non-WLAN links
    * allow node class to be specified when initializing XML parser
    * save and parse canvas origin (reference point) and scale in MP XML
    * up/down control script session option
    * fix hash calculation used to determine GRE tunnel keys
    * use shell script to detach SMF on startup
    * added NRL services for mgen sink and nrlolsrv2
    * use SDT URL session option
    * added core-manage tool for addons to add/remove/check services, models,
    and custom node types
* API:
    * implement local flag in Execute Message for running host commands
    * jitter changed to 64-bit value to align with delay in Link Message
    * added unidirectional link flag TLV to Link Message
    * added reconfigure event type for re-generating service config files
    * return errors in API with failed services
* BUGFIXES:
    * fix HTTP service running under Ubuntu
    * fixed the following bugs: #150, 169, 188, 220, 225, 230, 231, 242, 244,
    247, 248, 250, 251

## 2013-09-25 CORE 4.6
* NOTE: cored is now core-daemon, and core is now core-gui (for Debian acceptance)
* NOTE: /etc/init.d/core is now /etc/init.d/core-daemon (for insserv compatibility)
* EMANE:
    * don't start EMANE locally if no local NEMs
    * EMANE poststartup() to re-transmit location events during initialization
    * added debug port to EMANE options
    * added a basic EMANE 802.11 CORE Python script example
    * expose transport XML block generation to EmaneModels
    * expose NEM entry to the EmaneModel so it can be overridden by a model
    * add the control interface bridge prior to starting EMANE, as some models may
    * depend on the controlnet functionality
    * added EMANE model to CORE converter
    * parse lat/long/alt from node messages, for moving nodes using command-line
    * fix bug #196 incorrect distance when traversing UTM zones
* GUI:
    * added Cut, Copy, and Paste options to the Edit menu
    * paste will copy selected services and take care of node and interface
    *  renumbering
    * implement Edit > Find dialog for searching nodes and links
    * when copying existing file for a service, perform string replacement of:
    *  "~", "%SESSION%", "%SESSION_DIR%", "%SESSION_USER%", "%NODE%", "%NODENAME%"
    * use CORE_DATA_DIR insteadof LIBDIR
    * fix Adjacency Widget to work with OSPFv2 only networks
* BUILD:
    * build/packaging improvements for inclusion on Debian
    * fix error when running scenario with a mobility script in batch mode
    * include Linux kernel patches for 3.8
    * renamed core-cleanup.sh to core-cleanup for Debian conformance
    * don't always generate man pages from Makefile; new manpages for
  coresendmsg and core-daemon
* BUGFIXES:
    * don't auto-assign IPv4/IPv6 addresses when none received in Link Messages (session reconnect)
    * fixed lock view
    * fix GUI spinbox errors for Tk 8.5.8 (RHEL/CentOS 6.2)
    * fix broker node count for distributed session entering the RUNTIME state when
    *  (non-EMANE) WLANs or GreTapBridges are involved;
    * fix "file exists" error message when distributed session number is re-used
    *  and servers file is written
    * fix bug #194 configuration dialog too long, make dialog scrollable/resizable
    * allow float values for loss and duplicates percent
    * fix the following bugs: 166, 172, 177, 178, 192, 194, 196, 201, 202,
  205, 206, 210, 212, 213, 214, 221

## 2013-04-13 CORE 4.5
* GUI:
    * improved behavior when starting GUI without daemon, or using File New after connection with daemon is lost
    * fix various GUI issues when reconnecting to a session
    * support 3D GUI via output to SDT3D
    * added "Execute Python script..." entry to the File Menu
    * support user-defined terminal program instead of hard-coded xterm
    * added session options for "enable RJ45s", "preserve session dir"
    * added buttons to the IP Addresses dialog for removing all/selected IPv4/IPv6
    * allow sessions with multiple canvases to enter RUNTIME state
    * added "--addons" startup mode to pass control to code included from addons dir
    * added "Locked" entry to View menu to prevent moving items
    * use currently selected node type when invoking a topology generator
    * updated throughput plots with resizing, color picker, plot labels, locked scales, and save/load plot 
  configuration with imn file
    * improved session dialog
* EMANE:
    * EMANE 0.8.1 support with backwards-compatibility for 0.7.4
    * extend CommEffect model to generate CommEffect events upon receipt of Link Messages having link effects
* Services:
    * updated FTP service with root directory for anonymous users
    * added HTTP, PCAP, BIRD, RADVD, and Babel services
    * support copying existing files instead of always generating them
    * added "Services..." entry to node right-click menu
    * added "View" button for side-by-side comparison when copying customized config files
    * updated Quagga daemons to wait for zebra.vty VTY file before starting
* General:
    * XML import and export
    * renamed "cored.py" to "cored", "coresendmsg.py" to "coresendmsg"
    * code reorganization and clean-up
    * updated XML export to write NetworkPlan, MotionPlan, and ServicePlan within a Scenario tag, added new 
  "Save As XML..." File menu entry
    * added script_start/pause/stop options to Ns2ScriptedMobility
    * "python" source sub-directory renamed to "daemon"
    * added "cored -e" option to execute a Python script, adding its session to the active sessions list, allowing for 
  GUI connection
    * support comma-separated list for custom_services_dir in core.conf file
    * updated kernel patches for Linux kernel 3.5
    * support RFC 6164-style IPv6 /127 addressing
* ns-3:
    * integrate ns-3 node location between CORE and ns-3 simulation
    * added ns-3 random walk mobility example
    * updated ns-3 Wifi example to allow GUI connection and moving of nodes
* fixed the following bugs: 54, 103, 111, 136, 145, 153, 157, 160, 161, 162, 164, 165, 168, 170, 171, 173, 174, 176, 
184, 190, 193

## 2012-09-25 CORE 4.4
* GUI:
    * real-time bandwidth plotting tool
    * added Wireshark and tshark right-click menu items
    * X,Y coordinates shown in the status bar
    * updated GUI attribute option to link messages for changing color/width/dash
    * added sample IPsec and VPN scenarios, how many nodes script
    * added jitter parameter to WLANs
    * renamed Experiment menu to Session menu, added session options
    * use 'key=value' configuration for services, EMANE models, WLAN models, etc.
    * save only service values that have been customized
    * copy service parameters from one customized service to another
    * right-click menu to start/stop/restart each service
* EMANE:
    * EMANE 0.7.4 support
    * added support for EMANE CommEffect model and Comm Effect controller GUI
    * added support for EMANE Raw Transport when using RJ45 devices
* Services:
    * improved service customization; allow a service to define custom Tcl tab
    * added vtysh.conf for Quagga service to support 'write mem'
    * support scheduled events and services that start N seconds after runtime
    * added UCARP service
* Documentation:
    * converted the CORE manual to reStructuredText using Sphinx; added Python docs
* General:
    * Python code reorganization
    * improved cored.py thread locking
    * merged xen branch into trunk
    * added an event queue to a session with notion of time zero
    * added UDP support to cored.py
    * use UDP by default in coresendmsg.py; added '-H' option to print examples
    * enter a bash shell by default when running vcmd with no arguments
    * fixes to distributed emulation entering runtime state
    * write 'nodes' file upon session startup
    * make session number and other attributes available in environment
    * support /etc/core/environment and ~/.core/environment files
    * added Ns2ScriptedMobility model to Python, removed from the GUI
    * namespace nodes mount a private /sys
    * fixed the following bugs: 80, 81, 84, 99, 104, 109, 110, 122, 124, 131, 133, 134, 135, 137, 140, 143, 144, 146, 
  147, 151, 154, 155

## 2012-03-07 CORE 4.3
* EMANE 0.7.2 and 0.7.3 support
* hook scripts: customize actions at any of six different session states
* Check Emulation Light (CEL) exception feedback system
* added FTP and XORP services, and service validate commands
* services can flag when customization is required
* Python classes to support ns-3 simulation experiments
* write state, node X,Y position, and servers to pycore session dir
* removed over 9,000 lines of unused GUI code
* performance monitoring script
* batch mode improvements and --closebatch option
* export session to EmulationScript XML files
* basic range model moved from GUI to Python, supports 3D coordinates
* improved WLAN dialog with tabs
* added PhysicalNode class for joining real nodes with emulated networks
* fixed the following bugs: 50, 75, 76, 79, 82, 83, 85, 86, 89, 90, 92, 94, 96, 98, 100, 112, 113, 116, 119, 120

## 2011-08-19 CORE 4.2
* EMANE 0.7.1 support
    * support for Bypass model, Universal PHY, logging, realtime
* configurable MAC addresses
* control interfaces (backchannel between node and host)
* service customization dialog improved (tabbed)
* new testing scripts for MDR and EMANE performance testing
* improved upgrading of old imn files
* new coresendmsg.py utility (deprecates libcoreapi and coreapisend)
* new security services, custom service becomes UserDefined
* new services and Python scripting chapters in manual
* fixes to distributed emulation, linking tunnels/RJ45s with WLANs/hubs/switches
* fixed the following bugs: 18, 32, 34, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 55, 57, 58, 60, 62, 64,
65, 66, 68, 71, 72, 74

## 2011-01-05 CORE 4.1
* new icons for toolbars and nodes
* node services introduced, node models deprecated
* customizable node types
* traffic flow editor with MGEN support
* user configs moved from /etc/core/`*` to ~/.core/
* allocate addresses from custom IPv4/IPv6 prefixes
* distributed emulation using GRE tunnels
* FreeBSD 8.1 now uses cored.py
* EMANE 0.6.4 support
* numerous bugfixes

## 2010-08-17 CORE 4.0
* Python framework with Linux network namespace (netns) support (Linux netns is now the primary supported platform)
* ability to close the GUI and later reconnect to a running session (netns only)
* EMANE integration (netns only)
* new topology generators, host file generator
* user-editable Observer Widgets
* use of /etc/core instead of /usr/local/etc/core
* various bugfixes

## 2009-09-15 CORE 3.5

## 2009-06-23 CORE 3.4

## 2009-03-11 CORE 3.3