tap: Move all-ones initialisation of mac_guest to tap_sock_init()

It has nothing to do with tap_sock_unix_init(). It used to be there as
that function could be called multiple times per passt instance, but
it's not the case anymore.

This also takes care of the fact that, with --fd, we wouldn't set the
initial MAC address, so we would need to wait for the guest to send us
an ARP packet before we could exchange data.

Fixes: 6b4e68383c ("passt, tap: Add --fd option")
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Acked-by: Richard W.M. Jones <rjones@redhat.com>
This commit is contained in:
Stefano Brivio 2024-05-22 18:18:11 +02:00
parent 45b8632dcc
commit d02bb6ca05

12
tap.c
View file

@ -1111,12 +1111,6 @@ static void tap_sock_unix_init(struct ctx *c)
if (fd < 0) if (fd < 0)
die("UNIX socket: %s", strerror(errno)); die("UNIX socket: %s", strerror(errno));
/* In passt mode, we don't know the guest's MAC until it sends
* us packets. Use the broadcast address so our first packets
* will reach it.
*/
memset(&c->mac_guest, 0xff, sizeof(c->mac_guest));
for (i = 1; i < UNIX_SOCK_MAX; i++) { for (i = 1; i < UNIX_SOCK_MAX; i++) {
char *path = addr.sun_path; char *path = addr.sun_path;
int ex, ret; int ex, ret;
@ -1312,6 +1306,12 @@ void tap_sock_init(struct ctx *c)
if (c->mode == MODE_PASST) { if (c->mode == MODE_PASST) {
if (c->fd_tap_listen == -1) if (c->fd_tap_listen == -1)
tap_sock_unix_init(c); tap_sock_unix_init(c);
/* In passt mode, we don't know the guest's MAC address until it
* sends us packets. Use the broadcast address so that our
* first packets will reach it.
*/
memset(&c->mac_guest, 0xff, sizeof(c->mac_guest));
} else { } else {
tap_sock_tun_init(c); tap_sock_tun_init(c);
} }