Go to the documentation of this file.
32 #define TRACE_LEVEL NIC_TRACE_LEVEL
70 #if (defined(WEB_SOCKET_SUPPORT) && WEB_SOCKET_SUPPORT == ENABLED)
178 interface->index = i;
182 #if (ETH_SUPPORT == ENABLED)
184 interface->phyAddr = UINT8_MAX;
186 #if (TCP_SUPPORT == ENABLED)
198 #if (defined(WEB_SOCKET_SUPPORT) && WEB_SOCKET_SUPPORT == ENABLED)
203 #if (IPV4_SUPPORT == ENABLED && IPV4_ROUTING_SUPPORT == ENABLED)
211 #if (IPV6_SUPPORT == ENABLED && IPV6_ROUTING_SUPPORT == ENABLED)
219 #if (UDP_SUPPORT == ENABLED)
227 #if (TCP_SUPPORT == ENABLED)
235 #if (DNS_CLIENT_SUPPORT == ENABLED || MDNS_CLIENT_SUPPORT == ENABLED || \
236 NBNS_CLIENT_SUPPORT == ENABLED)
247 #if (PPP_SUPPORT == ENABLED)
250 #if (IPV4_SUPPORT == ENABLED && ETH_SUPPORT == ENABLED)
253 #if (IPV4_SUPPORT == ENABLED && IPV4_FRAG_SUPPORT == ENABLED)
256 #if (IPV4_SUPPORT == ENABLED && (IGMP_HOST_SUPPORT == ENABLED || \
257 IGMP_ROUTER_SUPPORT == ENABLED || IGMP_SNOOPING_SUPPORT == ENABLED))
260 #if (IPV4_SUPPORT == ENABLED && AUTO_IP_SUPPORT == ENABLED)
263 #if (IPV4_SUPPORT == ENABLED && DHCP_CLIENT_SUPPORT == ENABLED)
266 #if (IPV4_SUPPORT == ENABLED && DHCP_SERVER_SUPPORT == ENABLED)
269 #if (IPV4_SUPPORT == ENABLED && NAT_SUPPORT == ENABLED)
272 #if (IPV6_SUPPORT == ENABLED && IPV6_FRAG_SUPPORT == ENABLED)
275 #if (IPV6_SUPPORT == ENABLED && MLD_NODE_SUPPORT == ENABLED)
278 #if (IPV6_SUPPORT == ENABLED && NDP_SUPPORT == ENABLED)
281 #if (IPV6_SUPPORT == ENABLED && NDP_ROUTER_ADV_SUPPORT == ENABLED)
284 #if (IPV6_SUPPORT == ENABLED && DHCPV6_CLIENT_SUPPORT == ENABLED)
287 #if (TCP_SUPPORT == ENABLED)
290 #if (DNS_CLIENT_SUPPORT == ENABLED || MDNS_CLIENT_SUPPORT == ENABLED || \
291 NBNS_CLIENT_SUPPORT == ENABLED)
294 #if (MDNS_RESPONDER_SUPPORT == ENABLED)
297 #if (DNS_SD_RESPONDER_SUPPORT == ENABLED)
322 #if (NET_RTOS_SUPPORT == DISABLED)
345 if(seed == NULL ||
length == 0)
487 #if (ETH_SUPPORT == ENABLED)
489 if(interface == NULL || macAddr == NULL)
496 interface->macAddr = *macAddr;
522 #if (ETH_SUPPORT == ENABLED)
526 if(interface == NULL || macAddr == NULL)
536 *macAddr = logicalInterface->macAddr;
560 if(interface == NULL || eui64 == NULL)
566 interface->eui64 = *eui64;
587 if(interface == NULL || eui64 == NULL)
597 *eui64 = logicalInterface->eui64;
617 if(interface == NULL)
642 if(interface == NULL ||
name == NULL)
671 if(interface == NULL ||
name == NULL)
699 #if (ETH_VLAN_SUPPORT == ENABLED)
701 if(interface == NULL)
711 interface->vlanId = vlanId;
733 #if (ETH_VMAN_SUPPORT == ENABLED)
735 if(interface == NULL)
745 interface->vmanId = vmanId;
769 #if (ETH_VIRTUAL_IF_SUPPORT == ENABLED || ETH_VLAN_SUPPORT == ENABLED || \
770 ETH_PORT_TAGGING_SUPPORT == ENABLED)
772 if(interface == NULL)
778 interface->parent = physicalInterface;
801 if(interface == NULL || driver == NULL)
807 interface->nicDriver = driver;
825 #if (ETH_SUPPORT == ENABLED)
827 if(interface == NULL || driver == NULL)
833 interface->phyDriver = driver;
855 #if (ETH_SUPPORT == ENABLED)
857 if(interface == NULL)
867 interface->phyAddr = phyAddr;
889 #if (ETH_SUPPORT == ENABLED)
891 if(interface == NULL || driver == NULL)
897 interface->switchDriver = driver;
919 #if (ETH_PORT_TAGGING_SUPPORT == ENABLED)
921 if(interface == NULL)
927 interface->port =
port;
949 #if (ETH_SUPPORT == ENABLED)
951 if(interface == NULL || driver == NULL)
957 interface->smiDriver = driver;
980 if(interface == NULL || driver == NULL)
986 interface->spiDriver = driver;
1005 if(interface == NULL || driver == NULL)
1011 interface->uartDriver = driver;
1030 if(interface == NULL || driver == NULL)
1036 interface->extIntDriver = driver;
1055 if(interface == NULL)
1062 if(linkState != interface->linkState)
1065 interface->linkState = linkState;
1089 if(interface != NULL)
1094 linkState = interface->linkState;
1120 if(interface != NULL)
1125 linkSpeed = interface->linkSpeed;
1151 if(interface != NULL)
1156 duplexMode = interface->duplexMode;
1181 if(interface == NULL)
1184 #if (ETH_SUPPORT == ENABLED)
1188 interface->promiscuous = enable;
1209 if(interface == NULL)
1216 if(interface->nicDriver != NULL)
1217 interface->nicDriver->disableIrq(interface);
1232 if(interface->nicDriver != NULL)
1235 error = interface->nicDriver->init(interface);
1242 #if (ETH_VIRTUAL_IF_SUPPORT == ENABLED || ETH_PORT_TAGGING_SUPPORT == ENABLED)
1249 if(physicalInterface != interface)
1265 #if (ETH_SUPPORT == ENABLED)
1273 #if (IPV4_SUPPORT == ENABLED)
1280 #if (ETH_SUPPORT == ENABLED)
1288 #if (IPV4_SUPPORT == ENABLED && (IGMP_HOST_SUPPORT == ENABLED || \
1289 IGMP_ROUTER_SUPPORT == ENABLED || IGMP_SNOOPING_SUPPORT == ENABLED))
1297 #if (NBNS_CLIENT_SUPPORT == ENABLED || NBNS_RESPONDER_SUPPORT == ENABLED)
1306 #if (IPV6_SUPPORT == ENABLED)
1313 #if (IPV6_SUPPORT == ENABLED && NDP_SUPPORT == ENABLED)
1321 #if (IPV6_SUPPORT == ENABLED && MLD_NODE_SUPPORT == ENABLED)
1330 #if (MDNS_CLIENT_SUPPORT == ENABLED || MDNS_RESPONDER_SUPPORT == ENABLED)
1338 #if (LLMNR_RESPONDER_SUPPORT == ENABLED)
1356 interface->configured =
TRUE;
1362 if(interface->nicDriver != NULL)
1363 interface->nicDriver->enableIrq(interface);
1391 if(interface == NULL)
1400 #if (ETH_SUPPORT == ENABLED)
1402 if(!interface->configured)
1410 if(interface != physicalInterface)
1422 #if (ETH_PORT_TAGGING_SUPPORT == ENABLED)
1424 if(interface->switchDriver != NULL &&
1425 interface->switchDriver->init != NULL)
1428 error = interface->switchDriver->init(interface);
1442 interface->configured =
TRUE;
1448 if(interface->nicDriver != NULL)
1449 interface->nicDriver->enableIrq(interface);
1471 if(interface == NULL)
1481 if(interface->configured)
1484 interface->linkState =
FALSE;
1489 if(interface->nicDriver != NULL)
1490 interface->nicDriver->disableIrq(interface);
1493 interface->configured =
FALSE;
1496 if(interface != physicalInterface)
1498 #if (ETH_SUPPORT == ENABLED)
1541 #if (NET_RTOS_SUPPORT == ENABLED)
1558 if(interface->configured)
1561 if(interface->nicDriver != NULL)
1563 interface->nicDriver->enableIrq(interface);
1605 if(interface->nicEvent)
1608 interface->nicEvent =
FALSE;
1611 if(interface->nicDriver != NULL)
1614 interface->nicDriver->disableIrq(interface);
1616 interface->nicDriver->eventHandler(interface);
1618 interface->nicDriver->enableIrq(interface);
1622 #if (ETH_SUPPORT == ENABLED)
1624 if(interface->phyEvent)
1627 interface->phyEvent =
FALSE;
1630 if(interface->nicDriver != NULL)
1633 interface->nicDriver->disableIrq(interface);
1636 if(interface->phyDriver != NULL)
1639 interface->phyDriver->eventHandler(interface);
1641 else if(interface->switchDriver != NULL)
1644 interface->switchDriver->eventHandler(interface);
1652 interface->nicDriver->enableIrq(interface);
1678 #if (NET_RTOS_SUPPORT == ENABLED)
error_t ethAcceptMacAddr(NetInterface *interface, const MacAddr *macAddr)
Add a unicast/multicast address to the MAC filter table.
IPv6 (Internet Protocol Version 6)
error_t netInit(void)
Initialize TCP/IP stack (deprecated)
OsTaskId osCreateTask(const char_t *name, OsTaskCode taskCode, void *arg, const OsTaskParameters *params)
Create a task.
systime_t ipv4FragTickCounter
String manipulation helper functions.
bool_t osCreateMutex(OsMutex *mutex)
Create a mutex object.
error_t netSetSpiDriver(NetInterface *interface, const SpiDriver *driver)
Set SPI driver.
uint32_t netGetRandRange(uint32_t min, uint32_t max)
Generate a random value in the specified range.
error_t netSetDriver(NetInterface *interface, const NicDriver *driver)
Set Ethernet MAC driver.
error_t ipv4InitRouting(void)
void macAddrToEui64(const MacAddr *macAddr, Eui64 *interfaceId)
Map a MAC address to the IPv6 modified EUI-64 identifier.
error_t netSetUartDriver(NetInterface *interface, const UartDriver *driver)
Set UART driver.
error_t netSeedRand(const uint8_t *seed, size_t length)
Seed the pseudo-random number generator.
WebSocket API (client and server)
void netTaskEx(NetContext *context)
TCP/IP events handling.
#define OS_INVALID_TASK_ID
External interrupt line driver.
systime_t dnsSdResponderTickCounter
#define NET_INTERFACE_COUNT
error_t arpInit(NetInterface *interface)
ARP cache initialization.
error_t netSetSwitchDriver(NetInterface *interface, const SwitchDriver *driver)
Set Ethernet switch driver.
error_t netSetMacAddr(NetInterface *interface, const MacAddr *macAddr)
Set MAC address.
#define NET_TICK_INTERVAL
error_t netSetParentInterface(NetInterface *interface, NetInterface *physicalInterface)
Attach a virtual interface to a given physical interface.
error_t ipv6Init(NetInterface *interface)
IPv6 related initialization.
Helper functions for DHCPv6 client.
#define NET_TASK_STACK_SIZE
#define timeCompare(t1, t2)
Helper functions for DHCP client.
systime_t ipv6FragTickCounter
uint_t netGetLinkSpeed(NetInterface *interface)
Get link speed.
Helper functions for DHCP server.
error_t webSocketInit(void)
WebSocket related initialization.
error_t ethDropMacAddr(NetInterface *interface, const MacAddr *macAddr)
Remove a unicast/multicast address from the MAC filter table.
Router advertisement service.
Definitions common to mDNS client and mDNS responder.
uint32_t netGenerateRand(void)
Generate a random 32-bit value.
systime_t igmpTickCounter
OsTaskParameters taskParams
Task parameters.
systime_t dhcpServerTickCounter
Helper functions for TCP.
@ ERROR_INVALID_PARAMETER
Invalid parameter.
NetInterface * nicGetPhysicalInterface(NetInterface *interface)
Retrieve physical interface.
uint32_t netGenerateRandRange(uint32_t min, uint32_t max)
Generate a random value in the specified range.
#define osSprintf(dest,...)
void(* OsTaskCode)(void *arg)
Task routine.
Definitions common to NBNS client and NBNS responder.
DNS-SD responder (DNS-Based Service Discovery)
error_t netSetPhyAddr(NetInterface *interface, uint8_t phyAddr)
Specify Ethernet PHY address.
error_t mdnsInit(NetInterface *interface)
mDNS related initialization
NBNS client (NetBIOS Name Service)
error_t netSetEui64(NetInterface *interface, const Eui64 *eui64)
Set EUI-64 interface identifier.
error_t netConfigInterface(NetInterface *interface)
Configure network interface.
error_t udpInit(void)
UDP related initialization.
systime_t dhcpv6ClientTickCounter
void osDeleteEvent(OsEvent *event)
Delete an event object.
error_t memPoolInit(void)
Memory pool initialization.
void netGetDefaultSettings(NetSettings *settings)
Initialize settings with default values.
NetInterface * netGetDefaultInterface(void)
Get default network interface.
OsTaskId taskId
Task identifier.
error_t netSetSmiDriver(NetInterface *interface, const SmiDriver *driver)
Set SMI driver.
error_t netGetMacAddr(NetInterface *interface, MacAddr *macAddr)
Retrieve MAC address.
const OsTaskParameters OS_TASK_DEFAULT_PARAMS
error_t netSetPhyDriver(NetInterface *interface, const PhyDriver *driver)
Set Ethernet PHY driver.
void netGenerateRandData(uint8_t *data, size_t length)
Get a string of random data.
mDNS client (Multicast DNS)
error_t netInitEx(NetContext *context, const NetSettings *settings)
Initialize TCP/IP stack.
error_t netSetLinkState(NetInterface *interface, bool_t linkState)
Set administrative link state.
void netProcessLinkChange(NetInterface *interface)
Process link state change event.
error_t igmpInit(NetInterface *interface)
IGMP initialization.
Helper functions for NAT.
uint32_t netGetRand(void)
Generate a random 32-bit value.
NDP (Neighbor Discovery Protocol)
error_t nicUpdateMacAddrFilter(NetInterface *interface)
Configure MAC address filtering.
error_t netEnablePromiscuousMode(NetInterface *interface, bool_t enable)
Enable promiscuous mode.
DNS client (Domain Name System)
uint32_t systime_t
System time.
MLD node (Multicast Listener Discovery for IPv6)
error_t netSetInterfaceId(NetInterface *interface, uint32_t id)
Set interface identifier.
error_t ndpInit(NetInterface *interface)
Neighbor cache initialization.
error_t tcpInit(void)
TCP related initialization.
void netInitRand(void)
Initialize random number generator.
#define NET_MAX_IF_NAME_LEN
bool_t osWaitForEvent(OsEvent *event, systime_t timeout)
Wait until the specified event is in the signaled state.
void netTick(void)
Manage TCP/IP timers.
void osAcquireMutex(OsMutex *mutex)
Acquire ownership of the specified mutex object.
void osReleaseMutex(OsMutex *mutex)
Release ownership of the specified mutex object.
error_t netSetVmanId(NetInterface *interface, uint16_t vmanId)
Specify VMAN identifier (802.1ad)
NicDuplexMode
Duplex mode.
systime_t autoIpTickCounter
bool_t osCreateEvent(OsEvent *event)
Create an event object.
systime_t dhcpClientTickCounter
#define macCompAddr(macAddr1, macAddr2)
error_t netSetVlanId(NetInterface *interface, uint16_t vlanId)
Specify VLAN identifier (802.1Q)
error_t netStopInterface(NetInterface *interface)
Stop network interface.
error_t netSetHostname(NetInterface *interface, const char_t *name)
Set host name.
@ NIC_UNKNOWN_DUPLEX_MODE
error_t ipv6InitRouting(void)
Initialize IPv6 routing table.
error_t ethInit(NetInterface *interface)
Ethernet related initialization.
error_t nbnsInit(NetInterface *interface)
NBNS related initialization.
Helper functions for Auto-IP.
#define NET_RAND_SEED_SIZE
LLMNR responder (Link-Local Multicast Name Resolution)
error_t netGetEui64(NetInterface *interface, Eui64 *eui64)
Retrieve EUI-64 interface identifier.
NicDuplexMode netGetDuplexMode(NetInterface *interface)
Get duplex mode.
IPv4 (Internet Protocol Version 4)
OsTaskParameters task
Task parameters.
error_t netSetSwitchPort(NetInterface *interface, uint8_t port)
Specify switch port.
error_t mldInit(NetInterface *interface)
MLD initialization.
error_t netStartInterface(NetInterface *interface)
Start network interface.
uint8_t randSeed[NET_RAND_SEED_SIZE]
Random seed.
#define osMemset(p, value, length)
NetInterface * nicGetLogicalInterface(NetInterface *interface)
Retrieve logical interface.
error_t netSetExtIntDriver(NetInterface *interface, const ExtIntDriver *driver)
Set external interrupt line driver.
error_t dnsInit(void)
DNS cache initialization.
void netTask(void)
TCP/IP events handling (deprecated)
bool_t netGetLinkState(NetInterface *interface)
Get link state.
void netGetRandData(uint8_t *data, size_t length)
Get a string of random data.
error_t llmnrResponderInit(NetInterface *interface)
LLMNR responder initialization.
systime_t mdnsResponderTickCounter
ARP (Address Resolution Protocol)
#define NET_TASK_PRIORITY
error_t ipv4Init(NetInterface *interface)
IPv4 related initialization.
error_t socketInit(void)
Socket related initialization.
systime_t ndpRouterAdvTickCounter
const MacAddr MAC_UNSPECIFIED_ADDR
#define NET_MAX_HOSTNAME_LEN
NBNS responder (NetBIOS Name Service)
error_t netStart(NetContext *context)
Start TCP/IP stack.
mDNS responder (Multicast DNS)
systime_t osGetSystemTime(void)
Retrieve system time.
error_t netSetInterfaceName(NetInterface *interface, const char_t *name)
Set interface name.