* [Qemu-devel] slirp smb with modern win guests when samba is also running on host
@ 2013-11-28 19:32 Michael Tokarev
2014-02-05 9:18 ` Michael Tokarev
2014-03-12 7:23 ` Jan Kiszka
0 siblings, 2 replies; 3+ messages in thread
From: Michael Tokarev @ 2013-11-28 19:32 UTC (permalink / raw)
To: Jan Kiszka, Qemu Development List
After numerous reports that -smb (or -netdev user,smb=foo) not working
with modern windows (win7 and vista are reported as non-working), I
started digging myself. And found that indeed it doesn't work, and
why.
The thing is that modern win tries to connect to port 445 (microsoft-ds)
first, and if that fails, it falls back to old port 139 (netbios-ssn).
slirp code in qemu only redirects port 139, it does not touch port 445.
So the prob is that if samba is also running on the host, guest will try
to communicate using port 445, and that will succed, but ofcourse guest
will not talk with our samba but with samba running on the host.
If samba is not running on the host, guest will fall back to port 139,
and will reach the redirecting rule and qemu will spawn smbd correctly.
The solution is to redirect both ports (139 and 445), and the fix is
a one-liner, adding second call to slirp_add_exec() at the end of
net/slirp.c:slirp_smb() function (provided below).
But it looks like that is not a proper fix really, since in theory
we should redirect both ports to the SAME, single samba instance,
but I'm not sure this is possible with slirp. Well, even if two
smbd processes will be run on the same config dir, it should not
be a problem.
The one-liner (not exactly 1 since it touches previous line too) is like
this:
Signed-off-By: Michael Tokarev <mjt@tls.msk.ru>
diff --git a/net/slirp.c b/net/slirp.c
index 124e953..a22e976 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -549,7 +549,8 @@ static int slirp_smb(SlirpState* s, const char *exported_dir
snprintf(smb_cmdline, sizeof(smb_cmdline), "%s -s %s",
CONFIG_SMBD_COMMAND, smb_conf);
- if (slirp_add_exec(s->slirp, 0, smb_cmdline, &vserver_addr, 139) < 0) {
+ if (slirp_add_exec(s->slirp, 0, smb_cmdline, &vserver_addr, 139) < 0 ||
+ slirp_add_exec(s->slirp, 0, smb_cmdline, &vserver_addr, 445) < 0) {
slirp_smb_cleanup(s);
error_report("conflicting/invalid smbserver address");
return -1;
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] slirp smb with modern win guests when samba is also running on host
2013-11-28 19:32 [Qemu-devel] slirp smb with modern win guests when samba is also running on host Michael Tokarev
@ 2014-02-05 9:18 ` Michael Tokarev
2014-03-12 7:23 ` Jan Kiszka
1 sibling, 0 replies; 3+ messages in thread
From: Michael Tokarev @ 2014-02-05 9:18 UTC (permalink / raw)
To: Jan Kiszka, Qemu Development List
Ping? It's been more than 2 months already...
Thanks,
/mjt
28.11.2013 23:32, Michael Tokarev wrote:
> After numerous reports that -smb (or -netdev user,smb=foo) not working
> with modern windows (win7 and vista are reported as non-working), I
> started digging myself. And found that indeed it doesn't work, and
> why.
>
> The thing is that modern win tries to connect to port 445 (microsoft-ds)
> first, and if that fails, it falls back to old port 139 (netbios-ssn).
>
> slirp code in qemu only redirects port 139, it does not touch port 445.
>
> So the prob is that if samba is also running on the host, guest will try
> to communicate using port 445, and that will succed, but ofcourse guest
> will not talk with our samba but with samba running on the host.
>
> If samba is not running on the host, guest will fall back to port 139,
> and will reach the redirecting rule and qemu will spawn smbd correctly.
>
> The solution is to redirect both ports (139 and 445), and the fix is
> a one-liner, adding second call to slirp_add_exec() at the end of
> net/slirp.c:slirp_smb() function (provided below).
>
> But it looks like that is not a proper fix really, since in theory
> we should redirect both ports to the SAME, single samba instance,
> but I'm not sure this is possible with slirp. Well, even if two
> smbd processes will be run on the same config dir, it should not
> be a problem.
>
> The one-liner (not exactly 1 since it touches previous line too) is like
> this:
>
> Signed-off-By: Michael Tokarev <mjt@tls.msk.ru>
>
> diff --git a/net/slirp.c b/net/slirp.c
> index 124e953..a22e976 100644
> --- a/net/slirp.c
> +++ b/net/slirp.c
> @@ -549,7 +549,8 @@ static int slirp_smb(SlirpState* s, const char *exported_dir
> snprintf(smb_cmdline, sizeof(smb_cmdline), "%s -s %s",
> CONFIG_SMBD_COMMAND, smb_conf);
>
> - if (slirp_add_exec(s->slirp, 0, smb_cmdline, &vserver_addr, 139) < 0) {
> + if (slirp_add_exec(s->slirp, 0, smb_cmdline, &vserver_addr, 139) < 0 ||
> + slirp_add_exec(s->slirp, 0, smb_cmdline, &vserver_addr, 445) < 0) {
> slirp_smb_cleanup(s);
> error_report("conflicting/invalid smbserver address");
> return -1;
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] slirp smb with modern win guests when samba is also running on host
2013-11-28 19:32 [Qemu-devel] slirp smb with modern win guests when samba is also running on host Michael Tokarev
2014-02-05 9:18 ` Michael Tokarev
@ 2014-03-12 7:23 ` Jan Kiszka
1 sibling, 0 replies; 3+ messages in thread
From: Jan Kiszka @ 2014-03-12 7:23 UTC (permalink / raw)
To: Michael Tokarev, Qemu Development List
On 2013-11-28 20:32, Michael Tokarev wrote:
> After numerous reports that -smb (or -netdev user,smb=foo) not working
> with modern windows (win7 and vista are reported as non-working), I
> started digging myself. And found that indeed it doesn't work, and
> why.
>
> The thing is that modern win tries to connect to port 445 (microsoft-ds)
> first, and if that fails, it falls back to old port 139 (netbios-ssn).
>
> slirp code in qemu only redirects port 139, it does not touch port 445.
>
> So the prob is that if samba is also running on the host, guest will try
> to communicate using port 445, and that will succed, but ofcourse guest
> will not talk with our samba but with samba running on the host.
>
> If samba is not running on the host, guest will fall back to port 139,
> and will reach the redirecting rule and qemu will spawn smbd correctly.
>
> The solution is to redirect both ports (139 and 445), and the fix is
> a one-liner, adding second call to slirp_add_exec() at the end of
> net/slirp.c:slirp_smb() function (provided below).
>
> But it looks like that is not a proper fix really, since in theory
> we should redirect both ports to the SAME, single samba instance,
> but I'm not sure this is possible with slirp. Well, even if two
> smbd processes will be run on the same config dir, it should not
> be a problem.
I don't see either that this is expressible with the current exec
feature of slirp.
>
> The one-liner (not exactly 1 since it touches previous line too) is like
> this:
>
> Signed-off-By: Michael Tokarev <mjt@tls.msk.ru>
>
> diff --git a/net/slirp.c b/net/slirp.c
> index 124e953..a22e976 100644
> --- a/net/slirp.c
> +++ b/net/slirp.c
> @@ -549,7 +549,8 @@ static int slirp_smb(SlirpState* s, const char *exported_dir
> snprintf(smb_cmdline, sizeof(smb_cmdline), "%s -s %s",
> CONFIG_SMBD_COMMAND, smb_conf);
>
> - if (slirp_add_exec(s->slirp, 0, smb_cmdline, &vserver_addr, 139) < 0) {
> + if (slirp_add_exec(s->slirp, 0, smb_cmdline, &vserver_addr, 139) < 0 ||
> + slirp_add_exec(s->slirp, 0, smb_cmdline, &vserver_addr, 445) < 0) {
> slirp_smb_cleanup(s);
> error_report("conflicting/invalid smbserver address");
> return -1;
>
Thanks, merged to my slirp queue. Will send this out ASAP, sorry for the
excessive delay.
JAn
--
Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-03-12 7:23 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-28 19:32 [Qemu-devel] slirp smb with modern win guests when samba is also running on host Michael Tokarev
2014-02-05 9:18 ` Michael Tokarev
2014-03-12 7:23 ` Jan Kiszka
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).