Merge pull request #540 from DrDoof/fix/igmp-link-local

igmp: leave groups in 224.0.0.0/24 to flooding
This commit is contained in:
bloq authored and GitHub committed 2026-10-14 02:01:59 -05:00
commit 8224b06f9e
3 files changed
+6

No files matched your search

+3
View File
@@ -86,6 +86,9 @@ for frames to 01:00:5e:xx:xx:xx and returns 0 when the frame is not a trapped IG
so that it is passed on to the IP stack. IGMPv1/v2 reports (0x12, 0x16) join the group given so that it is passed on to the IP stack. IGMPv1/v2 reports (0x12, 0x16) join the group given
in the IGMP header, IGMPv2 leaves (0x17) leave it, IGMPv3 reports use the first group record in the IGMP header, IGMPv2 leaves (0x17) leave it, IGMPv3 reports use the first group record
(type 4 joins, type 3 leaves). Trapped IGMP frames arrive without a VLAN tag. (type 4 joins, type 3 leaves). Trapped IGMP frames arrive without a VLAN tag.
Reports for groups in 224.0.0.0/24 are ignored: the switch floods that block
even with IGMP on, and an entry for a group such as 224.0.0.251 (mDNS) would
otherwise limit it to the ports that reported it, as RFC 4541 warns against.
`igmp_show()` prints out the IGMP configuration on the CLI. `igmp_show()` prints out the IGMP configuration on the CLI.
+2
View File
@@ -251,6 +251,8 @@ uint8_t igmp_packet_handler(void) __banked
#ifdef DEBUG #ifdef DEBUG
print_string("IGMP join "); print_byte(igmp_join); write_char('\n'); print_string("IGMP join "); print_byte(igmp_join); write_char('\n');
#endif #endif
if (uip_buf[igmp_grp] == IGMP_LOCAL_NET_0 && !uip_buf[igmp_grp + 1] && !uip_buf[igmp_grp + 2])
return 1;
#ifdef IPMC_USES_L3MC #ifdef IPMC_USES_L3MC
memset((__xdata uint8_t *)&entry, 0, sizeof(struct ipmc_table_entry)); memset((__xdata uint8_t *)&entry, 0, sizeof(struct ipmc_table_entry));
+1
View File
@@ -10,6 +10,7 @@
#define IGMP_V3_REPORT 0x22 #define IGMP_V3_REPORT 0x22
#define IGMP_V3_TO_INCLUDE 3 #define IGMP_V3_TO_INCLUDE 3
#define IGMP_V3_TO_EXCLUDE 4 #define IGMP_V3_TO_EXCLUDE 4
#define IGMP_LOCAL_NET_0 224
void igmp_setup(void) __banked; void igmp_setup(void) __banked;
void igmp_enable(void) __banked; void igmp_enable(void) __banked;