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)
142 entry = &context->linkChangeCallbacks[i];
150 entry->
param = param;
181 entry = &context->linkChangeCallbacks[i];
185 entry->
param == param)
211 context = interface->netContext;
214 if(interface->linkState)
217 TRACE_INFO(
"Link is up (%s)...\r\n", interface->name);
238 TRACE_INFO(
" Link speed = %" PRIu32
" bps\r\n",
239 interface->linkSpeed);
257 TRACE_INFO(
"Link is down (%s)...\r\n", interface->name);
263 #if (IPV4_SUPPORT == ENABLED)
268 #if (IPV6_SUPPORT == ENABLED)
273 #if (DNS_CLIENT_SUPPORT == ENABLED || MDNS_CLIENT_SUPPORT == ENABLED || \
274 NBNS_CLIENT_SUPPORT == ENABLED)
279 #if (MDNS_RESPONDER_SUPPORT == ENABLED)
284 #if (DNS_SD_RESPONDER_SUPPORT == ENABLED)
295 entry = &context->linkChangeCallbacks[i];
304 entry->
callback(interface, interface->linkState, entry->
param);
313 socket = &context->socketTable[i];
315 #if (TCP_SUPPORT == ENABLED)
323 #if (UDP_SUPPORT == ENABLED)
331 #if (RAW_SOCKET_SUPPORT == ENABLED)
362 entry = &context->timerCallbacks[i];
371 entry->
param = param;
401 entry = &context->timerCallbacks[i];
436 for(i = 0; i < context->numInterfaces; i++)
439 if(context->interfaces[i].configured)
441 nicTick(&context->interfaces[i]);
446 context->nicTickCounter = 0;
449 #if (PPP_SUPPORT == ENABLED)
457 for(i = 0; i < context->numInterfaces; i++)
460 if(context->interfaces[i].configured)
462 pppTick(&context->interfaces[i]);
467 context->pppTickCounter = 0;
471 #if (IPV4_SUPPORT == ENABLED && ETH_SUPPORT == ENABLED)
479 for(i = 0; i < context->numInterfaces; i++)
482 if(context->interfaces[i].configured)
484 arpTick(&context->interfaces[i]);
489 context->arpTickCounter = 0;
493 #if (IPV4_SUPPORT == ENABLED && IPV4_FRAG_SUPPORT == ENABLED)
501 for(i = 0; i < context->numInterfaces; i++)
504 if(context->interfaces[i].configured)
511 context->ipv4FragTickCounter = 0;
515 #if (IPV4_SUPPORT == ENABLED && (IGMP_HOST_SUPPORT == ENABLED || \
516 IGMP_ROUTER_SUPPORT == ENABLED || IGMP_SNOOPING_SUPPORT == ENABLED))
524 for(i = 0; i < context->numInterfaces; i++)
527 if(context->interfaces[i].configured)
534 context->igmpTickCounter = 0;
538 #if (IPV4_SUPPORT == ENABLED && AUTO_IP_SUPPORT == ENABLED)
546 for(i = 0; i < context->numInterfaces; i++)
548 autoIpTick(context->interfaces[i].autoIpContext);
552 context->autoIpTickCounter = 0;
556 #if (IPV4_SUPPORT == ENABLED && DHCP_CLIENT_SUPPORT == ENABLED)
564 for(i = 0; i < context->numInterfaces; i++)
570 context->dhcpClientTickCounter = 0;
574 #if (IPV4_SUPPORT == ENABLED && DHCP_SERVER_SUPPORT == ENABLED)
582 for(i = 0; i < context->numInterfaces; i++)
588 context->dhcpServerTickCounter = 0;
592 #if (IPV4_SUPPORT == ENABLED && NAT_SUPPORT == ENABLED)
602 context->natTickCounter = 0;
606 #if (IPV6_SUPPORT == ENABLED && IPV6_FRAG_SUPPORT == ENABLED)
614 for(i = 0; i < context->numInterfaces; i++)
617 if(context->interfaces[i].configured)
624 context->ipv6FragTickCounter = 0;
628 #if (IPV6_SUPPORT == ENABLED && MLD_NODE_SUPPORT == ENABLED)
636 for(i = 0; i < context->numInterfaces; i++)
639 if(context->interfaces[i].configured)
641 mldTick(&context->interfaces[i]);
646 context->mldTickCounter = 0;
650 #if (IPV6_SUPPORT == ENABLED && NDP_SUPPORT == ENABLED)
658 for(i = 0; i < context->numInterfaces; i++)
661 if(context->interfaces[i].configured)
663 ndpTick(&context->interfaces[i]);
668 context->ndpTickCounter = 0;
672 #if (IPV6_SUPPORT == ENABLED && NDP_ROUTER_ADV_SUPPORT == ENABLED)
680 for(i = 0; i < context->numInterfaces; i++)
686 context->ndpRouterAdvTickCounter = 0;
690 #if (IPV6_SUPPORT == ENABLED && DHCPV6_CLIENT_SUPPORT == ENABLED)
698 for(i = 0; i < context->numInterfaces; i++)
704 context->dhcpv6ClientTickCounter = 0;
708 #if (TCP_SUPPORT == ENABLED)
718 context->tcpTickCounter = 0;
722 #if (DNS_CLIENT_SUPPORT == ENABLED || MDNS_CLIENT_SUPPORT == ENABLED || \
723 NBNS_CLIENT_SUPPORT == ENABLED || LLMNR_CLIENT_SUPPORT == ENABLED)
733 context->dnsTickCounter = 0;
737 #if (MDNS_RESPONDER_SUPPORT == ENABLED)
745 for(i = 0; i < context->numInterfaces; i++)
751 context->mdnsResponderTickCounter = 0;
755 #if (DNS_SD_RESPONDER_SUPPORT == ENABLED)
763 for(i = 0; i < context->numInterfaces; i++)
769 context->dnsSdResponderTickCounter = 0;
777 entry = &context->timerCallbacks[i];
912 state = &context->randState;
926 for(i = 0; i < 10; i++)
928 state->
s[i] = context->randSeed[i];
932 for(i = 0; i < 10; i++)
934 state->
s[12 + i] =
iv[i];
938 for(i = 11; i < 22; i++)
940 state->
s[i] = (state->
s[i + 1] << 5) | (state->
s[i] >> 3);
949 for(i = 0; i < (4 * 288); i++)
971 for(i = 0; i < 32; i++)
977 return value + context->entropy;
1023 for(i = 0; i <
length; i++)
1029 for(j = 0; j < 8; j++)
1034 data[i] += context->entropy;
1081 for(i = 35; i > 0; i--)
1083 state->
s[i] = (state->
s[i] << 1) | (state->
s[i - 1] >> 7);
1086 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
void dnsTick(NetContext *context)
DNS timer handler.
Helper functions for NAT.
void rawSocketUpdateEvents(Socket *socket)
Update event state for raw sockets.
void mdnsResponderTick(MdnsResponderContext *context)
mDNS responder 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.
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.
void tcpTick(NetContext *context)
TCP timer handler.
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.