NFD-C添加兴趣包优先级和推送机制
1. 添加兴趣包和数据包优先级
在之前添加了多个队列的基础上修改代码。
首先在tlv.h中添加新的兴趣包优先级的字段
1 | TLV_InterestLevel = 47 |
然后就需要修改interest.h和interest.c中的各个函数。
首先需要为interest_t添加一个成员
1 | uint8_t priority; |
- interest_tlv_size()函数
1 | //新添加 priority |
- interest_init()函数
1 | //新添加初始化 |
- interest_from_name()函数
1 | //新添加 |
- interest_tlv_encode()编码函数
1 | //新添加priority, 表示兴趣包的优先级,priority和hop limit都是uint8_t类型 |
- interest_from_tlv()解码函数
1 | //新添加 |
- 新添加,设置优先级和获取优先级函数
1 | void interest_set_priority(struct interest_t *interest, uint8_t priority) |
然后就是在forwarder中修改转发流程,根据interest包得到的priority判断发送到哪个队列。
1 | //在face.c中修改 |
2. 在NFD-C中添加数据推送机制
数据推送就是生产者直接向消费者发送数据包数据,所有订阅了数据的消费者都可以接收数据。
修改流程:首先和兴趣包优先级修改类似,也需要修改数据包的字段,加入ifpush字段表示是普通数据包还是推送包。
首先在tlv.h中添加新类型
1 | //新添加 |
然后修改data.c 和 data.h
1 | //data.h新添加ifpush和nonce字段 |
1 | //data.c中修改编解码函数和计算size的函数 |
- data包的编解码改完之后,正式进行推送的修改,首先定义了push-server和push分别对应数据的生产者和消费者,推送的流程是消费者通过set_data_filter()设置数据包过滤器,相当于订阅了数据,生产者通过expressdata()函数发送数据。
1 | //push-server.cpp,在ping.cpp的基础上进行修改 |
1 | //push.cpp,在ping-server.cpp的基础上进行修改 |
为了实现上面的推送机制,还需要定义set_data_filter()和express_data()
1 | //set_data_filter的实现 |
此外,在转发层面上也需要进行修改,原来的数据包是根据PIT的in_record来实现反向发送的,而推送包没有PIT直接发送,现有的想法是手动建立路由,直接根据路由表转发。
1 | //首先修改on_incoming_data管道,如果是push数据,进入on_incoming_Pushdata管道 |
一些编译方面的问题:
nfdc/tools用到了usr/local中的ndn库,这个库是nfdc目录下编译时生成的,因此如果想要改变兴趣包或数据包结构在app中用,不能直接make clean,make;需要make clean,make build,make install三步,具体每步的作用参考makefile。
然后makefile实际上是cmake根据cmakelist.txt生成的,因此如果想要在app中新添文件,就需要修改app目录下的cmakelist.txt,把新文件如何编译添加进txt文件中,这样编译时就会编译新添加的文件了。
ffmpeg -i input.flv -c copy -f mp4 output.mp4