ARP (Address Resolution Protocol) More...
#include "core/net.h"
Go to the source code of this file.
Data Structures | |
struct | ArpQueueItem |
ARP queue item. More... | |
struct | ArpCacheEntry |
ARP cache entry. More... | |
Macros | |
#define | ARP_TICK_INTERVAL 200 |
#define | ARP_CACHE_SIZE 8 |
#define | ARP_MAX_PENDING_PACKETS 2 |
#define | ARP_MAX_REQUESTS 3 |
#define | ARP_REQUEST_TIMEOUT 1000 |
#define | ARP_MAX_PROBES 2 |
#define | ARP_PROBE_TIMEOUT 60000 |
#define | ARP_REACHABLE_TIME 60000 |
#define | ARP_DELAY_FIRST_PROBE_TIME 5000 |
#define | ARP_HARDWARE_TYPE_ETH 0x0001 |
#define | ARP_PROTOCOL_TYPE_IPV4 0x0800 |
Enumerations | |
enum | ArpOpcode { ARP_OPCODE_ARP_REQUEST = 1, ARP_OPCODE_ARP_REPLY = 2 } |
ARP opcodes. More... | |
enum | ArpState { ARP_STATE_NONE = 0, ARP_STATE_INCOMPLETE = 1, ARP_STATE_REACHABLE = 2, ARP_STATE_STALE = 3, ARP_STATE_DELAY = 4, ARP_STATE_PROBE = 5, ARP_STATE_PERMANENT = 6 } |
ARP cache entry states. More... | |
Functions | |
error_t | arpInit (NetInterface *interface) |
ARP cache initialization. More... | |
error_t | arpEnable (NetInterface *interface, bool_t enable) |
Enable address resolution using ARP. More... | |
error_t | arpAddStaticEntry (NetInterface *interface, Ipv4Addr ipAddr, const MacAddr *macAddr) |
Add a static entry in the ARP cache. More... | |
error_t | arpRemoveStaticEntry (NetInterface *interface, Ipv4Addr ipAddr) |
Remove a static entry from the ARP cache. More... | |
error_t | arpResolve (NetInterface *interface, Ipv4Addr ipAddr, MacAddr *macAddr) |
Address resolution using ARP protocol. More... | |
error_t | arpEnqueuePacket (NetInterface *interface, Ipv4Addr ipAddr, NetBuffer *buffer, size_t offset, NetTxAncillary *ancillary) |
Enqueue an IPv4 packet waiting for address resolution. More... | |
void | arpTick (NetInterface *interface) |
ARP timer handler. More... | |
void | arpProcessPacket (NetInterface *interface, ArpPacket *arpPacket, size_t length) |
Incoming ARP packet processing. More... | |
void | arpProcessRequest (NetInterface *interface, ArpPacket *arpRequest) |
Incoming ARP request processing. More... | |
void | arpProcessReply (NetInterface *interface, ArpPacket *arpReply) |
Incoming ARP reply processing. More... | |
error_t | arpSendProbe (NetInterface *interface, Ipv4Addr targetIpAddr) |
Send ARP probe. More... | |
error_t | arpSendRequest (NetInterface *interface, Ipv4Addr targetIpAddr, const MacAddr *destMacAddr) |
Send ARP request. More... | |
error_t | arpSendReply (NetInterface *interface, Ipv4Addr senderIpAddr, Ipv4Addr targetIpAddr, const MacAddr *targetMacAddr) |
Send ARP reply. More... | |
void | arpDumpPacket (const ArpPacket *arpPacket) |
Dump ARP packet for debugging purpose. More... | |
Variables | |
typedef | __packed_struct |
ARP packet. More... | |
uint16_t | pro |
uint8_t | hln |
uint8_t | pln |
uint16_t | op |
MacAddr | sha |
Ipv4Addr | spa |
MacAddr | tha |
Ipv4Addr | tpa |
ArpPacket | |
systime_t | arpTickCounter |
Detailed Description
ARP (Address Resolution Protocol)
License
SPDX-License-Identifier: GPL-2.0-or-later
Copyright (C) 2010-2024 Oryx Embedded SARL. All rights reserved.
This file is part of CycloneTCP Open.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- Version
- 2.4.4
Definition in file arp.h.
Macro Definition Documentation
◆ ARP_CACHE_SIZE
◆ ARP_DELAY_FIRST_PROBE_TIME
◆ ARP_HARDWARE_TYPE_ETH
◆ ARP_MAX_PENDING_PACKETS
◆ ARP_MAX_PROBES
◆ ARP_MAX_REQUESTS
◆ ARP_PROBE_TIMEOUT
◆ ARP_PROTOCOL_TYPE_IPV4
◆ ARP_REACHABLE_TIME
◆ ARP_REQUEST_TIMEOUT
◆ ARP_TICK_INTERVAL
Enumeration Type Documentation
◆ ArpOpcode
enum ArpOpcode |
◆ ArpState
enum ArpState |
Function Documentation
◆ arpAddStaticEntry()
error_t arpAddStaticEntry | ( | NetInterface * | interface, |
Ipv4Addr | ipAddr, | ||
const MacAddr * | macAddr | ||
) |
◆ arpDumpPacket()
void arpDumpPacket | ( | const ArpPacket * | arpPacket | ) |
◆ arpEnable()
error_t arpEnable | ( | NetInterface * | interface, |
bool_t | enable | ||
) |
Enable address resolution using ARP.
- Parameters
-
[in] interface Underlying network interface [in] enable This flag specifies whether the host is allowed to send ARP requests and respond to incoming ARP requests. When the flag is set to FALSE, the host relies exclusively on static ARP entries to map IPv4 addresses into MAC addresses and silently drop incoming ARP requests
- Returns
- Error code
◆ arpEnqueuePacket()
error_t arpEnqueuePacket | ( | NetInterface * | interface, |
Ipv4Addr | ipAddr, | ||
NetBuffer * | buffer, | ||
size_t | offset, | ||
NetTxAncillary * | ancillary | ||
) |
Enqueue an IPv4 packet waiting for address resolution.
- Parameters
-
[in] interface Underlying network interface [in] ipAddr IPv4 address of the destination host [in] buffer Multi-part buffer containing the packet to be enqueued [in] offset Offset to the first byte of the packet [in] ancillary Additional options passed to the stack along with the packet
- Returns
- Error code
◆ arpInit()
error_t arpInit | ( | NetInterface * | interface | ) |
◆ arpProcessPacket()
void arpProcessPacket | ( | NetInterface * | interface, |
ArpPacket * | arpPacket, | ||
size_t | length | ||
) |
◆ arpProcessReply()
void arpProcessReply | ( | NetInterface * | interface, |
ArpPacket * | arpReply | ||
) |
◆ arpProcessRequest()
void arpProcessRequest | ( | NetInterface * | interface, |
ArpPacket * | arpRequest | ||
) |
◆ arpRemoveStaticEntry()
error_t arpRemoveStaticEntry | ( | NetInterface * | interface, |
Ipv4Addr | ipAddr | ||
) |
◆ arpResolve()
error_t arpResolve | ( | NetInterface * | interface, |
Ipv4Addr | ipAddr, | ||
MacAddr * | macAddr | ||
) |
◆ arpSendProbe()
error_t arpSendProbe | ( | NetInterface * | interface, |
Ipv4Addr | targetIpAddr | ||
) |
◆ arpSendReply()
error_t arpSendReply | ( | NetInterface * | interface, |
Ipv4Addr | senderIpAddr, | ||
Ipv4Addr | targetIpAddr, | ||
const MacAddr * | targetMacAddr | ||
) |
◆ arpSendRequest()
error_t arpSendRequest | ( | NetInterface * | interface, |
Ipv4Addr | targetIpAddr, | ||
const MacAddr * | destMacAddr | ||
) |
◆ arpTick()
void arpTick | ( | NetInterface * | interface | ) |
Variable Documentation
◆ __packed_struct
typedef __packed_struct |