Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 Dec 2012 04:37:22 -0800
From:      Garrett Cooper <yanegomi@gmail.com>
To:        Kevin Lo <kevlo@freebsd.org>
Cc:        src-committers@freebsd.org, freebsd-net@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org, Rick Macklem <rmacklem@uoguelph.ca>
Subject:   Re: Broken error handling with AF_* and socket(2) [was Re: svn commit: r243965 - in head/sys: kern sys]
Message-ID:  <CAGH67wSZ-BqwS7KotqhynUKWvjkGHUGUswkDcxvF0H_UhM2Jhw@mail.gmail.com>
In-Reply-To: <CAGH67wStS8qx_wB2HMNhqQZ2VSBjddx=COav%2BCKHi-xFBn%2BdMg@mail.gmail.com>
References:  <CAGH67wQhapDDqGjKGgdBwNR7GsJBwTk7Fh7tCuCV4zh7B-Yduw@mail.gmail.com> <CAGH67wStS8qx_wB2HMNhqQZ2VSBjddx=COav%2BCKHi-xFBn%2BdMg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
(Don't know why I hit reply instead of reply-all, but oh well... I had
one more reply anyhow)

On Fri, Dec 21, 2012 at 4:28 AM, Garrett Cooper <yanegomi@gmail.com> wrote:
> On Fri, Dec 21, 2012 at 4:11 AM, Garrett Cooper <yanegomi@gmail.com> wrote:
>> On Thu, Dec 6, 2012 at 6:22 PM, Kevin Lo <kevlo@freebsd.org> wrote:
>>> Author: kevlo
>>> Date: Fri Dec  7 02:22:48 2012
>>> New Revision: 243965
>>> URL: http://svnweb.freebsd.org/changeset/base/243965
>>>
>>> Log:
>>>   - according to POSIX, make socket(2) return EAFNOSUPPORT rather than
>>>     EPROTONOSUPPORT if the address family is not supported.
>>>   - introduce pffinddomain() to find a domain by family and use it as
>>>     appropriate.
>>>
>>>   Reviewed by:  glebius
>>
>> This commit broke netgraph (and potentially more things). I fixed
>> netgraph locally like so:
>>
>> $ git diff lib/libnetgraph/
>> diff --git a/lib/libnetgraph/sock.c b/lib/libnetgraph/sock.c
>> index fca3900..5f9f563 100644
>> --- a/lib/libnetgraph/sock.c
>> +++ b/lib/libnetgraph/sock.c
>> @@ -71,10 +71,10 @@ NgMkSockNode(const char *name, int *csp, int *dsp)
>>                 name = NULL;
>>
>>         /* Create control socket; this also creates the netgraph node.
>> -          If we get an EPROTONOSUPPORT then the socket node type is
>> +          If we get an EAFNOSUPPORT then the socket node type is
>>            not loaded, so load it and try again. */
>>         if ((cs = socket(AF_NETGRAPH, SOCK_DGRAM, NG_CONTROL)) < 0) {
>> -               if (errno == EPROTONOSUPPORT) {
>> +               if (errno == EAFNOSUPPORT) {
>>                         if (kldload(NG_SOCKET_KLD) < 0) {
>>                                 errnosv = errno;
>>                                 if (_gNgDebugLevel >= 1)
>>
>>     Reproing the issue was trivial using the ether.bridge example
>> script setup with appropriate interfaces.
>>     I have the patch with the netgraph fix attached, along with other
>> potential fixes that needs to be more properly tested.
>
> usr.sbin/mountd/mountd.c
> usr.sbin/rpcbind/rpcbind.c
> usr.sbin/ypserv/yp_main.c
>
>     might be broken as well because they're calling __rpc_nconf2fd,
> which just wraps socket(2) underneath it all.
>     At this point it might be wise to consider doing something about
> the ABI because the contract has been grossly changed enough that
> things that tried to make sense of sockets with EPROTONOSUPPORT are
> going to have issues now on FreeBSD [potentially] in either positive
> or negative cases.

    My fix wasn't necessarily the right answer for netgraph, et al. It
was just what I needed in order to get it to function with the new
socket(2) API.
Thanks,
-Garrett



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGH67wSZ-BqwS7KotqhynUKWvjkGHUGUswkDcxvF0H_UhM2Jhw>