NS3 ipv6事例代码测试和解析之test-ipv6.cc
NS3 ipv6例子代码测试和解析之test-ipv6.cc
就可以打印出来。曾经,我怎么都打印不出来数据,结果是发现eclipse没有将我的代码保存,,,
通过运行结果可以发现转换的规律,是按照rfc2464来转换的,rfc2464:http://www.ietf.org/rfc/rfc2464.txt,中文翻译:http://blog.****.net/zweily/article/details/132138
参考帖子: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; }