Giter VIP home page Giter VIP logo

trema's Introduction

Welcome to Trema

Gem Version Build Status Code Climate Coverage Status Dependency Status Gitter chat

Trema is a OpenFlow controller framework that includes everything needed to create OpenFlow controllers in Ruby and C.

This distribution includes all the source code of Trema you need to develop your own OpenFlow controllers. The source tree includes basic libraries and functional modules that work as an interface to OpenFlow switches.

Several sample applications developed on top of Trema are also provided, so you can run them as a sample of OpenFlow controllers. Additionally, a simple but powerful framework that emulates an OpenFlow-based network and end-hosts is provided for testing your own controllers. For debugging, a wireshark plug-in to diagnose internal data-flows among functional modules is provided.

Supported Platforms

Trema supports GNU/Linux only. And it has been tested on the following environments:

  • Ruby 1.9.3 or higher
  • RubyGems 1.8.25 or higher
  • Ubuntu 13.04, 12.10, 12.04, 11.10, and 10.04 (i386/amd64, Desktop Edition)
  • Debian GNU/Linux 7.0 and 6.0 (i386/amd64)
  • Fedora 16-19 (i386/x86_64)

It may also run on other GNU/Linux distributions but is not tested and NOT SUPPORTED at this moment.

Supported OpenFlow Protocol Versions

Trema currently supports OpenFlow version 1.0 only.

Getting Started

1.Install the prerequisites at the command prompt:

(In Ubuntu or Debian GNU/Linux)
$ sudo apt-get install gcc make git ruby rubygems ruby-dev libpcap-dev libsqlite3-dev libglib2.0-dev

(In Fedora 16-19)
$ sudo yum install tar gcc make git ruby rubygems ruby-devel libpcap-devel libsqlite3x-devel glib2-devel

2.Install Trema at the command prompt:

$ sudo gem install trema

3.Optional: Install Wireshark to diagnose internal data-flows.

$ sudo apt-get install wireshark

4.Follow the guidelines to start developing your OpenFlow controller. You may find the following resources handy:

Sample Code

Study sample code for implementation examples of Trema features. Each sample code project is executable source example of how to write a OpenFlow controller using Trema Ruby API.

Ruby API

The following is an excerpt from the Trema Ruby API. The full documents are found here http://rubydoc.info/github/trema/trema/master/frames

Event and Message Handlers

Subclass Trema::Controller and override some of the following methods to implement your own controller.

class MyController < Controller
  # handle Packet-In messages here.
  def packet_in datapath_id, message
    # ...
  end

  # handle Flow-Removed messages here.
  def flow_removed datapath_id, message
    # ...
  end

  # ...
end

Flow-Mod and Packet-Out

For sending Flow-Mod and Packet-Out, there are some methods defined in Trema::Controller class.

class MyController < Controller
  def packet_in datapath_id, message
    # ...
    send_flow_mod_add( datapath_id, ... )
    send_packet_out( datapath_id, ... )
  end

  # ...
end

Other OpenFlow Messages

The following OpenFlow messages can be sent with Trema::Controller#send_message

class MyController < Controller
  def switch_ready datapath_id
    # send a FeaturesRequest message
    send_message datapath_id, FeaturesRequest.new
  end

  def features_reply datapath_id, message
    # ...
  end

  # ...
end

Matching Rules

The matching rule of each flow table entry can be created with Match.new(options) and passed as ":match =>" option when sending Flow-Mod or Packet-Out.

def packet_in datapath_id, message
  # ...

  send_flow_mod_add(
    datapath_id,
    :match => Match.new( :in_port => message.in_port, ...)
    # ...
  )

  # ...
end

Also there is a utility method called ExactMatch.from(packetin) for getting an exact match corresponding to a packet.

def packet_in datapath_id, message
  # ...

  send_flow_mod_add(
    datapath_id,
    :match => ExactMatch.from( message )
    # ...
  )

  # ...
end

Actions

The actions list of each flow table entry can be set with ":actions =>" when sending Flow-Mod or Packet-Out.

# Strip the VLAN tag of a packet then send it out to switch port #1
send_flow_mod_add(
  datapath_id,
  # ...
  :actions => [ StripVlanHeader.new, SendOutPort.new( 1 ) ]
)

Meta

Contributors

Special thanks to all contributors for submitting patches. A full list of contributors including their patches can be found at:

https://github.com/trema/trema/contributors

License

Trema is released under the GNU General Public License version 2.0:

trema's People

Contributors

yasuhito avatar nickkaranatsios avatar y-higuchi avatar rakshasa avatar infrastation avatar nhst-zz avatar miz-take avatar sugyo avatar userlocalhost avatar shun159 avatar amotoki avatar cdwertmann avatar masap avatar hideyukishimonishi avatar miyakz1192 avatar

Watchers

Sadiq Yakasai 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.