aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2022-07-22 15:31:15 +1000
committerStefano Brivio <sbrivio@redhat.com>2022-07-30 21:57:50 +0200
commit4bc883aeab9b05d66baa4fcf3c0e993ffa6f8a0b (patch)
treeeea403c97766ccc62f4a4de628efe5de683a9d37
parent3f190726407109fdb74ed7b5f8ddd7e68a56d7aa (diff)
downloadpasst-4bc883aeab9b05d66baa4fcf3c0e993ffa6f8a0b.tar
passt-4bc883aeab9b05d66baa4fcf3c0e993ffa6f8a0b.tar.gz
passt-4bc883aeab9b05d66baa4fcf3c0e993ffa6f8a0b.tar.bz2
passt-4bc883aeab9b05d66baa4fcf3c0e993ffa6f8a0b.tar.lz
passt-4bc883aeab9b05d66baa4fcf3c0e993ffa6f8a0b.tar.xz
passt-4bc883aeab9b05d66baa4fcf3c0e993ffa6f8a0b.tar.zst
passt-4bc883aeab9b05d66baa4fcf3c0e993ffa6f8a0b.zip
Move passt mac_guest init to be more symmetric with pasta
In pasta mode, the guest's MAC address is set up in pasta_ns_cobf() called from tap_sock_tun_init(). If we have a guest MAC configured with --ns-mac-addr, this will set the given MAC on the kernel tuntap device, or if we haven't configured one it will update our record of the guest MAC to the kernel assigned one from the device. For passt, we don't initially know the guest's MAC until we receive packets from it, so we have to initially use a broadcast address. This is - oddly - set up in an entirely different place, in conf_ip() conditional on the mode. Move it to the logically matching place for passt - tap_sock_unix_init(). Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r--conf.c3
-rw-r--r--tap.c6
2 files changed, 6 insertions, 3 deletions
diff --git a/conf.c b/conf.c
index bc8851f..f5b761f 100644
--- a/conf.c
+++ b/conf.c
@@ -676,9 +676,6 @@ static void conf_ip(struct ctx *c)
nl_link(0, c->ifi4, c->mac, 0, 0);
}
- if (c->mode == MODE_PASST)
- memset(&c->mac_guest, 0xff, sizeof(c->mac_guest));
-
if (v6 != IP_VERSION_DISABLED) {
int prefix_len = 0;
diff --git a/tap.c b/tap.c
index a3c711c..43a7372 100644
--- a/tap.c
+++ b/tap.c
@@ -794,6 +794,12 @@ static void tap_sock_unix_init(struct ctx *c)
exit(EXIT_FAILURE);
}
+ /* 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++) {
char *path = addr.sun_path;