Serenity Operating System
at master 48 lines 1.4 kB view raw
1/* 2 * Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/Function.h> 10#include <AK/NonnullOwnPtr.h> 11#include <AK/Types.h> 12#include <Kernel/Bus/PCI/Definitions.h> 13#include <Kernel/Library/NonnullLockRefPtr.h> 14#include <Kernel/Locking/SpinlockProtected.h> 15#include <Kernel/Memory/Region.h> 16#include <Kernel/Net/NetworkAdapter.h> 17 18namespace Kernel { 19 20class NetworkAdapter; 21class NetworkingManagement { 22 friend class NetworkAdapter; 23 24public: 25 static NetworkingManagement& the(); 26 static bool is_initialized(); 27 bool initialize(); 28 29 static ErrorOr<NonnullOwnPtr<KString>> generate_interface_name_from_pci_address(PCI::DeviceIdentifier const&); 30 31 NetworkingManagement(); 32 33 void for_each(Function<void(NetworkAdapter&)>); 34 ErrorOr<void> try_for_each(Function<ErrorOr<void>(NetworkAdapter&)>); 35 36 LockRefPtr<NetworkAdapter> from_ipv4_address(IPv4Address const&) const; 37 LockRefPtr<NetworkAdapter> lookup_by_name(StringView) const; 38 39 NonnullLockRefPtr<NetworkAdapter> loopback_adapter() const; 40 41private: 42 ErrorOr<NonnullLockRefPtr<NetworkAdapter>> determine_network_device(PCI::DeviceIdentifier const&) const; 43 44 SpinlockProtected<Vector<NonnullLockRefPtr<NetworkAdapter>>, LockRank::None> m_adapters {}; 45 LockRefPtr<NetworkAdapter> m_loopback_adapter; 46}; 47 48}