socket.c hangs in "UDP Client/Server Test - IPv6/Ipv4" on FreeBSD 7.0

NEW
Assigned to

Status

NSPR
NSPR
--
minor
9 years ago
9 years ago

People

(Reporter: Wan-Teh Chang, Assigned: Wan-Teh Chang)

Tracking

4.7.1
x86
FreeBSD

Firefox Tracking Flags

(Not tracked)

Details

(Assignee)

Description

9 years ago
I built NSPR_4_7_2_BETA3 on FreeBSD 7.0.  When I run
the socket.c test program, it hangs:

------------------------------------------------------------
$ ./socke
t
TCP Client/Server Test - IPv4/Ipv4
'PR_NewSem' is obsolete. Use 'locks & condition variables' instead.
'PR_WaitSem' is obsolete. Use 'locks & condition variables' instead.
'PR_PostSem' is obsolete. Use 'locks & condition variables' instead.
TCP_Socket_Client_Server_Test: 1 Server  5 Clients  5 connections_per_client
                             : 10 messages_per_connection 1024 bytes_per_message

TCP_Socket_Client_Server_Test Passed
TCP Client/Server Test - IPv6/Ipv4
TCP_Socket_Client_Server_Test: 1 Server  5 Clients  5 connections_per_client
                             : 10 messages_per_connection 1024 bytes_per_message

TCP_Socket_Client_Server_Test Passed
TCP Client/Server Test - IPv4/Ipv6
TCP_Socket_Client_Server_Test: 1 Server  5 Clients  5 connections_per_client
                             : 10 messages_per_connection 1024 bytes_per_message

TCP_Socket_Client_Server_Test Passed
TCP Client/Server Test - IPv6/Ipv6
TCP_Socket_Client_Server_Test: 1 Server  5 Clients  5 connections_per_client
                             : 10 messages_per_connection 1024 bytes_per_message

TCP_Socket_Client_Server_Test Passed
UDP Client/Server Test - IPv4/Ipv4
UDP_Socket_Client_Server_Test:  1 Server 10 Clients
                             :  5 datagrams_per_client  128 bytes_per_datagram
UDP_Socket_Client_Server_Test Passed
UDP Client/Server Test - IPv6/Ipv4
------------------------------------------------------------

I found that two tests, "UDP Client/Server Test - IPv6/Ipv4"
and "UDP Client/Server Test - IPv4/Ipv6", hang.  All the other
tests pass.  So this may indicate a problem with IPv4-mapped
IPv6 address support for IPv6 UDP sockets.  Note that NSPR
sets the IPV6_V6ONLY socket option to 0 (false) on FreeBSD.
If we don't do that, the TCP client-server tests between IPv4
and IPv6 will fail.

This machine has the following network interfaces:

$ ifconfig -a
le0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        ether 00:0c:29:f6:75:9f
        inet 75.101.18.82 netmask 0xffffff00 broadcast 75.101.18.255
        media: Ethernet autoselect
        status: active
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> metric 0 mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
(Assignee)

Comment 1

9 years ago
On this FreeBSD 7.0 system, _PR_INET6_PROBE is defined,
and _pr_ipv6_is_present() returns true, so we can create
AF_INET6 sockets.

If NSPR doesn't set the IPV6_V6ONLY socket option to 0 (false),
connect() fails with 22 (EINVAL) for TCP sockets, and fails
with 65 (EHOSTUNREACH) for UDP sockets during the client-server
tests between IPv4 and IPv6.

Since the support for IPv4-mapped IPv6 addresses is not
as important as in the era of RFC 2553, this is just a minor
bug.
You need to log in before you can comment on or make changes to this bug.