@@ -561,26 +561,48 @@ static esp_err_t joinMulticastGroup(const ip_addr_t *addr, bool join, tcpip_adap
561561 return ESP_ERR_INVALID_ARG;
562562 }
563563 netif = (struct netif *)nif;
564- }
565564
566- if (addr->type == IPADDR_TYPE_V4) {
567- if (join){
568- if (igmp_joingroup_netif (netif, (const ip4_addr *)&(addr->u_addr .ip4 ))) {
569- return ESP_ERR_INVALID_STATE;
565+ if (addr->type == IPADDR_TYPE_V4) {
566+ if (join){
567+ if (igmp_joingroup_netif (netif, (const ip4_addr *)&(addr->u_addr .ip4 ))) {
568+ return ESP_ERR_INVALID_STATE;
569+ }
570+ } else {
571+ if (igmp_leavegroup_netif (netif, (const ip4_addr *)&(addr->u_addr .ip4 ))) {
572+ return ESP_ERR_INVALID_STATE;
573+ }
570574 }
571575 } else {
572- if (igmp_leavegroup_netif (netif, (const ip4_addr *)&(addr->u_addr .ip4 ))) {
573- return ESP_ERR_INVALID_STATE;
576+ if (join){
577+ if (mld6_joingroup_netif (netif, &(addr->u_addr .ip6 ))) {
578+ return ESP_ERR_INVALID_STATE;
579+ }
580+ } else {
581+ if (mld6_leavegroup_netif (netif, &(addr->u_addr .ip6 ))) {
582+ return ESP_ERR_INVALID_STATE;
583+ }
574584 }
575585 }
576- } else {
577- if (join){
578- if (mld6_joingroup_netif (netif, &(addr->u_addr .ip6 ))) {
579- return ESP_ERR_INVALID_STATE;
586+ } else {
587+ if (addr->type == IPADDR_TYPE_V4) {
588+ if (join){
589+ if (igmp_joingroup ((const ip4_addr *)IP4_ADDR_ANY, (const ip4_addr *)&(addr->u_addr .ip4 ))) {
590+ return ESP_ERR_INVALID_STATE;
591+ }
592+ } else {
593+ if (igmp_leavegroup ((const ip4_addr *)IP4_ADDR_ANY, (const ip4_addr *)&(addr->u_addr .ip4 ))) {
594+ return ESP_ERR_INVALID_STATE;
595+ }
580596 }
581597 } else {
582- if (mld6_leavegroup_netif (netif, &(addr->u_addr .ip6 ))) {
583- return ESP_ERR_INVALID_STATE;
598+ if (join){
599+ if (mld6_joingroup ((const ip6_addr *)IP6_ADDR_ANY, &(addr->u_addr .ip6 ))) {
600+ return ESP_ERR_INVALID_STATE;
601+ }
602+ } else {
603+ if (mld6_leavegroup ((const ip6_addr *)IP6_ADDR_ANY, &(addr->u_addr .ip6 ))) {
604+ return ESP_ERR_INVALID_STATE;
605+ }
584606 }
585607 }
586608 }
0 commit comments