Awesome
LINCX - OpenFlow software switch
What is LINCX?
LINCX is a pure OpenFlow software switch written in Erlang. It runs within a separate domain under Xen hypervisor using LING (erlangonxen.org).
LINCX is a new faster version of LINC-Switch.
Features
- Support for OpenFlow Protocol 1.2 and OpenFlow Protocol 1.3,
- Support for OF-Config 1.1.1 management protocol,
- Modular architecture, easily extensible.
How to use it?
-
Check that you have Erlang/OTP 17 installed. Other versions will NOT work.
-
Clone the LINCX repository:
% git clone https://github.com/FlowForwarding/lincx.git
- Compile the code:
% ./rebar get-deps
% ./rebar compile
- Create the configuration file:
% cp lincx.config.sample lincx.config
-
Edit lincx.config as needed.
-
Build the Xen image for the switch:
% ./railing image
- Boot the lincx Xen domain:
% sudo xl create -c domain_config
How to configure LINCX?
lincx.config is the main configuration file of the LINCX switch. You can use the file lincx.config.sample as the starting point for you configuration file.
ipconf
option defines the TCP/IP networking setup. To configure TCP/IP
statically use:
{ipconf, IpAddr, NetMask, Gateway}.
To use dhcp change the option to
{ipconf, dhcp}.
To add an OpenFlow port use the following option:
{port, PortNo}.
{port, PortNo, AuxProps}.
By default, an OpenFlow port 1 connects to the bridge named br1 in Dom0. The name of the brdige can be set in auxilliary properties:
{port, 1, [{bridge,br7}]}. %% connects the port to br7
To add multiple ports use:
{ports, NumOfPorts}.
{ports, NumOfPorts, AuxProps}.
By default, the ports are numbered from 1 to NumOfPorts and are connected to brdiges br1, br2, etc. The starting port number and the prefix for bridge names can be changed using auxilliary properties:
%% adds ports 5,6,7 connected to xenbr5,xenbr6,xenbr7
{ports, 3, [{start,5},{prefix,xenbr}]}.
To add an active connection to a controller use the following option:
{controller,IpAddr,Port}.
To listen for connections from controllers:
{listener,IpAddr,Port}.
To add a queue use:
{queue, QueueNo, MinRate, MaxRate}.
A port can be connected to a queue using a property, e.g.
{queue, 1, 0, 100}.
{port, 1, [{queue,1}]}.
To set the memory size of the lincx domain (in MB, default = 1024):
{memory, Memory}.
LINCX supports alternative format -- YAML -- of the configuration file. Rename the configuration file to lincx.yml to use YAML. See lincx.yml.sample as a starting point.
Support
If you have any technical questions, problems or suggestions regarding LINCX please send them to linc-dev@flowforwarding.org mailing list or create an Issue. Thanks.