GithubHelp home page GithubHelp logo

markchan3 / linc-switch Goto Github PK

View Code? Open in Web Editor NEW

This project forked from flowforwarding/linc-switch

0.0 0.0 0.0 35.88 MB

OpenFlow Software Switch written in Erlang

Home Page: http://flowforwarding.org

License: Other

Makefile 0.07% Erlang 98.51% Shell 0.76% Python 0.65%

linc-switch's Introduction

LINC - OpenFlow software switch

What is LINC?

LINC 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.

Features

How to use it?

Erlang

To use LINC you need to have an Erlang runtime installed on your machine. Required version is R16 or newer.

Install from sources

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

Install from binaries

If you're lazy you can also use Erlang binary packages created by Erlang Solutions.

LINC

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".

Development environment

To facilitate developing LINC application the appropriate environment was prepared. It consists of the following components:

  1. "Sync" - scans all the beam files and their corresponding source files and reloads or recompiles them respectively if necessary.
  2. "EDTS" - Emacs mode that among others provides automatic files compilation, finding function declaration etc. For this to work you have to configure your emacs to use EDTS.
  3. Makefile targets - start the development Erlang VM.

Assuming that you have Emacs and EDTS installed and properly configured, to start developing LINC you have follow these steps:

  1. Clone the repo.
  2. Enter the project root dir and issue: make dev_prepare If you get and error saying "beam.smp executable not found!" follow the guidelines and export the BEAMSMP_PATH variable pointing to your beam.smp and run the make target againg.
  3. By default only the 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.
  4. Next start the development Erlang VM: make dev

Now you can develop the LINC application without restarting the Erlang VM.

Support

If you have any technical questions, problems or suggestions regarding LINC please send them to [email protected] mailing list or create an Issue. Thanks.

Implementation notes

Flow entry eviction and vacancy

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.

linc-switch's People

Contributors

konradkaplita avatar rpt avatar legoscia avatar shivarammysore avatar dmitry-orekhov avatar yamt avatar mentels avatar paulgray avatar majastanislawska avatar ruanpienaar avatar marcsugiyama avatar zoltanlajoskis avatar sandhyan avatar nygge avatar ananddaga14 avatar sigstop avatar subh007 avatar tsloughter avatar akorosmezey avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.