From 6c375d04e24e6056d364aa036cf4dec48b8ce690 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sat, 2 Aug 2025 16:53:01 -0400 Subject: [PATCH] Devbranch network switch --- CMakeLists.txt | 1 + src/network/CMakeLists.txt | 19 ++++++++++++------- src/network/network.c | 4 ++++ src/qt/CMakeLists.txt | 4 ++++ src/qt/qt_settingsnetwork.cpp | 12 +++++++++++- 5 files changed, 32 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cffe031f..989649b58 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -184,6 +184,7 @@ cmake_dependent_option(PCL "Generic PCL5e Printer" cmake_dependent_option(SIO_DETECT "Super I/O Detection Helper" ON "DEV_BRANCH" OFF) cmake_dependent_option(WACOM "Wacom Input Devices" ON "DEV_BRANCH" OFF) cmake_dependent_option(XL24 "ATI VGA Wonder XL24 (ATI-28800-6)" ON "DEV_BRANCH" OFF) +cmake_dependent_option(NETSWITCH "Network Switch Support" ON "DEV_BRANCH" OFF) # Ditto but for Qt if(QT) diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index 0be4a0aef..82d332e20 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -34,13 +34,6 @@ list(APPEND net_sources net_l80225.c net_modem.c utils/getline.c - - net_netswitch.c - netswitch.c - pb_common.c - pb_encode.c - pb_decode.c - networkmessage.pb.c ) find_package(PkgConfig REQUIRED) @@ -65,6 +58,18 @@ if(WIN32) target_link_libraries(86Box ws2_32) endif() +if(NETSWITCH) + add_compile_definitions(USE_NETSWITCH) + list(APPEND net_sources + net_netswitch.c + netswitch.c + pb_common.c + pb_encode.c + pb_decode.c + networkmessage.pb.c + ) +endif() + if (UNIX) find_path(HAS_VDE "libvdeplug.h" PATHS ${VDE_INCLUDE_DIR} "/usr/include /usr/local/include" "/opt/homebrew/include" ) if(HAS_VDE) diff --git a/src/network/network.c b/src/network/network.c index c2e3b8a14..9b56515e8 100644 --- a/src/network/network.c +++ b/src/network/network.c @@ -503,11 +503,13 @@ network_attach(void *card_drv, uint8_t *mac, NETRXCB rx, NETSETLINKSTATE set_lin card->host_drv.priv = card->host_drv.init(card, mac, net_cards_conf[net_card_current].host_dev_name, net_drv_error); break; #endif +#ifdef USE_NETSWITCH case NET_TYPE_NMSWITCH: case NET_TYPE_NRSWITCH: card->host_drv = net_netswitch_drv; card->host_drv.priv = card->host_drv.init(card, mac, &net_cards_conf[net_card_current], net_drv_error); break; +#endif /* USE_NETSWITCH */ default: card->host_drv.priv = NULL; break; @@ -519,11 +521,13 @@ network_attach(void *card_drv, uint8_t *mac, NETRXCB rx, NETSETLINKSTATE set_lin if (!card->host_drv.priv) { if(net_cards_conf[net_card_current].net_type != NET_TYPE_NONE) { +#ifdef USE_NETSWITCH // FIXME: Hardcoded during dev // FIXME: Remove when done! if((net_cards_conf[net_card_current].net_type == NET_TYPE_NMSWITCH) || (net_cards_conf[net_card_current].net_type == NET_TYPE_NRSWITCH)) fatal("%s", net_drv_error); +#endif /* USE_NETSWITCH */ // We're here because of a failure swprintf(tempmsg, sizeof_w(tempmsg), L"%ls:\n\n%s\n\n%ls", plat_get_string(STRING_NET_ERROR), net_drv_error, plat_get_string(STRING_NET_ERROR_DESC)); diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 0479ff3f8..1b69635b2 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -252,6 +252,10 @@ if(EMU_BUILD_NUM) ) endif() +if(NETSWITCH) + target_compile_definitions(ui PRIVATE USE_NETSWITCH) +endif() + if(RTMIDI) target_compile_definitions(ui PRIVATE USE_RTMIDI) endif() diff --git a/src/qt/qt_settingsnetwork.cpp b/src/qt/qt_settingsnetwork.cpp index 7f9f957f9..bd94deaeb 100644 --- a/src/qt/qt_settingsnetwork.cpp +++ b/src/qt/qt_settingsnetwork.cpp @@ -139,6 +139,7 @@ SettingsNetwork::enableElements(Ui::SettingsNetwork *ui) break; #endif +#ifdef USE_NETSWITCH case NET_TYPE_NMSWITCH: // option_list_label->setText("Local Switch Options"); option_list_label->setVisible(true); @@ -168,6 +169,7 @@ SettingsNetwork::enableElements(Ui::SettingsNetwork *ui) hostname_label->setVisible(true); hostname_value->setVisible(true); break; +#endif /* USE_NETSWITCH */ case NET_TYPE_SLIRP: default: @@ -215,9 +217,11 @@ SettingsNetwork::save() cbox = findChild(QString("comboBoxNet%1").arg(i + 1)); net_cards_conf[i].net_type = cbox->currentData().toInt(); cbox = findChild(QString("comboBoxIntf%1").arg(i + 1)); +#ifdef USE_NETSWITCH auto *hostname_value = findChild(QString("hostnameSwitch%1").arg(i + 1)); auto *promisc_value = findChild(QString("boxPromisc%1").arg(i + 1)); auto *switch_group_value = findChild(QString("spinnerSwitch%1").arg(i + 1)); +#endif /* USE_NETSWITCH */ memset(net_cards_conf[i].host_dev_name, '\0', sizeof(net_cards_conf[i].host_dev_name)); if (net_cards_conf[i].net_type == NET_TYPE_PCAP) strncpy(net_cards_conf[i].host_dev_name, network_devs[cbox->currentData().toInt()].device, sizeof(net_cards_conf[i].host_dev_name) - 1); @@ -229,6 +233,7 @@ SettingsNetwork::save() else if (net_cards_conf[i].net_type == NET_TYPE_TAP) strncpy(net_cards_conf[i].host_dev_name, bridge_line->text().toUtf8().constData(), sizeof(net_cards_conf[i].host_dev_name)); #endif +#ifdef USE_NETSWITCH else if (net_cards_conf[i].net_type == NET_TYPE_NRSWITCH) { memset(net_cards_conf[i].nrs_hostname, '\0', sizeof(net_cards_conf[i].nrs_hostname)); strncpy(net_cards_conf[i].nrs_hostname, hostname_value->text().toUtf8().constData(), sizeof(net_cards_conf[i].nrs_hostname) - 1); @@ -237,6 +242,7 @@ SettingsNetwork::save() net_cards_conf[i].promisc_mode = promisc_value->isChecked(); net_cards_conf[i].switch_group = switch_group_value->value() - 1; } +#endif /* USE_NETSWITCH */ } } @@ -309,10 +315,12 @@ SettingsNetwork::onCurrentMachineChanged(int machineId) Models::AddEntry(model, "TAP", NET_TYPE_TAP); #endif +#ifdef USE_NETSWITCH Models::AddEntry(model, "Local Switch", NET_TYPE_NMSWITCH); #ifdef ENABLE_NET_NRSWITCH Models::AddEntry(model, "Remote Switch", NET_TYPE_NRSWITCH); -#endif +#endif /* ENABLE_NET_NRSWITCH */ +#endif /* USE_NETSWITCH */ model->removeRows(0, removeRows); cbox->setCurrentIndex(cbox->findData(net_cards_conf[i].net_type)); @@ -348,6 +356,7 @@ SettingsNetwork::onCurrentMachineChanged(int machineId) auto editline = findChild(QString("bridgeTAPNIC%1").arg(i+1)); editline->setText(currentTapDevice); #endif +#ifdef USE_NETSWITCH } else if (net_cards_conf[i].net_type == NET_TYPE_NMSWITCH) { auto *promisc_value = findChild(QString("promiscBox%1").arg(i + 1)); promisc_value->setCheckState(net_cards_conf[i].promisc_mode == 1 ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); @@ -358,6 +367,7 @@ SettingsNetwork::onCurrentMachineChanged(int machineId) hostname_value->setText(net_cards_conf[i].nrs_hostname); auto *switch_group_value = findChild(QString("switchSpinner%1").arg(i + 1)); switch_group_value->setValue(net_cards_conf[i].switch_group + 1); +#endif /* USE_NETSWITCH */ } } }