NS3 ipv6事例代码测试和解析之test-ipv6.cc

NS3 ipv6例子代码测试和解析之test-ipv6.cc

参考帖子:http://hi.baidu.com/tslakou/item/498197d191342ce6b3f777e7

首先:我是新手,只是记录自己的学习过程,遇到问题还请指出~

1. test-ipv6.cc

test-ipv6.cc就是简单的一个测试地址转换的例子,用到了NS的log,打印出转换之后的结果。这里记录下NS的log,其实就是printf或者cout,定义了一个级别而已。如果在shell下使用,需要定义环境变量,而在eclipse中使用,使用:

NS_LOG_COMPONENT_DEFINE ("TestIpv6");
LogComponentEnable ("TestIpv6", LOG_LEVEL_ALL);

就可以打印出来。曾经,我怎么都打印不出来数据,结果是发现eclipse没有将我的代码保存,,,

回到正题:

prefix = 2001:0001:0000:0000:0000:0000:0000:0000
address = 00:00:00:00:00:01
address = 2001:0001:0000:0000:0200:00ff:fe00:0001

通过运行结果可以发现转换的规律,是按照rfc2464来转换的,rfc2464:http://www.ietf.org/rfc/rfc2464.txt,中文翻译:http://blog.****.net/zweily/article/details/132138

NS3中的转换实现方法:

Ipv6Address Ipv6Address::MakeAutoconfiguredAddress (Mac48Address addr, Ipv6Address prefix)
{
  NS_LOG_FUNCTION (addr << prefix);
  Ipv6Address ret;
  uint8_t buf[16];
  uint8_t buf2[16];

  addr.CopyTo (buf);
  prefix.GetBytes (buf2);

  memcpy (buf2 + 8, buf, 3);
  buf2[11] = 0xff;
  buf2[12] = 0xfe;
  memcpy (buf2 + 13, buf + 3, 3);
  buf2[8] |= 0x02;

  ret.Set (buf2);
  return ret;
}


这个脚本的具体调用关系图,参见用doxygen自动生成的文档:http://www.nsnam.org/doxygen-release/test-ipv6_8cc.html