Skip to contentSkip to conversation

getaddrinfo - should accept IPPROTO_SCTP no?

DISCUSSION Rick Jones 4 participants 5 messages Oct 13, 2006 – Oct 14, 2006

Subsystems (2)
lore
Share & tools
lore

Rick Jones

author
#0 lore raw

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,

rick jones
http://www.netperf.org/svn/netperf2/trunk/

maintainer
#1 lore raw

From: 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 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?

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.

#2 lore raw
Quoted 10 lines · David Miller

From: 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 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?

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 GLIBC getaddrinfo() 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

#3 lore raw
In reply to Rick Jones
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 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?

Quoted 7 lines

FWIW, which may not be much, Solaris 10 06/06 seems content to accept IPPROTO_SCTP in the hints.

thanks,

rick jones
http://www.netperf.org/svn/netperf2/trunk/

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
author
#4 lore raw
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