void FUN_00404a40(int param_1)

{
  char *pcVar1;
  int iVar2;
  undefined4 uVar3;
  int *piVar4;
  in_addr __in;
  int *piVar5;
  int iVar6;
  undefined4 uVar7;
  undefined1 auStack_88 [32];
  char acStack_68 [32];
  char acStack_48 [32];
  
  while (piVar5 = *(int **)(param_1 + 0xc), piVar5 != (int *)(param_1 + 0xc)) {
    piVar4 = (int *)piVar5[1];
    iVar6 = *piVar5;
    __in.s_addr = piVar5[2];
    *piVar4 = iVar6;
    *(int **)(iVar6 + 4) = piVar4;
    *piVar5 = 0;
    piVar5[1] = 0;
    pcVar1 = inet_ntoa(__in);
    strcpy(acStack_68,pcVar1)   //possible issue identified - semgrep
    pcVar1 = inet_ntoa((in_addr)*(in_addr_t *)(param_1 + 8));
    strcpy(acStack_48,pcVar1)   //possible issue identified - semgrep
    uVar7 = vifs_get_name((short)piVar5[3]);
    verbose("%s: remove route %s --> %s from %s [%d]\n","remove_group",acStack_68,acStack_48,uVar7,
            (short)piVar5[3]);
    memset(auStack_88,0,0x20)   //possible issue identified - semgrep
    mrtapi_del_mfc(piVar5[2],*(undefined4 *)(param_1 + 8),(short)piVar5[3],auStack_88);
    remove_multicast_ip(*(undefined4 *)(param_1 + 8));
    free(piVar5);
  }
  while (piVar5 = *(int **)(param_1 + 0x14), piVar5 != (int *)(param_1 + 0x14)) {
    piVar4 = (int *)piVar5[1];
    iVar6 = *piVar5;
    *piVar4 = iVar6;
    *(int **)(iVar6 + 4) = piVar4;
    *piVar5 = 0;
    piVar5[1] = 0;
    FUN_00404900(piVar5);
  }
  if (*(int *)(param_1 + 0x1c) != 0) {
    sloop_cancel_timeout();
  }
  uVar7 = *(undefined4 *)(param_1 + 8);
  iVar6 = 0;
  do {
    iVar2 = vifs_is_upstream(iVar6);
    if (iVar2 != 0) {
      iVar2 = vifs_get_ver_by_id(iVar6);
      if (iVar2 == 0x22) {
        uVar3 = vifs_get_ipaddr();
        send_igmp_v3(uVar3,0x160000e0,0x22,0,uVar7,0,3);
      }
      else {
        iVar2 = vifs_get_ver_by_id(iVar6);
        if ((iVar2 == 0x16) || (iVar2 = vifs_get_ver_by_id(iVar6), iVar2 == 0x12)) {
          uVar3 = vifs_get_ipaddr(iVar6);
          send_igmp(uVar3,0x20000e0,0x17,0,uVar7);
        }
      }
    }
    iVar6 = iVar6 + 1;
  } while (iVar6 != 8);
  return;
}