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

来源:互联网 发布:比特币闪电网络简称 编辑:程序博客网 时间:2024/05/17 17:39

参考帖子: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:0000address = 00:00:00:00:00:01address = 2001:0001:0000:0000:0200:00ff:fe00:0001

通过运行结果可以发现转换的规律,是按照rfc2464来转换的,rfc2464:http://www.ietf.org/rfc/rfc2464.txt,中文翻译:http://blog.csdn.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


0 0
原创粉丝点击