首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OVS :如何计算ICMPV6校验和?

OVS :如何计算ICMPV6校验和?
EN

Stack Overflow用户
提问于 2015-10-21 05:57:58
回答 1查看 479关注 0票数 0

我一直在为某些请求在OVS中模拟“路由器通告”,为此我构造了一个ICMPv6包,除了校验和之外,所有字段都是正确的,wireshark在校验和部分给出了一个错误。

ICMP6校验和应包括src + dst + icmp_length + next_header,但以下代码计算不正确。我是不是漏掉了什么?感谢你们的帮助。

代码语言:javascript
复制
struct nd_router_advert *ra; 
struct ofpbuf *ra_rsp;
struct ovs_16aligned_ip6_hdr *nh;
.
.
.
.
.
ofpbuf_set_l3(ra_rsp, nh);
nh->ip6_vfc = 0x60;
nh->ip6_plen = htons(sizeof(*ra));
nh->ip6_nxt = IPPROTO_ICMPV6;
.
.
ofpbuf_set_l4(ra_rsp, ra);
ra->nd_ra_type = ND_ROUTER_ADVERT;
ra->nd_ra_code = 0; 
ra->nd_ra_cksum = htons(0);
ra->nd_ra_curhoplimit = 255; 
ra->nd_ra_flags_reserved = 0; 
ra->nd_ra_router_lifetime = htons(9000);
ra->nd_ra_reachable = htons(0);
ra->nd_ra_retransmit = htons(0);

packet_set_ipv6(ra_rsp, IPPROTO_ICMPV6, src, dst, 0, 0, 212);
ra->nd_ra_cksum = recalc_csum16(ra->nd_ra_cksum, 0, htons(sizeof(*ra)));
ra->nd_ra_cksum = recalc_csum32(ra->nd_ra_cksum, 0, IPPROTO_ICMPV6);
EN

回答 1

Stack Overflow用户

发布于 2015-10-21 07:12:49

对整个ICMPv6消息的总和计算ICMPv6校验和。如何计算校验和的定义在RFC 4441, ICMPv6 (ICMP for IPv6), Section 2.3, Message Checksum Calculation

2.3。消息校验和计算

校验和是整个ICMPv6消息的补码和的16位1的补码,以ICMPv6消息类型字段开始,并以IPv6报头字段的“伪报头”为前缀,如IPv6,第8.1节中所指定的。伪报头中使用的下一个报头值是58。(在ICMPv6校验和中包含伪头是对IPv4的更改;有关此更改的基本原理,请参阅IPv6。)

为了计算校验和,首先将校验和字段设置为零。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33247540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档