[linux-f10] linux_socketcall... ERR#43 'Protocol not supported'
Alexander Leidinger
Alexander at Leidinger.net
Tue May 5 14:08:41 UTC 2009
Quoting Boris Samorodov <bsam at ipt.ru> (from Tue, 05 May 2009 17:44:54 +0400):
> On Tue, 05 May 2009 14:49:55 +0200 Alexander Leidinger wrote:
>> Quoting Boris Samorodov <bsam at ipt.ru> (from Tue, 05 May 2009
>> 09:51:21 +0400):
>
>> > I'm working on Fedora 10 ports and almost all is fine (even
>> > google-earth seems to work)... But there is no resolving.
>> > I managed to find the culprit. Here it is:
>
>> > Ktrace/linux_kdump gives this:
>> > -----
>> > 48833 ping CALL linux_socketcall(0x1,0xbfbfd218)
>> > 48833 ping RET linux_socketcall -1 errno 93 Unknown error: 93
>> > 48833 ping CALL gettimeofday(0xbfbfd2e0,0)
>> > 48833 ping RET gettimeofday 0
>> > 48833 ping CALL linux_socketcall(0x1,0xbfbfd218)
>> > 48833 ping RET linux_socketcall -1 errno 93 Unknown error: 93
>> > 48833 ping CALL write(0x2,0xbfbfbf48,0x1a)
>> > 48833 ping GIO fd 2 wrote 26 bytes
>> > "ping: unknown host www.ru
>> > "
>> > 48833 ping RET write 26/0x1a
>> > 48833 ping CALL linux_exit_group(0x2)
>> > ----
>
>> There was a commit after April 30 about linux socket stuff. I don't
>> know if it is related or not. You can either update and test, or
>
> Thanks for the info, I'm updating now.
>
>> instrument the current code to print out the parameters to
>> linux_socketcall in a human readable way.
>
> Can you give a tiny example?
orig:
---snip---
switch (args->what) {
case LINUX_SOCKET:
return (linux_socket(td, arg));
case LINUX_BIND:
return (linux_bind(td, arg));
---snip---
modified (ugly):
---snip---
switch (args->what) {
case LINUX_SOCKET:
int ret = linux_socket(td, arg);
printf("LINUX_SOCKET: %d\n", ret);
return (ret);
case LINUX_BIND:
return (linux_bind(td, arg));
---snip---
After this you should see in ktrace which one it tries to call. Revert
to the orig one and instrument the corresponding function, for
linux_socket thish would be:
---snip---
linux_socket(struct thread *td, struct linux_socket_args *args)
{
#ifdef INET6
INIT_VNET_INET6(curvnet);
#endif
struct socket_args /* {
int domain;
int type;
int protocol;
} */ bsd_args;
int retval_socket;
/* debug for bsam */
printf("linux_socket (LINUX): domain: %d, type: %d, protocol: %d\n",
args->domain, args->type, args->protocol);
bsd_args.protocol = args->protocol;
bsd_args.type = args->type;
bsd_args.domain = linux_to_bsd_domain(args->domain);
/* debug for bsam */
printf("linux_socket (FreeBSD): domain: %d\n", bsd_args.domain);
if (bsd_args.domain == -1)
return (EINVAL);
---snip---
Bye,
Alexander.
--
The six great gifts of an Irish girl are beauty, soft
voice, sweet speech, wisdom, needlework, and chastity.
-- Theodore Roosevelt, 1907
http://www.Leidinger.net Alexander @ Leidinger.net: PGP ID = B0063FE7
http://www.FreeBSD.org netchild @ FreeBSD.org : PGP ID = 72077137
More information about the freebsd-emulation
mailing list