NRL SMF

NRLSMF

NRL简化多播转发(NRL Simplified Multicast Forwarding (nrlsmf) )项目包括用户空间转发引擎的软件。该软件由海军研究实验室(NRL)协议工程高级网络(PROTEAN)研究小组开发。这项工作的目标是提供一种实验技术的实现,用于在诸如移动自组织网络的动态无线网络中鲁棒、高效地分发广播或多播分组。

nrlsmf应用程序可以作为独立的应用程序运行,能够为指定的网络接口提供广播和多播流量的“经典”泛洪,或者可以与控制程序结合使用来执行更复杂的多播转发。提供进程间通信“远程控制”接口,使得兼容程序(例如nrlolsr)可以向nrlsmf发出实时命令来控制多播转发过程。支持IPv4和IPv6操作。nrlsmf的版本可以为以下操作系统构建:Linux、MacOS、BSD、Win32和WinCE。

安装步骤:

git clone https://gitee.com/JiasenLee/nrlsmf.git
cd nrlsmf
git clone https://gitee.com/JiasenLee/protolib.git
cd makefiles
make -f Makefile.linux

参考文章:Make Linux Build(nrlsmf issue)

遇到问题:

../protolib/src/linux/linuxDetour.cpp:13:10: fatal error: libnetfilter_queue/libnetfilter_queue.h: 没有那个文件或目录
 #include <libnetfilter_queue/libnetfilter_queue.h>
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

解决方法:

sudo apt install libnetfilter-queue-dev
sudo apt install libnetfilter-queue1

参考文章:libnetfilter_queue/libnetfilter_queue.h no such file or directory

Protolib

Protean Protocol Prototyping Library (PROTOLIB)

概述

Protolib与其说是一个库,不如说是一个工具包。Protolib的目标是提供一组简单的跨平台C++类,允许开发可以在不同平台和网络模拟环境中运行的网络协议和应用程序。虽然Protolib主要用于研究目的,但代码的构建是为了提供健壮、高效的性能和对实际应用的适应性。

目前Protolib支持大部分Unix平台(包括MacOS X)和WIN32平台。最新版本也支持为ns-2模拟环境构建基于Protolib的代码。OPNET仿真工具在过去也得到支持,只需少量的努力就可以再次使用。

  • ProtoAddress:网络地址容器类,支持IPv4,IPv6和“ SIM”地址类型。 还包括用于名称/地址解析的功能。

  • ProtoSocket:网络套接字容器类,为使用操作系统(或模拟环境)传输套接字提供一致的接口。 提供对ProtoSocket :: Listeners异步通知的支持。 ProtoSocket类可以独立使用,也可以与下面描述的其他类一起使用。 ProtoSocket可以实例化为UDP或TCP套接字。

  • ProtoTimer:这是一个通用的计时器类,它将在超时时通知ProtoTimer :: Listener。

  • ProtoTimerMgr:这个类在ProtoTimer实例被“激活”时管理它们。原型调度程序(下面)就是从这里派生出来的,用来管理应用程序的原型定时器。(ProtoSimAgent基类包含一个ProtoTimerMgr,用于类似地管理模拟实例的计时器)。

  • ProtoList:基本的链表数据结构,但是它是一个ProtoIterable,可以在ProtoList :: Iterator循环等中更新列表。提供了模板类ProtoListTemplate,可以轻松创建用户定义的ProtoList :: Item子类的列表类型。

  • ProtoTree:Patricia树数据结构的灵活实现。 包括一个ProtoTree :: Item,它可以衍生自任何数据结构和应用程序或用作其容器。 提供了模板类ProtoListTemplate,可以轻松创建用户定义的ProtoList :: Item子类类型的列表。 此外,ProtoSortedTree是作为线程Patricia树提供的,该树允许具有相同键值的多个条目,并带有控件以允许排序和最接近匹配搜索,即使是使用数字(整数,双精度等)索引的项也是如此。

  • ProtoQueue:来自基本ProtoList和ProtoTree数据结构的权重稍大。 与ProtoList :: Item或ProtoTree :: Item实例(仅限于以独占方式包含在单个列表或树中)不同,ProtoQueue:Item实例可以是多个ProtoQueue的成员。 队列变体包括ProtoSimpleQueue-可用于FIFO,堆栈等的链表ProtoIndexedQueue-由键ProtoSortedQueue索引的队列项的ProtoTree-队列项的ProtoSortedTree。 再次,提供了这些模板类,以使创建和管理用户派生的ProtoQueue :: Item类型变得容易。

  • ProtoRouteTable:基于ProtoTree Patricia树的类,用于存储路由表信息。 使用ProtoAddress类存储网络路由地址。 目前,这是一个非常笨拙的路由表,但将来可能会得到增强。 ProtoTree的使用示例。

  • ProtoRouteMgr:基类,用于提供一致的接口来管理操作系统(或其他)路由引擎。

  • ProtoPipe:类似套接字的机制(同时支持数据报和流),对进程间通信很有用(在Unix上使用Unix域套接字,在Win32和WinCE上使用其他东西)

  • ProtoCap:用于原始MAC层数据包捕获的接口类。 此类的平台实现会有所不同,包括基于“ pcap”的实现。

  • ProtoDetour:入站/出站数据包拦截类。 平台的实现方式各不相同…与防火墙配合使用。 基于NDIS中间驱动程序的Win32版本正在进行中。

  • ProtoDispatcher:此类提供了一个核心,可以围绕该核心实现使用Protolib的Unix和Win32应用程序。 它的“ Run()”方法提供了一个“主循环”,在Unix上使用“ select()”系统调用,在Win32上使用类似的“ MsgWaitForMultipleObjectsEx()”系统调用。 计划最终在将来为线程提供一些内置支持(例如ProtoDispatcher :: Run()方法可能在线程中执行,将事件分配给父线程)。

  • ProtoApp:提供一个基类,用于实现基于Protolib的命令行应用程序。 请注意,“ ProtoApp”和“ ProtoSimAgent”的设计使得可以从其派生子类以在现实应用程序中重用相同的代码,或者在网络仿真环境(例如ns-2)中作为“代理”(实体)重用。 ,OPNET)。 Win32包含一个“后台”命令,以在没有终端窗口的情况下启动该应用程序。

  • ProtoSimAgent:模拟代理派生的基类。 当前从此派生ns-2代理程序基类,但是可能以类似的方式支持其他仿真环境(例如OPNET,Qualnet)。

  • NsProtoSimAgent:仿真代理基类,用于创建基于Protolib的网络协议和应用程序的ns-2实例。

  • ProtoExample:示例类,它从ProtoApp或NsProtoSimAgent派生,具体取决于编译时宏定义。 它在仿真环境中或作为实际的命令行应用程序提供等效的功能。 它演示了基于ProtoSocket的UDP传输/接收,ProtoTimer以及基于ProtoSocket的TCP客户端-服务器交换示例的使用/操作。 (注意:仿真环境中尚不支持TCP操作。此操作将在未来几个月内完成。我计划扩展ns-2 TCP代理以支持实际的用户数据传输以支持此操作。)

  • NsProtoTCPSocketAgent:NSSocketProxy类的TCP实现,用于在Protolib中提供TCP支持。此类提供了一个与基础TCP工具箱接口的集线器,以提供对TCP支持的访问。 NsProtoTCPSocketAgent本质上会自动检测它应该是哪个套接字(即客户端或服务器),然后实例化基础实现以提供该行为,这些行为可以是TCPSocketAgent或TCPServerSocketAgent:

  • TCPSocketAgent:TCP套接字代理实现,可用于客户端,并可在调用接受之后用作负责连接的服务器端的套接字。

  • TCPServerSocketAgent:仅实现部分TCP协议的TCP服务器实现(通过侦听来自客户端的初始SYN连接请求)。当客户端请求连接时,服务器可以简单地充当分配TCPSocketAgent的代理,通过创建套接字本身或向应用程序发送ACCEPT事件,以使其创建套接字并手动调用accept函数。 后一种方法是规范。

其他

Protolib代码还包括一些简单的通用调试例程,这些例程可以输出到“ stderr”或有选择地登录到指定文件。 有关详细信息,请参见“ protoDebug.h”。

还有一些此处没有描述的支持类,还有一些工作要做。 另外,还需要提供更完整的文档,包括基于Doxygen的代码文档和带有示例的“开发人员指南”。

常见报错及解决方法

  1. 运行例子4时: error: couldn’t open “/var/log/core-daemon.log”: no such file or directory
cd /var/log/
sudo touch core-daemon.log
  1. 将core的例子文件拷贝出来便于修改
cd ~
mkdir core_sample_files
cp -r ./.core/configs/ ./core_sample_files/
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值