NetworkAdapter.cpp 956 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #include <Kernel/NetworkAdapter.h>
  2. #include <Kernel/StdLib.h>
  3. #include <Kernel/EthernetFrameHeader.h>
  4. #include <Kernel/kmalloc.h>
  5. NetworkAdapter::NetworkAdapter()
  6. {
  7. }
  8. NetworkAdapter::~NetworkAdapter()
  9. {
  10. }
  11. void NetworkAdapter::send(const MACAddress& destination, const ARPPacket& packet)
  12. {
  13. int size_in_bytes = sizeof(EthernetFrameHeader) + sizeof(ARPPacket) + 4;
  14. auto* eth = (EthernetFrameHeader*)kmalloc(size_in_bytes);
  15. eth->set_source(mac_address());
  16. eth->set_destination(destination);
  17. memcpy(eth->payload(), &packet, sizeof(ARPPacket));
  18. send_raw((byte*)eth, size_in_bytes);
  19. kfree(eth);
  20. }
  21. void NetworkAdapter::did_receive(const byte* data, int length)
  22. {
  23. InterruptDisabler disabler;
  24. m_packet_queue.append(ByteBuffer::copy(data, length));
  25. }
  26. ByteBuffer NetworkAdapter::dequeue_packet()
  27. {
  28. InterruptDisabler disabler;
  29. if (m_packet_queue.is_empty())
  30. return { };
  31. return m_packet_queue.take_first();
  32. }