NDP (Neighbor Discovery Protocol) More...
#include <limits.h>
#include <string.h>
#include "core/net.h"
#include "ipv6/ipv6.h"
#include "ipv6/ipv6_misc.h"
#include "ipv6/icmpv6.h"
#include "ipv6/ndp.h"
#include "ipv6/ndp_cache.h"
#include "ipv6/ndp_misc.h"
#include "ipv6/slaac.h"
#include "ipv6/slaac_misc.h"
#include "mibs/ip_mib_module.h"
#include "debug.h"
Go to the source code of this file.
Macros | |
#define | TRACE_LEVEL NDP_TRACE_LEVEL |
Functions | |
error_t | ndpInit (NetInterface *interface) |
Neighbor cache initialization. More... | |
error_t | ndpAddStaticEntry (NetInterface *interface, const Ipv6Addr *ipAddr, const MacAddr *macAddr) |
Add a static entry in the Neighbor cache. More... | |
error_t | ndpRemoveStaticEntry (NetInterface *interface, const Ipv6Addr *ipAddr) |
Remove a static entry from the Neighbor cache. More... | |
error_t | ndpResolve (NetInterface *interface, const Ipv6Addr *ipAddr, MacAddr *macAddr) |
Address resolution using Neighbor Discovery protocol. More... | |
error_t | ndpEnqueuePacket (NetInterface *srcInterface, NetInterface *destInterface, const Ipv6Addr *ipAddr, NetBuffer *buffer, size_t offset, NetTxAncillary *ancillary) |
Enqueue an IPv6 packet waiting for address resolution. More... | |
void | ndpTick (NetInterface *interface) |
NDP timer handler. More... | |
void | ndpLinkChangeEvent (NetInterface *interface) |
Callback function for link change event. More... | |
void | ndpProcessRouterAdv (NetInterface *interface, Ipv6PseudoHeader *pseudoHeader, const NetBuffer *buffer, size_t offset, uint8_t hopLimit) |
Router Advertisement message processing. More... | |
void | ndpProcessNeighborSol (NetInterface *interface, Ipv6PseudoHeader *pseudoHeader, const NetBuffer *buffer, size_t offset, uint8_t hopLimit) |
Neighbor Solicitation message processing. More... | |
void | ndpProcessNeighborAdv (NetInterface *interface, Ipv6PseudoHeader *pseudoHeader, const NetBuffer *buffer, size_t offset, uint8_t hopLimit) |
Neighbor Advertisement message processing. More... | |
void | ndpProcessRedirect (NetInterface *interface, Ipv6PseudoHeader *pseudoHeader, const NetBuffer *buffer, size_t offset, uint8_t hopLimit) |
Redirect message processing. More... | |
error_t | ndpSendRouterSol (NetInterface *interface) |
Send a Router Solicitation message. More... | |
error_t | ndpSendNeighborSol (NetInterface *interface, const Ipv6Addr *targetIpAddr, bool_t multicast) |
Send a Neighbor Solicitation message. More... | |
error_t | ndpSendNeighborAdv (NetInterface *interface, const Ipv6Addr *targetIpAddr, const Ipv6Addr *destIpAddr) |
Send a Neighbor Advertisement message. More... | |
error_t | ndpSendRedirect (NetInterface *interface, const Ipv6Addr *targetAddr, const NetBuffer *ipPacket, size_t ipPacketOffset) |
Send a Redirect message. More... | |
void | ndpDumpRouterSolMessage (const NdpRouterSolMessage *message) |
Dump Router Solicitation message for debugging purpose. More... | |
void | ndpDumpRouterAdvMessage (const NdpRouterAdvMessage *message) |
Dump Router Advertisement message for debugging purpose. More... | |
void | ndpDumpNeighborSolMessage (const NdpNeighborSolMessage *message) |
Dump Neighbor Solicitation message for debugging purpose. More... | |
void | ndpDumpNeighborAdvMessage (const NdpNeighborAdvMessage *message) |
Dump Neighbor Advertisement message for debugging purpose. More... | |
void | ndpDumpRedirectMessage (const NdpRedirectMessage *message) |
Dump Redirect message for debugging purpose. More... | |
Variables | |
systime_t | ndpTickCounter |
Detailed Description
NDP (Neighbor Discovery Protocol)
License
SPDX-License-Identifier: GPL-2.0-or-later
Copyright (C) 2010-2023 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
The Neighbor Discovery Protocol is responsible for address autoconfiguration of nodes, discovery of the link-layer addresses of other nodes, duplicate address detection, finding available routers and address prefix discovery. Refer to RFC 4861 for more details
- Version
- 2.2.4
Definition in file ndp.c.
Macro Definition Documentation
◆ TRACE_LEVEL
Function Documentation
◆ ndpAddStaticEntry()
error_t ndpAddStaticEntry | ( | NetInterface * | interface, |
const Ipv6Addr * | ipAddr, | ||
const MacAddr * | macAddr | ||
) |
◆ ndpDumpNeighborAdvMessage()
void ndpDumpNeighborAdvMessage | ( | const NdpNeighborAdvMessage * | message | ) |
◆ ndpDumpNeighborSolMessage()
void ndpDumpNeighborSolMessage | ( | const NdpNeighborSolMessage * | message | ) |
◆ ndpDumpRedirectMessage()
void ndpDumpRedirectMessage | ( | const NdpRedirectMessage * | message | ) |
◆ ndpDumpRouterAdvMessage()
void ndpDumpRouterAdvMessage | ( | const NdpRouterAdvMessage * | message | ) |
◆ ndpDumpRouterSolMessage()
void ndpDumpRouterSolMessage | ( | const NdpRouterSolMessage * | message | ) |
◆ ndpEnqueuePacket()
error_t ndpEnqueuePacket | ( | NetInterface * | srcInterface, |
NetInterface * | destInterface, | ||
const Ipv6Addr * | ipAddr, | ||
NetBuffer * | buffer, | ||
size_t | offset, | ||
NetTxAncillary * | ancillary | ||
) |
Enqueue an IPv6 packet waiting for address resolution.
- Parameters
-
[in] srcInterface Interface from which the packet has been received [in] destInterface Interface on which the packet should be sent [in] ipAddr IPv6 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
◆ ndpInit()
error_t ndpInit | ( | NetInterface * | interface | ) |
◆ ndpLinkChangeEvent()
void ndpLinkChangeEvent | ( | NetInterface * | interface | ) |
◆ ndpProcessNeighborAdv()
void ndpProcessNeighborAdv | ( | NetInterface * | interface, |
Ipv6PseudoHeader * | pseudoHeader, | ||
const NetBuffer * | buffer, | ||
size_t | offset, | ||
uint8_t | hopLimit | ||
) |
Neighbor Advertisement message processing.
- Parameters
-
[in] interface Underlying network interface [in] pseudoHeader IPv6 pseudo header [in] buffer Multi-part buffer containing the Neighbor Advertisement message [in] offset Offset to the first byte of the message [in] hopLimit Hop Limit field from IPv6 header
◆ ndpProcessNeighborSol()
void ndpProcessNeighborSol | ( | NetInterface * | interface, |
Ipv6PseudoHeader * | pseudoHeader, | ||
const NetBuffer * | buffer, | ||
size_t | offset, | ||
uint8_t | hopLimit | ||
) |
Neighbor Solicitation message processing.
- Parameters
-
[in] interface Underlying network interface [in] pseudoHeader IPv6 pseudo header [in] buffer Multi-part buffer containing the Neighbor Solicitation message [in] offset Offset to the first byte of the message [in] hopLimit Hop Limit field from IPv6 header
◆ ndpProcessRedirect()
void ndpProcessRedirect | ( | NetInterface * | interface, |
Ipv6PseudoHeader * | pseudoHeader, | ||
const NetBuffer * | buffer, | ||
size_t | offset, | ||
uint8_t | hopLimit | ||
) |
Redirect message processing.
- Parameters
-
[in] interface Underlying network interface [in] pseudoHeader IPv6 pseudo header [in] buffer Multi-part buffer containing the Redirect message [in] offset Offset to the first byte of the message [in] hopLimit Hop Limit field from IPv6 header
◆ ndpProcessRouterAdv()
void ndpProcessRouterAdv | ( | NetInterface * | interface, |
Ipv6PseudoHeader * | pseudoHeader, | ||
const NetBuffer * | buffer, | ||
size_t | offset, | ||
uint8_t | hopLimit | ||
) |
Router Advertisement message processing.
- Parameters
-
[in] interface Underlying network interface [in] pseudoHeader IPv6 pseudo header [in] buffer Multi-part buffer containing the Router Advertisement message [in] offset Offset to the first byte of the message [in] hopLimit Hop Limit field from IPv6 header
◆ ndpRemoveStaticEntry()
error_t ndpRemoveStaticEntry | ( | NetInterface * | interface, |
const Ipv6Addr * | ipAddr | ||
) |
◆ ndpResolve()
error_t ndpResolve | ( | NetInterface * | interface, |
const Ipv6Addr * | ipAddr, | ||
MacAddr * | macAddr | ||
) |
◆ ndpSendNeighborAdv()
error_t ndpSendNeighborAdv | ( | NetInterface * | interface, |
const Ipv6Addr * | targetIpAddr, | ||
const Ipv6Addr * | destIpAddr | ||
) |
◆ ndpSendNeighborSol()
error_t ndpSendNeighborSol | ( | NetInterface * | interface, |
const Ipv6Addr * | targetIpAddr, | ||
bool_t | multicast | ||
) |
◆ ndpSendRedirect()
error_t ndpSendRedirect | ( | NetInterface * | interface, |
const Ipv6Addr * | targetAddr, | ||
const NetBuffer * | ipPacket, | ||
size_t | ipPacketOffset | ||
) |
Send a Redirect message.
- Parameters
-
[in] interface Underlying network interface [in] targetAddr IPv6 address that is a better first hop to use for the destination address [in] ipPacket Multi-part buffer that holds the IPv6 packet that triggered the sending of the Redirect [in] ipPacketOffset Offset to the first byte of the IPv6 packet
- Returns
- Error code
◆ ndpSendRouterSol()
error_t ndpSendRouterSol | ( | NetInterface * | interface | ) |
◆ ndpTick()
void ndpTick | ( | NetInterface * | interface | ) |