NetworkingManagement.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*
  2. * Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Function.h>
  8. #include <AK/NonnullOwnPtr.h>
  9. #include <AK/NonnullRefPtr.h>
  10. #include <AK/NonnullRefPtrVector.h>
  11. #include <AK/Types.h>
  12. #include <Kernel/Bus/PCI/Definitions.h>
  13. #include <Kernel/Memory/Region.h>
  14. namespace Kernel {
  15. class NetworkAdapter;
  16. class NetworkingManagement {
  17. friend class NetworkAdapter;
  18. AK_MAKE_ETERNAL
  19. public:
  20. static NetworkingManagement& the();
  21. static bool is_initialized();
  22. bool initialize();
  23. NetworkingManagement();
  24. void for_each(Function<void(NetworkAdapter&)>);
  25. RefPtr<NetworkAdapter> from_ipv4_address(const IPv4Address&) const;
  26. RefPtr<NetworkAdapter> lookup_by_name(const StringView&) const;
  27. NonnullRefPtr<NetworkAdapter> loopback_adapter() const;
  28. private:
  29. RefPtr<NetworkAdapter> determine_network_device(PCI::Address address) const;
  30. NonnullRefPtrVector<NetworkAdapter> m_adapters;
  31. RefPtr<NetworkAdapter> m_loopback_adapter;
  32. mutable Mutex m_lock { "Networking" };
  33. };
  34. }