undefined4 FUN_0040249c(int param_1)

{
  byte bVar1;
  ushort uVar2;
  uint uVar3;
  char *pcVar4;
  int iVar5;
  undefined4 uVar6;
  int iVar7;
  uint uVar8;
  uint uVar9;
  in_addr iVar10;
  in_addr iVar11;
  byte *pbVar12;
  byte *pbVar13;
  code *pcVar14;
  socklen_t local_480;
  sockaddr sStack_47c;
  char acStack_46c [32];
  char acStack_44c [32];
  undefined4 local_42c;
  undefined4 uStack_428;
  char local_423;
  byte local_422;
  in_addr local_420;
  in_addr local_41c;
  
  local_480 = 0x10;
  uVar3 = recvfrom(param_1,&local_42c,0x400,0,&sStack_47c,&local_480)   //possible issue identified - semgrep
  iVar11.s_addr = local_41c.s_addr;
  iVar10.s_addr = local_420.s_addr;
  if ((int)uVar3 < 1) {
    return 0;
  }
  pcVar4 = inet_ntoa(local_420);
  strcpy(acStack_46c,pcVar4)   //possible issue identified - semgrep
  pcVar4 = inet_ntoa(local_41c);
  strcpy(acStack_44c,pcVar4)   //possible issue identified - semgrep
  if (local_423 == '\0') {
    iVar5 = vifs_is_upstream(local_422);
    if (iVar5 == 0) {
      return 0;
    }
    uVar3 = (uint)local_422;
    pcVar14 = mrt_activate_route;
    iVar10.s_addr = local_420.s_addr;
    iVar11.s_addr = local_41c.s_addr;
LAB_0040275c:
    (*pcVar14)(iVar10.s_addr,iVar11.s_addr,uVar3);
  }
  else {
    uVar9 = local_42c & 0xf;
    uVar8 = (local_42c._2_2_ & 0xff) << 8 | (uint)(local_42c._2_2_ >> 8);
    iVar5 = uVar8 + uVar9 * -4;
    if (uVar8 != uVar3) {
      return 0;
    }
    pbVar13 = (byte *)(&local_42c + uVar9);
    uVar3 = (&uStack_428)[uVar9];
    if (iVar5 < 8) {
      return 0;
    }
    uVar6 = vifs_find_by_ip(iVar10.s_addr,0,0);
    verbose("%s: type=0x%x, vifi=%d, src=%s, dst=%s\n","igmp_read",*pbVar13,uVar6,acStack_46c,
            acStack_44c);
    bVar1 = *pbVar13;
    if (bVar1 != 0x16) {
      if (0x16 < bVar1) {
        if (bVar1 == 0x17) {
          iVar5 = FUN_00402354(uVar3);
          if (iVar5 != 0) {
            return 0;
          }
          vifs_update_igmp_ver(iVar10.s_addr,0,1,0x16);
          mrt_leave_group(iVar10.s_addr,iVar11.s_addr,uVar3,&local_42c);
          return 0;
        }
        uVar3 = 0;
        if (bVar1 != 0x22) {
          return 0;
        }
        uVar2 = *(ushort *)((int)&uStack_428 + uVar9 * 4 + 2);
        do {
          iVar5 = uVar3 + 1;
          if (((uVar2 & 0xff) << 8 | (uint)(uVar2 >> 8)) <= uVar3) {
            return 0;
          }
          pbVar12 = pbVar13 + iVar5 * 8;
          iVar7 = FUN_00402354(*(undefined4 *)(pbVar12 + 4));
          if (iVar7 != 0) goto switchD_004027e0_default;
          switch(*pbVar12 - 1) {
          case 0:
          case 2:
            if (*(short *)(pbVar12 + 2) == 0) goto switchD_004027e0_caseD_5;
            break;
          case 1:
          case 3:
            if (*(short *)(pbVar12 + 2) != 0) goto switchD_004027e0_caseD_5;
            break;
          case 4:
            break;
          case 5:
switchD_004027e0_caseD_5:
            mrt_leave_group(iVar10.s_addr,iVar11.s_addr,*(undefined4 *)(pbVar13 + iVar5 * 8 + 4),
                            &local_42c);
          default:
            goto switchD_004027e0_default;
          }
          mrt_membership_report
                    (iVar10.s_addr,iVar11.s_addr,*(undefined4 *)(pbVar13 + iVar5 * 8 + 4),*pbVar13,
                     &local_42c);
switchD_004027e0_default:
          uVar3 = uVar3 + 1 & 0xffff;
        } while( true );
      }
      if (bVar1 == 0x11) {
        iVar7 = FUN_00402354(uVar3);
        if (iVar7 != 0) {
          return 0;
        }
        if (iVar5 == 8) {
          vifs_update_igmp_ver_all(1,0x16);
        }
        pcVar14 = mrt_membership_query;
        goto LAB_0040275c;
      }
      if (bVar1 != 0x12) {
        return 0;
      }
    }
    iVar5 = FUN_00402354(uVar3);
    if (iVar5 == 0) {
      vifs_update_igmp_ver(iVar10.s_addr,0,1,0x16);
      mrt_membership_report(iVar10.s_addr,iVar11.s_addr,uVar3,*pbVar13,&local_42c);
    }
  }
  return 0;
}