mld_node_misc.c
char_t * ipv6AddrToString(const Ipv6Addr *ipAddr, char_t *str)
Convert a binary IPv6 address to a string representation.
Definition: ipv6.c:2329
IPv6 (Internet Protocol Version 6)
int_t mldNodeFindSrcAddr(const MldNodeSrcAddrList *list, const Ipv6Addr *srcAddr)
Search the list of sources for a given IP address.
Definition: mld_node_misc.c:1564
NetBuffer * ipAllocBuffer(size_t length, size_t *offset)
Allocate a buffer to hold an IP packet.
Definition: ip.c:711
void mldNodeChangeCompatibilityMode(MldNodeContext *context, MldVersion compatibilityMode)
Change host compatibility mode.
Definition: mld_node_misc.c:53
bool_t netTimerRunning(NetTimer *timer)
Check whether the timer is running.
Definition: net_misc.c:793
systime_t netGetRemainingTime(NetTimer *timer)
Get the remaining value of the running timer.
Definition: net_misc.c:837
int_t ipv6FindSrcAddr(const Ipv6SrcAddrList *list, const Ipv6Addr *srcAddr)
Search the list of sources for a given IP address.
Definition: ipv6_multicast.c:776
NetTimer stateChangeReportTimer
Retransmission timer for state-change reports.
Definition: mld_node.h:119
void mldNodeRemoveSrcAddr(MldNodeSrcAddrList *list, const Ipv6Addr *srcAddr)
Remove a source address from a given list.
Definition: mld_node_misc.c:1527
error_t ipv6AddSrcAddr(Ipv6SrcAddrList *list, const Ipv6Addr *srcAddr)
Append a source address to a given list.
Definition: ipv6_multicast.c:699
error_t mldSendMessage(NetInterface *interface, const Ipv6Addr *destAddr, NetBuffer *buffer, size_t offset)
Send MLD message.
Definition: mld_common.c:136
MldNodeGroup * mldNodeFindGroup(MldNodeContext *context, const Ipv6Addr *groupAddr)
Search the list of multicast groups for a given group address.
Definition: mld_node_misc.c:1363
void mldNodeProcessListenerQueryV2(MldNodeContext *context, const Ipv6PseudoHeader *pseudoHeader, const MldListenerQueryV2 *message, size_t length)
Process incoming Version 2 Multicast Listener Query message.
Definition: mld_node_misc.c:839
bool_t mldNodeMatchGroup(MldNodeGroup *group, const Ipv6Addr *multicastAddr)
Check whether a group matches a given multicast address.
Definition: mld_node_misc.c:1397
@ MLD_NODE_GROUP_STATE_DELAYING_LISTENER
Definition: mld_node.h:59
void mldNodeMergeReports(MldNodeGroup *group, IpFilterMode newFilterMode, const Ipv6SrcAddrList *newFilter)
Merge difference the report and the pending report.
Definition: mld_node_misc.c:1076
void mldNodeFlushReportRecords(MldNodeContext *context, NetBuffer *buffer, size_t offset, size_t *length)
Flush report records.
Definition: mld_node_misc.c:658
void mldNodeSendListenerDone(MldNodeContext *context, const Ipv6Addr *groupAddr)
Send Multicast Listener Done message.
Definition: mld_node_misc.c:183
error_t mldNodeAddSrcAddr(MldNodeSrcAddrList *list, const Ipv6Addr *srcAddr)
Append a source address to a given list.
Definition: mld_node_misc.c:1479
IPv6 multicast filtering.
ICMPv6 (Internet Control Message Protocol Version 6)
void mldNodeSendStateChangeReport(MldNodeContext *context, const Ipv6Addr *groupAddr)
Send State-Change Report message.
Definition: mld_node_misc.c:453
MldNodeGroup * mldNodeCreateGroup(MldNodeContext *context, const Ipv6Addr *groupAddr)
Create a new multicast group.
Definition: mld_node_misc.c:1302
void mldNodeDecGroupRetransmitCounters(MldNodeGroup *group)
Decrement retransmission counters for a given group.
Definition: mld_node_misc.c:1241
void mldNodeFlushUnusedGroups(MldNodeContext *context)
Delete groups in "non-existent" state.
Definition: mld_node_misc.c:1441
NetTimer olderVersionQuerierPresentTimer
Older version querier present timer.
Definition: mld_node.h:117
void mldNodeProcessListenerQuery(MldNodeContext *context, const Ipv6PseudoHeader *pseudoHeader, const MldMessage *message, size_t length)
Process incoming Multicast Listener Query message.
Definition: mld_node_misc.c:747
MLD node (Multicast Listener Discovery for IPv6)
void mldNodeSendCurrentStateReport(MldNodeContext *context, const Ipv6Addr *groupAddr)
Send Current-State Report message.
Definition: mld_node_misc.c:223
bool_t mldNodeGetRetransmitStatus(MldNodeContext *context)
Get the retransmission status of the State-Change report.
Definition: mld_node_misc.c:1171
void mldNodeProcessMessage(MldNodeContext *context, const Ipv6PseudoHeader *pseudoHeader, const MldMessage *message, size_t length)
Process incoming MLD message.
Definition: mld_node_misc.c:701
void mldNodeProcessListenerReport(MldNodeContext *context, const Ipv6PseudoHeader *pseudoHeader, const MldMessage *message, size_t length)
Process incoming Multicast Listener Report message.
Definition: mld_node_misc.c:1034
const Ipv6Addr IPV6_LINK_LOCAL_ALL_ROUTERS_ADDR
Definition: ipv6.c:78
void mldNodeSendListenerReport(MldNodeContext *context, const Ipv6Addr *groupAddr)
Send Multicast Listener Report message.
Definition: mld_node_misc.c:144
void mldNodeSendUnsolicitedReport(MldNodeContext *context, const Ipv6Addr *groupAddr)
Send an unsolicited Report message.
Definition: mld_node_misc.c:108
uint32_t mldDecodeFloatingPointValue16(uint16_t code)
Decode a floating-point value (16-bit code)
Definition: mld_common.c:315
error_t netBufferSetLength(NetBuffer *buffer, size_t length)
Adjust the length of a multi-part buffer.
Definition: net_mem.c:322
void mldNodeDeleteGroup(MldNodeGroup *group)
Delete a multicast group.
Definition: mld_node_misc.c:1425
bool_t mldNodeGetGroupRetransmitStatus(MldNodeGroup *group)
Get the retransmission status for a given group.
Definition: mld_node_misc.c:1209
void * netBufferAt(const NetBuffer *buffer, size_t offset, size_t length)
Returns a pointer to a data segment.
Definition: net_mem.c:418
void ipv6RemoveSrcAddr(Ipv6SrcAddrList *list, const Ipv6Addr *srcAddr)
Remove a source address from a given list.
Definition: ipv6_multicast.c:739
NetTimer generalQueryTimer
Timer for scheduling responses to general queries.
Definition: mld_node.h:118
Helper functions for MLD node.
TCP/IP stack core.
#define MLD_OLDER_VERSION_QUERIER_PRESENT_TIMEOUT
Definition: mld_common.h:60
Debugging facilities.