Add Physical Interfaces into mininet switch

untuk menambahkan physical interface kedalam mininet switch, dapat menggunakan script dibawah ini :

#!/usr/bin/python

from mininet.net import Mininet
from mininet.node import RemoteController, OVSSwitch
from mininet.cli import CLI
from mininet.link import Intf
from mininet.log import setLogLevel, info

def myNetwork():
    net = Mininet( topo=None,controller=RemoteController,switch=OVSSwitch)

    info( '*** Add Controller\n')
    net.addController('c0', ip='127.0.0.1', port=6633)

    info( '*** Add switches\n')
    s1 = net.addSwitch('s1')
    Intf( 'ens4', node=s1 )

    info( '*** Add hosts\n')
    h1 = net.addHost('h1', ip='10.0.0.1')

    info( '*** Add links\n')
    net.addLink(h1, s1)

    info( '*** Starting network\n')
    net.start()
    CLI(net)
    net.stop()

if __name__ == '__main__':
    setLogLevel( 'info' )
    myNetwork()

Script tersebut menambahkan interface ens4 kedalam s1 didalam mininet.

Install ONOS as a Services

ONOS dapat berjalan diserver sebagai service, berikut cara instalasinya, download terlebih dahulu onos dan extract pada folder opt

sudo mkdir /opt
cd /opt
wget http://repo1.maven.org/maven2/org/onosproject/onos-releases/1.13.3/onos-1.13.3.zip
unzip onos-1.13.3.zip
mv onos-1.13.3 onos

Install service filenya

sudo cp /opt/onos/init/onos.initd /etc/init.d/onos

untuk ubuntu

sudo cp /opt/onos/init/onos.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable onos

jalankan onos

sudo systemctl start onos

 

 

 

OpenDayLight Daemon & Initial Apps

opendaylight pada dasarnya tidak menyediakan daemon agar kita bisa memanggilnya lewat systemd. untuk itu mari kita buat daemonnya :

sudo sh -c 'cat << EOF > /etc/systemd/system/opendaylight.service
[Unit]
Description=Opendaylight Service

[Service]
User=root
Group=root
WorkingDirectory=/opt/karaf-0.7.3/
ExecStart=/opt/karaf-0.7.3/bin/karaf

[Install]
WantedBy=multi-user.target
EOF'

script ini akan membuat daemon opendaylight dengan direktori opendaylight berada di /opt/. silahkan jalankan daemon tersebut :

systemctl start opendaylight

pada dasarnya juga opendaylight tidak akan menginstall aplikasi apapun. jika dikombinasikan dengan daemon, akan sangat merepotkan karena aplikasi harus di install didalam karaf. maka dari itu, gunakan cara berikut :

cd karaf-0.7.3
sudo sh -c "echo 'feature:install odl-dlux-core odl-dluxapps-nodes odl-dluxapps-topology odl-dluxapps-applications odl-l2switch-all' >> etc/shell.init.script"

tambahkan script pada etc/shell.init.script. lalu jalankan opendaylight 2x (start pertama kali gagal)

sudo systemctl start opendaylight
sleep 10
sudo systemctl restart opendaylight

Creating Simple YANG Model

YANG model adalah bahasa yang dibuat khusus memodelkan jaringan. sekarang mari kita coba membuat yang model

module vyos-interface {
    prefix "interfaces";
    namespace "https://btech.id/";

    organization
      "Boer Technology";
    contact
      "zufar@btech.co.id";

    description
      "This is YANG Module for VyOS interface";

    typedef ipv4-prefix {
        type string {
            pattern
            '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
            + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
            + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
        }
    }

    container interface {
        list ethernet {
            key "name";
            leaf name {
                type string;
            }
            leaf address {
                type interfaces:ipv4-prefix;
            }
            leaf description {
                type string;
            }
        }
    }
}
  • module, adalah nama module yang tersebut, nama harus sama dengan nama file .yang
  • prefix, adalah tanda yang digunakan bahwa menggunakan resource di module tersebut, akan berguna jika kita mengimport data dari module lain.
  • namespace, semua YANG data model mempunyai namespace yang unik, module yang di publish di RFC, namespace dialokasikan oleh IANA. untuk private organization, namespace bebas dan harus didefinisikan.
  • organization, contact, description, penjelasan mengenai module tersebut
  • typedef, merupakan object yang mendefinisikan sebuah tipe data baru. pada contoh program diatas kita mendefinisikan tipe data ipv4-prefix. pattern saya ambil dari https://github.com/YangModels/yang/blob/master/standard/ietf/RFC/ietf-inet-types%402013-07-15.yang
  • container, merupakan kontainer yang berisi data yang lain, dapat di nestedkan (nested container)
  • list, merupakan object yang berisi kumpulan data, list tidak berisi value tertentu.
  • leaf, merupakan object yang memiliki satu value tertentu.

cek yang model tersebut :

zufar@zufar:~/Documents/Technology/Programming/YANG$ pyang -f tree vyos-interface.yang
module: vyos-interface
   +--rw interface
      +--rw ethernet* [name]
         +--rw name           string
         +--rw address?       ipv4-prefix
         +--rw description?   string

generate module tersebut menjadi module python :

zufar@zufar:~/Documents/Technology/Programming/YANG$ export PYBINDPLUGIN=`/usr/bin/env python -c \
>         'import pyangbind; import os; print "%s/plugin" % os.path.dirname(pyangbind.__file__)'`
zufar@zufar:~/Documents/Technology/Programming/YANG$ pyang --plugindir $PYBINDPLUGIN -f pybind vyos-interface.yang > vyos_interface.py

buat program python berdasarkan tree dari file YANG :

import vyos_interface                                              1

interface = vyos_interface.vyos_interface()                        2

new_interface = interface.interface.ethernet.add("eth0")           3
new_interface.address = "192.168.1.1/24"                           4
new_interface.description = "YANG generate"                        4

import json                                                        5
print (json.dumps(interface.get(), indent=4))                      5
  1. import module tersebut
  2. buat sebuah variable dari module tersebut, dengan memanggil fungsi module dari tree.
  3. lihat fungsi bintang pada tree? jika ada fungsi bintang, tambahkan .add() dimana value diisi dengan [name]
  4. tambahkan value lain seperti address dan description
  5. generate dengan indentasi 4, kedalam bentuk json

jalankan program tersebut :

zufar@zufar:~/Documents/Technology/Programming/YANG$ python generate.py
{
    "interface": {
        "ethernet": {
            "eth0": {
                "address": "192.168.1.1/24",
                "description": "YANG generate",
                "name": "eth0"
            }
        }
    }
}

Instalasi POX Controller

Untuk menginstall POX SDN Controller, cukup clone repository pox dari github

git clone http://github.com/noxrepo/pox

Untuk menjalankan POX

cd pox
./pox.py openflow.of_01 forwarding.l2_learning

 

Instalasi Mininet

Untuk instalasi mininet di sistem operasi Ubuntu, sangat mudah

sudo apt install mininet

Jalankan mininet dengan sudo

sudo mn --help

 

1 2 3