Browse Source

Kernel/CommandLine: Add option to disable physical networking hardware

This is useful for debugging sessions mostly.
Liav A 4 years ago
parent
commit
2e2201e8e1
3 changed files with 15 additions and 7 deletions
  1. 5 0
      Kernel/CommandLine.cpp
  2. 1 0
      Kernel/CommandLine.h
  3. 9 7
      Kernel/Net/NetworkingManagement.cpp

+ 5 - 0
Kernel/CommandLine.cpp

@@ -154,6 +154,11 @@ UNMAP_AFTER_INIT HPETMode CommandLine::hpet_mode() const
     PANIC("Unknown HPETMode: {}", hpet_mode);
 }
 
+UNMAP_AFTER_INIT bool CommandLine::is_physical_networking_disabled() const
+{
+    return contains("disable_physical_networking"sv);
+}
+
 UNMAP_AFTER_INIT bool CommandLine::disable_ps2_controller() const
 {
     return contains("disable_ps2_controller"sv);

+ 1 - 0
Kernel/CommandLine.h

@@ -55,6 +55,7 @@ public:
     [[nodiscard]] bool is_boot_profiling_enabled() const;
     [[nodiscard]] bool is_ide_enabled() const;
     [[nodiscard]] bool is_smp_enabled() const;
+    [[nodiscard]] bool is_physical_networking_disabled() const;
     [[nodiscard]] bool is_vmmouse_enabled() const;
     [[nodiscard]] PCIAccessLevel pci_access_level() const;
     [[nodiscard]] bool is_legacy_time_enabled() const;

+ 9 - 7
Kernel/Net/NetworkingManagement.cpp

@@ -85,13 +85,15 @@ UNMAP_AFTER_INIT RefPtr<NetworkAdapter> NetworkingManagement::determine_network_
 
 bool NetworkingManagement::initialize()
 {
-    PCI::enumerate([&](const PCI::Address& address, PCI::ID) {
-        // Note: PCI class 2 is the class of Network devices
-        if (PCI::get_class(address) != 0x02)
-            return;
-        if (auto adapter = determine_network_device(address); !adapter.is_null())
-            m_adapters.append(adapter.release_nonnull());
-    });
+    if (!kernel_command_line().is_physical_networking_disabled()) {
+        PCI::enumerate([&](const PCI::Address& address, PCI::ID) {
+            // Note: PCI class 2 is the class of Network devices
+            if (PCI::get_class(address) != 0x02)
+                return;
+            if (auto adapter = determine_network_device(address); !adapter.is_null())
+                m_adapters.append(adapter.release_nonnull());
+        });
+    }
     auto loopback = LoopbackAdapter::create();
     m_adapters.append(loopback);
     m_loopback_adapter = loopback;