From 448bd9d958294c5ac8b9529f0d9fd63f5042b61e Mon Sep 17 00:00:00 2001 From: Adrien Moulin Date: Fri, 26 Aug 2022 18:22:19 +0200 Subject: [PATCH] slirp: fix port forwarding and handle configuration with multiple nics --- src/include/86box/network.h | 1 + src/network/net_slirp.c | 5 +++-- src/network/network.c | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/include/86box/network.h b/src/include/86box/network.h index 967c581b1..2fe0553f8 100644 --- a/src/include/86box/network.h +++ b/src/include/86box/network.h @@ -127,6 +127,7 @@ struct _netcard_t { mutex_t *tx_mutex; mutex_t *rx_mutex; pc_timer_t timer; + int card_num; }; typedef struct { diff --git a/src/network/net_slirp.c b/src/network/net_slirp.c index a74d06173..7535a0609 100644 --- a/src/network/net_slirp.c +++ b/src/network/net_slirp.c @@ -415,7 +415,7 @@ net_slirp_init(const netcard_t *card, const uint8_t *mac_addr, void *priv) struct in_addr host = { .s_addr = htonl(0x0a000002 | (slirp_card_num << 8)) }; /* 10.0.x.2 */ struct in_addr dhcp = { .s_addr = htonl(0x0a00000f | (slirp_card_num << 8)) }; /* 10.0.x.15 */ struct in_addr dns = { .s_addr = htonl(0x0a000003 | (slirp_card_num << 8)) }; /* 10.0.x.3 */ - struct in_addr bind = { .s_addr = htonl(0x00000000 | (slirp_card_num << 8)) }; /* 0.0.0.0 */ + struct in_addr bind = { .s_addr = htonl(0x00000000) }; /* 0.0.0.0 */ struct in6_addr ipv6_dummy = { 0 }; /* contents don't matter; we're not using IPv6 */ /* Initialize SLiRP. */ @@ -428,7 +428,8 @@ net_slirp_init(const netcard_t *card, const uint8_t *mac_addr, void *priv) /* Set up port forwarding. */ int udp, external, internal, i = 0; - char *category = "SLiRP Port Forwarding"; + char category[32]; + snprintf(category, sizeof(category), "SLiRP Port Forwarding #%i", card->card_num + 1); char key[20]; while (1) { sprintf(key, "%d_protocol", i); diff --git a/src/network/network.c b/src/network/network.c index 58ff2516d..a406140c4 100644 --- a/src/network/network.c +++ b/src/network/network.c @@ -388,6 +388,7 @@ network_attach(void *card_drv, uint8_t *mac, NETRXCB rx, NETWAITCB wait, NETSETL card->set_link_state = set_link_state; card->tx_mutex = thread_create_mutex(); card->rx_mutex = thread_create_mutex(); + card->card_num = net_card_current; for (int i=0; i<3; i++) { network_queue_init(&card->queues[i]);