/* WARNING: Removing unreachable block (ram,0x00011420) */
/* WARNING: Removing unreachable block (ram,0x000117c0) */
/* WARNING: Removing unreachable block (ram,0x000117d8) */
/* WARNING: Removing unreachable block (ram,0x000117d0) */
/* WARNING: Removing unreachable block (ram,0x000117e4) */
/* WARNING: Removing unreachable block (ram,0x000117fc) */
/* WARNING: Removing unreachable block (ram,0x0001180c) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

int sw_add_NAT_entry(int param_1,int param_2)

{
  undefined1 uVar1;
  undefined2 uVar2;
  short sVar3;
  byte bVar4;
  undefined2 uVar5;
  int *piVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  char cVar10;
  int *piVar11;
  int iVar12;
  undefined4 uVar13;
  undefined4 *puVar14;
  int *piVar15;
  int iVar16;
  int iVar17;
  
  iVar9 = *(int *)(param_1 + 0xd0);
  if (((iVar9 != 0) && (*(byte *)(iVar9 + 8) != 0)) &&
     (iVar9 = iVar9 + (uint)*(byte *)(iVar9 + 8), iVar9 != 0)) {
    return iVar9;
  }
  cVar10 = *(char *)(param_1 + 0x32)   //possible issue identified - semgrep
  if ((cVar10 != '\x06') && (cVar10 != '\x11')) {
    return -1;
  }
  if ((((param_2 == 4) || (param_2 == 1)) &&
      ((_sw_disable_80 != 0 && ((cVar10 == '\x06' && (*(short *)(param_1 + 0x30) == 0x5000)))))) ||
     (piVar6 = (int *)sw_alloc_entry(), piVar6 == (int *)0x0)) {
    return -1;
  }
  iVar9 = sw_alloc_entry();
  if (iVar9 == 0) {
    kmem_cache_free(sw_turbo_net_cache,piVar6);
    return -1;
  }
  uVar1 = *(undefined1 *)(param_1 + 0x32);
  piVar6[2] = iVar9;
  *(undefined1 *)(iVar9 + 0x48) = uVar1;
  *(undefined1 *)((int)piVar6 + 0x4a) = 0;
  *(undefined1 *)(piVar6 + 0x12) = uVar1;
  *(int **)(iVar9 + 8) = piVar6;
  *(undefined1 *)(iVar9 + 0x4a) = 0;
  piVar6[5] = *(int *)(param_1 + 0x20);
  iVar7 = *(int *)(param_1 + 0xc);
  *(int *)(iVar9 + 0x24) = param_2;
  *(undefined4 *)(iVar9 + 0x20) = 0;
  *(undefined2 *)(iVar9 + 0x46) = 0;
  *(undefined4 *)(iVar9 + 0x28) = 0;
  piVar6[4] = iVar7;
  piVar6[9] = param_2;
  piVar6[8] = 0;
  *(undefined2 *)((int)piVar6 + 0x46) = 0;
  piVar6[10] = 0;
  *(undefined2 *)((int)piVar6 + 0x3e) = *(undefined2 *)(param_1 + 0x30);
  *(undefined2 *)(piVar6 + 0xf) = *(undefined2 *)(param_1 + 0x1c);
  if (param_2 == 4) {
    uVar5 = *(undefined2 *)(param_1 + 0x60);
LAB_000118a0:
    *(undefined2 *)(piVar6 + 0x10) = uVar5;
  }
  else {
    if (param_2 == 1) {
      uVar5 = *(undefined2 *)(param_1 + 0x60);
      goto LAB_000118a0;
    }
    *(undefined2 *)((int)piVar6 + 0x42) = *(undefined2 *)(param_1 + 0x4c);
  }
  piVar6[0x16] = -1;
  *(undefined4 *)(iVar9 + 0x58) = 0xffffffff;
  *(int *)(iVar9 + 0xc) = param_1;
  piVar6[0x13] = 0;
  piVar6[0x14] = 0;
  piVar6[0x15] = 0;
  piVar6[3] = param_1;
  *(undefined4 *)(iVar9 + 0x4c) = 0;
  *(undefined4 *)(iVar9 + 0x50) = 0;
  *(undefined4 *)(iVar9 + 0x54) = 0;
  if ((param_2 == 4) || (param_2 == 1)) {
    *(undefined1 *)((int)piVar6 + 0x49) = 1;
    iVar8 = *(int *)(param_1 + 0x50);
    iVar7 = piVar6[0x10];
    *(int *)(iVar9 + 0x14) = iVar8;
    *(short *)(iVar9 + 0x3e) = (short)iVar7;
    uVar5 = *(undefined2 *)((int)piVar6 + 0x3e);
    *(int *)(iVar9 + 0x10) = piVar6[5];
    iVar12 = piVar6[4];
    *(undefined2 *)(iVar9 + 0x3c) = uVar5;
    iVar7 = piVar6[0xf];
    *(int *)(iVar9 + 0x1c) = iVar12;
    *(short *)(iVar9 + 0x42) = (short)iVar7;
    *(undefined1 *)(iVar9 + 0x49) = 2;
    piVar6[6] = iVar8;
  }
  else {
    iVar7 = piVar6[0xf];
    *(undefined1 *)((int)piVar6 + 0x49) = 2;
    iVar12 = *(int *)(param_1 + 0x3c);
    *(int *)(iVar9 + 0x14) = piVar6[4];
    *(short *)(iVar9 + 0x3e) = (short)iVar7;
    uVar5 = *(undefined2 *)((int)piVar6 + 0x42);
    iVar7 = piVar6[5];
    uVar2 = *(undefined2 *)((int)piVar6 + 0x3e);
    *(int *)(iVar9 + 0x10) = iVar12;
    *(undefined2 *)(iVar9 + 0x3c) = uVar5;
    *(int *)(iVar9 + 0x18) = iVar7;
    *(undefined2 *)(iVar9 + 0x40) = uVar2;
    *(undefined1 *)(iVar9 + 0x49) = 1;
    piVar6[7] = iVar12;
  }
  iVar17 = piVar6[4];
  iVar7 = piVar6[0xf];
  iVar16 = piVar6[5];
  sVar3 = *(short *)((int)piVar6 + 0x3e)   //possible issue identified - semgrep
  iVar12 = piVar6[0x12];
  iVar8 = sw_turbo_hash_fn(iVar17,(short)iVar7,iVar16,sVar3,(char)iVar12);
  puVar14 = (undefined4 *)(&sw_turbo_hash)[iVar8];
  while( true ) {
    while( true ) {
      while( true ) {
        while( true ) {
          while( true ) {
            if (puVar14 == (undefined4 *)0x0) {
              local_bh_disable();
              piVar11 = &sw_turbo_hash + iVar8;
              iVar9 = *piVar11;
              piVar6[1] = (int)piVar11;
              *piVar6 = iVar9;
              if (*piVar11 != 0) {
                *(int **)(*piVar11 + 4) = piVar6;
              }
              (&sw_turbo_hash)[iVar8] = piVar6;
              piVar15 = (int *)piVar6[2];
              iVar9 = sw_turbo_hash_fn(piVar15[4],(short)piVar15[0xf],piVar15[5],
                                       *(undefined2 *)((int)piVar15 + 0x3e),(char)piVar15[0x12]);
              piVar11 = &sw_turbo_hash + iVar9;
              iVar7 = piVar6[2];
              *piVar15 = *piVar11;
              *(int **)(iVar7 + 4) = piVar11;
              if (*piVar11 != 0) {
                *(int *)(*piVar11 + 4) = iVar7;
              }
              (&sw_turbo_hash)[iVar9] = piVar6[2];
              local_bh_enable();
              *(int **)(param_1 + 0x88) = piVar6;
              return 0;
            }
            if (puVar14[4] == iVar17) break;
            puVar14 = (undefined4 *)*puVar14;
          }
          if (*(short *)(puVar14 + 0xf) == (short)iVar7) break;
          puVar14 = (undefined4 *)*puVar14;
        }
        if (puVar14[5] == iVar16) break;
        puVar14 = (undefined4 *)*puVar14;
      }
      if (*(short *)((int)puVar14 + 0x3e) == sVar3) break;
      puVar14 = (undefined4 *)*puVar14;
    }
    if (*(char *)(puVar14 + 0x12) == (char)iVar12) break;
    puVar14 = (undefined4 *)*puVar14;
  }
  if ((*(char *)((int)puVar14 + 0x49) == '\x02') && (*(char *)((int)piVar6 + 0x49) == '\x01')) {
    iVar7 = puVar14[2];
    cVar10 = '\x01';
  }
  else {
    if ((*(char *)((int)puVar14 + 0x49) != '\x01') || (*(char *)((int)piVar6 + 0x49) != '\x02'))
    goto LAB_000118f8;
    cVar10 = *(char *)((int)piVar6 + 0x49)   //possible issue identified - semgrep
    iVar7 = puVar14[2];
  }
  iVar12 = piVar6[2];
  if (cVar10 == '\x01') {
    iVar16 = piVar6[6];
    iVar8 = piVar6[0x10];
    uVar13 = *(undefined4 *)(iVar12 + 0x1c);
    *(undefined2 *)(iVar7 + 0x42) = *(undefined2 *)(iVar12 + 0x42);
    puVar14[6] = iVar16;
    *(short *)(puVar14 + 0x10) = (short)iVar8;
    *(undefined4 *)(iVar7 + 0x1c) = uVar13;
  }
  else {
    iVar8 = piVar6[7];
    uVar5 = *(undefined2 *)((int)piVar6 + 0x42);
    uVar13 = *(undefined4 *)(iVar12 + 0x18);
    *(undefined2 *)(iVar7 + 0x40) = *(undefined2 *)(iVar12 + 0x40);
    puVar14[7] = iVar8;
    *(undefined2 *)((int)puVar14 + 0x42) = uVar5;
    *(undefined4 *)(iVar7 + 0x18) = uVar13;
  }
  bVar4 = *(byte *)((int)piVar6 + 0x49) | *(byte *)((int)puVar14 + 0x49);
  *(byte *)((int)puVar14 + 0x49) = bVar4;
  *(byte *)(puVar14[2] + 0x49) = bVar4 | *(byte *)(puVar14[2] + 0x49);
  *(undefined4 **)(param_1 + 0x88) = puVar14;
LAB_000118f8:
  kmem_cache_free(sw_turbo_net_cache,piVar6);
  kmem_cache_free(sw_turbo_net_cache,iVar9);
  return -1;
}