void * MacTableInsertEntry(int param_1,byte *param_2,byte param_3,uint param_4,byte param_5)
{
byte bVar1;
char cVar2;
int iVar3;
int *piVar4;
uint uVar5;
void *__src;
int iVar6;
uint uVar7;
void *__dest;
uint uVar8;
void *__s;
int iVar9;
undefined1 auStack_40 [8];
int local_38;
uint local_34;
uint local_30;
local_30 = (uint)param_5;
local_34 = param_4 & 0xff;
uVar7 = (uint)param_3;
if (0x1f < *(ushort *)(param_1 + 0x71338)) {
return (void *)0x0;
}
uVar8 = 1;
local_bh_disable();
piVar4 = (int *)(param_1 + 0x5d958);
iVar3 = *piVar4;
while (piVar4 = piVar4 + 0x288, iVar3 != 0) {
uVar8 = uVar8 + 1;
if (uVar8 == 0x20) {
__s = (void *)0x0;
goto LAB_00024bd0;
}
iVar3 = *piVar4;
}
iVar3 = uVar8 * 0xa20;
local_38 = param_1 + iVar3 + 0x5d0f4;
iVar9 = param_1 + iVar3 + 0x5cf40;
__s = (void *)(param_1 + iVar3 + 0x5cf38);
RTMPCancelTimer(local_38,auStack_40);
RTMPCancelTimer(iVar9,auStack_40);
memset(__s,0,0xa20) //possible issue identified - semgrep
if (local_30 == 1) {
iVar3 = param_1 + iVar3;
*(undefined1 *)(iVar3 + 0x5d285) = 3;
*(undefined1 *)(iVar3 + 0x5d284) = 3;
memset(__s,0,0xa20) //possible issue identified - semgrep
*(undefined1 *)(iVar3 + 0x5d170) = 0;
*(undefined1 *)(iVar3 + 0x5d171) = 0;
bVar1 = *(byte *)(param_1 + 0x51aa);
}
else {
bVar1 = *(byte *)(param_1 + 0x51aa);
}
if ((((uVar7 < bVar1) && (uVar7 == 0)) && (*(byte *)(param_1 + 0x51d6) != 0)) &&
(*(byte *)(param_1 + 0x51d6) <= *(byte *)(param_1 + 0x51d7))) {
if (1 < RTDebugLevel) {
printk("%s: The connection table is full in ra%d.\n","MacTableInsertEntry",0);
}
local_bh_enable();
return (void *)0x0;
}
iVar3 = uVar8 * 0xa20 + param_1;
*(undefined4 *)(iVar3 + 0x5cf38) = 1;
*(undefined1 *)(iVar3 + 0x5cf3d) = 0;
RTMPInitTimer(param_1,iVar9,rtmp_timer_EnqueueStartForPSKExec,__s,0);
if (*(int *)(iVar3 + 0x5cf38) == 1) {
RTMPInitTimer(param_1,local_38,rtmp_timer_WPARetryExec,__s,0);
}
iVar3 = param_1 + uVar8 * 0xa20;
*(int *)(iVar3 + 0x5d174) = param_1;
*(undefined1 *)(iVar3 + 0x5cf68) = 0;
*(undefined1 *)(iVar3 + 0x5cf3e) = 0;
*(undefined1 *)(iVar3 + 0x5cf6a) = 0;
memset((void *)(param_1 + uVar8 * 0xa20 + 0x5d0aa),0,8) //possible issue identified - semgrep
iVar9 = *(int *)(iVar3 + 0x5cf38);
*(undefined1 *)(iVar3 + 0x5d0f2) = 0;
if (iVar9 == 4) {
cVar2 = param_3 - 0x30 //possible issue identified - semgrep
}
else if (iVar9 == 3) {
cVar2 = param_3 - 0x20 //possible issue identified - semgrep
}
else {
if (iVar9 != 2) {
*(byte *)(iVar3 + 0x5cf69) = param_3;
goto LAB_00024828;
}
cVar2 = param_3 - 0x10 //possible issue identified - semgrep
}
*(char *)(iVar3 + 0x5cf69) = cVar2;
LAB_00024828:
if ((uVar7 < *(byte *)(param_1 + 0x51aa)) && (uVar7 == 0)) {
iVar3 = uVar8 * 0xa20 + param_1;
*(uint *)(iVar3 + 0x5d8b4) = (uint)*(byte *)(iVar3 + 0x5cf69) * 0x1140 + param_1 + 0x51ac;
}
else {
*(undefined4 *)(uVar8 * 0xa20 + param_1 + 0x5d8b4) = 0;
if (uVar7 != 0) {
if (RTDebugLevel == 0) {
uVar7 = 0;
}
else {
printk("%s> Error! apidx = %d > MAX_MBSSID_NUM!\n","MacTableInsertEntry",uVar7);
uVar7 = 0;
}
}
}
iVar9 = uVar7 * 0x1140 + param_1;
uVar5 = *(uint *)(iVar9 + 0x51dc);
iVar3 = uVar8 * 0xa20 + param_1;
*(uint *)(iVar3 + 0x5d11c) = uVar5;
*(undefined4 *)(iVar3 + 0x5d120) = *(undefined4 *)(iVar9 + 0x51e0);
*(undefined4 *)(iVar3 + 0x5d124) = *(undefined4 *)(iVar9 + 0x51e4);
if (uVar5 < 3) {
*(undefined1 *)(iVar3 + 0x5d128) = 0;
}
else {
*(undefined1 *)(iVar3 + 0x5d128) = 3;
}
iVar6 = uVar8 * 0xa20;
iVar3 = param_1 + iVar6;
*(undefined4 *)(iVar3 + 0x5d12c) = 0;
iVar9 = param_1 + uVar7 * 0x1140;
*(undefined4 *)(iVar3 + 0x5d1d8) = *(undefined4 *)(param_1 + 0x168c0);
*(char *)(iVar9 + 0x51d7) = *(char *)(iVar9 + 0x51d7) + '\x01';
__dest = (void *)(param_1 + iVar6 + 0x5d190);
*(char *)(param_1 + 0x168c8) = *(char *)(param_1 + 0x168c8) + '\x01';
*(undefined4 *)(iVar3 + 0x5d178) = 0xff;
*(undefined2 *)(iVar3 + 0x5d12a) = 2;
*(undefined1 *)(iVar3 + 0x5d129) = 0;
*(undefined1 *)(iVar3 + 0x5d171) = 0;
*(undefined1 *)(iVar3 + 0x5d170) = 0;
memcpy(__dest,param_2,6) //possible issue identified - semgrep
memcpy((void *)((int)__dest + 6),param_2,6) //possible issue identified - semgrep
if (local_34 == 1) {
__src = (void *)(param_1 + uVar7 * 0x1140 + 0x51ac);
memcpy((void *)(param_1 + iVar6 + 0x5d19c),__src,6) //possible issue identified - semgrep
memcpy((void *)(param_1 + iVar6 + 0x5d1a2),__src,6) //possible issue identified - semgrep
}
iVar3 = uVar8 * 0xa20 + param_1;
*(undefined4 *)(iVar3 + 0x5d8ac) = 5;
*(undefined4 *)(iVar3 + 0x5d1ac) = 0;
*(undefined4 *)(iVar3 + 0x5d1b0) = 0;
*(short *)(iVar3 + 0x5d1b6) = (short)uVar8;
*(undefined2 *)(iVar3 + 0x5d1b8) = 0;
*(undefined1 *)(iVar3 + 0x5d1a8) = 0;
*(undefined4 *)(iVar3 + 0x5d1c4) = 0;
*(undefined4 *)(iVar3 + 0x5d1bc) = 0;
*(undefined4 *)(iVar3 + 0x5d314) = 0;
*(undefined4 *)(iVar3 + 0x5d320) = 0;
*(undefined4 *)(iVar3 + 0x5d1cc) = 0;
*(undefined4 *)(iVar3 + 0x5d1c8) = 0;
*(undefined4 *)(iVar3 + 0x5d1d0) = 0;
if (*(int *)(iVar3 + 0x5cf38) == 1) {
*(undefined1 *)(iVar3 + 0x5d1e4) = 0;
*(undefined4 *)(iVar3 + 0x5d1ec) = 0;
*(undefined4 *)(iVar3 + 0x5d1e8) = 0;
*(undefined4 *)(iVar3 + 0x5d1f0) = 0;
*(undefined4 *)(iVar3 + 0x5d1f8) = 0;
*(undefined4 *)(iVar3 + 0x5d1f4) = 0;
*(undefined4 *)(iVar3 + 0x5d1fc) = 0;
*(undefined4 *)(iVar3 + 0x5d204) = 0;
*(undefined4 *)(iVar3 + 0x5d200) = 0;
*(undefined4 *)(iVar3 + 0x5d208) = 0;
*(undefined4 *)(iVar3 + 0x5d210) = 0;
*(undefined4 *)(iVar3 + 0x5d20c) = 0;
*(undefined4 *)(iVar3 + 0x5d214) = 0;
*(undefined2 *)(iVar3 + 0x5d220) = 0;
*(undefined4 *)(iVar3 + 0x5d21c) = 0;
*(undefined1 *)(iVar3 + 0x5d223) = 0;
*(undefined1 *)(iVar3 + 0x5d222) = 0;
if (2 < RTDebugLevel) {
printk("uapsd> MaxSPLength = 0!\n");
}
}
*(short *)(param_1 + 0x71338) = *(short *)(param_1 + 0x71338) + 1;
AsicRemovePairwiseKeyEntry(param_1,uVar8 & 0xff);
AsicUpdateRxWCIDTable(param_1,*(undefined2 *)(uVar8 * 0xa20 + param_1 + 0x5d1b6),__dest);
if (2 < RTDebugLevel) {
printk("MacTableInsertEntry - allocate entry #%d, Total= %d\n",uVar8,
*(undefined2 *)(param_1 + 0x71338));
}
if (__s != (void *)0x0) {
piVar4 = (int *)(param_1 +
((byte)(param_2[1] ^ param_2[2] ^ *param_2 ^ param_2[3] ^ param_2[4] ^
param_2[5]) + 0x172ce) * 4);
iVar3 = *piVar4;
if (iVar3 == 0) {
*piVar4 = (int)__s;
}
else {
do {
iVar9 = iVar3;
iVar3 = *(int *)(iVar9 + 0x478);
} while (iVar3 != 0);
*(void **)(iVar9 + 0x478) = __s;
}
}
LAB_00024bd0:
local_bh_enable();
return __s;
}