arp.h File Reference

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.

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

Definition in file arp.h.

Macro Definition Documentation

◆ ARP_CACHE_SIZE

#define ARP_CACHE_SIZE   8

Definition at line 46 of file arp.h.

◆ ARP_DELAY_FIRST_PROBE_TIME

#define ARP_DELAY_FIRST_PROBE_TIME   5000

Definition at line 95 of file arp.h.

◆ ARP_HARDWARE_TYPE_ETH

#define ARP_HARDWARE_TYPE_ETH   0x0001

Definition at line 101 of file arp.h.

◆ ARP_MAX_PENDING_PACKETS

#define ARP_MAX_PENDING_PACKETS   2

Definition at line 53 of file arp.h.

◆ ARP_MAX_PROBES

#define ARP_MAX_PROBES   2

Definition at line 74 of file arp.h.

◆ ARP_MAX_REQUESTS

#define ARP_MAX_REQUESTS   3

Definition at line 60 of file arp.h.

◆ ARP_PROBE_TIMEOUT

#define ARP_PROBE_TIMEOUT   60000

Definition at line 81 of file arp.h.

◆ ARP_PROTOCOL_TYPE_IPV4

#define ARP_PROTOCOL_TYPE_IPV4   0x0800

Definition at line 103 of file arp.h.

◆ ARP_REACHABLE_TIME

#define ARP_REACHABLE_TIME   60000

Definition at line 88 of file arp.h.

◆ ARP_REQUEST_TIMEOUT

#define ARP_REQUEST_TIMEOUT   1000

Definition at line 67 of file arp.h.

◆ ARP_TICK_INTERVAL

#define ARP_TICK_INTERVAL   200

Definition at line 39 of file arp.h.

Enumeration Type Documentation

◆ ArpOpcode

enum ArpOpcode

ARP opcodes.

Enumerator
ARP_OPCODE_ARP_REQUEST 
ARP_OPCODE_ARP_REPLY 

Definition at line 115 of file arp.h.

◆ ArpState

enum ArpState

ARP cache entry states.

Enumerator
ARP_STATE_NONE 
ARP_STATE_INCOMPLETE 
ARP_STATE_REACHABLE 
ARP_STATE_STALE 
ARP_STATE_DELAY 
ARP_STATE_PROBE 
ARP_STATE_PERMANENT 

Definition at line 126 of file arp.h.

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

◆ __packed_struct

typedef __packed_struct
Initial value:
{
uint16_t hrd

ARP packet.

Definition at line 150 of file arp.h.

◆ ArpPacket

ArpPacket

Definition at line 161 of file arp.h.

◆ arpTickCounter

systime_t arpTickCounter
extern

Definition at line 51 of file arp.c.

◆ hln

uint8_t hln

Definition at line 154 of file arp.h.

◆ op

uint16_t op

Definition at line 156 of file arp.h.

◆ pln

uint8_t pln

Definition at line 155 of file arp.h.

◆ pro

uint16_t pro

Definition at line 153 of file arp.h.

◆ sha

MacAddr sha

Definition at line 157 of file arp.h.

◆ spa

Ipv4Addr spa

Definition at line 158 of file arp.h.

◆ tha

MacAddr tha

Definition at line 159 of file arp.h.

◆ tpa

Ipv4Addr tpa

Definition at line 160 of file arp.h.