SDN

Abstract

项目计划部署在阿里云上,有关Software Defined Network,所有子模块均来自Netgroup Research Group,项目目前仍在部署中,这里主要负责记录项目部署过程中的注意事项。(实时更新中)

SubModules

  • Dreamer-Topology3D

    • 一个简单直观的JavaScript Web GUI(虽然他们官方的Demo都早早的挂了),可以通过扩展支持不同的网络模型,目前支持标准OpenFlow设备网络和由OSHI节点构成的网络,可以导出或导入JSON格式的拓扑。还支持图形编辑拓扑。
  • Dreamer-Experiment-Handler

    • 控制emulated SDN testbeds与Topology3D提供的Web GUI进行交互,使用Mininet仿真器,提供服务端元素来分配和控制Mininet节点,将Mininet控制台中的信息重定向到Web GUI上进行显示。
  • Dreamer-Topology-and-Service-Validator

    • 一个Django应用程序,用于存储model/layer及其约束,并能够检验基于Dreamer-Topology3D项目创建的拓扑。
  • OSHI-SR-dataplane-extensions

    • OSHI的分段路由数据平面扩展
  • SDN-TE-SR-tools

    • 基于SDN流量工程和分段路由的工具
    • parsers-generators
    • java-te-sr
    • OSHI-SR-pusher
  • Dreamer-Mininet-Extensions

    • 用于OSHI实验的Mininet扩展,用来模拟使用Mininet仿真器的OSHI网络
  • Dreamer-Topology-Parser-and-Validator

    • 用于Mininet和测试部署的拓扑解析器。使用此工具,您可以解析和验证由Dreamer-Topology-Designer创建的拓扑。
  • Dreamer-VLL-Pusher

  • dreamer-ryu

  • Mantoo-scripts-and-readme

环境配置

  • Ubuntu 16.04
  • Apache2
  • gcc
  • python2.7
  • nodejs

部署流程

Dreamer-Topology-and-Service-Validator

  • python依赖

    pip install django==1.6
    pip install networkx==1.9
  • 下载并启动项目

    git clone https://github.com/netgroup/Dreamer-Topology-and-Service-Validator.git
    cd Dreamer-Topology-and-Service-Validator
    python manage.py runserver 0.0.0.0:8090
    
    
    # 后台运行
    nohup python manage.py runserver 0.0.0.0:8090 &

Dreamer-Topolpgy3D

  • git clone https://github.com/netgroup/Dreamer-Topology3D.git

  • 将Dreamer-Topology挂在到服务器跟目录下,我用的是apache2,如下:

    mv Dreamer-Topology3D {webroot}

  • 修改项目中的js/src/config.js文件如下:

    this.top_ser_validator = {};
    this.top_ser_validator.host_port = 8090;
    this.top_ser_validator.host_name "{ip_address}";
    
    //Experiment Handler
    this.experiment_handler = {};
    this.experiment_handler.host_port = 3000;
    this.experiment_handler.host_name = "{ip_address}";
  • 打开浏览器输入url即可访问

  • 项目会默认从googleapis处加载字体,导致前端加载比较慢,可以先从源地址下载fonts.css文件到Dreamer-Topology3D/dist/css目录下,然后将AdminLTE.css第1行改为@import url(fonts.css)

  • Dreamer-Topology3D/index.html第1087行的js文件名写错了,改成plugins/datatables/dataTables.bootstrap.min.js

Dreamer-Mininet-Extensions

  • Clone仓库

    git clone https://github.com/netgroup/Dreamer-Mininet-Extensions.git
    git clone https://github.com/netgroup/Dreamer-VLL-Pusher.git 
    git clone https://github.com/netgroup/Dreamer-Topology-Parser-and-Validator.git
  • python依赖

    pip install netaddr
    pip install ipaddress
    pip install ryu
    pip install siphash
  • 系统依赖

    apt install autoconf 
    apt install automake 
    apt install libtool
    apt install quagga
  • Mininet安装

    apt install mininet
    mv /etc/init.d/openvswitch-switch /etc/init.d/openvswitchd
  • 修改Dreamer-Mininet-Extensions目录中的文件路径

    • mininet_deployer.py中设置parser_path={workspace}/Dreamer-Topology-Parserd
    • mininet_extensions.py中设置RYU_PATH={workspace}/dreamer-ryu/ryu/app
    • mininet_extensions.py中设置PROJECT_PATH={workspace}/Dreamer-Mininet-Extensions
  • 运行测试

    ./mininet_deployer.py --topology topo/topo_vll_pw.json 
  • 具体安装方法详见:Dreamer-Mininet-Extensions How-To

Dreamer-Experiment-Handler

  • git clone https://github.com/netgroup/Dreamer-Experiment-Handler.git

  • 修改配置文件config.js

    config.mininet.mininet_extension_path = "{workspace}/Dreamer-Mininet-Extensions";
  • 运行

    cd Dreamer-Experiment-Handler
    node app.js
    
    # 后台运行
    nohup node app.js & 

OSHI-SR-dataplane-extensions

git clone https://github.com/netgroup/OSHI-SR-dataplane-extensions.git
cd OSHI-SR-dataplane-extensions
make
mv fpm-of.bin /usr/bin/

SDN-TE-SR-tools

  • 依赖和Clone

    apt install python-tk
    pip install matplotlib==2.2
    
    git clone https://github.com/netgroup/SDN-TE-SR-tools.git)
    git clone https://github.com/netgroup/dreamer-ryu.git
    git clone https://github.com/netgroup/Mantoo-scripts-and-readme.git
  • 修改Dreamer-Mininet-Extensions/nodes.py文件中的第32行:

    ENABLE_SEGMENT_ROUTING = True

Small scale Topology

  • 在浏览器打开Topology3D GUI加载样例拓扑,点击右上角菜单栏的"Topology",选择"Import topology from file",选择SDN-TE-SR-tools/parsers-generators/t3d/small-topo2-4-vll.t3d文件

  • 选择左侧菜单栏的"Deployment",点击"Deploy",在下方命令行输入deploy并回车

  • 查看Controller的IP并远程登录

    ssh -X root@10.255.245.1
    cd Mantoo-scripts-and-readme
  • 修改ryu_start.sh文件中的目录为dreamer-ryu/ryu/app

  • 运行./ryu_start.sh

  • 或者手动运行

    ssh -X root@10.255.245.1
    cd {workspace}/dreamer-ryu/ryu/app
    ryu-manager rest_topology.py ofctl_rest.py --observe-links
  • 修改generate_topo_and_flow_cata.sh文件中的目录为SDN-TE-SR-tools/parsers-generators

  • 生成SR分配算法所需的流目录

    cd Mantoo-scripts-and-readme
    ./generate_topo_and_flow_cata.sh 10.255.245.1:8080
  • 或者手动运行

    cd {workspace}/SDN-TE-SR-tools/parsers-generators
    python parse_transform_generate.py --in ctrl_ryu --out nx --generate_flow_cata_from_vll_pusher_cfg --controller 10.255.245.1:8080
    mv flow_catalogue.json ../java-te-sr/flow/
    mv links.json ../java-te-sr/topology/
    mv nodes.json ../java-te-sr/topology/
  • 查看生成的文件

    cat {workspace}/SDN-TE-SR-tools/java-te-sr/flow/flow_catalogue.json
  • 运行SR分配算法

    • 打开Intellij IDEA,导入SDN-TE-SR-tools/java-te-sr项目,选择从Eclipse项目导入
    • 使用JDK1.8运行(原项目使用JDK1.7)
    • 设置运行参数
    topo_in=topology/links.json
    topo_out=topology/out_links.json
    flows_in=flow/flow_catalogue.json
    flows_out=flow/out_flow_catalogue.json
    • 在IDEA中选择"Tools"->"Deployment"->"Configuration",选择传输协议,配置服务器ip地址以及跟目录,在"Mappings"中配置本地项目路径以及对应的服务端项目路径,配置成功后选择"Tools"->"Deployment"->"Browser Remote Host"即可在右侧看到服务器端文件,以方便在本地和服务器双方进行文件的同步。
    • 点击运行,如果成功则控制台不会显示任何信息
  • 把本地生成的out_flow_catalogue.json文件同步到服务器后,将其放到SDN-TE-SR-tools/OSHI-SR-pusher路径下

    cd {workspace}/Mantoo-scripts-and-readme
    ./sr_pusher_start.sh 10.255.245.1:8080 --add
  • 或者手动运行

    cd {workspace}/SDN-TE-SR-tools
    mv java-te-sr/flow/out_flow_catalogue.json OSHI-SR-pusher/
    cd {workspace}/SDN-TE-SR-tools/OSHI-SR-pusher/
    rm sr_vlls.json
    ./sr_vll_pusher.py --controller 10.255.245.1:8080 --add
  • 未完待续