/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 sw_conntrack_setup(int param_1,int param_2,int param_3)
{
undefined1 uVar1;
undefined2 uVar2;
short sVar3;
byte bVar4;
undefined2 uVar5;
int iVar6;
int iVar7;
char cVar8;
int *piVar9;
int iVar10;
int iVar11;
undefined4 uVar12;
undefined4 *puVar13;
int *piVar14;
int *piVar15;
int iVar16;
int iVar17;
cVar8 = *(char *)(param_1 + 0x32) //possible issue identified - semgrep
if ((cVar8 != '\x06') && (cVar8 != '\x11')) {
return 0xffffffff;
}
if (param_3 == 0) {
piVar15 = *(int **)(param_1 + 0x88);
if (piVar15 != (int *)0x0) {
local_bh_disable();
if (*piVar15 == 0) {
piVar9 = (int *)piVar15[1];
}
else {
*(int *)(*piVar15 + 4) = piVar15[1];
piVar9 = (int *)piVar15[1];
}
*piVar9 = *piVar15;
piVar9 = (int *)piVar15[2];
iVar10 = *piVar9;
if (iVar10 != 0) {
*(int *)(iVar10 + 4) = piVar9[1];
piVar9 = (int *)piVar15[2];
iVar10 = *piVar9;
}
*(int *)piVar9[1] = iVar10;
kmem_cache_free(sw_turbo_net_cache,piVar15[2]);
kmem_cache_free(sw_turbo_net_cache,piVar15);
local_bh_enable();
*(undefined4 *)(param_1 + 0x88) = 0;
return 0;
}
return 0xffffffff;
}
if (param_3 != 1) {
return 0xffffffff;
}
if ((((param_2 == 4) || (param_2 == 1)) && (_sw_disable_80 != 0)) &&
((cVar8 == '\x06' && (*(short *)(param_1 + 0x30) == 0x5000)))) {
return 0xffffffff;
}
piVar15 = (int *)sw_alloc_entry();
if (piVar15 == (int *)0x0) {
return 0xffffffff;
}
iVar10 = sw_alloc_entry();
if (iVar10 == 0) {
kmem_cache_free(sw_turbo_net_cache,piVar15);
return 0xffffffff;
}
uVar1 = *(undefined1 *)(param_1 + 0x32);
piVar15[2] = iVar10;
*(undefined1 *)(iVar10 + 0x48) = uVar1;
*(undefined1 *)((int)piVar15 + 0x4a) = 0;
*(undefined1 *)(piVar15 + 0x12) = uVar1;
*(int **)(iVar10 + 8) = piVar15;
*(undefined1 *)(iVar10 + 0x4a) = 0;
piVar15[5] = *(int *)(param_1 + 0x20);
iVar6 = *(int *)(param_1 + 0xc);
*(int *)(iVar10 + 0x24) = param_2;
*(undefined4 *)(iVar10 + 0x20) = 0;
*(undefined2 *)(iVar10 + 0x46) = 0;
*(undefined4 *)(iVar10 + 0x28) = 0;
piVar15[4] = iVar6;
piVar15[9] = param_2;
piVar15[8] = 0;
*(undefined2 *)((int)piVar15 + 0x46) = 0;
piVar15[10] = 0;
*(undefined2 *)((int)piVar15 + 0x3e) = *(undefined2 *)(param_1 + 0x30);
*(undefined2 *)(piVar15 + 0xf) = *(undefined2 *)(param_1 + 0x1c);
if (param_2 == 4) {
uVar5 = *(undefined2 *)(param_1 + 0x60);
LAB_000118a0:
*(undefined2 *)(piVar15 + 0x10) = uVar5;
}
else {
if (param_2 == 1) {
uVar5 = *(undefined2 *)(param_1 + 0x60);
goto LAB_000118a0;
}
*(undefined2 *)((int)piVar15 + 0x42) = *(undefined2 *)(param_1 + 0x4c);
}
piVar15[0x16] = -1;
*(undefined4 *)(iVar10 + 0x58) = 0xffffffff;
*(int *)(iVar10 + 0xc) = param_1;
piVar15[0x13] = 0;
piVar15[0x14] = 0;
piVar15[0x15] = 0;
piVar15[3] = param_1;
*(undefined4 *)(iVar10 + 0x4c) = 0;
*(undefined4 *)(iVar10 + 0x50) = 0;
*(undefined4 *)(iVar10 + 0x54) = 0;
if ((param_2 == 4) || (param_2 == 1)) {
*(undefined1 *)((int)piVar15 + 0x49) = 1;
iVar7 = *(int *)(param_1 + 0x50);
iVar6 = piVar15[0x10];
*(int *)(iVar10 + 0x14) = iVar7;
*(short *)(iVar10 + 0x3e) = (short)iVar6;
uVar5 = *(undefined2 *)((int)piVar15 + 0x3e);
*(int *)(iVar10 + 0x10) = piVar15[5];
iVar11 = piVar15[4];
*(undefined2 *)(iVar10 + 0x3c) = uVar5;
iVar6 = piVar15[0xf];
*(int *)(iVar10 + 0x1c) = iVar11;
*(short *)(iVar10 + 0x42) = (short)iVar6;
*(undefined1 *)(iVar10 + 0x49) = 2;
piVar15[6] = iVar7;
}
else {
iVar6 = piVar15[0xf];
*(undefined1 *)((int)piVar15 + 0x49) = 2;
iVar11 = *(int *)(param_1 + 0x3c);
*(int *)(iVar10 + 0x14) = piVar15[4];
*(short *)(iVar10 + 0x3e) = (short)iVar6;
uVar5 = *(undefined2 *)((int)piVar15 + 0x42);
iVar6 = piVar15[5];
uVar2 = *(undefined2 *)((int)piVar15 + 0x3e);
*(int *)(iVar10 + 0x10) = iVar11;
*(undefined2 *)(iVar10 + 0x3c) = uVar5;
*(int *)(iVar10 + 0x18) = iVar6;
*(undefined2 *)(iVar10 + 0x40) = uVar2;
*(undefined1 *)(iVar10 + 0x49) = 1;
piVar15[7] = iVar11;
}
iVar17 = piVar15[4];
iVar6 = piVar15[0xf];
iVar16 = piVar15[5];
sVar3 = *(short *)((int)piVar15 + 0x3e) //possible issue identified - semgrep
iVar11 = piVar15[0x12];
iVar7 = sw_turbo_hash_fn(iVar17,(short)iVar6,iVar16,sVar3,(char)iVar11);
puVar13 = (undefined4 *)(&sw_turbo_hash)[iVar7];
while( true ) {
while( true ) {
while( true ) {
while( true ) {
while( true ) {
if (puVar13 == (undefined4 *)0x0) {
local_bh_disable();
piVar9 = &sw_turbo_hash + iVar7;
iVar10 = *piVar9;
piVar15[1] = (int)piVar9;
*piVar15 = iVar10;
if (*piVar9 != 0) {
*(int **)(*piVar9 + 4) = piVar15;
}
(&sw_turbo_hash)[iVar7] = piVar15;
piVar14 = (int *)piVar15[2];
iVar10 = sw_turbo_hash_fn(piVar14[4],(short)piVar14[0xf],piVar14[5],
*(undefined2 *)((int)piVar14 + 0x3e),(char)piVar14[0x12]);
piVar9 = &sw_turbo_hash + iVar10;
iVar6 = piVar15[2];
*piVar14 = *piVar9;
*(int **)(iVar6 + 4) = piVar9;
if (*piVar9 != 0) {
*(int *)(*piVar9 + 4) = iVar6;
}
(&sw_turbo_hash)[iVar10] = piVar15[2];
local_bh_enable();
*(int **)(param_1 + 0x88) = piVar15;
return 0;
}
if (puVar13[4] == iVar17) break;
puVar13 = (undefined4 *)*puVar13;
}
if (*(short *)(puVar13 + 0xf) == (short)iVar6) break;
puVar13 = (undefined4 *)*puVar13;
}
if (puVar13[5] == iVar16) break;
puVar13 = (undefined4 *)*puVar13;
}
if (*(short *)((int)puVar13 + 0x3e) == sVar3) break;
puVar13 = (undefined4 *)*puVar13;
}
if (*(char *)(puVar13 + 0x12) == (char)iVar11) break;
puVar13 = (undefined4 *)*puVar13;
}
if ((*(char *)((int)puVar13 + 0x49) == '\x02') && (*(char *)((int)piVar15 + 0x49) == '\x01')) {
iVar6 = puVar13[2];
cVar8 = '\x01';
}
else {
if ((*(char *)((int)puVar13 + 0x49) != '\x01') || (*(char *)((int)piVar15 + 0x49) != '\x02'))
goto LAB_000118f8;
cVar8 = *(char *)((int)piVar15 + 0x49) //possible issue identified - semgrep
iVar6 = puVar13[2];
}
iVar11 = piVar15[2];
if (cVar8 == '\x01') {
iVar16 = piVar15[6];
iVar7 = piVar15[0x10];
uVar12 = *(undefined4 *)(iVar11 + 0x1c);
*(undefined2 *)(iVar6 + 0x42) = *(undefined2 *)(iVar11 + 0x42);
puVar13[6] = iVar16;
*(short *)(puVar13 + 0x10) = (short)iVar7;
*(undefined4 *)(iVar6 + 0x1c) = uVar12;
}
else {
iVar7 = piVar15[7];
uVar5 = *(undefined2 *)((int)piVar15 + 0x42);
uVar12 = *(undefined4 *)(iVar11 + 0x18);
*(undefined2 *)(iVar6 + 0x40) = *(undefined2 *)(iVar11 + 0x40);
puVar13[7] = iVar7;
*(undefined2 *)((int)puVar13 + 0x42) = uVar5;
*(undefined4 *)(iVar6 + 0x18) = uVar12;
}
bVar4 = *(byte *)((int)piVar15 + 0x49) | *(byte *)((int)puVar13 + 0x49);
*(byte *)((int)puVar13 + 0x49) = bVar4;
*(byte *)(puVar13[2] + 0x49) = bVar4 | *(byte *)(puVar13[2] + 0x49);
*(undefined4 **)(param_1 + 0x88) = puVar13;
LAB_000118f8:
kmem_cache_free(sw_turbo_net_cache,piVar15);
kmem_cache_free(sw_turbo_net_cache,iVar10);
return 0xffffffff;
}