void FUN_00404e0c(int param_1,int param_2,undefined2 param_3,byte *param_4,undefined2 param_5,
                 char param_6)

{
  undefined **ppuVar1;
  int *piVar2;
  ushort uVar3;
  int iVar4;
  char cVar5;
  undefined4 uVar6;
  undefined **ppuVar7;
  uint uVar8;
  uint uVar9;
  undefined *puVar10;
  char *pcVar11;
  undefined **ppuVar12;
  
  iVar4 = g_conf;
  uVar8 = *(uint *)(g_conf + 0x70) + 1;
  *(uint *)(g_conf + 0x74) = (uint)(uVar8 < *(uint *)(g_conf + 0x70)) + *(int *)(g_conf + 0x74);
  *(uint *)(iVar4 + 0x70) = uVar8;
  uVar8 = *(uint *)(param_1 + 0x78) + 1;
  *(uint *)(param_1 + 0x7c) = (uint)(uVar8 < *(uint *)(param_1 + 0x78)) + *(int *)(param_1 + 0x7c);
  *(uint *)(param_1 + 0x78) = uVar8;
  puVar10 = (undefined *)(uint)*param_4;
  if ((((((uint)(puVar10 + 0x7d) & 0xff) < 2) || (puVar10 == (undefined *)0x8f)) ||
      (puVar10 == (undefined *)0xce)) ||
     ((puVar10 == (undefined *)0x82 || (puVar10 == (undefined *)0x80)))) {
    uVar3 = *(ushort *)(param_4 + 2);
    param_4[2] = 0;
    param_4[3] = 0;
    uVar8 = FUN_004011e0(param_2,0x3a,param_4,param_5);
    *(short *)(param_4 + 2) = (short)uVar8;
    if (uVar8 != uVar3) {
      puVar10 = (undefined *)(uint)*param_4;
      ppuVar7 = &PTR_s_Destination_Unreachable_0041a114;
      do {
        pcVar11 = *ppuVar7;
        if (pcVar11 == (char *)0x0) {
          pcVar11 = "Unknown";
          break;
        }
        ppuVar12 = ppuVar7 + -1;
        ppuVar7 = ppuVar7 + 2;
      } while (*ppuVar12 != puVar10);
      uVar6 = FUN_00401330(puVar10,param_4[1]);
      dolog(4,"CORRUPT->DROP (%s): Received a ICMPv6 %s (%u) with wrong checksum (%x vs %x)\n",
            param_1 + 4,pcVar11,puVar10,uVar6,param_4[1],*(undefined2 *)(param_4 + 2),(uint)uVar3);
    }
    ppuVar12 = &PTR_s_Destination_Unreachable_0041a114;
    puVar10 = (undefined *)(uint)*param_4;
    ppuVar7 = ppuVar12;
    do {
      pcVar11 = *ppuVar7;
      if (pcVar11 == (char *)0x0) {
        pcVar11 = "Unknown";
        break;
      }
      ppuVar1 = ppuVar7 + -1;
      ppuVar7 = ppuVar7 + 2;
    } while (*ppuVar1 != puVar10);
    uVar6 = FUN_00401330(puVar10,param_4[1]);
    dolog(7,"Received ICMPv6: %s (%u), %s (%u) received on %s\n",pcVar11,puVar10,uVar6,param_4[1],
          param_1 + 4);
    puVar10 = (undefined *)(uint)*param_4;
    if (puVar10 == (undefined *)0x80) {
      cVar5 = *(char *)(param_2 + 7)   //possible issue identified - semgrep
      if (cVar5 != '\0') {
        *(char *)(param_2 + 7) = cVar5 + -1;
        cVar5 = *(char *)(param_2 + 7)   //possible issue identified - semgrep
      }
      iVar4 = g_conf;
      if (cVar5 == '\0') {
        uVar8 = *(uint *)(g_conf + 0x80);
        piVar2 = (int *)(g_conf + 0x84);
        uVar9 = uVar8 + 1;
        *(uint *)(g_conf + 0x80) = uVar9;
        *(uint *)(iVar4 + 0x84) = (uint)(uVar9 < uVar8) + *piVar2;
        FUN_00404c14(param_1,param_2 + 8,0x81,0);
        return;
      }
      if (param_6 != '\0') {
        dolog(4,
              "Ignoring (%s): ICMPv6 Echo Req because header chain includes some of extension headers\n"
              ,param_1 + 4);
        return;
      }
      FUN_00402e60(param_1,param_2,param_3);
      return;
    }
    if ((*(uint *)(param_2 + 8) & 0xc0ff) != 0x80fe) {
      FUN_00401448(4,"Ignoring non-LinkLocal MLD from %s received on %s/%u\n",param_2 + 8,param_1);
      return;
    }
    if (puVar10 == (undefined *)0x83) {
      FUN_004043b8(param_1,param_2,param_3,param_4);
      return;
    }
    if (puVar10 == (undefined *)0x84) {
      FUN_00404a90(param_1,param_2,param_3,param_4);
      return;
    }
    if ((puVar10 == (undefined *)0x8f) || (puVar10 == (undefined *)0xce)) {
      FUN_00403fe8(param_1,param_2,param_3,param_4);
      return;
    }
    if (puVar10 == (undefined *)0x82) {
      FUN_00403d0c(param_1,param_2,param_3,param_4);
      return;
    }
    do {
      pcVar11 = *ppuVar12;
      if (pcVar11 == (char *)0x0) {
        pcVar11 = "Unknown";
        break;
      }
      ppuVar7 = ppuVar12 + -1;
      ppuVar12 = ppuVar12 + 2;
    } while (*ppuVar7 != puVar10);
    FUN_00401330(puVar10,param_4[1]);
    dolog(7,"ICMP type %s (%u), %s (%u) got through\n",pcVar11,puVar10);
    return;
  }
  ppuVar7 = &PTR_s_Destination_Unreachable_0041a114;
  do {
    pcVar11 = *ppuVar7;
    if (pcVar11 == (char *)0x0) {
      pcVar11 = "Unknown";
      break;
    }
    ppuVar12 = ppuVar7 + -1;
    ppuVar7 = ppuVar7 + 2;
  } while (*ppuVar12 != puVar10);
  uVar6 = FUN_00401330(puVar10,param_4[1]);
  dolog(7,"Ignoring ICMPv6: %s (%u), %s (%u) received on %s\n",pcVar11,puVar10,uVar6,param_4[1],
        param_1 + 4);
  return;
}