Go to the documentation of this file.
32 #define TRACE_LEVEL NIC_TRACE_LEVEL
53 #if (ETH_VLAN_SUPPORT == ENABLED)
58 context = interface->netContext;
61 for(i = 0; i < context->numInterfaces; i++)
68 if(interface->parent == NULL)
72 interface = interface->parent;
89 #if (ETH_VIRTUAL_IF_SUPPORT == ENABLED || ETH_VLAN_SUPPORT == ENABLED || \
90 ETH_PORT_TAGGING_SUPPORT == ENABLED)
95 context = interface->netContext;
98 for(i = 0; i < context->numInterfaces; i++)
101 if(interface->nicDriver != NULL || interface->parent == NULL)
105 interface = interface->parent;
122 #if (ETH_PORT_TAGGING_SUPPORT == ENABLED)
127 context = interface->netContext;
130 for(i = 0; i < context->numInterfaces; i++)
133 if(interface->port != 0 || interface->parent == NULL)
137 interface = interface->parent;
141 return interface->port;
157 #if (ETH_VLAN_SUPPORT == ENABLED)
162 context = interface->netContext;
165 for(i = 0; i < context->numInterfaces; i++)
168 if(interface->vlanId != 0 || interface->parent == NULL)
172 interface = interface->parent;
176 return interface->vlanId;
192 #if (ETH_VMAN_SUPPORT == ENABLED)
197 context = interface->netContext;
200 for(i = 0; i < context->numInterfaces; i++)
203 if(interface->vmanId != 0 || interface->parent == NULL)
207 interface = interface->parent;
211 return interface->vmanId;
228 #if (ETH_VIRTUAL_IF_SUPPORT == ENABLED || ETH_VLAN_SUPPORT == ENABLED || \
229 ETH_PORT_TAGGING_SUPPORT == ENABLED)
235 context = interface->netContext;
238 for(flag =
FALSE, i = 0; i < context->numInterfaces; i++)
241 if(interface == parent)
248 if(interface->parent == NULL)
252 interface = interface->parent;
259 return (interface == parent) ?
TRUE :
FALSE;
276 if(interface->nicDriver != NULL)
279 interface->nicDriver->disableIrq(interface);
282 interface->nicDriver->tick(interface);
285 if(interface->configured)
287 interface->nicDriver->enableIrq(interface);
310 #if (TRACE_LEVEL >= TRACE_LEVEL_DEBUG)
320 context = interface->netContext;
326 if(interface->configured && interface->nicDriver != NULL)
344 interface->nicDriver->disableIrq(interface);
347 error = interface->nicDriver->sendPacket(interface, buffer, offset,
351 if(interface->configured)
353 interface->nicDriver->enableIrq(interface);
384 if(interface->nicDriver != NULL)
387 interface->nicDriver->disableIrq(interface);
390 error = interface->nicDriver->updateMacAddrFilter(interface);
393 if(interface->configured)
395 interface->nicDriver->enableIrq(interface);
425 context = interface->netContext;
431 if(interface->configured)
434 interface->nicDriver->enableIrq(interface);
441 type = interface->nicDriver->type;
443 #if (ETH_SUPPORT == ENABLED)
452 #if (PPP_SUPPORT == ENABLED)
461 #if (IPV4_SUPPORT == ENABLED)
471 #if (IPV6_SUPPORT == ENABLED)
489 #if (NET_LOOPBACK_IF_SUPPORT == ENABLED)
493 #if (IPV4_SUPPORT == ENABLED)
505 for(i = 0; i < context->numInterfaces; i++)
512 header->destAddr, header->srcAddr);
532 #if (IPV6_SUPPORT == ENABLED)
545 for(i = 0; i < context->numInterfaces; i++)
552 &header->destAddr, &header->srcAddr);
591 interface->nicDriver->disableIrq(interface);
609 context = interface->netContext;
618 if(physicalInterface->configured)
620 physicalInterface->nicDriver->enableIrq(physicalInterface);
624 for(i = 0; i < context->numInterfaces; i++)
627 virtualInterface = &context->interfaces[i];
635 virtualInterface->linkSpeed = interface->linkSpeed;
636 virtualInterface->duplexMode = interface->duplexMode;
639 virtualInterface->linkState = interface->linkState;
647 physicalInterface->nicDriver->disableIrq(physicalInterface);
void nicNotifyLinkChange(NetInterface *interface)
Process link state change notification.
#define ipv4IsMulticastAddr(ipAddr)
@ ERROR_INVALID_INTERFACE
Invalid interface.
error_t nicSendPacket(NetInterface *interface, const NetBuffer *buffer, size_t offset, NetTxAncillary *ancillary)
Send a packet to the network controller.
Structure describing a buffer that spans multiple chunks.
void ipv4ProcessPacket(NetInterface *interface, Ipv4Header *packet, size_t length, NetRxAncillary *ancillary)
Incoming IPv4 packet processing.
#define NIC_MAX_BLOCKING_TIME
error_t ipv6MulticastFilter(NetInterface *interface, const Ipv6Addr *destAddr, const Ipv6Addr *srcAddr)
Filter out incoming multicast traffic.
void ipv6ProcessPacket(NetInterface *interface, NetBuffer *ipPacket, size_t ipPacketOffset, NetRxAncillary *ancillary)
Incoming IPv6 packet processing.
void nicProcessPacket(NetInterface *interface, uint8_t *packet, size_t length, NetRxAncillary *ancillary)
Handle a packet received by the network controller.
#define TRACE_DEBUG_NET_BUFFER(p, b, o, n)
IPv4 multicast filtering.
@ NIC_TYPE_LOOPBACK
Loopback interface.
error_t ipv4CheckDestAddr(NetInterface *interface, Ipv4Addr ipAddr)
Destination IPv4 address filtering.
#define ipv6IsMulticastAddr(ipAddr)
IPv6 multicast filtering.
Helper functions for IPv4.
NetInterface * nicGetPhysicalInterface(NetInterface *interface)
Retrieve physical interface.
void ethProcessFrame(NetInterface *interface, uint8_t *frame, size_t length, NetRxAncillary *ancillary)
Process an incoming Ethernet frame.
error_t ipv6CheckDestAddr(NetInterface *interface, const Ipv6Addr *ipAddr)
Destination IPv6 address filtering.
Helper functions for IPv6.
void pppProcessFrame(NetInterface *interface, uint8_t *frame, size_t length, NetRxAncillary *ancillary)
Process an incoming PPP frame.
size_t netBufferGetLength(const NetBuffer *buffer)
Get the actual length of a multi-part buffer.
void netProcessLinkChange(NetInterface *interface)
Process link state change event.
error_t nicUpdateMacAddrFilter(NetInterface *interface)
Configure MAC address filtering.
error_t ipv4MulticastFilter(NetInterface *interface, Ipv4Addr destAddr, Ipv4Addr srcAddr)
Filter out incoming multicast traffic.
@ NIC_TYPE_PPP
PPP interface.
#define TRACE_DEBUG_ARRAY(p, a, n)
bool_t osWaitForEvent(OsEvent *event, systime_t timeout)
Wait until the specified event is in the signaled state.
Network interface controller abstraction layer.
#define macCompAddr(macAddr1, macAddr2)
#define netGetSystemTickCount()
@ NIC_TYPE_IPV4
IPv4 interface.
@ NIC_TYPE_6LOWPAN
6LoWPAN interface
void nicTick(NetInterface *interface)
Network controller timer handler.
NetInterface * nicGetLogicalInterface(NetInterface *interface)
Retrieve logical interface.
uint16_t nicGetVmanId(NetInterface *interface)
Retrieve VMAN identifier.
uint16_t nicGetVlanId(NetInterface *interface)
Retrieve VLAN identifier.
uint8_t nicGetSwitchPort(NetInterface *interface)
Retrieve switch port identifier.
bool_t nicIsParentInterface(NetInterface *interface, NetInterface *parent)
Test parent/child relationship between 2 interfaces.
const MacAddr MAC_UNSPECIFIED_ADDR
@ NIC_TYPE_ETHERNET
Ethernet interface.