【发布时间】:2014-01-31 20:48:30
【问题描述】:
ip_options_echo
if (sopt->ts) {
optlen = sptr[sopt->ts+1];
soffset = sptr[sopt->ts+2];
dopt->ts = dopt->optlen + sizeof(struct iphdr);
memcpy(dptr, sptr+sopt->ts, optlen);
if (soffset <= optlen) {
if (sopt->ts_needaddr) {
if (soffset + 3 > optlen)
return -EINVAL;
dopt->ts_needaddr = 1;
soffset += 4;
}
if (sopt->ts_needtime) {
if (soffset + 3 > optlen)
return -EINVAL;
if ((dptr[3]&0xF) != IPOPT_TS_PRESPEC) {
dopt->ts_needtime = 1;
soffset += 4;
} else {
dopt->ts_needtime = 0;
if (soffset + 8 <= optlen) {
__be32 addr;
memcpy(&addr, sptr+soffset-1, 4);
if (inet_addr_type(dev_net(skb_dst(skb)->dev), addr) != RTN_LOCAL) {
dopt->ts_needtime = 1;
soffset += 8;
}
}
}
}
dptr[2] = soffset;
}
dptr += optlen;
dopt->optlen += optlen;
}
为什么这个判断if (inet_addr_type(dev_net(skb_dst(skb)->dev), addr) != RTN_LOCAL)是!= RTN_LOCAL, 会不会是RTN_LOCAL 然后填时间,
我只是觉得会是if (inet_addr_type(dev_net(skb_dst(skb)->dev), addr) == RTN_LOCAL)
请告诉我为什么显示这个,谢谢
【问题讨论】:
标签: c linux networking ip