We track active development through the develop
branch and verified
stable releases through the master
branch. New releases are created and
tagged on a monthly cycle. When we tag a release, we update master
to
have the latest stable code.
As of 11/06/2017, we are retiring semantic versioning and will instead
use a date based versioning system. Now, a release version can look
like 17.11
where the "major" number is the year and the "minor" number
is the month.
This release includes several bug fixes including:
- Changed macro and inline function declarations to improve compatibility with 3rd party libraries and newer gcc versions (tested with 4.8 and 5.4)
- Solved memory leak in SDN flow table example
- Load Balancer NF now correctly updates MAC address on outgoing packets to backend servers
Improvements:
- Speed Tester NF now supports a
-c
argument indicating how many packets should be created. If combined with the PCAP replay flag, this parameter controls how many of packets in the trace will be transmitted. A larger packet count may be required when trying to use Speed Tester to saturate a chain of network functions.
No API changes were introduced in this release.
v17.11 (11/16/17): New TX thread architecture, realistic NF examples, better stats, messaging, and more
Since the last official release there have been substantial changes to openNetVM, including the switch to date based versioning mentioned above. Changes include:
- New TX architecture: previously NFs enqueued packets into a TX ring that was read by TX threads in the manager, which consumed significant CPU resources.
By moving TX thread logic to the NF side, ONVM can run with fewer cores, improving efficiency. NFs can then directly pass packets which saves enqueueing/dequeuing to an extra ring. TX threads still send packets out the NIC, but NFs primarily do packet passing--it is suggested to run the system with at least 1 TX thread to handle outgoing packets. Despite these changes, TX threads can still perform the same work that they did before. If a user would like to run ONVM with TX threads handling all packet passing, they must set
NF_HANDLE_TX
to0
inonvm_common.h
- Our tests show this change increases NF transmit speed from 20 Mpps to 41 Mpps with the Speed Tester NF benchmark, while consuming fewer cores.
- New NFs: we have developed several new sample NFs, including:
examples/ndpi_stats
uses the nDPI library for deep packet inspection to determine the protocol of each flow.examples/flow_tracker
illustrates how to use ONVM's flow table library to track the list of open connections and print information about them.examples/arp_response
can be used to assign an IP to the NICs managed by openNetVM. The NF is capable of responding to ARP requests. This facilitates NFs that act as connection endpoints, load balancers, etc.examples/load_balancer
is a layer 3, round-robin load balancer. When a packet arrives the NF checks whether it is from an already existing flow. If not, it creates a new flow entry and assigns it to a destination backend server. This NF uses ARP support to assign an accessible IP to the openNetVM host running the load balancer.- Snort NF provides a version of the Snort intrusion detection system ported to openNetVM.
- PCAP replay: the Speed Tester NF can now load a packet trace file and use that to generate the packets that it transmits.
- NF idle call back: Traditionally, NFs would wait until the ONVM manager puts packets on their Rx buffer and then calls their packet handler function to process them. This meant that NFs would sit idle until they have some packets to process. With this change, NFs can now run at any time even if there are no packets to process. NFs can provide a callback handler function to be registered with NFLib. Once this callback handler is registered with NFLib, the function will be run constantly even if there are no packets to be processed.
- Web-based stats: the ONVM manager can now display statistics about the active NFs. See
onvm_web/
for more information. - NF--Manager Messaging Interface: We have expanded the interface between the manager and NFs to allow more flexible message passing.
- A multitude of other bug fixes, documentation improvements, etc!
This release refactored the code into a proper library, making it easier to include with more advanced NFs. We also added new AES encryption and decryption NFs that operate on UDP packets.
A big set of commits to clean the structure and simplify onvm source code. We separated all functions into the main.c of the manager into modules :
onvm_stats
: functions displaying statisticsonvm_pkt
: functions related to packet processingonvm_nf
: functions related to NFs management.
Each module comes with a header file with commented prototypes. And each c and h file has been "cut" into parts :
- interfaces, or functions called outside of the module
- internal functions, the functions called only inside the module and doing all the work
- helper functions, simple and short functions used many times through the module.
API Changes:
- NFs now need to call functions like
onvm_nflib_*
instead ofonvm_nf_*
. For example,onvm_nflib_init
instead ofonvm_nf_init
. The example NFs have all been updated accordingly. - NF
Makefiles
need to be updated to find the path toonvm_nflib
.
Initial source code release.