此repo托管了μSDN的源代码,我们在NetSoft 2018会议上发布了该代码(论文,幻灯片)。 μSDN也正在被移植到Contiki-NG(它将取代这个版本),你可以在这里查看μSDN-NG repo progess 。
M. Baddeley,R。Nejabati,G。Oikonomou,M。Sooriyabandara和D. Simeonidou,“发展SDN用于低功耗物联网网络”,2018年IEEE网络软件化会议(NetSoft),2018年6月.
。 2017年IEEE网络功能虚拟化和软件定义网络会议(NFV-SDN),柏林,2017年,第247-251页。
μSDN已经开发用于提供开源平台,以在6LoWPAN IEEE 802.15.4-2012网络上提供SDN。这里的版本目前与TSCH不兼容,不过我们之前已经尝试过使用我们自己的6TiSCH实现contiki(请查看NFV-SDN 2017论文,这里)。
除了μSDN本身,我们还提供嵌入式SDN控制器 Atom ,以及用于测试目的的流量发生器, Multiflow 。
请注意,这是一个学术练习和一个相当大的代码库,因此μSDN中有很多东西可能没有像我可能喜欢的那样干净或透明地完成(虽然我试图在某种程度上清理它)。我试着简要概述一下这里的所有功能和模块,你可以在顶层找到纸张和幻灯片,但如果你发现自己迷路了,那么我很乐意回答你可能遇到的任何问题。
重要您还需要安装20位mspgcc编译器。
有关如何编译本文件的说明,请点击这里
对于Ubuntu-64的预编译版本,请点击这里
有些人在尝试安装此编译器时遇到问题,所以如果您是Contiki或Linux的新手,那么我建议您执行以下操作:
export PATH=$PATH:<uri-to-your-mspgcc>
echo $PATH /home/mike/Compilers/mspgcc-.7.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin
msp430-gcc --version
msp430-gcc (GCC) 4.7.3 20130411 (mspgcc dev 20120911) Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
现在您已准备好进入下一阶段!如果你没有正确设置它使用20位mspgcc那么它将无法编译!
由于堆栈的大小,如果您在Cooja中进行测试,则需要编译exp5438 motes(有一个Makefile.target,它应该为您处理)。请注意,您需要在 sdn / controller和sdn / node中运行make,因为我没有将其设置为在更高级别目录中执行这两项操作。
cd usdn/examples/sdn/controller/ make clean & make cd .. cd node/ make clean & make
为了帮助您,您可以在
usdn / examples / sdn / ..
那里有一个方便的编译脚本,可用于编译控制器和节点:
./compile.sh MULTIFLOW=1 NUM_APPS=1 FLOWIDS=1 TXNODES=8 RXNODES=10 DELAY=0 BRMIN=5 BRMAX=5 NSUFREQ=600 FTLIFETIME=300 FTREFRESH=1 FORCENSU=1 LOG_LEVEL_SDN=LOG_LEVEL_DBG LOG_LEVEL_ATOM=LOG_LEVEL_DBG
uSDN Make Args: - NSUFREQ - 节点状态更新到控制器的频率(秒) - FTLIFETIME - 可流动条目的生命周期(秒) - FTREFRESH - 刷新匹配的可流动条目(0/1) - FORCENSU - 立即发送NSU连接时控制器(0/1) - LOG_LEVEL_SDN - 设置uSDN日志级别(0 - 5) - LOG_LEVEL_ATOM - 设置Atom控制器日志级别(0 - 5)
Multiflow Make Args: - MULTIFLOW - 打开多流(0/1) - NUM_APPS - 流量(N) - FLOWIDS - 每个流的Id([0,1,2 ...]) - TXNODES - 传输节点( [18,12 ...] 0为全部) - RXNODES - 接收节点([1,2 ...]) - DELAY - 延迟每次传输(秒) - BRMIN - 最小比特率(秒) - BRMAX - 最大比特率(秒)
未来基于较新(和维护)的Contiki-NG,μSDN开发将与μSDN-NG合并。
sdn.c
主要SDN进程。
sdn-cd.c
控制器发现和加入服务。
sdn-conf.c
SDN节点配置。
sdn-ft.c
SDN流程图。
sdn-ext-header.c
源路由的扩展标头。
sdn-packetbuf.c
允许在节点查询控制器时存储数据包的缓冲区。
sdn-timer.h
定时器配置和宏。
sdn-stats.c
SDN统计。这也取代了Contiki的powertrace应用程序。
usdn-driver.c
驱动程序与流表连接,以提供基本API以允许特定功能,例如基于源/目标发送数据包,聚合数据包,丢弃数据包等.
usdn-engine.c
引擎使用驱动程序提供的API处理输入和传出的SDN消息。
usdn-adapter.c
适配器为控制器提供特定协议的连接接口。目前这是针对μSDN协议的。
atom.c
原子的主要过程。
atom-buffer.c
用于收发和传出数据包的缓冲区。
atom-net.c
为控制器保留网络状态的轨迹和摘要。我最初的想法是控制器应该能够配置网络,以便节点使用所需的度量而不是所有度量更新视图,以便降低内存需求。
atom-sb-xx.c
Atom允许您创建多个南向连接器。目前我们已经实现了μSDN和RPL连接器。
atom-app-net-xx.c
网络应用程序。
atom-app-route-xx.c
路由应用程序。
atom-app-join-xx.c
加入/关联应用程序。
./compile.sh ADD_MAKEFILE_ARGS_HERE*