zoukankan      html  css  js  c++  java
  • OpenNF tutorial复现

    这篇博客记录了自己实现OpenNF官网上tutorial的过程和遇见的问题,如果有不对的地方还请批评指正!

    tutorial链接

    实验内容

    这个实验展示了如何迅速且安全地把一个TCP流从一个NF实例迁移到另一个NF实例。

    实验环境

    Ubuntu16.04(64位)

    安装依赖

    • 安装OpenNF控制器、NF共享库和本次实验所需的依赖
    sudo apt-get install git tcpreplay mininet ant oracle-java8-installer gcc make wget
    
    • 其中mininet最好使用源码安装,详情见mininet安装
    • oracle-java8-installer安装请参考oracle-java8-installer安装
    • 为了预防其他因素对本次实验的干扰,执行以下两条命令(如果需要使用网络,暂时先不要执行):
    sudo service openvswitch-controller stop
    sudo service network-manager stop
    
    • 手动安装json-c,详情见json-c安装
    • 本次实验我们用到了PRADS(一种网络功能,NF),安装它的依赖:
    sudo apt-get install libpcre3-dev libpcap-dev python-docutils
    

    安装SDN控制器和网络功能NF(network functions)

    • 创建一个名为tutorial的文件夹
    mkdir tutorial
    
    cd tutorial
    wget https://github.com/floodlight/floodlight/archive/v0.90.tar.gz
    tar xzvf v0.90.tar.gz
    
    • 克隆PRADS的源代码到tutorial目录下:
    git clone https://github.com/gamelinux/prads.git
    cd prads
    git checkout 930ff5
    

    下载OpenNF控制器代码

    OpenNF要求,必须在注册之后才能下载他们的代码,给出注册链接。注册后,下载以下文件,并解压到tutorial目录下:

    1. NF控制器
    2. NF共享库
    3. 应用代码
    4. PRADS patch
    5. Mininet拓扑脚本

    编译网络功能源码

    • 编译网络功能共享库:
    cd tutorial/shared/
    make
    sudo make install
    
    • 执行这一步时,我遇见了以下错误:
    SDMBNJson.h:9:23: fatal error: json/json.h: No such file or directory
     #include <json/json.h>
                           ^
    compilation terminated.
    
    

    解决方案

    • 编译PRADS:
    cd tutorial/prads/
    patch -p1 < ../prads.patch
    make
    sudo make install
    

    编译OpenNF控制器

    • 为了让Floodlight控制器知道OpenNF控制器的存在,向Floodlight的model list文件(net.floodlightcontroller.core.module.IFloodlightModule)中添加如下几行,model list文件在tutorial/floodlight/src/main/resources/META-INF/services/目录下:
    edu.wisc.cs.wisdom.sdmbn.core.SdmbnManager
    edu.wisc.cs.wisdom.sdmbn.apps.testing.TestTimedMoveAll
    
    • 编译Floodlight:
    cd tutorial/floodlight/
    ant
    
    • 链接库:
    cd tutorial/controller/lib/
    ln -s ../../floodlight-0.90/target/floodlight.jar
    
    • 向OpenNF控制器的lib中加入GSON jar文件
    • 编译OpenNF控制器:
    cd tutorial/controller/
    ant
    
    • 编译应用:
    cd tutorial/apps/
    ant
    

    配置实验

    • 修改OpenNF控制器配置文件中的一些参数,配置文件在tutorial/apps/testTimedMoveAll.prop:
    net.floodlightcontroller.core.FloodlightProvider.openflowport = 6633
    edu.wisc.cs.wisdom.sdmbn.core.SdmbnManager.stateport = 7790
    edu.wisc.cs.wisdom.sdmbn.core.SdmbnManager.eventport = 7791
    edu.wisc.cs.wisdom.sdmbn.apps.testing.TestTimedMoveAll.TraceReplaySwitchPort = 1
    edu.wisc.cs.wisdom.sdmbn.apps.testing.TestTimedMoveAll.TraceReplayHost = 192.168.0.1
    edu.wisc.cs.wisdom.sdmbn.apps.testing.TestTimedMoveAll.TraceReplayFile = youtube.pcap
    
    • 由于本次实验是通过重放tcp流来实现,所以我们要用tcpdump来抓包,注意抓包时要浏览网页,否则会造成抓包速度太慢:
    cd tutorial/apps
    tcpdump -i <本机的活动端口,比如eth0> -c 25000 -w youtube.pcap tcp
    
    • 修改NF共享库中的一些配置文件/usr/local/etc/sdmbn.conf:
    ctrl_ip = 192.168.0.254
    

    运行实验

    • 开启OpenNF控制器:
    cd tutorial/apps/
    java -jar SDMBNapps.jar -cf testTimedMoveAll.prop
    
    • 运行实验拓扑:
    cd tutorial/
    sudo python tutorial_topo.py
    
    • 开启三个主机的xterm:
    mininet> xterm h1 h2 h3
    
    • 在h1的xtrem中执行:
    cd tutorial/apps/
    bash scripts/traceload_server.sh h1-eth0 . 192.168.0.1 8080
    
    • 在h2的xtrem中执行:
    prads -i h2-eth0
    
    • 在h3的xtrem中执行:
    prads -i h3-eth0
    

    实验截图

  • 相关阅读:
    JavaScript 基础(三)
    2015-10-15 第十四节课 补充CSS一些特殊选择器
    2015-09-29 第八节课 JavaScript 基础(二)(js语句:条件、循环)
    2015-09-28 第七节课JavaScript 基础(一) (js简介、声明变量、数据类型)
    2015 09-23 第五节课程(css:仿站及常见代码用法)
    【小练习2】如何制作“表格”
    51nod-1627 瞬间移动(组合数+逆元)
    POJ-3450 Corporate Identity (KMP+后缀数组)
    POJ-2406 Power Strings(KMP)
    CSU-1632 Repeated Substrings (后缀数组)
  • 原文地址:https://www.cnblogs.com/031602523liu/p/9927326.html
Copyright © 2011-2022 走看看