OpenNF tutorial复现
这篇博客记录了自己实现OpenNF官网上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
sudo apt-get install libpcre3-dev libpcap-dev python-docutils
安装SDN控制器和网络功能NF(network functions)
- 创建一个名为
tutorial
的文件夹
mkdir tutorial
- 下载floodlight0.90的源代码并解压到
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
目录下:
编译网络功能源码
- 编译网络功能共享库:
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复现的更多相关文章
- Apache Druid 远程代码执行 CVE-2021-25646 漏洞复现
Apache Druid 远程代码执行 CVE-2021-25646 漏洞复现 前言 Apache Druid 是用Java编写的面向列的开源分布式数据存储,旨在快速获取大量事件数据,并在数据之上提供 ...
- CVE-2021-25646:Apache Druid远程命令执行漏洞复现
漏洞概述 Apache Druid 是一个分布式的数据处理系统.Apache Druid包括执行用户提供的JavaScript的功能嵌入在各种类型请求中的代码.在Druid 0.20.0及更低版本中, ...
- [翻译+山寨]Hangfire Highlighter Tutorial
前言 Hangfire是一个开源且商业免费使用的工具函数库.可以让你非常容易地在ASP.NET应用(也可以不在ASP.NET应用)中执行多种类型的后台任务,而无需自行定制开发和管理基于Windows ...
- Django 1.7 Tutorial 学习笔记
官方教程在这里 : Here 写在前面的废话:)) 以前学习新东西,第一想到的是找本入门教程,按照书上做一遍.现在看了各种网上的入门教程后,我觉得还是看官方Tutorial靠谱.书的弊端一说一大推 本 ...
- thrift 服务端linux C ++ 与客户端 windows python 环境配置(thrift 自带tutorial为例)
关于Thrift文档化的确是做的不好.摸索了很久才终于把跨linux与windows跨C++与python语言的配置成功完成.以下是步骤: 1) Linux下环境配置 ...
- Hive Tutorial(上)(Hive 入门指导)
用户指导 Hive 指导 Hive指导 概念 Hive是什么 Hive不是什么 获得和开始 数据单元 类型系统 内置操作符和方法 语言性能 用法和例子(在<下>里面) 概念 Hive是什么 ...
- 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 ...
- Using FreeMarker templates (FTL)- Tutorial
Lars Vogel, (c) 2012, 2016 vogella GmbHVersion 1.4,06.10.2016 Table of Contents 1. Introduction to F ...
- 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 ...
随机推荐
- LNMP web服务的安装
第1章 安装Nginx 环境: 系统:CentOS6.5 软件:nginx-1.6.3 mysql-5.5.49 php-5.5.32 1.1 Nginx官网 http://nginx. ...
- 在vscode中使用webpack中安装的echarts文件失败,dom获取class名,图表不显示
所有的东西都是新学的,所以遇到了很多问题: (1)首先,在电脑上已经安装了node的情况下, 在npm中安装echarts:npm install echarts --save mac系统在最前面加上 ...
- spring boot2整合dubbox全注解
前题 dubbox是dubbo的一个升级版,简单说就是本来dubbo是阿里开发的,现在阿里不维护了,当当网拿过去继续开发.本来阿里的dubbo维护到2.6版本,而再高版本的都是当当网维护的就叫成dub ...
- 触摸屏之linux3.4.2安装tslib
1. 写好触摸屏驱动后,安装tslib 1.1 tar xzf tslib-1.4.tar.gz 1.2 cd tslib 1.3 修改编译器版本号或者内核版本号,使它们一致.不然会出错,显示sele ...
- x01.os.24: 来点代码
<Orange'S 一个操作系统的实现>源代码 <Linux 0.11 内核完全注释>源代码 linux-0.12 源代码: 解决了 Not Owner 问题 闲来无事,在 ...
- 阿里云ubantu16.04 搭建LAMP环境
1.登录服务器 2.sudo apt-get update 更新软件列表 3.sudo apt-get install lamp-server^ (注意右上角的' ^ '这个不能少) 输入apach ...
- C语言编程练习 GPS数据处理
题目内容: NMEA-0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine ...
- 前端框架---jQuery---一分钟下载使用
这里通过自己手动的方式“做”一个jQuery来使用,需要5步 1. 访问 https://jquery.com 2. 点击download 3. 拉到最下方,点击 JQuery CDN 4. 得到所有 ...
- 20155315 2017-05-10 《Java程序设计》课堂代码检查
一.教材代码检查-p98 代码要求 修改教材P98 Score2.java, 让执行结果数组填充是自己的学号 代码链接 运行结果截图 二.在IDEA中以TDD的方式对String类和Arrays类进行 ...
- thinkphp查询:
$Role=D('role'); //查询数据表 $role_data = $Role->order('role_id')->group('role_name')->select() ...