arp.c File Reference

ARP (Address Resolution Protocol) More...

#include "core/net.h"
#include "core/ethernet.h"
#include "ipv4/arp.h"
#include "ipv4/arp_cache.h"
#include "ipv4/ipv4_misc.h"
#include "debug.h"

Go to the source code of this file.

Macros

#define TRACE_LEVEL   ARP_TRACE_LEVEL
 

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

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.

Description

Address Resolution Protocol is used to determine the hardware address of a specific host when only its IPv4 address is known. Refer to RFC 826

Author
Oryx Embedded SARL (www.oryx-embedded.com)
Version
2.4.0

Definition in file arp.c.

Macro Definition Documentation

◆ TRACE_LEVEL

#define TRACE_LEVEL   ARP_TRACE_LEVEL

Definition at line 37 of file arp.c.

Function Documentation

◆ arpAddStaticEntry()

error_t arpAddStaticEntry ( NetInterface interface,
Ipv4Addr  ipAddr,
const MacAddr macAddr 
)

Add a static entry in the ARP cache.

Parameters
[in]interfaceUnderlying network interface
[in]ipAddrIPv4 address
[in]macAddrMAC address
Returns
Error code

Definition at line 117 of file arp.c.

◆ arpDumpPacket()

void arpDumpPacket ( const ArpPacket arpPacket)

Dump ARP packet for debugging purpose.

Parameters
[in]arpPacketARP header

Definition at line 1004 of file arp.c.

◆ arpEnable()

error_t arpEnable ( NetInterface interface,
bool_t  enable 
)

Enable address resolution using ARP.

Parameters
[in]interfaceUnderlying network interface
[in]enableThis 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

Definition at line 83 of file arp.c.

◆ 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]interfaceUnderlying network interface
[in]ipAddrIPv4 address of the destination host
[in]bufferMulti-part buffer containing the packet to be enqueued
[in]offsetOffset to the first byte of the packet
[in]ancillaryAdditional options passed to the stack along with the packet
Returns
Error code

Definition at line 333 of file arp.c.

◆ arpInit()

error_t arpInit ( NetInterface interface)

ARP cache initialization.

Parameters
[in]interfaceUnderlying network interface
Returns
Error code

Definition at line 60 of file arp.c.

◆ arpProcessPacket()

void arpProcessPacket ( NetInterface interface,
ArpPacket arpPacket,
size_t  length 
)

Incoming ARP packet processing.

Parameters
[in]interfaceUnderlying network interface
[in]arpPacketIncoming ARP packet
[in]lengthPacket length

Definition at line 546 of file arp.c.

◆ arpProcessReply()

void arpProcessReply ( NetInterface interface,
ArpPacket arpReply 
)

Incoming ARP reply processing.

Parameters
[in]interfaceUnderlying network interface
[in]arpReplyIncoming ARP reply

Definition at line 735 of file arp.c.

◆ arpProcessRequest()

void arpProcessRequest ( NetInterface interface,
ArpPacket arpRequest 
)

Incoming ARP request processing.

Parameters
[in]interfaceUnderlying network interface
[in]arpRequestIncoming ARP request

Definition at line 665 of file arp.c.

◆ arpRemoveStaticEntry()

error_t arpRemoveStaticEntry ( NetInterface interface,
Ipv4Addr  ipAddr 
)

Remove a static entry from the ARP cache.

Parameters
[in]interfaceUnderlying network interface
[in]ipAddrIPv4 address
Returns
Error code

Definition at line 190 of file arp.c.

◆ arpResolve()

error_t arpResolve ( NetInterface interface,
Ipv4Addr  ipAddr,
MacAddr macAddr 
)

Address resolution using ARP protocol.

Parameters
[in]interfaceUnderlying network interface
[in]ipAddrIPv4 address
[in]macAddrPhysical address matching the specified IPv4 address
Returns
Error code

Definition at line 235 of file arp.c.

◆ arpSendProbe()

error_t arpSendProbe ( NetInterface interface,
Ipv4Addr  targetIpAddr 
)

Send ARP probe.

Parameters
[in]interfaceUnderlying network interface
[in]targetIpAddrTarget IPv4 address
Returns
Error code

Definition at line 817 of file arp.c.

◆ arpSendReply()

error_t arpSendReply ( NetInterface interface,
Ipv4Addr  senderIpAddr,
Ipv4Addr  targetIpAddr,
const MacAddr targetMacAddr 
)

Send ARP reply.

Parameters
[in]interfaceUnderlying network interface
[in]senderIpAddrSender Ipv4 address
[in]targetIpAddrTarget IPv4 address
[in]targetMacAddrTarget MAC address
Returns
Error code

Definition at line 946 of file arp.c.

◆ arpSendRequest()

error_t arpSendRequest ( NetInterface interface,
Ipv4Addr  targetIpAddr,
const MacAddr destMacAddr 
)

Send ARP request.

Parameters
[in]interfaceUnderlying network interface
[in]targetIpAddrTarget IPv4 address
[in]destMacAddrDestination MAC address
Returns
Error code

Definition at line 877 of file arp.c.

◆ arpTick()

void arpTick ( NetInterface interface)

ARP timer handler.

This routine must be periodically called by the TCP/IP stack to manage ARP cache

Parameters
[in]interfaceUnderlying network interface

Definition at line 421 of file arp.c.

Variable Documentation

◆ arpTickCounter

systime_t arpTickCounter

Definition at line 51 of file arp.c.