serenity/Kernel/Net/IP/ARP.h
sdomi a706e81d41 Kernel/Net: Remove useless checks from handle_arp
According to ARP.h, address lengths default to size of their
underlying types (IPv4Address and MACAddress respectively). We never
modify those values, and in reality, ARP never carries anything else.
Hence, those checks resolved to comparing sizeof to itself, which
probably gets optimized out of the compiler anyways.

This change removes the checks that will never fail, plus changes the
function definition to pass adapter directly, matching other handlers.
2024-10-04 12:04:17 +02:00

66 lines
2.1 KiB
C++

/*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Endian.h>
#include <AK/MACAddress.h>
#include <Kernel/Net/EtherType.h>
#include <Kernel/Net/IP/IPv4.h>
namespace Kernel {
struct ARPOperation {
enum : u16 {
Request = 1,
Response = 2,
};
};
struct ARPHardwareType {
enum : u16 {
Ethernet = 1,
};
};
class [[gnu::packed]] ARPPacket {
public:
u16 hardware_type() const { return m_hardware_type; }
void set_hardware_type(u16 w) { m_hardware_type = w; }
u16 protocol_type() const { return m_protocol_type; }
void set_protocol_type(u16 w) { m_protocol_type = w; }
u16 operation() const { return m_operation; }
void set_operation(u16 w) { m_operation = w; }
MACAddress const& sender_hardware_address() const { return m_sender_hardware_address; }
void set_sender_hardware_address(MACAddress const& address) { m_sender_hardware_address = address; }
IPv4Address const& sender_protocol_address() const { return m_sender_protocol_address; }
void set_sender_protocol_address(IPv4Address const& address) { m_sender_protocol_address = address; }
MACAddress const& target_hardware_address() const { return m_target_hardware_address; }
void set_target_hardware_address(MACAddress const& address) { m_target_hardware_address = address; }
IPv4Address const& target_protocol_address() const { return m_target_protocol_address; }
void set_target_protocol_address(IPv4Address const& address) { m_target_protocol_address = address; }
private:
NetworkOrdered<u16> m_hardware_type { ARPHardwareType::Ethernet };
NetworkOrdered<u16> m_protocol_type { EtherType::IPv4 };
u8 m_hardware_address_length { sizeof(MACAddress) };
u8 m_protocol_address_length { sizeof(IPv4Address) };
NetworkOrdered<u16> m_operation;
MACAddress m_sender_hardware_address;
IPv4Address m_sender_protocol_address;
MACAddress m_target_hardware_address;
IPv4Address m_target_protocol_address;
};
static_assert(sizeof(ARPPacket) == 28);
}