NDP (Neighbor Discovery Protocol) More...

#include "core/net.h"

Go to the source code of this file.

Data Structures

struct  NdpQueueItem
 NDP queue item. More...
 
struct  NdpNeighborCacheEntry
 Neighbor cache entry. More...
 
struct  NdpDestCacheEntry
 Destination cache entry. More...
 
struct  NdpContext
 NDP context. More...
 

Macros

#define NDP_SUPPORT   ENABLED
 
#define NDP_TICK_INTERVAL   200
 
#define NDP_NEIGHBOR_CACHE_SIZE   8
 
#define NDP_DEST_CACHE_SIZE   8
 
#define NDP_MAX_PENDING_PACKETS   2
 
#define NDP_MAX_RTR_ADVERT_INTERVAL   600000
 
#define NDP_MAX_INITIAL_RTR_ADVERT_INTERVAL   16000
 
#define NDP_MAX_INITIAL_RTR_ADVERTISEMENTS   3
 
#define NDP_MAX_FINAL_RTR_ADVERTISEMENTS   3
 
#define NDP_MIN_DELAY_BETWEEN_RAS   3000
 
#define NDP_MAX_RA_DELAY_TIME   500
 
#define NDP_MIN_RTR_SOLICITATION_DELAY   0
 
#define NDP_MAX_RTR_SOLICITATION_DELAY   1000
 
#define NDP_RTR_SOLICITATION_INTERVAL   4000
 
#define NDP_MAX_RTR_SOLICITATIONS   3
 
#define NDP_MAX_MULTICAST_SOLICIT   3
 
#define NDP_MAX_UNICAST_SOLICIT   3
 
#define NDP_DUP_ADDR_DETECT_TRANSMITS   1
 
#define NDP_MAX_ANYCAST_DELAY_TIME   1000
 
#define NDP_MAX_NEIGHBOR_ADVERTISEMENT   3
 
#define NDP_REACHABLE_TIME   30000
 
#define NDP_RETRANS_TIMER   1000
 
#define NDP_DELAY_FIRST_PROBE_TIME   5000
 
#define NDP_HOP_LIMIT   255
 
#define NDP_INFINITE_LIFETIME   0xFFFFFFFF
 

Typedefs

struct {
   char_t   type
 
   uint32_t   dataStart
 
   uint32_t   dataLength
 
   uint8_t   nameLength
 
   char_t   name []
 
   uint8_t   tokenLen: 4
 
   uint8_t   type: 2
 
   uint8_t   version: 2
 
   uint8_t   code
 
   uint16_t   mid
 
   uint8_t   token []
 
   union {
      uint8_t   b [6]
 
      uint16_t   w [3]
 
   } 
 
   uint16_t   srcPort
 
   uint16_t   destPort
 
   uint32_t   seqNum
 
   uint32_t   ackNum
 
   uint8_t   reserved1: 4
 
   uint8_t   dataOffset: 4
 
   uint8_t   flags: 6
 
   uint8_t   reserved2: 2
 
   uint16_t   window
 
   uint16_t   checksum
 
   uint16_t   urgentPointer
 
   uint8_t   options []
 
   uint16_t   length
 
   uint8_t   data []
 
   uint8_t   op
 
   uint8_t   htype
 
   uint8_t   hlen
 
   uint8_t   hops
 
   uint32_t   xid
 
   uint16_t   secs
 
   uint16_t   flags
 
   Ipv4Addr   ciaddr
 
   Ipv4Addr   yiaddr
 
   Ipv4Addr   siaddr
 
   Ipv4Addr   giaddr
 
   MacAddr   chaddr
 
   uint8_t   unused [10]
 
   uint8_t   sname [64]
 
   uint8_t   file [128]
 
   uint32_t   magicCookie
 
   uint16_t   type
 
   uint16_t   hardwareType
 
   uint32_t   time
 
   MacAddr   linkLayerAddr
 
   uint16_t   id
 
   uint8_t   rd: 1
 
   uint8_t   tc: 1
 
   uint8_t   aa: 1
 
   uint8_t   opcode: 4
 
   uint8_t   qr: 1
 
   uint8_t   rcode: 4
 
   uint8_t   z: 3
 
   uint8_t   ra: 1
 
   uint16_t   qdcount
 
   uint16_t   ancount
 
   uint16_t   nscount
 
   uint16_t   arcount
 
   uint8_t   questions []
 
   uint16_t   controlWord
 
   uint16_t   byteCount
 
   uint8_t   bLength
 
   uint8_t   bDescriptorType
 
   uint16_t   bcdUsb
 
   uint8_t   bDeviceClass
 
   uint8_t   bDeviceSubClass
 
   uint8_t   bDeviceProtocol
 
   uint8_t   bMaxPacketSize0
 
   uint16_t   idVendor
 
   uint16_t   idProduct
 
   uint16_t   bcdDevice
 
   uint8_t   iManufacturer
 
   uint8_t   iProduct
 
   uint8_t   iSerialNumber
 
   uint8_t   bNumConfigurations
 
   uint8_t   maxRespTime
 
   Ipv4Addr   groupAddr
 
   uint16_t   hrd
 
   uint16_t   pro
 
   uint8_t   hln
 
   uint8_t   pln
 
   uint16_t   op
 
   MacAddr   sha
 
   Ipv4Addr   spa
 
   MacAddr   tha
 
   Ipv4Addr   tpa
 
   uint8_t   length
 
   uint8_t   value []
 
   uint16_t   first
 
   uint16_t   last
 
   uint16_t   next
 
   union {
      uint8_t   b [16]
 
      uint16_t   w [8]
 
      uint32_t   dw [4]
 
   } 
 
   uint16_t   maxRespDelay
 
   uint16_t   reserved
 
   Ipv6Addr   multicastAddr
 
   uint32_t   reserved
 
   uint8_t   t: 1
 
   uint8_t   c: 1
 
   union {
      int32_t   integer
 
      uint8_t   octetString [1]
 
      uint8_t   oid [1]
 
      uint8_t   ipAddr [4]
 
      uint32_t   counter32
 
      uint32_t   gauge32
 
      uint32_t   unsigned32
 
      uint32_t   timeTicks
 
      uint64_t   counter64
 
   } 
 
   uint16_t   transactionId
 
   uint16_t   protocolId
 
   uint8_t   unitId
 
   uint8_t   pdu []
 
   uint8_t   retain: 1
 
   uint8_t   qos: 2
 
   uint8_t   dup: 1
 
   union {
      uint8_t   all
 
      struct {
         uint8_t   topicIdType: 2
 
         uint8_t   cleanSession: 1
 
         uint8_t   will: 1
 
         uint8_t   retain: 1
 
         uint8_t   qos: 2
 
         uint8_t   dup: 1
 
      } 
 
   } 
 
   uint8_t   b: 1
 
   uint8_t   identifier
 
   uint8_t   valueSize
 
   Ipv4Addr   srcIpAddr
 
   Ipv4Addr   destIpAddr
 
   Eui64   interfaceId
 
   uint16_t   mru
 
   uint8_t   peerIdLength
 
   uint8_t   peerId []
 
   uint32_t   seconds
 
   uint32_t   fraction
 
   uint16_t   opcode
 
   char_t   filename []
 
   uint8_t   reserved: 3
 
   uint8_t   fin: 1
 
   uint8_t   payloadLen: 7
 
   uint8_t   mask: 1
 
   uint8_t   extPayloadLen []
 
   uint32_t   length
 
   uint8_t   payload []
 
   uint32_t   packetLen
 
   uint8_t   paddingLen
 
   uint8_t   protocolVersionId
 
   uint8_t   bpduType
 
   StpBridgeId   rootId
 
   uint32_t   rootPathCost
 
   StpBridgeId   bridgeId
 
   uint16_t   portId
 
   uint16_t   messageAge
 
   uint16_t   maxAge
 
   uint16_t   helloTime
 
   uint16_t   forwardDelay
 
   uint8_t   version1Length
 
   uint16_t   priority
 
   MacAddr   addr
 
NdpRouterSolMessage
 Router Solicitation message. More...
 
struct {
   char_t   type
 
   uint32_t   dataStart
 
   uint32_t   dataLength
 
   uint8_t   nameLength
 
   uint8_t   length: 4
 
   uint8_t   delta: 4
 
   union {
      uint8_t   b [8]
 
      uint16_t   w [4]
 
      uint32_t   dw [2]
 
   } 
 
   uint8_t   kind
 
   uint8_t   value []
 
   uint8_t   code
 
   uint16_t   type
 
   uint32_t   enterpriseNumber
 
   uint8_t   identifier []
 
   uint16_t   qtype
 
   uint16_t   qclass
 
   uint16_t   statusWord
 
   uint16_t   byteCount
 
   uint8_t   bLength
 
   uint8_t   bDescriptorType
 
   uint16_t   wTotalLength
 
   uint8_t   bNumInterfaces
 
   uint8_t   bConfigurationValue
 
   uint8_t   iConfiguration
 
   uint8_t   bmAttributes
 
   uint8_t   bMaxPower
 
   uint8_t   type
 
   uint16_t   checksum
 
   uint8_t   parameter
 
   uint8_t   unused [3]
 
   uint8_t   data []
 
   uint32_t   parameter
 
   uint8_t   nextHeader
 
   uint8_t   hdrExtLen
 
   uint8_t   options []
 
   uint8_t   curHopLimit
 
   uint8_t   reserved: 2
 
   uint8_t   p: 1
 
   uint8_t   prf: 2
 
   uint8_t   h: 1
 
   uint8_t   o: 1
 
   uint8_t   m: 1
 
   uint16_t   routerLifetime
 
   uint32_t   reachableTime
 
   uint32_t   retransTimer
 
   uint8_t   functionCode
 
   uint16_t   startingAddr
 
   uint16_t   quantityOfCoils
 
   uint16_t   length
 
   uint8_t   msgType
 
   uint16_t   flags
 
   Ipv4Addr   addr
 
   uint8_t   valueSize
 
   uint16_t   protocol
 
   uint32_t   accm
 
   uint8_t   msgLength
 
   uint8_t   message []
 
   uint8_t   mode: 3
 
   uint8_t   vn: 3
 
   uint8_t   li: 2
 
   uint8_t   stratum
 
   uint8_t   poll
 
   int8_t   precision
 
   uint32_t   rootDelay
 
   uint32_t   rootDispersion
 
   uint32_t   referenceId
 
   NtpTimestamp   referenceTimestamp
 
   NtpTimestamp   originateTimestamp
 
   NtpTimestamp   receiveTimestamp
 
   NtpTimestamp   transmitTimestamp
 
   uint16_t   opcode
 
   char_t   filename []
 
   uint16_t   value []
 
   uint16_t   group
 
   uint8_t   keyExchange []
 
   uint32_t   id
 
   uint32_t   dataLen
 
NdpRouterAdvMessage
 Router Advertisement message. More...
 
struct {
   uint32_t   totalSize
 
   ResRootEntry   rootEntry
 
   MacAddr   destAddr
 
   MacAddr   srcAddr
 
   uint16_t   type
 
   uint8_t   data []
 
   uint16_t   hardwareType
 
   MacAddr   linkLayerAddr
 
   uint16_t   rtype
 
   uint16_t   rclass
 
   uint32_t   ttl
 
   uint16_t   rdlength
 
   uint8_t   rdata []
 
   uint8_t   bLength
 
   uint8_t   bDescriptorType
 
   uint8_t   bInterfaceNumber
 
   uint8_t   bAlternateSetting
 
   uint8_t   bNumEndpoints
 
   uint8_t   bInterfaceClass
 
   uint8_t   bInterfaceSubClass
 
   uint8_t   bInterfaceProtocol
 
   uint8_t   iInterface
 
   uint8_t   type
 
   uint8_t   code
 
   uint16_t   checksum
 
   uint32_t   unused
 
   uint8_t   nextHeader
 
   uint8_t   hdrExtLen
 
   uint8_t   options []
 
   uint32_t   reserved
 
   Ipv6Addr   targetAddr
 
   uint8_t   functionCode
 
   uint8_t   byteCount
 
   uint8_t   coilStatus []
 
   uint8_t   prefix
 
   uint16_t   length
 
   uint8_t   msgType
 
   uint8_t   identifier
 
   uint8_t   message []
 
   uint8_t   length
 
   Ipv4Addr   ipAddr
 
   uint16_t   protocol
 
   uint8_t   msgLength
 
   uint8_t   rejectedPacket []
 
   uint32_t   keyId
 
   uint8_t   messageDigest [16]
 
   uint16_t   opcode
 
   uint16_t   block
 
   uint16_t   value []
 
   uint8_t   value []
 
NdpNeighborSolMessage
 Neighbor Solicitation message. More...
 
struct {
   uint8_t   dsap
 
   uint8_t   ssap
 
   uint8_t   control
 
   uint8_t   msgType
 
   uint8_t   transactionId [3]
 
   uint8_t   options []
 
   uint16_t   rtype
 
   uint16_t   rclass
 
   uint32_t   ttl
 
   uint16_t   rdlength
 
   uint16_t   priority
 
   uint16_t   weight
 
   uint16_t   port
 
   uint8_t   target []
 
   uint8_t   bLength
 
   uint8_t   bDescriptorType
 
   uint8_t   bEndpointAddress
 
   uint8_t   bmAttributes
 
   uint16_t   wMaxPacketSize
 
   uint8_t   bInterval
 
   uint8_t   type
 
   uint8_t   code
 
   uint16_t   checksum
 
   uint32_t   unused
 
   uint8_t   data []
 
   uint32_t   mtu
 
   uint8_t   nextHeader
 
   uint8_t   hdrExtLen
 
   uint8_t   routingType
 
   uint8_t   segmentsLeft
 
   uint32_t   reserved
 
   Ipv6Addr   address []
 
   uint8_t   reserved1: 5
 
   uint8_t   o: 1
 
   uint8_t   s: 1
 
   uint8_t   r: 1
 
   uint8_t   reserved2 [3]
 
   Ipv6Addr   targetAddr
 
   uint8_t   functionCode
 
   uint16_t   startingAddr
 
   uint16_t   quantityOfInputs
 
   uint8_t   gwId
 
   uint16_t   duration
 
   uint8_t   identifier
 
   uint16_t   length
 
   uint8_t   message []
 
   uint8_t   length
 
   Ipv4Addr   ipAddr
 
   uint16_t   protocol
 
   uint16_t   rejectedProtocol
 
   uint8_t   rejectedInfo []
 
   uint16_t   opcode
 
   uint16_t   block
 
   uint16_t   version
 
   uint16_t   epoch
 
   DtlsSequenceNumber   seqNum
 
   uint8_t   hash
 
   uint8_t   signature
 
   uint8_t   value []
 
NdpNeighborAdvMessage
 Neighbor Advertisement message. More...
 
struct {
   uint16_t   tci
 
   uint16_t   type
 
   uint8_t   msgType
 
   uint8_t   hopCount
 
   Ipv6Addr   linkAddress
 
   Ipv6Addr   peerAddress
 
   uint8_t   options []
 
   uint8_t   bLength
 
   uint8_t   bDescriptorType
 
   uint16_t   bString []
 
   uint8_t   type
 
   uint8_t   code
 
   uint16_t   checksum
 
   uint8_t   pointer
 
   uint8_t   unused [3]
 
   uint8_t   data []
 
   uint32_t   unused
 
   uint8_t   nextHeader
 
   uint8_t   payloadLen
 
   uint16_t   reserved
 
   uint32_t   securityParamIndex
 
   uint32_t   sequenceNumber
 
   uint8_t   authData []
 
   uint32_t   reserved
 
   Ipv6Addr   targetAddr
 
   Ipv6Addr   destAddr
 
   uint8_t   functionCode
 
   uint8_t   byteCount
 
   uint8_t   inputStatus []
 
   uint8_t   radius
 
   uint8_t   length
 
   Ipv4Addr   ipAddr
 
   uint32_t   magicNumber
 
   uint8_t   identifier
 
   uint16_t   length
 
   uint16_t   opcode
 
   uint16_t   errorCode
 
   char_t   errorMsg []
 
   uint16_t   msgSeq
 
   uint8_t   fragOffset [3]
 
   uint8_t   fragLength [3]
 
   TlsSignHashAlgo   value []
 
   uint8_t   value []
 
NdpRedirectMessage
 Redirect message. More...
 
struct {
   uint16_t   code
 
   uint16_t   length
 
   uint8_t   value []
 
   uint8_t   bFunctionLength
 
   uint8_t   bDescriptorType
 
   uint8_t   bDescriptorSubtype
 
   uint16_t   bcdCdc
 
   uint8_t   type
 
   uint8_t   code
 
   uint16_t   checksum
 
   uint16_t   identifier
 
   uint16_t   sequenceNumber
 
   uint8_t   data []
 
   uint32_t   pointer
 
   uint32_t   securityParamIndex
 
   uint32_t   sequenceNumber
 
   uint8_t   payloadData []
 
   uint8_t   length
 
   uint8_t   functionCode
 
   uint16_t   startingAddr
 
   uint16_t   quantityOfRegs
 
   uint8_t   gwId
 
   uint8_t   gwAdd []
 
   Ipv4Addr   ipAddr
 
   uint8_t   identifier
 
   uint32_t   magicNumber
 
   uint16_t   serverVersion
 
   uint8_t   cookieLength
 
   uint8_t   cookie []
 
NdpOption
 Neighbor Discovery option general format. More...
 
struct {
   uint32_t   iaId
 
   uint32_t   t1
 
   uint32_t   t2
 
   uint8_t   options []
 
   uint8_t   bFunctionLength
 
   uint8_t   bDescriptorType
 
   uint8_t   bDescriptorSubtype
 
   uint8_t   bmCapabilities
 
   uint8_t   bDataInterface
 
   uint8_t   type
 
   uint8_t   code
 
   uint16_t   checksum
 
   uint16_t   identifier
 
   uint16_t   sequenceNumber
 
   uint8_t   data []
 
   uint8_t   length
 
   MacAddr   linkLayerAddr
 
   uint8_t   functionCode
 
   uint8_t   byteCount
 
   uint16_t   regValue []
 
   MqttSnFlags   flags
 
   uint8_t   protocolId
 
   uint16_t   duration
 
   char_t   clientId []
 
   Ipv4Addr   ipAddr
 
   uint16_t   length
 
   uint8_t   value []
 
NdpLinkLayerAddrOption
 Source/Target Link-Layer Address option. More...
 
struct {
   uint32_t   iaId
 
   uint8_t   options []
 
   uint8_t   bFunctionLength
 
   uint8_t   bDescriptorType
 
   uint8_t   bDescriptorSubtype
 
   uint8_t   bmCapabilities
 
   uint8_t   type
 
   uint8_t   length
 
   uint8_t   prefixLength
 
   uint8_t   reserved1: 5
 
   uint8_t   r: 1
 
   uint8_t   a: 1
 
   uint8_t   l: 1
 
   uint32_t   validLifetime
 
   uint32_t   preferredLifetime
 
   uint32_t   reserved2
 
   Ipv6Addr   prefix
 
   uint8_t   functionCode
 
   uint16_t   startingAddr
 
   uint16_t   quantityOfRegs
 
   uint8_t   returnCode
 
   uint16_t   type
 
   uint16_t   length
 
   uint8_t   value []
 
NdpPrefixInfoOption
 Prefix Information option (PIO) More...
 
struct {
   Ipv6Addr   address
 
   uint32_t   preferredLifetime
 
   uint32_t   validLifetime
 
   uint8_t   options []
 
   uint8_t   bFunctionLength
 
   uint8_t   bDescriptorType
 
   uint8_t   bDescriptorSubtype
 
   uint8_t   bMasterInterface
 
   uint8_t   bSlaveInterface0
 
   uint8_t   type
 
   uint8_t   length
 
   uint16_t   reserved1
 
   uint32_t   reserved2
 
   uint8_t   ipPacket []
 
   uint8_t   functionCode
 
   uint8_t   byteCount
 
   uint16_t   regValue []
 
   MqttSnFlags   flags
 
   char_t   willTopic []
 
   uint16_t   length
 
   uint8_t   value []
 
NdpRedirectedHeaderOption
 Redirected Header option (RHO) More...
 
struct {
   uint16_t   requestedOption [1]
 
   UsbConfigDescriptor   configDescriptor
 
   UsbInterfaceDescriptor   communicationInterfaceDescriptor
 
   CdcHeaderDescriptor   cdcHeaderDescriptor
 
   CdcCallManagementDescriptor   cdcCallManagementDescriptor
 
   CdcAcmDescriptor   cdcAcmDescriptor
 
   CdcUnionDescriptor   cdcUnionDescriptor
 
   UsbEndpointDescriptor   notificationEndpointDescriptor
 
   UsbInterfaceDescriptor   dataInterfaceDescriptor
 
   UsbEndpointDescriptor   dataOutEndpointDescriptor
 
   UsbEndpointDescriptor   dataInEndpointDescriptor
 
   uint8_t   type
 
   uint8_t   length
 
   uint16_t   reserved
 
   uint32_t   mtu
 
   uint8_t   functionCode
 
   uint16_t   outputAddr
 
   uint16_t   outputValue
 
   uint16_t   topicId
 
   uint16_t   msgId
 
   char_t   topicName []
 
   uint16_t   value []
 
   uint16_t   algorithm
 
   uint16_t   length
 
   uint8_t   value []
 
NdpMtuOption
 MTU option. More...
 
struct {
   uint8_t   value
 
   uint8_t   type
 
   uint8_t   length
 
   uint8_t   prefixLength
 
   uint8_t   reserved2: 3
 
   uint8_t   prf: 2
 
   uint8_t   reserved1: 3
 
   uint32_t   routeLifetime
 
   Ipv6Addr   prefix
 
   uint8_t   functionCode
 
   uint16_t   outputAddr
 
   uint16_t   outputValue
 
   uint16_t   topicId
 
   uint16_t   msgId
 
   uint8_t   returnCode
 
   uint16_t   length
 
   char_t   hostname []
 
   uint16_t   serverVersion
 
   uint8_t   random [32]
 
   uint8_t   sessionIdLen
 
   uint8_t   sessionId []
 
NdpRouteInfoOption
 Route Information option (RIO) More...
 
struct {
   uint16_t   value
 
   uint8_t   type
 
   uint8_t   length
 
   uint16_t   reserved
 
   uint32_t   lifetime
 
   Ipv6Addr   address []
 
   uint8_t   functionCode
 
   uint16_t   regAddr
 
   uint16_t   regValue
 
   MqttSnFlags   flags
 
   uint16_t   topicId
 
   uint16_t   msgId
 
   uint8_t   data []
 
   uint16_t   length
 
   uint8_t   value []
 
   uint16_t   extensionsLen
 
   uint8_t   extensions []
 
NdpRdnssOption
 Recursive DNS Server option (RDNSS) More...
 
struct {
   uint8_t   protocol
 
   uint8_t   algorithm
 
   uint8_t   rdm
 
   uint8_t   replayDetection [8]
 
   uint8_t   authInfo []
 
   uint8_t   type
 
   uint8_t   length
 
   uint16_t   reserved
 
   uint32_t   lifetime
 
   uint8_t   domainNames []
 
   uint8_t   functionCode
 
   uint16_t   regAddr
 
   uint16_t   regValue
 
   uint16_t   topicId
 
   uint16_t   msgId
 
   uint8_t   returnCode
 
   char_t   value []
 
   uint32_t   ticketLifetime
 
   uint32_t   ticketAgeAdd
 
   uint8_t   ticketNonceLen
 
   uint8_t   ticketNonce []
 
NdpDnsslOption
 DNS Search List option (DNSSL) More...
 
struct {
   Ipv6Addr   serverAddr
 
   uint8_t   type
 
   uint8_t   length
 
   uint8_t   contextLength
 
   uint8_t   cid: 4
 
   uint8_t   c: 1
 
   uint8_t   reserved1: 3
 
   uint16_t   reserved2
 
   uint16_t   validLifetime
 
   Ipv6Addr   contextPrefix
 
   uint8_t   functionCode
 
   uint16_t   startingAddr
 
   uint16_t   quantityOfOutputs
 
   uint8_t   byteCount
 
   uint8_t   outputValue []
 
   uint16_t   msgId
 
   uint16_t   length
 
   uint8_t   value []
 
   uint8_t   requestUpdate
 
NdpContextOption
 6LoWPAN Context option (6CO) More...
 

Enumerations

enum  NdpOptionType {
  NDP_OPT_SOURCE_LINK_LAYER_ADDR = 1, NDP_OPT_TARGET_LINK_LAYER_ADDR = 2, NDP_OPT_PREFIX_INFORMATION = 3, NDP_OPT_REDIRECTED_HEADER = 4,
  NDP_OPT_MTU = 5, NDP_OPT_ROUTE_INFORMATION = 24, NDP_OPT_RECURSIVE_DNS_SERVER = 25, NDP_OPT_DNS_SEARCH_LIST = 31,
  NDP_OPT_6LOWPAN_CONTEXT = 34, NDP_OPT_CAPTIVE_PORTAL = 37, NDP_OPT_ANY = 255
}
 Neighbor Discovery options. More...
 
enum  NdpRouterSelPreference { NDP_ROUTER_SEL_PREFERENCE_MEDIUM = 0, NDP_ROUTER_SEL_PREFERENCE_HIGH = 1, NDP_ROUTER_SEL_PREFERENCE_RESERVED = 2, NDP_ROUTER_SEL_PREFERENCE_LOW = 3 }
 Router selection preferences. More...
 
enum  NdpState {
  NDP_STATE_NONE = 0, NDP_STATE_INCOMPLETE = 1, NDP_STATE_REACHABLE = 2, NDP_STATE_STALE = 3,
  NDP_STATE_DELAY = 4, NDP_STATE_PROBE = 5, NDP_STATE_PERMANENT = 6
}
 Neighbor cache entry states. More...
 

Functions

error_t ndpInit (NetInterface *interface)
 Neighbor cache initialization. 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-2021 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.1.0

Definition in file ndp.h.

Macro Definition Documentation

◆ NDP_DELAY_FIRST_PROBE_TIME

#define NDP_DELAY_FIRST_PROBE_TIME   5000

Definition at line 193 of file ndp.h.

◆ NDP_DEST_CACHE_SIZE

#define NDP_DEST_CACHE_SIZE   8

Definition at line 60 of file ndp.h.

◆ NDP_DUP_ADDR_DETECT_TRANSMITS

#define NDP_DUP_ADDR_DETECT_TRANSMITS   1

Definition at line 158 of file ndp.h.

◆ NDP_HOP_LIMIT

#define NDP_HOP_LIMIT   255

Definition at line 199 of file ndp.h.

◆ NDP_INFINITE_LIFETIME

#define NDP_INFINITE_LIFETIME   0xFFFFFFFF

Definition at line 202 of file ndp.h.

◆ NDP_MAX_ANYCAST_DELAY_TIME

#define NDP_MAX_ANYCAST_DELAY_TIME   1000

Definition at line 165 of file ndp.h.

◆ NDP_MAX_FINAL_RTR_ADVERTISEMENTS

#define NDP_MAX_FINAL_RTR_ADVERTISEMENTS   3

Definition at line 95 of file ndp.h.

◆ NDP_MAX_INITIAL_RTR_ADVERT_INTERVAL

#define NDP_MAX_INITIAL_RTR_ADVERT_INTERVAL   16000

Definition at line 81 of file ndp.h.

◆ NDP_MAX_INITIAL_RTR_ADVERTISEMENTS

#define NDP_MAX_INITIAL_RTR_ADVERTISEMENTS   3

Definition at line 88 of file ndp.h.

◆ NDP_MAX_MULTICAST_SOLICIT

#define NDP_MAX_MULTICAST_SOLICIT   3

Definition at line 144 of file ndp.h.

◆ NDP_MAX_NEIGHBOR_ADVERTISEMENT

#define NDP_MAX_NEIGHBOR_ADVERTISEMENT   3

Definition at line 172 of file ndp.h.

◆ NDP_MAX_PENDING_PACKETS

#define NDP_MAX_PENDING_PACKETS   2

Definition at line 67 of file ndp.h.

◆ NDP_MAX_RA_DELAY_TIME

#define NDP_MAX_RA_DELAY_TIME   500

Definition at line 109 of file ndp.h.

◆ NDP_MAX_RTR_ADVERT_INTERVAL

#define NDP_MAX_RTR_ADVERT_INTERVAL   600000

Definition at line 74 of file ndp.h.

◆ NDP_MAX_RTR_SOLICITATION_DELAY

#define NDP_MAX_RTR_SOLICITATION_DELAY   1000

Definition at line 123 of file ndp.h.

◆ NDP_MAX_RTR_SOLICITATIONS

#define NDP_MAX_RTR_SOLICITATIONS   3

Definition at line 137 of file ndp.h.

◆ NDP_MAX_UNICAST_SOLICIT

#define NDP_MAX_UNICAST_SOLICIT   3

Definition at line 151 of file ndp.h.

◆ NDP_MIN_DELAY_BETWEEN_RAS

#define NDP_MIN_DELAY_BETWEEN_RAS   3000

Definition at line 102 of file ndp.h.

◆ NDP_MIN_RTR_SOLICITATION_DELAY

#define NDP_MIN_RTR_SOLICITATION_DELAY   0

Definition at line 116 of file ndp.h.

◆ NDP_NEIGHBOR_CACHE_SIZE

#define NDP_NEIGHBOR_CACHE_SIZE   8

Definition at line 53 of file ndp.h.

◆ NDP_REACHABLE_TIME

#define NDP_REACHABLE_TIME   30000

Definition at line 179 of file ndp.h.

◆ NDP_RETRANS_TIMER

#define NDP_RETRANS_TIMER   1000

Definition at line 186 of file ndp.h.

◆ NDP_RTR_SOLICITATION_INTERVAL

#define NDP_RTR_SOLICITATION_INTERVAL   4000

Definition at line 130 of file ndp.h.

◆ NDP_SUPPORT

#define NDP_SUPPORT   ENABLED

Definition at line 39 of file ndp.h.

◆ NDP_TICK_INTERVAL

#define NDP_TICK_INTERVAL   200

Definition at line 46 of file ndp.h.

Typedef Documentation

◆ NdpContextOption

typedef { ... } NdpContextOption

6LoWPAN Context option (6CO)

◆ NdpDnsslOption

typedef { ... } NdpDnsslOption

DNS Search List option (DNSSL)

◆ NdpLinkLayerAddrOption

typedef { ... } NdpLinkLayerAddrOption

Source/Target Link-Layer Address option.

◆ NdpMtuOption

typedef { ... } NdpMtuOption

MTU option.

◆ NdpNeighborAdvMessage

typedef { ... } NdpNeighborAdvMessage

Neighbor Advertisement message.

◆ NdpNeighborSolMessage

typedef { ... } NdpNeighborSolMessage

Neighbor Solicitation message.

◆ NdpOption

typedef { ... } NdpOption

Neighbor Discovery option general format.

◆ NdpPrefixInfoOption

typedef { ... } NdpPrefixInfoOption

Prefix Information option (PIO)

◆ NdpRdnssOption

typedef { ... } NdpRdnssOption

Recursive DNS Server option (RDNSS)

◆ NdpRedirectedHeaderOption

typedef { ... } NdpRedirectedHeaderOption

Redirected Header option (RHO)

◆ NdpRedirectMessage

typedef { ... } NdpRedirectMessage

Redirect message.

◆ NdpRouteInfoOption

typedef { ... } NdpRouteInfoOption

Route Information option (RIO)

◆ NdpRouterAdvMessage

typedef { ... } NdpRouterAdvMessage

Router Advertisement message.

◆ NdpRouterSolMessage

typedef { ... } NdpRouterSolMessage

Router Solicitation message.

Enumeration Type Documentation

◆ NdpOptionType

Neighbor Discovery options.

Enumerator
NDP_OPT_SOURCE_LINK_LAYER_ADDR 
NDP_OPT_TARGET_LINK_LAYER_ADDR 
NDP_OPT_PREFIX_INFORMATION 
NDP_OPT_REDIRECTED_HEADER 
NDP_OPT_MTU 
NDP_OPT_ROUTE_INFORMATION 
NDP_OPT_RECURSIVE_DNS_SERVER 
NDP_OPT_DNS_SEARCH_LIST 
NDP_OPT_6LOWPAN_CONTEXT 
NDP_OPT_CAPTIVE_PORTAL 
NDP_OPT_ANY 

Definition at line 214 of file ndp.h.

◆ NdpRouterSelPreference

Router selection preferences.

Enumerator
NDP_ROUTER_SEL_PREFERENCE_MEDIUM 
NDP_ROUTER_SEL_PREFERENCE_HIGH 
NDP_ROUTER_SEL_PREFERENCE_RESERVED 
NDP_ROUTER_SEL_PREFERENCE_LOW 

Definition at line 234 of file ndp.h.

◆ NdpState

enum NdpState

Neighbor cache entry states.

Enumerator
NDP_STATE_NONE 
NDP_STATE_INCOMPLETE 
NDP_STATE_REACHABLE 
NDP_STATE_STALE 
NDP_STATE_DELAY 
NDP_STATE_PROBE 
NDP_STATE_PERMANENT 

Definition at line 247 of file ndp.h.

Function Documentation

◆ ndpDumpNeighborAdvMessage()

void ndpDumpNeighborAdvMessage ( const NdpNeighborAdvMessage message)

Dump Neighbor Advertisement message for debugging purpose.

Parameters
[in]messageNeighbor Advertisement message

Definition at line 2002 of file ndp.c.

◆ ndpDumpNeighborSolMessage()

void ndpDumpNeighborSolMessage ( const NdpNeighborSolMessage message)

Dump Neighbor Solicitation message for debugging purpose.

Parameters
[in]messageNeighbor Solicitation message

Definition at line 1987 of file ndp.c.

◆ ndpDumpRedirectMessage()

void ndpDumpRedirectMessage ( const NdpRedirectMessage message)

Dump Redirect message for debugging purpose.

Parameters
[in]messageRedirect message

Definition at line 2020 of file ndp.c.

◆ ndpDumpRouterAdvMessage()

void ndpDumpRouterAdvMessage ( const NdpRouterAdvMessage message)

Dump Router Advertisement message for debugging purpose.

Parameters
[in]messageRouter Advertisement message

Definition at line 1967 of file ndp.c.

◆ ndpDumpRouterSolMessage()

void ndpDumpRouterSolMessage ( const NdpRouterSolMessage message)

Dump Router Solicitation message for debugging purpose.

Parameters
[in]messageRouter Solicitation message

Definition at line 1953 of file ndp.c.

◆ 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]srcInterfaceInterface from which the packet has been received
[in]destInterfaceInterface on which the packet should be sent
[in]ipAddrIPv6 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 196 of file ndp.c.

◆ ndpInit()

error_t ndpInit ( NetInterface interface)

Neighbor cache initialization.

Parameters
[in]interfaceUnderlying network interface
Returns
Error code

Definition at line 69 of file ndp.c.

◆ ndpLinkChangeEvent()

void ndpLinkChangeEvent ( NetInterface interface)

Callback function for link change event.

Parameters
[in]interfaceUnderlying network interface

Definition at line 375 of file ndp.c.

◆ ndpProcessNeighborAdv()

void ndpProcessNeighborAdv ( NetInterface interface,
Ipv6PseudoHeader pseudoHeader,
const NetBuffer buffer,
size_t  offset,
uint8_t  hopLimit 
)

Neighbor Advertisement message processing.

Parameters
[in]interfaceUnderlying network interface
[in]pseudoHeaderIPv6 pseudo header
[in]bufferMulti-part buffer containing the Neighbor Advertisement message
[in]offsetOffset to the first byte of the message
[in]hopLimitHop Limit field from IPv6 header

Definition at line 928 of file ndp.c.

◆ ndpProcessNeighborSol()

void ndpProcessNeighborSol ( NetInterface interface,
Ipv6PseudoHeader pseudoHeader,
const NetBuffer buffer,
size_t  offset,
uint8_t  hopLimit 
)

Neighbor Solicitation message processing.

Parameters
[in]interfaceUnderlying network interface
[in]pseudoHeaderIPv6 pseudo header
[in]bufferMulti-part buffer containing the Neighbor Solicitation message
[in]offsetOffset to the first byte of the message
[in]hopLimitHop Limit field from IPv6 header

Definition at line 694 of file ndp.c.

◆ ndpProcessRedirect()

void ndpProcessRedirect ( NetInterface interface,
Ipv6PseudoHeader pseudoHeader,
const NetBuffer buffer,
size_t  offset,
uint8_t  hopLimit 
)

Redirect message processing.

Parameters
[in]interfaceUnderlying network interface
[in]pseudoHeaderIPv6 pseudo header
[in]bufferMulti-part buffer containing the Redirect message
[in]offsetOffset to the first byte of the message
[in]hopLimitHop Limit field from IPv6 header

Definition at line 1175 of file ndp.c.

◆ ndpProcessRouterAdv()

void ndpProcessRouterAdv ( NetInterface interface,
Ipv6PseudoHeader pseudoHeader,
const NetBuffer buffer,
size_t  offset,
uint8_t  hopLimit 
)

Router Advertisement message processing.

Parameters
[in]interfaceUnderlying network interface
[in]pseudoHeaderIPv6 pseudo header
[in]bufferMulti-part buffer containing the Router Advertisement message
[in]offsetOffset to the first byte of the message
[in]hopLimitHop Limit field from IPv6 header

Definition at line 412 of file ndp.c.

◆ ndpResolve()

error_t ndpResolve ( NetInterface interface,
const Ipv6Addr ipAddr,
MacAddr macAddr 
)

Address resolution using Neighbor Discovery protocol.

Parameters
[in]interfaceUnderlying network interface
[in]ipAddrIPv6 address
[in]macAddrPhysical address matching the specified IPv6 address
Returns
Error code

Definition at line 101 of file ndp.c.

◆ ndpSendNeighborAdv()

error_t ndpSendNeighborAdv ( NetInterface interface,
const Ipv6Addr targetIpAddr,
const Ipv6Addr destIpAddr 
)

Send a Neighbor Advertisement message.

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

Definition at line 1626 of file ndp.c.

◆ ndpSendNeighborSol()

error_t ndpSendNeighborSol ( NetInterface interface,
const Ipv6Addr targetIpAddr,
bool_t  multicast 
)

Send a Neighbor Solicitation message.

Parameters
[in]interfaceUnderlying network interface
[in]targetIpAddrTarget IPv6 address
[in]multicastUnicast or unicast Neighbor Solicitation message
Returns
Error code

Definition at line 1494 of file ndp.c.

◆ ndpSendRedirect()

error_t ndpSendRedirect ( NetInterface interface,
const Ipv6Addr targetAddr,
const NetBuffer ipPacket,
size_t  ipPacketOffset 
)

Send a Redirect message.

Parameters
[in]interfaceUnderlying network interface
[in]targetAddrIPv6 address that is a better first hop to use for the destination address
[in]ipPacketMulti-part buffer that holds the IPv6 packet that triggered the sending of the Redirect
[in]ipPacketOffsetOffset to the first byte of the IPv6 packet
Returns
Error code

Definition at line 1782 of file ndp.c.

◆ ndpSendRouterSol()

error_t ndpSendRouterSol ( NetInterface interface)

Send a Router Solicitation message.

Parameters
[in]interfaceUnderlying network interface
Returns
Error code

Definition at line 1375 of file ndp.c.

◆ ndpTick()

void ndpTick ( NetInterface interface)

NDP timer handler.

Parameters
[in]interfaceUnderlying network interface

Definition at line 285 of file ndp.c.

Variable Documentation

◆ a

uint8_t a

Definition at line 409 of file ndp.h.

◆ address

Ipv6Addr address[]

Definition at line 479 of file ndp.h.

◆ c

uint8_t c

Definition at line 512 of file ndp.h.

◆ checksum

uint16_t checksum

Definition at line 273 of file ndp.h.

◆ cid

uint8_t cid

Definition at line 511 of file ndp.h.

◆ code

uint8_t code

Definition at line 272 of file ndp.h.

◆ contextLength

uint8_t contextLength

Definition at line 505 of file ndp.h.

◆ contextPrefix

Ipv6Addr contextPrefix

Definition at line 517 of file ndp.h.

◆ curHopLimit

uint8_t curHopLimit

Definition at line 288 of file ndp.h.

◆ destAddr

Ipv6Addr destAddr

Definition at line 363 of file ndp.h.

◆ domainNames

uint8_t domainNames[]

Definition at line 493 of file ndp.h.

◆ h

uint8_t h

Definition at line 300 of file ndp.h.

◆ ipPacket

uint8_t ipPacket[]

Definition at line 429 of file ndp.h.

◆ l

uint8_t l

Definition at line 410 of file ndp.h.

◆ length

uint8_t length

Definition at line 375 of file ndp.h.

◆ lifetime

uint32_t lifetime

Definition at line 478 of file ndp.h.

◆ linkLayerAddr

MacAddr linkLayerAddr

Definition at line 388 of file ndp.h.

◆ m

uint8_t m

Definition at line 302 of file ndp.h.

◆ mtu

uint32_t mtu

Definition at line 442 of file ndp.h.

◆ ndpTickCounter

systime_t ndpTickCounter
extern

Definition at line 60 of file ndp.c.

◆ o

uint8_t o

Definition at line 301 of file ndp.h.

◆ options

uint8_t options[]

Definition at line 275 of file ndp.h.

◆ p

uint8_t p

Definition at line 298 of file ndp.h.

◆ preferredLifetime

uint32_t preferredLifetime

Definition at line 413 of file ndp.h.

◆ prefix

Ipv6Addr prefix

Definition at line 415 of file ndp.h.

◆ prefixLength

uint8_t prefixLength

Definition at line 400 of file ndp.h.

◆ prf

uint8_t prf

Definition at line 299 of file ndp.h.

◆ r

uint8_t r

Definition at line 344 of file ndp.h.

◆ reachableTime

uint32_t reachableTime

Definition at line 305 of file ndp.h.

◆ reserved

uint16_t reserved

Definition at line 274 of file ndp.h.

◆ reserved1

uint8_t reserved1

Definition at line 341 of file ndp.h.

◆ reserved2

uint16_t reserved2

Definition at line 346 of file ndp.h.

◆ retransTimer

uint32_t retransTimer

Definition at line 306 of file ndp.h.

◆ routeLifetime

uint32_t routeLifetime

Definition at line 464 of file ndp.h.

◆ routerLifetime

uint16_t routerLifetime

Definition at line 304 of file ndp.h.

◆ s

uint8_t s

Definition at line 343 of file ndp.h.

◆ targetAddr

Ipv6Addr targetAddr

Definition at line 321 of file ndp.h.

◆ type

uint8_t type

Definition at line 271 of file ndp.h.

◆ validLifetime

uint16_t validLifetime

Definition at line 412 of file ndp.h.

◆ value

uint8_t value[]

Definition at line 376 of file ndp.h.