[ndnSIM]多层Lru策略修改

1.原理介绍

本次实验对多层路由时的缓存置换进行修改,当前路由将缓存置换出来时,通过发送数据包的方式,传递给上一级路由,以此实现边缘路由器缓存内容的高流行度。

其置换原理图如下所示:

2.具体实现

需要修改../src/ndnSIM/NFD/daemon/lxxxx下的fcontent-store-impl.hpp,修改begin函数,将返回的数据包修改为当完成缓存置换时将要被置换的数据包。

template<class Policy>
Ptr<Entry>
ContentStoreImpl<Policy>::Begin()
{
  typename super::policy_container::const_iterator items = this->getPolicy().begin();
  typename super::parent_trie::recursive_iterator item(super::getTrie()), end(0);
  for (; item != end; item++) {
    if (item->payload() == 0)
      continue;
else
    //break;
if(items->payload()==item->payload())
{
return item->payload();
}
  }
}

在../src/ndnSIM/NFD/daemon/fw下的forwarder.cpp,修改onIncomingData函数,对缓存置换策略进行修改,其主要位置如下所示:

void
Forwarder::onIncomingData(Face& inFace, const Data& data)
{
    .......
    //省略此部分
  if (m_csFromNdnSim == nullptr)
    m_cs.insert(*dataCopyWithoutTag);
  else

    m_csFromNdnSim->Add(dataCopyWithoutTag);

  .......
    //省略此部分
}

在缓存置换前,将即将要置换的数据包提取出来保存,同时对该数据包添加tag用于分辨数据包是否为回传数据包。PS:接下来的代码都在上面else里添加,不同版本缓存置换的位置不同,本作者使用ndnSIM版本的缓存置换为→Add

shared_ptr<const Data> databg1;
const Data* databg2;
ns3::Ptr<ns3::ndn::cs::Entry> csEntry=m_csFromNdnSim->Begin();
//std::cout<<"置换前的头部:"<<csEntry->GetName()<<std::endl;
if(csEntry!=0){
databg1=csEntry->GetData();
databg2=databg1.get();
databg2->setTag(make_shared<lp::LcdInsertTag>(2));   //添加tag标记
}

然后进行缓存置换

 m_csFromNdnSim->Add(dataCopyWithoutTag);

缓存置换后,将置换出来的数据包通过InFace,将数据包回传给上一级路由。

ns3::Ptr<ns3::ndn::cs::Entry> csEntry_2;
ns3::Ptr<ns3::ndn::cs::Entry> csEntry2=m_csFromNdnSim->Begin();
std::cout<<"置换掉后的头部:"<<csEntry2->GetName()<<std::endl;
if(csEntry!=csEntry_2){
std::cout<<"置换掉的包:"<<databg2->getName()<<std::endl;
inFace.sendData(*databg2);
}

最后在onIncomingData函数初始的地方进行判断,具有标签信息的数据包,直接进行缓存置换。

if(data.getTag<lp::LcdInsertTag>()!=0){
shared_ptr<Data> dataCopyWithoutTags = make_shared<Data>(data);
dataCopyWithoutTags->removeTag<lp::HopCountTag>();
  // CS insert
  if (m_csFromNdnSim == nullptr)
    m_cs.insert(*dataCopyWithoutTags);
  else{
m_csFromNdnSim->Add(dataCopyWithoutTags);
}
return;
}

3.测试

暂时不想测试,请自行进行测试验证






文件名称:content-store-impl.hpp、forwarder.cpp

更新日期:2021-03-29

作者信息:zlf

提示:下载后请查看是否有问题,可以联系本作者!

下载地址:附件1下载 附件2下载 【文件大小:8.4 KB、21.2 KB】

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇