Git Product home page Git Product logo

midonet's Introduction

Precis

MidoNet is a system which implements an abstract, software-defined virtual network atop an existing IP fabric. That means that packets that enter a MidoNet deployment will then leave it at the location and with the alterations they would have had if they'd actually traversed the networking equipment defined in the deployment's virtual topology, or as close to it as we can manage.

Overview

A MidoNet deployment consists a few kinds of nodes, all connected in an IP network. Many nodes run Midolman, and are where traffic enters and leaves. Traffic is sent from its entry point (the ingress node) to its exit point (the egress node) via tunnels; see the tunnel management document. The network's virtual topology and associated information is stored in ZooKeeper, and per-connection state which is shared between nodes is stored in Cassandra -- all the Midolman nodes which compose a virtual network must have connectivity to the ZooKeeper and Cassandra clusters, as that's how they coordinate. The web-based REST API described here is provided by nodes running MidoNet's API service in a webserver. These API server nodes will read and modify the virtual topology configuration, so they need to have connectivity to the ZooKeeper cluster, but not necessarily any other node types.

How to contribute

You can report a bug using MidoNet Issue tracking.

All patches to MidoNet are submitted to Gerrit, an open source, web-based code review system. It's publicly hosted on GerritHub, and integrated with a CI infrastructure based on Jenkins that runs several suites of automated tests.

To submit a patch, you'll need to sign into GerritHub using your GitHub account and set up your ssh-key in Settings->SSH public keys. If you need information to set up git review, or git-review workflows, please check MidoNet Developer's Guide in the wiki.

Submitting a review is simple, typically:

git clone https://github.com/midonet/midonet
git checkout -b your_branch origin/master
# .. make some changes ..
git commit -as  # commit your changes, and sign off your commit
git review master

Your review will now appear on GerritHub. After committers approve your change and the code is tested, it'll get merged into the main repository.

Feel free to join other MidoNet developers at #midonet on irc.freenode.net, or our the Development mailing list. We'll be happy to help you get set up.

Organization of the project

The MidoNet project is split into several submodules:

brain

This contains the various pieces that compose each of the nodes in Midonet's distributed controller (brain). Controller nodes take care of orchestrating the configuration of all Midonet subcomponents, as well as coordinating with other external devices and systems, such as VTEP switches, the backend services holding our Network State DataBase (e.g: Zookeeper and Cassandra), etc.

midonet-util

Contains basic utilities used by the other modules, and is described here.

midolman

Contains the MidoNet edge controller code, as described here.

midonet-api

Contains the implementation of the MidoNet REST API.

netlink

Code for speaking the netlink protocol over a netlink socket, generally for communicating with the OS kernel.

odp

Code for interacting (receiving notifications and sending commands) to the kernel's Open Datapath module.

Build dependencies

Most dependencies are pulled in by the gradle build scripts, however there are some prerequisites:

  • java 7 jdk
  • protobufs compiler
    • Install 2.6.1 from here
  • fpm (ruby gem) to build debian/rpm packages
  • rpm

Building the project

The brain directory contains an odl-ovsdb git submodule with code that must be compiled in order to generate dependencies needed in various midonet components. Before any build tasks, ensure that you have the right version of odl-ovsdb by executing:

~/midonet$ git submodule update --init --recursive

Complete build

~/midonet$ ./gradlew

This will build all the modules while running all the tests from all the modules. To skip the tests, you can run the command:

~/midonet$ ./gradlew -x test

Distro packages

The build script provides targets to build debian and rpm packages. In all cases packages will be found in midolman/build/packages/ and midonet-api/build/packages.

Building debian packages:

~/midonet$ ./gradlew debian -x test

RPM packages targeted for RHEL 6.5:

~/midonet$ ./gradlew rpm -x test

RHEL 7 packages:

~/midonet$ ./gradlew rpm -x test -PrhelTarget=7

On ubuntu this requires the rpm tools which you can install with

# apt-get install rpm

Build all & Run tests

~/midonet$ ./gradlew test

midonet's People

Contributors

gontanon avatar ryu25ish avatar srvaroa avatar duarten avatar mtoadermido avatar joemido avatar yoshiat avatar alexbikfalvi avatar davecahill avatar tomohikokimura avatar yoo-chung avatar mtoader avatar 0cjs avatar lant avatar rlenglet avatar takayukiu avatar abelboldu avatar inercia avatar tfukushima avatar yamt avatar adjohn avatar sibradzic avatar yantarou avatar jeffjapan avatar

Watchers

James Cloos avatar Yongbok Kim avatar  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.