getaddrinfo - should accept IPPROTO_SCTP no?
Subsystems (2)
I made some recent changes to netperf to workaround what is IMO a bug in the Solaris getaddrinfo() where it will clear the ai_protocol field even when one gives it a protocol in the hints.
[If you happen to be trying to use the test-specific -D to set TCP_NODELAY in netperf on Solaris, you might want to grab netperf TOT to get this workaround as it relates to issues with setting TCP_NODELAY - modulo what it will do to being able to run the netperf SCTP tests on Linux...]
In the process though I have stumbled across what appears to be a bug (?) in "Linux" getaddrinfo() - returning a -7 EAI_SOCKTYPE if given as hints SOCK_STREAM and IPPROTO_SCTP - this on a system that ostensibly supports SCTP. I've seen this on RHAS4U4 as well as another less well known distro.
I'm about to see about concocting an additional workaround in netperf for this, but thought I'd ask if my assumption - that getaddrinfo() returning -7 when given IPPROTO_SCTP - is indeed a bug in getaddrinfo(). Or am I just woefully behind in patches or completely offbase on what is correct behaviour for getaddrinfo and hints?
FWIW, which may not be much, Solaris 10 06/06 seems content to accept IPPROTO_SCTP in the hints.
thanks,
David Miller
maintainerFrom: Rick Jones <[email protected]>
Date: Fri, 13 Oct 2006 14:30:12 -0700
Quoted 6 lines
I'm about to see about concocting an additional workaround in netperf for this, but thought I'd ask if my assumption - that
getaddrinfo()returning -7 when givenIPPROTO_SCTP- is indeed a bug ingetaddrinfo(). Or am I just woefully behind in patches or completely offbase on what is correct behaviour for getaddrinfo and hints?
Since getaddrinfo() is implemented in GLIBC, this is not very much a kernel question unless you can point the failure at some kernel calls that the GLIBC getaddrinfo() implementation makes.
Quoted 10 lines · David Miller
From: Rick Jones <[email protected]>
Date: Fri, 13 Oct 2006 14:30:12 -0700Quoted 6 lines
I'm about to see about concocting an additional workaround in netperf for this, but thought I'd ask if my assumption - that
getaddrinfo()returning -7 when givenIPPROTO_SCTP- is indeed a bug ingetaddrinfo(). Or am I just woefully behind in patches or completely offbase on what is correct behaviour for getaddrinfo and hints?
Quoted 4 lines
Since
getaddrinfo()is implemented in GLIBC, this is not very much a kernel question unless you can point the failure at some kernel calls that the GLIBCgetaddrinfo()implementation makes.
Yes. This needs to be supported in glibc.
I think adding an entry for IPPROTO_SCTP in the following structure in glibc:getaddrinfo.c should fix it.
static const struct gaih_typeproto gaih_inet_typeproto[] = {
{ 0, 0, "", 0 },
{ SOCK_STREAM, IPPROTO_TCP, "tcp", 0 },
{ SOCK_DGRAM, IPPROTO_UDP, "udp", 0 },
{ SOCK_RAW, 0, "raw", GAI_PROTO_PROTOANY|GAI_PROTO_NOSERVICE }, { 0, 0, "", 0 }
};
I will try it out and and submit a patch to glibc.
Thanks
Sridhar
Quoted 20 lines · Rick Jones
I made some recent changes to netperf to workaround what is IMO a bug in the Solaris
getaddrinfo()where it will clear theai_protocolfield even when one gives it a protocol in the hints.[If you happen to be trying to use the test-specific -D to set
TCP_NODELAYin netperf on Solaris, you might want to grab netperf TOT to get this workaround as it relates to issues with settingTCP_NODELAY- modulo what it will do to being able to run the netperf SCTP tests on Linux...]In the process though I have stumbled across what appears to be a bug (?) in "Linux"
getaddrinfo()- returning a -7EAI_SOCKTYPEif given as hintsSOCK_STREAMandIPPROTO_SCTP- this on a system that ostensibly supports SCTP. I've seen this on RHAS4U4 as well as another less well known distro.I'm about to see about concocting an additional workaround in netperf for this, but thought I'd ask if my assumption - that
getaddrinfo()returning -7 when givenIPPROTO_SCTP- is indeed a bug ingetaddrinfo(). Or am I just woefully behind in patches or completely offbase on what is correct behaviour for getaddrinfo and hints?
Quoted 7 lines
FWIW, which may not be much, Solaris 10 06/06 seems content to accept
IPPROTO_SCTPin the hints.thanks,
In all the DCCP code which has similar issues I just do the protocol selection on the socket call e.g.
case TCP: new_sock = socket(AF_INET,SOCK_STREAM,0); break; case DCCP: new_sock = socket(AF_INET,SOCK_DCCP,IPPROTO_DCCP); break; case UDP: new_sock = socket(AF_INET,SOCK_DGRAM,0); break;
I'm sure you know all this anyway so apologies in advance for telling you something you probably already know!
We need to come up with a way to select service codes etc for DCCP which is another parameter needed for a DCCP socket when getaddrinfo is tidied up.
Ian
Signature · 7 lines
Ian McDonald Web: http://wand.net.nz/~iam4 Blog: http://imcdnzl.blogspot.com WAND Network Research Group Department of Computer Science University of Waikato New Zealand
Quoted 12 lines
In all the DCCP code which has similar issues I just do the protocol selection on the socket call e.g.
case TCP: new_sock = socket(AF_INET,SOCK_STREAM,0); break; case DCCP: new_sock = socket(AF_INET,SOCK_DCCP,IPPROTO_DCCP); break; case UDP: new_sock = socket(AF_INET,SOCK_DGRAM,0); break;
Quoted 2 lines
I'm sure you know all this anyway so apologies in advance for telling you something you probably already know!
No worries.
David mentioned that I need to talk to the glibc folks. I'm still trying to web search my way to finding them. Meanwhile I may do in netperf for this what I do for Solaris' arbitrary clearing of the ai_protocol field - kludge around it and have netperf emit a warning.
rick jones