tree 904c64cbcce60d5562c2823e0cb0503ffc8c190c
parent 3f98c21c23df87de8568440d47e63117f4b814c2
author Georgios Katsikas <george.dit@gmail.com> 1495996905 +0200
committer Andrea Campanella <andrea@opennetworking.org> 1519321809 +0000

New SB driver for commodity servers

Monitoring enhanced with timing stats

Copy constructors for Rx filter values

Driver is updated to provide port statistics to the REST SB controller

Drastic changes to make the driver ONOS compliant. NIC statistics have become 100% compliant with PortStatistics

CPU statistics also compatible with the ONOS approach

Separated timing statistics

Style fix

NIC is included

Proper representation of a CPU. Also some refactoring

Removed unused import and added important comment

CPU vendor has become a class and the servers are now reporting more detailed CPU info

Fixed port statistics' counters for servers

Various fixes that lead to more stable behavior

Additional checks to avoid null pointer exception

Fixed potential casting issues

Updated pom with affiliation information

Updated pom with URL

Bumped rivers to version 1.12

Updated BUCK for version 1.12

NIC speed has become long and NICs are retrieved in a sorted fashion

Fixed warning

Timing statistics contain autoscale measurements

Fixed CPU vendor ID for Intel

Bumped Metron's drivers to version 1.13. Fixed origin and URL in pom.xml

Updated RestServerSBDevice to comply with the extended ONOS RestSBDevice

Total refactoring of the driver to become more generic (NFV -> Server).
Also properly separated the statistics API from implementation.

Refactored server driver and bug fix that occured when port statistics
were called before a device is properly discovered.
Statistics API and implementation are grouped again.

Removed unnecessary stuff from pom and BUCK files

Fixed checkstyle warning

Added short readme to pom.xml

New ControllerConfig behavior added

This patch adds an new ControllerConfig behavior to the server
driver, allowing external applications to get, set, and remove
a server's controller configuration.
Common functions and variables are also shared between the
two basic modules of the driver.

Fixed checkstyle warnings

Refactored controller configuration module

Consistent values returned by the methods of the driver

Unit tests for ServerControllerConfig behavior

Fixed preconditions for NULL and arguments

Improved documentation

Updated pom and BUCK

Addressed comments about sharing some more methods

Refactored the Common.java to become a base class
that extends AbstractHandlerBehaviour and can share
a unique instance of the RestSBController with child
classes. Also, after the removal of some deprecated
methods of the HTTP SB controller, I had to perform
some compatibility changes in the respective methods
of this driver.
The only problem is that my tests are now broken(??)
and I had to remove their code for now until I fix
the issues.

Expose some members and methods of BasicDriver

Renamed BasicDriver to BasicServerDriver

Change-Id: I0126adcb714f7e32695d546cf40a9de342722083
Signed-off-by: Georgios Katsikas <katsikas.gp@gmail.com>
