/* * Copyright (c) 2018-2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #include #include namespace Kernel { static bool s_loopback_initialized = false; ErrorOr> LoopbackAdapter::try_create() { auto interface_name = TRY(KString::try_create("loop"sv)); return TRY(adopt_nonnull_ref_or_enomem(new (nothrow) LoopbackAdapter(move(interface_name)))); } LoopbackAdapter::LoopbackAdapter(NonnullOwnPtr interface_name) : NetworkAdapter(move(interface_name)) { VERIFY(!s_loopback_initialized); s_loopback_initialized = true; set_mtu(65536); set_mac_address({ 19, 85, 2, 9, 0x55, 0xaa }); } LoopbackAdapter::~LoopbackAdapter() = default; void LoopbackAdapter::send_raw(ReadonlyBytes payload) { dbgln("LoopbackAdapter: Sending {} byte(s) to myself.", payload.size()); did_receive(payload); } }