diff --git a/libnetutil/netutil.cc b/libnetutil/netutil.cc index 7c78bf3fa..482d11118 100644 --- a/libnetutil/netutil.cc +++ b/libnetutil/netutil.cc @@ -730,8 +730,7 @@ static const void *ip_get_data_primitive(const void *packet, unsigned int *len, memcpy(&sin6->sin6_addr, &ip6->ip6_dst, IP6_ADDR_LEN); hdr->ttl = ip6->ip6_hlim; - /* abstract_hdr.ipid is limited to 16 bits. */ - hdr->ipid = (u16) ntohl(ip6->ip6_flow & IP6_FLOWLABEL_MASK); + hdr->ipid = ntohl(ip6->ip6_flow & IP6_FLOWLABEL_MASK); return ipv6_get_data_primitive(ip6, len, &hdr->proto, upperlayer_only); } diff --git a/libnetutil/netutil.h b/libnetutil/netutil.h index 70ca665e0..0cf798736 100644 --- a/libnetutil/netutil.h +++ b/libnetutil/netutil.h @@ -160,7 +160,7 @@ struct abstract_ip_hdr { struct sockaddr_storage dst; u8 proto; /* IPv4 proto or IPv6 next header. */ u8 ttl; /* IPv4 TTL or IPv6 hop limit. */ - u16 ipid; /* IPv4 IP ID or IPv6 flow label. */ + u32 ipid; /* IPv4 IP ID or IPv6 flow label. */ }; void netutil_fatal(const char *str, ...) diff --git a/scan_engine.cc b/scan_engine.cc index 7e3bea98c..b89d69f64 100644 --- a/scan_engine.cc +++ b/scan_engine.cc @@ -269,7 +269,7 @@ struct IPExtraProbeData_sctp { }; struct IPExtraProbeData { - u16 ipid; /* host byte order */ + u32 ipid; /* host byte order */ union { struct IPExtraProbeData_icmp icmp; struct IPExtraProbeData_tcp tcp; @@ -328,7 +328,7 @@ public: } /* not reached */ } - u16 ipid() const { + u32 ipid() const { return probes.IP.ipid; } u16 icmpid() const; // ICMP ident if protocol is ICMP @@ -934,7 +934,7 @@ void UltraProbe::setIP(u8 *ippacket, u32 len, const probespec *pspec) { data = ipv6_get_data_any(ip6, &len, &hdr); assert(data != NULL); assert(len == (u32) ntohs(ip6->ip6_plen)); - probes.IP.ipid = ntohl(ip6->ip6_flow & IP6_FLOWLABEL_MASK) & 0xFFFF; + probes.IP.ipid = ntohl(ip6->ip6_flow & IP6_FLOWLABEL_MASK); hdr = ip6->ip6_nxt; } else { fatal("Bogus packet passed to %s -- only IP packets allowed", __func__);