master
-
mNFD
基于NFD 0.6.6 改造,新增如下功能:
- 支持开启自定义包验证(包括分别控制Interest和Data的验证);
- 支持Interest包设置不缓存标记(会跳过缓存查询)
- 支持标识间互译(目前有内容标识、身份标识)
安装
-
require
-
boost
sudo apt install libboost-all-dev -
ndn-cxx(0.6.6)
-
jsoncpp => json解析库
sudo apt install libjsoncpp-dev -
hiredis => redis客户端库(包验证过程中通过redis查询证书)
sudo apt install libhiredis-dev -
redis-server
mNFD中支持对每个到来的兴趣包( Interest Packet )和数据包( Data Packet )进行签名验证,本地的redis-server中存储了证书信息,所以mNFD在进行包验证的过程中需要去和本地的redis-server通信查询证书信息。
# 如果没有安装,则直接执行下面的命令安装(执行完毕redis-sever就已经安装成功,并且作为服务启动了) sudo apt install redis-server # 如果需要关闭redis-server,可以执行如下命令 sudo service redis-server stop # 如果需要启动redis-server,可以执行如下命令 sudo service redis-server start
-
-
编译安装
./waf configure ./waf sudo ./waf install -
配置文件说明
mNFD的自定义配置和NFD的配置文件合并了,配置文件路径为
/usr/local/etc/ndn/nfd.conf,自定义部分的配置如下:; 自定义配置 custom { ; 路由器默认身份 default_identity /Router/qjm253 ; 包验证相关配置 packet_verify { ; 是否开启包验证 verifyPkt yes ; 是否开启验证兴趣包 verifyInterest yes ; 是否开启验证数据包 verifyData yes ; 包验证时使用的redis服务的端口(建议默认) redisPort 6379 ; 包验证时使用的redis服务的ip(建议默认) redisIp 127.0.0.1 ; 设置验证通过时证书延长的时间 ; 1. 如果证书条目是持久的,则不影响 ; 2. 如果证书条目有过期时间,则: ; 1) 第一次验证通过延长 plusTimeAfterVerifySuccess ms ; 2) 在间隔 plusTimeAfterVerifySuccess ms 之后,再次验证通过,则延长 plusTimeAfterVerifySuccess ms plusTimeAfterVerifySuccess 300000 } ; 互译相关配置 iit { supportPktType { 0 1 2 } } ; 导出日志到区块链相关配置 log_to_block_chain { ; 是否开启记录日志到区块链 enableLogToBlockChain yes ; 记录日志到区块链是通过写入共享内存,然后外部程序读取共享内存内容转发给区块链来实现的 ; 共享内存的名字 logToBlockChainShareMemoryName MIN-MIR-WARNING-LOG-TO-BLOCKCHAIN ; 共享内存的大小,只能是2^n => 这样可以使用位运算而不是模运算来计算索引 logToBlockChainShareMemorySize 4194304 } ; 在中间路由器加多个签名配置 multi_signature { ; 是否开启中间路由器加签名 enableRouterAddSignature no ; 最多允许的中间路由器签名数量 maxRouterSignatureNum 4 } } -
多跳签名使用说明:
-
在mNFD配置文件中配置开启中间路由器加签名(默认不开启),并设置最大允许的路由器签名数量(默认为4);
-
可以通过以下示例代码获得中间路由器的签名:
// 获取多跳签名Tag auto tag = interest.getTag<ndn::lp::MultiSignatureTag>(); // 判断多跳签名tag是否存在 if(tag) { // 遍历MultiSignatureTag中的所有签名 for (auto &signatureSection : tag->getSignatures()) { std::cout << signatureSection.signatureInfo.getKeyLocator() << std::endl; } } else { } // SignatureSection 结构体的定义如下 struct SignatureSection { Block signatureValue; SignatureInfo signatureInfo; };
-
-
如何新增或者删除配置
如果需要调整配置文件定义,删除或者新增配置,则需要修改根目录下的
nfd.conf.sample.in文件,使用waf进行编译的时候会根据这个文件在生成build/nfd.conf.sample文件。
补充
-
如何在NFD项目中添加新的依赖库?
详情参见 => NDN项目组代码修改时链接静态库的方法
Description
Languages
C++
92.4%
Python
7%
XSLT
0.3%
Shell
0.2%