Go to the documentation of this file.
32 #define TRACE_LEVEL NIC_TRACE_LEVEL
72 #if (UDP_SUPPORT == ENABLED)
80 #if (ETH_SUPPORT == ENABLED)
84 #if (ETH_VLAN_SUPPORT == ENABLED)
88 #if (ETH_VMAN_SUPPORT == ENABLED)
92 #if (ETH_PORT_TAGGING_SUPPORT == ENABLED)
97 #if (ETH_TIMESTAMP_SUPPORT == ENABLED)
107 #if (ETH_SUPPORT == ENABLED)
112 #if (ETH_PORT_TAGGING_SUPPORT == ENABLED)
115 #if (ETH_TIMESTAMP_SUPPORT == ENABLED)
140 entry = &context->linkChangeCallbacks[i];
148 entry->
param = param;
179 entry = &context->linkChangeCallbacks[i];
183 entry->
param == param)
208 if(interface->linkState)
211 TRACE_INFO(
"Link is up (%s)...\r\n", interface->name);
232 TRACE_INFO(
" Link speed = %" PRIu32
" bps\r\n",
233 interface->linkSpeed);
251 TRACE_INFO(
"Link is down (%s)...\r\n", interface->name);
257 #if (IPV4_SUPPORT == ENABLED)
262 #if (IPV6_SUPPORT == ENABLED)
267 #if (DNS_CLIENT_SUPPORT == ENABLED || MDNS_CLIENT_SUPPORT == ENABLED || \
268 NBNS_CLIENT_SUPPORT == ENABLED)
273 #if (MDNS_RESPONDER_SUPPORT == ENABLED)
278 #if (DNS_SD_RESPONDER_SUPPORT == ENABLED)
289 entry = &interface->netContext->linkChangeCallbacks[i];
298 entry->
callback(interface, interface->linkState, entry->
param);
309 #if (TCP_SUPPORT == ENABLED)
317 #if (UDP_SUPPORT == ENABLED)
325 #if (RAW_SOCKET_SUPPORT == ENABLED)
356 entry = &context->timerCallbacks[i];
365 entry->
param = param;
395 entry = &context->timerCallbacks[i];
430 for(i = 0; i < context->numInterfaces; i++)
433 if(context->interfaces[i].configured)
435 nicTick(&context->interfaces[i]);
440 context->nicTickCounter = 0;
443 #if (PPP_SUPPORT == ENABLED)
451 for(i = 0; i < context->numInterfaces; i++)
454 if(context->interfaces[i].configured)
456 pppTick(&context->interfaces[i]);
461 context->pppTickCounter = 0;
465 #if (IPV4_SUPPORT == ENABLED && ETH_SUPPORT == ENABLED)
473 for(i = 0; i < context->numInterfaces; i++)
476 if(context->interfaces[i].configured)
478 arpTick(&context->interfaces[i]);
483 context->arpTickCounter = 0;
487 #if (IPV4_SUPPORT == ENABLED && IPV4_FRAG_SUPPORT == ENABLED)
495 for(i = 0; i < context->numInterfaces; i++)
498 if(context->interfaces[i].configured)
505 context->ipv4FragTickCounter = 0;
509 #if (IPV4_SUPPORT == ENABLED && (IGMP_HOST_SUPPORT == ENABLED || \
510 IGMP_ROUTER_SUPPORT == ENABLED || IGMP_SNOOPING_SUPPORT == ENABLED))
518 for(i = 0; i < context->numInterfaces; i++)
521 if(context->interfaces[i].configured)
528 context->igmpTickCounter = 0;
532 #if (IPV4_SUPPORT == ENABLED && AUTO_IP_SUPPORT == ENABLED)
540 for(i = 0; i < context->numInterfaces; i++)
542 autoIpTick(context->interfaces[i].autoIpContext);
546 context->autoIpTickCounter = 0;
550 #if (IPV4_SUPPORT == ENABLED && DHCP_CLIENT_SUPPORT == ENABLED)
558 for(i = 0; i < context->numInterfaces; i++)
564 context->dhcpClientTickCounter = 0;
568 #if (IPV4_SUPPORT == ENABLED && DHCP_SERVER_SUPPORT == ENABLED)
576 for(i = 0; i < context->numInterfaces; i++)
582 context->dhcpServerTickCounter = 0;
586 #if (IPV4_SUPPORT == ENABLED && NAT_SUPPORT == ENABLED)
596 context->natTickCounter = 0;
600 #if (IPV6_SUPPORT == ENABLED && IPV6_FRAG_SUPPORT == ENABLED)
608 for(i = 0; i < context->numInterfaces; i++)
611 if(context->interfaces[i].configured)
618 context->ipv6FragTickCounter = 0;
622 #if (IPV6_SUPPORT == ENABLED && MLD_NODE_SUPPORT == ENABLED)
630 for(i = 0; i < context->numInterfaces; i++)
633 if(context->interfaces[i].configured)
635 mldTick(&context->interfaces[i]);
640 context->mldTickCounter = 0;
644 #if (IPV6_SUPPORT == ENABLED && NDP_SUPPORT == ENABLED)
652 for(i = 0; i < context->numInterfaces; i++)
655 if(context->interfaces[i].configured)
657 ndpTick(&context->interfaces[i]);
662 context->ndpTickCounter = 0;
666 #if (IPV6_SUPPORT == ENABLED && NDP_ROUTER_ADV_SUPPORT == ENABLED)
674 for(i = 0; i < context->numInterfaces; i++)
680 context->ndpRouterAdvTickCounter = 0;
684 #if (IPV6_SUPPORT == ENABLED && DHCPV6_CLIENT_SUPPORT == ENABLED)
692 for(i = 0; i < context->numInterfaces; i++)
698 context->dhcpv6ClientTickCounter = 0;
702 #if (TCP_SUPPORT == ENABLED)
712 context->tcpTickCounter = 0;
716 #if (DNS_CLIENT_SUPPORT == ENABLED || MDNS_CLIENT_SUPPORT == ENABLED || \
717 NBNS_CLIENT_SUPPORT == ENABLED || LLMNR_CLIENT_SUPPORT == ENABLED)
727 context->dnsTickCounter = 0;
731 #if (MDNS_RESPONDER_SUPPORT == ENABLED)
739 for(i = 0; i < context->numInterfaces; i++)
745 context->mdnsResponderTickCounter = 0;
749 #if (DNS_SD_RESPONDER_SUPPORT == ENABLED)
757 for(i = 0; i < context->numInterfaces; i++)
763 context->dnsSdResponderTickCounter = 0;
771 entry = &context->timerCallbacks[i];
906 state = &context->randState;
920 for(i = 0; i < 10; i++)
922 state->
s[i] = context->randSeed[i];
926 for(i = 0; i < 10; i++)
928 state->
s[12 + i] =
iv[i];
932 for(i = 11; i < 22; i++)
934 state->
s[i] = (state->
s[i + 1] << 5) | (state->
s[i] >> 3);
943 for(i = 0; i < (4 * 288); i++)
965 for(i = 0; i < 32; i++)
971 return value + context->entropy;
1017 for(i = 0; i <
length; i++)
1023 for(j = 0; j < 8; j++)
1028 data[i] += context->entropy;
1075 for(i = 35; i > 0; i--)
1077 state->
s[i] = (state->
s[i] << 1) | (state->
s[i - 1] >> 7);
1080 state->
s[0] = state->
s[0] << 1;
IPv6 (Internet Protocol Version 6)
NetTimerCallback callback
void netStartTimer(NetTimer *timer, systime_t interval)
Start timer.
void ipv6FragTick(NetInterface *interface)
Fragment reassembly timeout handler.
void ipv4FragTick(NetInterface *interface)
Fragment reassembly timeout handler.
const NetTxAncillary NET_DEFAULT_TX_ANCILLARY
bool_t netTimerRunning(NetTimer *timer)
Check whether the timer is running.
error_t netDetachTimerCallback(NetContext *context, NetTimerCallback callback, void *param)
Unregister timer callback.
systime_t netGetRemainingTime(NetTimer *timer)
Get the remaining value of the running timer.
#define NET_RAND_STATE_SET_BIT(s, n, v)
void udpUpdateEvents(Socket *socket)
Update UDP related events.
void ndpTick(NetInterface *interface)
NDP timer handler.
error_t netDetachLinkChangeCallback(NetContext *context, NetInterface *interface, NetLinkChangeCallback callback, void *param)
Unregister link change callback.
uint32_t netGenerateRand(NetContext *context)
Generate a random 32-bit value.
#define DNS_TICK_INTERVAL
#define IPV4_FRAG_TICK_INTERVAL
void ipv4LinkChangeEvent(NetInterface *interface)
Callback function for link change event.
void ndpRouterAdvTick(NdpRouterAdvContext *context)
RA service timer handler.
#define ARP_TICK_INTERVAL
#define NET_TICK_INTERVAL
void mldTick(NetInterface *interface)
MLD node timer handler.
void pppTick(NetInterface *interface)
PPP timer handler.
Helper functions for DHCPv6 client.
void dnsFlushCache(NetInterface *interface)
Flush DNS cache.
Helper functions for DHCP client.
void arpTick(NetInterface *interface)
ARP timer handler.
Pseudo-random number generator state.
Helper functions for DHCP server.
#define NET_MAX_LINK_CHANGE_CALLBACKS
void netInitRand(NetContext *context)
Initialize random number generator.
Definitions common to mDNS client and mDNS responder.
void dnsSdResponderTick(DnsSdResponderContext *context)
DNS-SD responder timer handler.
void(* NetLinkChangeCallback)(NetInterface *interface, bool_t linkState, void *param)
Link change callback.
uint32_t netGenerateRandBit(NetRandState *state)
Generate one random bit.
Helper functions for TCP.
#define IPV6_FRAG_TICK_INTERVAL
void dhcpv6ClientTick(Dhcpv6ClientContext *context)
DHCPv6 client timer handler.
#define eui64CopyAddr(destEui64Addr, srcEui64Addr)
void netStopTimer(NetTimer *timer)
Stop timer.
Definitions common to NBNS client and NBNS responder.
DNS-SD responder (DNS-Based Service Discovery)
int_t socket(int_t family, int_t type, int_t protocol)
Create a socket that is bound to a specific transport service provider.
NBNS client (NetBIOS Name Service)
#define IGMP_TICK_INTERVAL
const NetRxAncillary NET_DEFAULT_RX_ANCILLARY
error_t netAttachTimerCallback(NetContext *context, systime_t period, NetTimerCallback callback, void *param)
Register timer callback.
void netTick(NetContext *context)
Manage TCP/IP timers.
#define DHCP_SERVER_TICK_INTERVAL
uint32_t netGenerateRandRange(NetContext *context, uint32_t min, uint32_t max)
Generate a random value in the specified range.
#define NET_RAND_GET_BIT(s, n)
#define NAT_TICK_INTERVAL
mDNS client (Multicast DNS)
void tcpUpdateEvents(Socket *socket)
Update TCP related events.
#define NDP_TICK_INTERVAL
void natTick(NatContext *context)
NAT timer handler.
void netProcessLinkChange(NetInterface *interface)
Process link state change event.
#define TCP_TICK_INTERVAL
Socket socketTable[SOCKET_MAX_COUNT]
Helper functions for NAT.
void rawSocketUpdateEvents(Socket *socket)
Update event state for raw sockets.
void mdnsResponderTick(MdnsResponderContext *context)
mDNS responder timer handler
void dnsTick(void)
DNS timer handler.
NDP (Neighbor Discovery Protocol)
DNS client (Domain Name System)
uint32_t systime_t
System time.
#define NET_MAX_TIMER_CALLBACKS
MLD node (Multicast Listener Discovery for IPv6)
LLMNR client (Link-Local Multicast Name Resolution)
#define MDNS_RESPONDER_TICK_INTERVAL
NetLinkChangeCallback callback
#define NIC_TICK_INTERVAL
void mdnsResponderLinkChangeEvent(MdnsResponderContext *context)
Callback function for link change event.
#define NDP_ROUTER_ADV_TICK_INTERVAL
#define AUTO_IP_TICK_INTERVAL
#define NET_IF_STATS_SET_TIME_TICKS(name, value)
Link change callback entry.
#define DHCP_CLIENT_TICK_INTERVAL
void netGenerateRandData(NetContext *context, uint8_t *data, size_t length)
Get a string of random data.
#define MLD_TICK_INTERVAL
#define DHCPV6_CLIENT_TICK_INTERVAL
#define PPP_TICK_INTERVAL
#define osGetSystemTime64()
void autoIpTick(AutoIpContext *context)
Auto-IP timer handler.
void tcpTick(void)
TCP timer handler.
Helper functions for Auto-IP.
LLMNR responder (Link-Local Multicast Name Resolution)
void dhcpClientTick(DhcpClientContext *context)
DHCP client timer handler.
error_t netAttachLinkChangeCallback(NetContext *context, NetInterface *interface, NetLinkChangeCallback callback, void *param)
Register link change callback.
IPv4 (Internet Protocol Version 4)
void ipv6LinkChangeEvent(NetInterface *interface)
Callback function for link change event.
void nicTick(NetInterface *interface)
Network controller timer handler.
void igmpTick(NetInterface *interface)
IGMP timer handler.
Helper functions for router advertisement service.
#define osMemset(p, value, length)
bool_t netTimerExpired(NetTimer *timer)
Check whether the timer has expired.
ARP (Address Resolution Protocol)
#define DNS_SD_RESPONDER_TICK_INTERVAL
Helper functions for TCP/IP stack.
void dnsSdResponderLinkChangeEvent(DnsSdResponderContext *context)
Callback function for link change event.
void(* NetTimerCallback)(void *param)
Timer callback.
NBNS responder (NetBIOS Name Service)
mDNS responder (Multicast DNS)
void dhcpServerTick(DhcpServerContext *context)
DHCP server timer handler.
systime_t osGetSystemTime(void)
Retrieve system time.