/* 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;
}