SDN实战: Practice SDN/OpenFlow with LINC-Switch and OpenDaylight

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDN实战: Practice SDN/OpenFlow with LINC-Switch and OpenDaylight相关的知识,希望对你有一定的参考价值。

SDN IN ACTION: Practice SDN/OpenFlow with LINC-Switch and OpenDaylight

  

薛国锋  [email protected]


本次实验,重点学习了Erlang语言、LINC软件OpenFlow交换机以及OpenDaylight开源控制器。


Last time we had built anemulated environment based on ONOS and Mininet, today we are going to play with LINC-Switch and OpenDaylight to have a deep understanding of SDN/OpenFlow, and we will also try to get some hands-on experiences with RESTful APIs and RestConf. 3 VMs - LINC-Swtich, GNS3 and OpenDaylight are created in this lab and below is the physical and logical design and topology:


技术分享


        技术分享


1 Set up the VM-LINC-Switch

 

https://github.com/FlowForwarding/LINC-Switch

https://klyr.quicheaters.org/blog/playing-with-the-erlang-linc-switch.html

 

Erlang is a programming language used to build massively scalable soft real-time systems with requirements on high availability. Some of its uses are in telecoms, banking, e-commerce, computer telephony and instant messaging (such as What‘s App). Erlang‘s runtime system has built-in support for concurrency,distribution and fault tolerance.

 

Install defaultJRE/JDK:

 

sudo apt-get update

sudo apt-get install default-jre

sudo apt-get install default-jdk


Install some required system packages to build Erlang from sources:

 

sudo apt-get install gcc wgetmake autoconf openssl libssl1.0.0 libssl-dev libncurses5 libncurses5-dev

 

Download Erlang/OTP17.0 Source Files and unpack into the home directory:

http://www.erlang.org/downloads/17.0


技术分享


Comple and Install Erlang/OTP 17.0:

cd ~/otp_src_17.0

./configure

make

sudo make install

技术分享

  

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.

 

Install theadditional libraries and tools to build LINC-Swtich from sources:

sudo apt-get install git-core bridge-utils libpcap0.8 libpcap-dev libcap2-bin uml-utilities


Clone the gitrepository

git clone https://github.com/FlowForwarding/LINC-Switch.git


技术分享

 

Compile LINC-Switch:

 

cd ~/LINC-Switch/rel/files

mv sys.config.orig sys.config

cd ~/LINC-Switch

make

 

Virtual Ethernet interfaces which always come in pair, can serveas the both ends of a tunnel and connect two entities in Linux. Create 3 pairs ofveth interfaces for 3 LINC-Swtiches:

 

sudo ip link add veth12 type veth peer name veth21

sudo ip link set veth12 up

sudo ip link set veth21 up

 

sudo ip link add veth13 typeveth peer name veth31

sudo ip link set veth13 up

sudo ip link set veth31 up

 

sudo ip link add veth23 typeveth peer name veth32

sudo ip link set veth23 up

sudo ip link set veth32 up

 

The config_gen script supports configuring multiple logicalswitches as well as using eth, tap and veth interfaces. Create 3 switches with the same controller and generate the configuration file to start LINC-Swtich:

 

cd ~

./LINC-Switch/scripts/config_gen-s 1 eth1 veth12 veth13 -s 2 eth2 veth21 veth23 -s 3 eth3 veth31 veth32  -c tcp:192.168.100.129:6633 -o ~/LINC-Switch/rel/linc/releases/1.0/sys.config

 

// s1 with eth1 connecting tos2 by veth12 and s3 by veth13

// s2 with eth2 connecting tos1 by veth21 and s3 by veth23

// s3 with eth3 connecting tos1 by veth31 and s2 by veth32

// s1, s2 and s3 connecting toOpenDaylight by tcp:192.168.100.129:6633

 

 ~/LINC-Switch/rel/linc/releases/1.0/sys.config which uses Erlang configuration syntax, is automatically generated as the configuration file to start LINC-Swtich:

 

[{linc,

     [{of_config,enabled},   // enabled or disabled

      {sync_routing,true},

      {capable_switch_ports,

         [{port,1,[{interface,"eth1"}]},

          {port,2,[{interface,"veth12"}]},

          {port,3,[{interface,"veth13"}]},

          {port,4,[{interface,"eth2"}]},

          {port,5,[{interface,"veth21"}]},

          {port,6,[{interface,"veth23"}]},

          {port,7,[{interface,"eth3"}]},

          {port,8,[{interface,"veth31"}]},

          {port,9,[{interface,"veth32"}]}]},

      {capable_switch_queues,[]},

      {logical_switches,

          [{switch,3,                           // s3

               [{backend,linc_us4},           // linc_us4 for OpenFlow 1.3

                {controllers,

                   [{"Switch3-Controller","192.168.100.129",6633,tcp}]},

               {controllers_listener,disabled},

                {queues_status,disabled},

                {ports,

                    [{port,7,[{queues,[]}]},

                     {port,8,[{queues,[]}]},

                    {port,9,[{queues,[]}]}]}]},

           {switch,2,                         // s2

               [{backend,linc_us4},

                {controllers,

                   [{"Switch2-Controller","192.168.100.129",6633,tcp}]},

               {controllers_listener,disabled},

                {queues_status,disabled},

                {ports,

                    [{port,4,[{queues,[]}]},

                     {port,5,[{queues,[]}]},

                    {port,6,[{queues,[]}]}]}]},

           {switch,1,                       // s1

 

               [{backend,linc_us4},

                {controllers,

                   [{"Switch1-Controller","192.168.100.129",6633,tcp}]},

               {controllers_listener,disabled},

                {queues_status,disabled},

                {ports,

                    [{port,1,[{queues,[]}]},

                     {port,2,[{queues,[]}]},

                    {port,3,[{queues,[]}]}]}]}]}]},

 {enetconf,

     [{capabilities,

          [{base,{1,0}},

           {base,{1,1}},

           {startup,{1,0}},

           {‘writable-running‘,{1,0}}]},

      {callback_module,linc_ofconfig},

      {sshd_ip,any},

      {sshd_port,1830},

     {sshd_user_passwords,[{"linc","linc"}]}]},

 {lager,

     [{handlers,

          [{lager_console_backend,info},         // replace ‘debug’ with ‘info’

           {lager_file_backend,

              [{"log/error.log",error,10485760,"$D0",5},

               {"log/console.log",info,10485760,"$D0",5}]}]}]},

 {sasl,

    [{sasl_error_logger,{file,"log/sasl-error.log"}},

      {errlog_type,error},

     {error_logger_mf_dir,"log/sasl"},

      {error_logger_mf_maxbytes,10485760},

      {error_logger_mf_maxfiles,5}]},

 {sync,[{excluded_modules,[procket]}]}].

  

Start, stop andattach LINC-Swtich :

 

sudo ~/LINC-Switch/rel/linc/bin/lincstart

sudo~/LINC-Switch/rel/linc/bin/linc console

sudo~/LINC-Switch/rel/linc/bin/linc attach

sudo~/LINC-Switch/rel/linc/bin/linc stop

 

2 Set up theVM-GNS3

 

The eth1, eth2 and eth3 of GNS3 are respectively connected to the eth1, eth2 and eth3 of LINC-Switch with VMware LAN Segments. Create 3 virtual routers and connect them to S1, S2 and S3 in LINC-Swtich via GNS3 Cloud:

技术分享


R1#show run 

interface FastEthernet0/0

ip address 10.110.0.1 255.255.0.0

 

R2#show run 

interface FastEthernet0/0

ip address 10.110.0.2 255.255.0.0

 

R3#show run 

interface FastEthernet0/0

ip address 10.110.0.3 255.255.0.0

 

3 Set up the VM-OpenDaylight and test the network

 

While both adopting Java, OSGi and Karaf, OpenDaylight focuses on bringing legacy (BGP, SNMP, and such) and new networks (i.e., OpenFlow andSDN) together whereas ONOS focuses on the performance aspects and theclustering to increase the availability and scalability. Before installingOpenDaylight, install default JRE/JDK first.

 

Download the official OpenDaylight release (distribution-karaf-0.6.0-Carbon.tar.gz) for production:

https://www.opendaylight.org/technical-community/getting-started-for-developers/downloads-and-documentation

 

Unpack into the home directory and run it:


技术分享


技术分享

 

Install the the necessary OpenDaylight features withfollowing commands:

feature:install odl-aaa-authn odl-restconf-allodl-dlux-core odl-dluxapps-yangman  odl-dluxapps-topologyodl-l2switch-all webconsole odl-mdsal-apidocs 

 

You can check the below web link for all the OpenDaylightfeatures and descritions:

http://docs.opendaylight.org/en/stable-boron/getting-started-guide/installing_opendaylight.html#listing-available-features


技术分享


Open a brower on the hostsystem and enter the URL of OpenDaylight ( User/Password:admin/admin ):

http://192.168.100.129:8181/index.html

 

The topology tab displays a graphical representationof network topology created:

技术分享


YANG is a human-readablelanguage for describing data device and service models. ODL dynamicallygenerates REST APIs from YANG models (referred to as RESTCONF), thus providingODL apps developers with an immediate baseline set of APIs. YANGMAN is an ODLapplication offering dynamically generated UI forms and native JSON representationbased on RESTCONF APIs:


技术分享


Try different RESTful APIs in OpenDaylight:

 

http://192.168.100.129:8181/restconf/operational/network-topology:network-topology

 

http://192.168.100.129:8181/restconf/operational/network-topology:network-topology/topology/flow:1/node/openflow:844477163529735

 

http://192.168.100.129:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:844477163529735/table/0

 

http://192.168.100.129:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:844477163529735/table/0


技术分享


技术分享

Simple REST Client is an extension for Google Chrome to help construct custom HTTP requests to directly test the web services. Download is available at: http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb


技术分享

 Try the following commands in LINC-Switch:

技术分享


([email protected])1> rp(application:get_all_key(linc)).     // show the running configuration

([email protected])2>linc:ports(1).                                     // showall the ports of 1 ( Switch ID)

([email protected])3>linc_logic:get_datapath_id(2).         //show the datapath ID of 2 ( Switch ID)

 

Check the IP connectivity among virtual routers  in GNS3:

技术分享

本文出自 “8483144” 博客,请务必保留此出处http://8493144.blog.51cto.com/8483144/1968152

以上是关于SDN实战: Practice SDN/OpenFlow with LINC-Switch and OpenDaylight的主要内容,如果未能解决你的问题,请参考以下文章

java并发编程实战(java concurrency in practice)

SDN实战:Build a VXLAN Tunnel by Making Python-based API Calls for DCI

实战Practice丨拉动DevOps持续交付的三匹马 —— 快速交付实践总结与思考

OpenDayLight(硼Boron版本)实战开发入门

SDN第三次上机作业

HBase in Practice - 性能监控及问题解决