Ryu SDN Framework を導入する

<構築環境>

<VMを作成>

$  mkdir ryu
$  cd ryu
$  vagrant init
$  vim Vgrantfile

ubuntuのイメージのダウンロード

$  vagrant box add ubuntu1604lts https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-vagrant.box

Vgrantfileを編集

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu1604lts"

  config.vm.network "private_network", ip: "192.168.33.16"
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
  end
end

編集が終わったらVMを立ち上げます

$  vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu1604lts'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: ryu_default_1493789865556_15822
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
<省略>

立ち上がったらログインします

$  vagrant ssh

Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-38-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.

ubuntu@ubuntu-xenial:~$

<Ryuのインストール>

まずapt-getをアップデートします

$  sudo apt-get update

pythonがなかったのでpythonをインストール(pythonは2.7系)
同時にpipとその他もインストールします
pipがインストール終わったらアップグレード

$  sudo apt-get install -y python
$  sudo apt-get install -y python-pip python-dev libxml2-dev libxslt-dev zlib1g-dev
$  sudo pip install --upgrade pip

それではRyuをインストールします

$  sudo pip install ryu
$  ryu --version
ryu 4.13

Ryuのインストールが完了
Mininetを使用することにより、ユーザは複数台のPCを用意する事なくOpenFlowが動く環境を簡単に用意できるので次にMininetインストール
gitがインストールされてないならgitをインストール

$  git --version
git version 2.7.4
$  git clone git://github.com/mininet/mininet
$  cd mininet/
$  git checkout -b 2.2.1 2.2.1
$  cd ..
$  mininet/util/install.sh -nfv
$  man mn

man mnインストールできているか確認 Mininetのインストールが完了

<RyuとMininetの動作確認>

サンプルが以下のディレクトリに入っている /usr/local/lib/python2.7/dist-packages/ryu/app/ 実行時にこのパスを入力するのは面倒なのでシンボリックリンクを作る

$  ln -s /usr/local/lib/python2.7/dist-packages/ryu /home/ubuntu/ryu

コンソール2つ開いてMininetとryu-managerを触る
まず,コンソール1でsimple_switch.pyを起動し、接続する

$  ryu-manager ryu/app/simple_switch.py

この時に,error: [Errno 98] Address already in useというエラーがでたら下記を実行する

$  sudo lsof -i -nP
ovs-testc 16342   root    3u  IPv4  40523      0t0  TCP *:6653 (LISTEN)

上記のプロセスがあるならkillする

$  sudo kill 16342

コンソール1でsimple_switch.pyを実行しておき
コンソール2でMininetを実行する

$ sudo mn --controller remote
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2 
*** Adding switches:
s1 
*** Adding links:
(h1, s1) (h2, s1) 
*** Configuring hosts
h1 h2 
*** Starting controller
c0 
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet> 

pingallと入力すると下記のようになればOK

mininet> pingall
*** Ping: testing ping reachability
h1 -> h2 
h2 -> h1 
*** Results: 0% dropped (2/2 received)

これで動作確認完了です

<参考文献>

【SDNチャレンジ】 第16回 Ryuコントローラインストール編
Mininet + ryu インストールと実行まで