LoopbackAdapter.cpp 959 B

12345678910111213141516171819202122232425262728293031323334353637
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <AK/Singleton.h>
  7. #include <Kernel/Net/LoopbackAdapter.h>
  8. namespace Kernel {
  9. static bool s_loopback_initialized = false;
  10. ErrorOr<NonnullRefPtr<LoopbackAdapter>> LoopbackAdapter::try_create()
  11. {
  12. auto interface_name = TRY(KString::try_create("loop"sv));
  13. return TRY(adopt_nonnull_ref_or_enomem(new (nothrow) LoopbackAdapter(move(interface_name))));
  14. }
  15. LoopbackAdapter::LoopbackAdapter(NonnullOwnPtr<KString> interface_name)
  16. : NetworkAdapter(move(interface_name))
  17. {
  18. VERIFY(!s_loopback_initialized);
  19. s_loopback_initialized = true;
  20. set_mtu(65536);
  21. set_mac_address({ 19, 85, 2, 9, 0x55, 0xaa });
  22. }
  23. LoopbackAdapter::~LoopbackAdapter() = default;
  24. void LoopbackAdapter::send_raw(ReadonlyBytes payload)
  25. {
  26. dbgln("LoopbackAdapter: Sending {} byte(s) to myself.", payload.size());
  27. did_receive(payload);
  28. }
  29. }