small BUG in TCP

roque@di.fc.ul.pt
Wed, 20 Dec 1995 13:52:20 +0100


in kernel 1.3.48 when you try to issue a TCP connect to a host in your su=
bnet=20
that is down tcp answers with "No route to host" ( ie, -NETUNREACH ). I t=
hink=20
that this is in fact incorrect ...=20
The error reply is not on the instant of the connect call so i think it=20
happens on retransmiting

the right beaviour as per RFCs should be to keep retransmiting till you r=
each=20
the maximum number of retransmits.

There is in fact an route to the host (it's on the local subnet) and i th=
ink=20
this beaviour is related with the route caches...

in tcp_do_retransmit:

...
rt =3D ip_check_route(&sk->ip_route_cache, opt->srr?opt->faddr:iph->daddr=
, skb->
localroute);
...
if (rt=3D=3DNULL) /* Deep poo */
{
if(skb->sk)
{
skb->sk->err=3DENETUNREACH;
skb->sk->error_report(skb->sk);
}
}
...

The ARP field in the route cache is 0 when the route is checked ( but the=
=20
flags are RTF_UP | RTF_HOST ) . maybe that causes ip_check_route to fail

... i think this is a bit non conformant with RFCs...

if anybody has a clue on this please send me a note.

Pedro Roque ( roque@di.fc.ul.pt ) =20
=20
Faculdade de Ci=EAncias da Universidade de Lisboa =20
Departamento de Inform=E1tica =20