这篇博客记录了自己实现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

实验截图

OpenNF tutorial复现的更多相关文章

  1. Apache Druid 远程代码执行 CVE-2021-25646 漏洞复现

    Apache Druid 远程代码执行 CVE-2021-25646 漏洞复现 前言 Apache Druid 是用Java编写的面向列的开源分布式数据存储,旨在快速获取大量事件数据,并在数据之上提供 ...

  2. CVE-2021-25646:Apache Druid远程命令执行漏洞复现

    漏洞概述 Apache Druid 是一个分布式的数据处理系统.Apache Druid包括执行用户提供的JavaScript的功能嵌入在各种类型请求中的代码.在Druid 0.20.0及更低版本中, ...

  3. [翻译+山寨]Hangfire Highlighter Tutorial

    前言 Hangfire是一个开源且商业免费使用的工具函数库.可以让你非常容易地在ASP.NET应用(也可以不在ASP.NET应用)中执行多种类型的后台任务,而无需自行定制开发和管理基于Windows ...

  4. Django 1.7 Tutorial 学习笔记

    官方教程在这里 : Here 写在前面的废话:)) 以前学习新东西,第一想到的是找本入门教程,按照书上做一遍.现在看了各种网上的入门教程后,我觉得还是看官方Tutorial靠谱.书的弊端一说一大推 本 ...

  5. thrift 服务端linux C ++ 与客户端 windows python 环境配置(thrift 自带tutorial为例)

    关于Thrift文档化的确是做的不好.摸索了很久才终于把跨linux与windows跨C++与python语言的配置成功完成.以下是步骤: 1)                 Linux下环境配置 ...

  6. Hive Tutorial(上)(Hive 入门指导)

    用户指导 Hive 指导 Hive指导 概念 Hive是什么 Hive不是什么 获得和开始 数据单元 类型系统 内置操作符和方法 语言性能 用法和例子(在<下>里面) 概念 Hive是什么 ...

  7. Home / Python MySQL Tutorial / Calling MySQL Stored Procedures in Python Calling MySQL Stored Procedures in Python

    f you are not familiar with MySQL stored procedures or want to review it as a refresher, you can fol ...

  8. Using FreeMarker templates (FTL)- Tutorial

    Lars Vogel, (c) 2012, 2016 vogella GmbHVersion 1.4,06.10.2016 Table of Contents 1. Introduction to F ...

  9. Oracle Forms 10g Tutorial Ebook Download - Oracle Forms Blog

    A step by step tutorial for Oracle Forms 10g development. This guide is helpful for freshers in Orac ...

随机推荐

  1. SparkR链接mysql数据库(踩坑)

    本文主要讲述sparkR链接Mysql的过程和坑. SparkR的开发可以用RStudio工具进行开发,连接spark可以通过RStudio界面中的Connections进行配置连接;具体方法这里不做 ...

  2. Linux使用scp命令进行文件远程拷贝详解

    前言 scp是 secure copy的缩写, scp是Linux系统下基于ssh登陆进行安全的远程文件拷贝命令.Linux的scp命令可以在Linux服务器之间复制文件和目录. 使用语法: scp  ...

  3. 【8086汇编-Day1】预备知识

    菜鸟的8086汇编入门之旅,偶有错处恭请大佬们指正. Ⅰ· 闲说一下 我为什么学汇编?相对于晦涩难懂的01010101011010机器语言(高低电平变化驱动机器做出不同反应),汇编语言用更便于记忆和使 ...

  4. 20155315 2016-2017-2 《Java程序设计》第一周学习总结

    教材学习内容总结 第一章中提到了Java的前世今生和三大平台,我了解到Java SE包括JVM,JRE,JDK和Java语言.java最基本的特性之一是"跨平台",这使得Java语 ...

  5. #20155319 2016-2017-2 《Java程序设计》第3周学习总结

    20155319 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 第三周的学习量还是很大的,需要学习的内容更难了而且 量也变多了,所以投入了更多的时间到Jav ...

  6. Servlet——web.xml的配置

    <servlet>: <servlet-name>: 名称 <servlet-class>: 类名 <init-param>: 初始化参数(只有本ser ...

  7. C#:设置CefSharp的一些参数,比如忽略安全证书

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本次记录如何设置CefSharp忽略安全证书,以及他的一些其他配置 参考网址: https://peter.s ...

  8. XDS100V3连接Pandaboard ES OMAP4460开发板

    1. 硬件连接如下 2. 使用CCS创建工程,不过好像没有ARM9的内核吧?为啥会出现? 3. 创建目标配置文件 4. 不过确实有ARM9的内核,两个A9内核,一个DSP C64X内核,两个M3的内核 ...

  9. php小项目小结

    最近一直断更,并不是出于什么问题,而是想找个合适的机会去整理下html基本的一些琐碎的知识点 近期突发感冒,吊水,吊错药,原因只是重名重姓,这不是个梗,很是痛苦的现实事故 so,只能用剩下的半天去完成 ...

  10. Android 7.1.1系统源码下载、编译、刷机-Nexus 6实战

    想成为一位合格的Android程序员或者一位Android高级工程师是十分有必要知道Android的框架层的工作原理,要知道其工作原理那么就需要阅读Android的源代码. 想要阅读Android的源 ...