OpenFlow Software Switch written in Erlang
See the codeLINC is a pure OpenFlow software switch written in Erlang. It's implemented in operating system's userspace as an Erlang node. Such approach is not the most efficient one, but it gives a lot of flexibility and allows quick development and testing of new OpenFlow features.
To use LINC you need to have an Erlang runtime installed on your machine. Required version is R16 or newer.
To build Erlang from sources first you have to install some required system packages.
On Ubuntu:
# apt-get install gcc wget make autoconf openssl libssl0.9.8 libssl-dev libncurses5 libncurses5-dev
On RedHat/CentOS:
# yum install gcc wget make autoconf openssl openssl-devel ncurses ncurses-devel
On other Linux systems you need to install the counterparts of aforementioned packages.
When your system environment is ready download the sources from erlang.org. Unpack, compile and install:
% ./configure
% make
# make install
If you're lazy you can also use Erlang binary packages created by Erlang Solutions.
To build the switch you need to install the following additional libraries and tools.
On Ubuntu:
# apt-get install git-core bridge-utils libpcap0.8 libpcap-dev libcap2-bin uml-utilities
On RedHat/CentOS:
# yum install git sudo bridge-utils libpcap libpcap-devel libcap tunctl
Note that on RedHat/CentOS 5.x you need a newer version of libpcap:
# yum erase libpcap libpcap-devel
# yum install flex byacc
# wget http://www.tcpdump.org/release/libpcap-1.2.1.tar.gz
# tar xzf libpcap-1.2.1.tar.gz
# cd libpcap-1.2.1
# ./configure
# make && make install
On other Linux systems you need to install the counterparts of aforementioned packages.
When your environment is set up you are ready to build and run LINC.
Clone this git repository:
% git clone <REPO>
Compile everything:
% make
Adjust switch configuration by editing the rel/linc/releases/0.1/sys.config file which looks like this:
{linc,
[
{of_config, enabled},
{capable_switch_ports,
[
{port, 1, [{interface, "eth0"}]},
{port, 2, [{interface, "tap0"}]}
]},
{logical_switches,
[
{switch, 0,
[
{backend, linc_us4},
{controllers,
[
{"Switch0-DefaultController", "localhost", 6633, tcp}
]},
{queues_status, disabled},
{ports,
[
{port, 1, {queues, []}},
{port, 2, [{queues, []}, {port_no, 10}, {port_name, "Port10"}]}
]}
]}
]}
]}.
At the moment you can change the list of controllers and ports used by the switch.
Start LINC switch in console mode:
% rel/linc/bin/linc console
For further instructions on how to use LINC check the "Ping example".
For detailed explanation on how to setup simple LINC testbed check the "Testbed setup".
To facilitate developing LINC application the appropriate environment was prepared. It consists of the following components:
Assuming that you have Emacs and EDTS installed and properly configured, to start developing LINC you have follow these steps:
beam.smp and run the make target againg.procket module is excluded from scanning by Sync. If you want to prevent additional modules from being scanned modify sync configuration in rel/files/sys.config file.Now you can develop the LINC application without restarting the Erlang VM.
If you have any technical questions, problems or suggestions regarding LINC please send them to linc-dev@flowforwarding.org mailing list or create an Issue. Thanks.
Version 1.4 of the OpenFlow protocol introduced the flow entry eviction and vacancy event features, which are used to manage limited space in flow tables. Since LINC currently doesn't limit the number of entries in flow tables, it rejects attempts to configure eviction through table_mod messages, and never sends flow vacancy events.
Erlang
98.5%
OpenFlow Software Switch written in Erlang
See the codeLINC is a pure OpenFlow software switch written in Erlang. It's implemented in operating system's userspace as an Erlang node. Such approach is not the most efficient one, but it gives a lot of flexibility and allows quick development and testing of new OpenFlow features.
To use LINC you need to have an Erlang runtime installed on your machine. Required version is R16 or newer.
To build Erlang from sources first you have to install some required system packages.
On Ubuntu:
# apt-get install gcc wget make autoconf openssl libssl0.9.8 libssl-dev libncurses5 libncurses5-dev
On RedHat/CentOS:
# yum install gcc wget make autoconf openssl openssl-devel ncurses ncurses-devel
On other Linux systems you need to install the counterparts of aforementioned packages.
When your system environment is ready download the sources from erlang.org. Unpack, compile and install:
% ./configure
% make
# make install
If you're lazy you can also use Erlang binary packages created by Erlang Solutions.
To build the switch you need to install the following additional libraries and tools.
On Ubuntu:
# apt-get install git-core bridge-utils libpcap0.8 libpcap-dev libcap2-bin uml-utilities
On RedHat/CentOS:
# yum install git sudo bridge-utils libpcap libpcap-devel libcap tunctl
Note that on RedHat/CentOS 5.x you need a newer version of libpcap:
# yum erase libpcap libpcap-devel
# yum install flex byacc
# wget http://www.tcpdump.org/release/libpcap-1.2.1.tar.gz
# tar xzf libpcap-1.2.1.tar.gz
# cd libpcap-1.2.1
# ./configure
# make && make install
On other Linux systems you need to install the counterparts of aforementioned packages.
When your environment is set up you are ready to build and run LINC.
Clone this git repository:
% git clone <REPO>
Compile everything:
% make
Adjust switch configuration by editing the rel/linc/releases/0.1/sys.config file which looks like this:
{linc,
[
{of_config, enabled},
{capable_switch_ports,
[
{port, 1, [{interface, "eth0"}]},
{port, 2, [{interface, "tap0"}]}
]},
{logical_switches,
[
{switch, 0,
[
{backend, linc_us4},
{controllers,
[
{"Switch0-DefaultController", "localhost", 6633, tcp}
]},
{queues_status, disabled},
{ports,
[
{port, 1, {queues, []}},
{port, 2, [{queues, []}, {port_no, 10}, {port_name, "Port10"}]}
]}
]}
]}
]}.
At the moment you can change the list of controllers and ports used by the switch.
Start LINC switch in console mode:
% rel/linc/bin/linc console
For further instructions on how to use LINC check the "Ping example".
For detailed explanation on how to setup simple LINC testbed check the "Testbed setup".
To facilitate developing LINC application the appropriate environment was prepared. It consists of the following components:
Assuming that you have Emacs and EDTS installed and properly configured, to start developing LINC you have follow these steps:
beam.smp and run the make target againg.procket module is excluded from scanning by Sync. If you want to prevent additional modules from being scanned modify sync configuration in rel/files/sys.config file.Now you can develop the LINC application without restarting the Erlang VM.
If you have any technical questions, problems or suggestions regarding LINC please send them to linc-dev@flowforwarding.org mailing list or create an Issue. Thanks.
Version 1.4 of the OpenFlow protocol introduced the flow entry eviction and vacancy event features, which are used to manage limited space in flow tables. Since LINC currently doesn't limit the number of entries in flow tables, it rejects attempts to configure eviction through table_mod messages, and never sends flow vacancy events.
Erlang
98.5%