mirror of
https://github.com/RGBCube/serenity
synced 2025-07-21 12:47:40 +00:00

We now use AK::Error and AK::ErrorOr<T> in both kernel and userspace! This was a slightly tedious refactoring that took a long time, so it's not unlikely that some bugs crept in. Nevertheless, it does pass basic functionality testing, and it's just real nice to finally see the same pattern in all contexts. :^)
49 lines
1.2 KiB
C++
49 lines
1.2 KiB
C++
/*
|
|
* Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Function.h>
|
|
#include <AK/NonnullOwnPtr.h>
|
|
#include <AK/NonnullRefPtr.h>
|
|
#include <AK/NonnullRefPtrVector.h>
|
|
#include <AK/Types.h>
|
|
#include <Kernel/Bus/PCI/Definitions.h>
|
|
#include <Kernel/Locking/Mutex.h>
|
|
#include <Kernel/Memory/Region.h>
|
|
|
|
namespace Kernel {
|
|
|
|
class NetworkAdapter;
|
|
class NetworkingManagement {
|
|
friend class NetworkAdapter;
|
|
AK_MAKE_ETERNAL
|
|
|
|
public:
|
|
static NetworkingManagement& the();
|
|
static bool is_initialized();
|
|
bool initialize();
|
|
|
|
static ErrorOr<NonnullOwnPtr<KString>> generate_interface_name_from_pci_address(PCI::DeviceIdentifier const&);
|
|
|
|
NetworkingManagement();
|
|
|
|
void for_each(Function<void(NetworkAdapter&)>);
|
|
|
|
RefPtr<NetworkAdapter> from_ipv4_address(const IPv4Address&) const;
|
|
RefPtr<NetworkAdapter> lookup_by_name(const StringView&) const;
|
|
|
|
NonnullRefPtr<NetworkAdapter> loopback_adapter() const;
|
|
|
|
private:
|
|
RefPtr<NetworkAdapter> determine_network_device(PCI::DeviceIdentifier const&) const;
|
|
|
|
NonnullRefPtrVector<NetworkAdapter> m_adapters;
|
|
RefPtr<NetworkAdapter> m_loopback_adapter;
|
|
mutable Mutex m_lock { "Networking" };
|
|
};
|
|
|
|
}
|