Bug 464044 (traceroute-f)
| Summary: | TRACEROUTE -F SHOULD NOT INCREASE PACKET REASSEMBLE FAILURE COUNTER | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 4 | Reporter: | xiaowei.hu <xiaowei.hu> | ||||
| Component: | traceroute | Assignee: | Jiri Skala <jskala> | ||||
| Status: | CLOSED ERRATA | QA Contact: | |||||
| Severity: | high | Docs Contact: | |||||
| Priority: | high | ||||||
| Version: | 4.9 | CC: | aglotov, fleitner, mkoci, mmalik, rvokal, tao, xiaowei.hu | ||||
| Target Milestone: | rc | ||||||
| Target Release: | --- | ||||||
| Hardware: | All | ||||||
| OS: | Linux | ||||||
| URL: | http://bugzilla.oracle.com/bugzilla/show_bug.cgi?id=7182 | ||||||
| Whiteboard: | |||||||
| Fixed In Version: | Doc Type: | Bug Fix | |||||
| Doc Text: | Story Points: | --- | |||||
| Clone Of: | Environment: | ||||||
| Last Closed: | 2009-01-22 15:58:44 UTC | Type: | --- | ||||
| Regression: | --- | Mount Type: | --- | ||||
| Documentation: | --- | CRM: | |||||
| Verified Versions: | Category: | --- | |||||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||
| Cloudforms Team: | --- | Target Upstream Version: | |||||
| Embargoed: | |||||||
| Attachments: |
|
||||||
Hello,
The proposed patch in one liner which reverses some changes introduced by
traceroute-1.4a5-lsrr.patch as said before.
RHEL-5 doesn't reproduce because it uses setsockopt(2)
80 static int dontfrag = 0;
...
353 { "F", "dont-fragment", 0, "Set DF (don't fragment bit) on",
354 CLIF_set_flag, &dontfrag, 0, CLIF_ABBREV },
...
828 i = dontfrag ? IP_PMTUDISC_DO : IP_PMTUDISC_DONT;
829 if (setsockopt (sk, SOL_IP, IP_MTU_DISCOVER, &i, sizeof(i)) < 0)
so the task of setting frag_off is handled by the kernel which does:
net/ipv4/ip_output.c
int ip_build_and_send_pkt(...
...
136 if (ip_dont_fragment(sk, &rt->u.dst))
137 iph->frag_off = htons(IP_DF);
138 else
139 iph->frag_off = 0;
the same happens on others functions, i.e. ip_queue_xmit().
RHEL-4 builds the packet manually and so, needs to use htons() too.
695 #ifdef BYTESWAP_IP_HDR
696 outip->ip_len = htons(packlen);
697 outip->ip_off = htons(off);
698 #else
699 outip->ip_len = packlen;
700 outip->ip_off = off;
701 #endif
IMO, the proposed patch is correct.
Flavio
This request was evaluated by Red Hat Product Management for inclusion, but this component is not scheduled to be updated in the current Red Hat Enterprise Linux release. If you would like this request to be reviewed for the next minor release, ask your support representative to set the next rhel-x.y flag to "?". An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on therefore solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHBA-2008-0883.html |
Created attachment 317753 [details] fix this bug Description of problem: running: traceroute -F localhost (or any other host, public/private, external) fails the trace route operation: traceroute localhost -F traceroute to localhost (127.0.0.1), 30 hops max, 46 byte packets 1 * * * 2 * * * 3 * * * 4 * * * 5 * * * . During that time increase in the 'packet reassembles failed' counter is seen using netstat -s, about one error per printed *. This is not an issue on rhel5/oel5 only on rhel3/4 & oel3/4. Tried different packet sizes for traceroute, from 46 bytes up to 1500, all fail.. Version-Release number of selected component (if applicable): traceroute-1.4a12 How reproducible: run: traceroute -F localhost Steps to Reproduce: 1. 2. 3. Actual results: * * * Expected results: should return immediately,one hop Additional info: This problem is caused by one of the patches,traceroute-1.4a5-lsrr.patch. In this old patch removed one defination of BYTESWAP_IP_HDR from the configure file.So there is byte order problem when compile.Linux box can't convert the byte order correctly for the -F option.Made a patch for this.