Adds sitara_depot/free_rtos Original one is on server_gorbunov/SmartForce4.0/sitara_depot
80 lines
1.8 KiB
C++
80 lines
1.8 KiB
C++
/*
|
|
* eth_arp.hpp
|
|
*
|
|
* Created on: 13 ìàð. 2023 ã.
|
|
* Author: sychev
|
|
*/
|
|
|
|
#ifndef FREE_RTOS_ETHERNET_IP_ETH_ARP_HPP_
|
|
#define FREE_RTOS_ETHERNET_IP_ETH_ARP_HPP_
|
|
|
|
#include <map>
|
|
#include <cstdint>
|
|
#include "ethernet_ip/eth_arp_iface.hpp"
|
|
#include "ethernet_ip/eth_stack_iface.hpp"
|
|
#include "handler_store/handler.hpp"
|
|
#include "clock/clock.hpp"
|
|
#include "timer_sw/timer_sw.hpp"
|
|
|
|
|
|
namespace free_rtos {
|
|
|
|
class EthArp : public Handler, public EthArpIface {
|
|
public:
|
|
EthArp(EthStackIface& eth_stack);
|
|
|
|
bool init(TEthMacPorts eth_port_id, uint64_t self_mac, uint32_t self_ip);
|
|
|
|
bool getIpAddr(uint64_t mac, uint32_t& ip);
|
|
|
|
virtual bool getMacAddr(uint32_t ip, uint64_t& mac) override;
|
|
|
|
bool try_request(uint32_t ip);
|
|
|
|
virtual int32_t Process(uint8_t * p_data, uint32_t len) override;
|
|
private:
|
|
bool request(uint32_t ip);
|
|
|
|
void add(uint64_t mac, uint32_t ip);
|
|
|
|
void init_request_pkt(uint64_t self_mac, uint32_t self_ip);
|
|
|
|
friend void clock_timeout(ClockP_Object * obj, void * arg);
|
|
private:
|
|
enum Operations {
|
|
e_oprRequest,
|
|
e_oprReply,
|
|
e_oprTotal
|
|
};
|
|
|
|
struct ArpIpReqData {
|
|
uint64_t mac = 0; /// Ìàê-àäðåñ
|
|
uint32_t attemps = 0; /// Êîëèò÷åñòâî ïîïûòîê çàïðîñà
|
|
TimerSw tmr; /// Òàéìåð çàïðîñîâ
|
|
};
|
|
|
|
static const uint32_t pkt_len = 42;
|
|
const uint16_t arp_opr_be_[e_oprTotal] = {0x0100, 0x0200};
|
|
const uint32_t max_attemps_ = 8;
|
|
|
|
TEthPkt request_pkt_;
|
|
|
|
std::map<uint64_t, uint32_t> table_mac_; /// Êëþ÷ mac, çíà÷åíèå ip
|
|
std::map<uint32_t, ArpIpReqData> table_ip_; /// Êëþ÷ ip,
|
|
|
|
uint64_t self_mac_;
|
|
uint32_t self_ip_;
|
|
|
|
TEthMacPorts eth_port_id_;
|
|
|
|
EthStackIface& eth_stack_;
|
|
|
|
Clock clock_;
|
|
|
|
TimerSw tmrGratuitous_;
|
|
};
|
|
|
|
}
|
|
|
|
#endif /* FREE_RTOS_ETHERNET_IP_ETH_ARP_HPP_ */
|