Ping issue in 1.20+

Tito farmatito at tiscali.it
Sun Jun 30 23:00:26 UTC 2013


On Sunday 30 June 2013 21:00:46 Giovanni Vallesi - TeeBX wrote:
> Il 28/06/2013 1.04, Denys Vlasenko ha scritto:
> >> Please add debugging prints to inet_cksum() function - for one,
> >> >  let's find out the value of nleft, addr[0], and the return value.
> >> >  (IOW, let's find out whether we checksum over the correct buffer,
> >> >  and whether we produce the same xsum we see in tcpdump.)
> > For example, this way:
> >
> >
> > uint16_t FAST_FUNC inet_cksum(uint16_t *addr, int nleft)
> > {
> >          /*
> >           * Our algorithm is simple, using a 32 bit accumulator,
> >           * we add sequential 16 bit words to it, and at the end, fold
> >           * back all the carry bits from the top 16 bits into the lower
> >           * 16 bits.
> >           */
> >          unsigned sum = 0;
> > char string[nleft*2 + 2];
> > int z = nleft;
> > bin2hex(string, (void*)addr, nleft)[0] = 0;
> >          while (nleft>  1) {
> >                  sum += *addr++;
> >                  nleft -= 2;
> >          }
> >
> >          /* Mop up an odd byte, if necessary */
> >          if (nleft == 1) {
> >                  if (BB_LITTLE_ENDIAN)
> >                          sum += *(uint8_t*)addr;
> >                  else
> >                          sum += *(uint8_t*)addr<<  8;
> >          }
> >
> >          /* Add back carry outs from top 16 bits to low 16 bits */
> >          sum = (sum>>  16) + (sum&  0xffff);     /* add hi 16 to low 16 */
> >          sum += (sum>>  16);                     /* add carry */
> >
> > bb_error_msg("inet_cksum(%s,%d)=0x%x", string, z, (unsigned)(uint16_t)~sum);
> >          return (uint16_t)~sum;
> > }
> >
> > When I run it, I see:
> >
> > # ./busybox ping -c2 10.0.0.138
> > PING 10.0.0.138 (10.0.0.138): 56 data bytes
> > ping: inet_cksum(080000001f29000038717f2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,64)=0x4021
> > 64 bytes from 10.0.0.138: seq=0 ttl=254 time=3.116 ms
> > ping: inet_cksum(080000001f29000117b48e2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,64)=0xfc32
> > 64 bytes from 10.0.0.138: seq=1 ttl=254 time=2.747 ms
> 
> Thanks Denys,
> I patched ping.c source according to your suggestion... but I think the 
> output is of little use because the (I guess) contains non printable 
> chars so the terminals strips them:
> 
> ~ # ping -c3 172.31.255.1
> PING 172.31.255.1 (172.31.255.1): 56 data bytes
> ping: inet_cksum(,64)=0xa786
> 64 bytes from 172.31.255.1: seq=0 ttl=62 time=1.097 ms
> ping: inet_cksum(,64)=0xb851
> ping: inet_cksum,64)=0x603c
> 
> --- 172.31.255.1 ping statistics ---
> 3 packets transmitted, 1 packets received, 66% packet loss
> round-trip min/avg/max = 1.097/1.097/1.097 ms
> 
> What else I can do to help in debugging?
> 
> I tried also removing the endianess test, forcing le, same issue.
> Also I tried changing if (nleft == 1) to if (nleft) like it was before 
> 1.20. I think its a big change because any integer >0 compare to true in 
> the second case. No luck.
> 
> @Tito: you asked about the config.
> No problem, no secrets, but because I am new here I'd like to know if is 
> allowed to attach the file, put it inline or??
> 
> Thanks again to everyone.
> 
> 

I think attaching should work.

Ciao,
Tito


More information about the busybox mailing list