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.
- Support for OpenFlow Protocol 1.2 and OpenFlow Protocol 1.3,
- Support for OF-Config 1.1.1 management protocol,
- Modular architecture, easily extensible.
-
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
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.
If you have any technical questions, problems or suggestions regarding LINCX please send them to [email protected] mailing list or create an Issue. Thanks.