int deaggregate_AMSDU_announce(int param_1,int param_2,void *param_3,uint param_4)
{
bool bVar1;
int iVar2;
int iVar3;
uint uVar4;
void *__s2;
uint uVar5;
uint uVar6;
void *__s2_00;
uint uVar7;
int iVar8;
undefined1 local_58;
undefined1 local_57;
undefined1 auStack_54 [6];
undefined1 auStack_4e [6];
undefined1 auStack_48 [8];
uint local_40;
uint local_3c;
int local_38;
uint local_34;
int local_30;
uVar7 = (uint)*(byte *)(param_2 + 0x28);
if ((*(byte *)(param_1 + 0x51aa) <= uVar7) ||
(iVar8 = 4, *(short *)(param_1 + uVar7 * 0x1140 + 0x5924) == 0)) {
iVar8 = 0;
}
local_30 = -iVar8;
local_38 = 0;
local_40 = 0;
local_3c = 0;
while (0xe < param_4) {
uVar4 = (uint)*(byte *)((int)param_3 + 0xc) * 0x100 + (uint)*(byte *)((int)param_3 + 0xd) &
0xffff;
local_34 = uVar4 + 0xe & 0xffff;
local_38 = local_38 + 1;
if ((param_4 < local_34) || (__s2 = (void *)((int)param_3 + 0xe), 0x5ee < uVar4)) break;
iVar3 = memcmp(&SNAP_802_1H,__s2,6);
if ((iVar3 == 0) || (iVar3 = memcmp(&SNAP_BRIDGE_TUNNEL,__s2,6), iVar3 == 0)) {
__s2_00 = (void *)((int)param_3 + 0x14);
iVar3 = memcmp(&IPX,__s2_00,2);
if (((iVar3 == 0) || (iVar3 = memcmp(&APPLE_TALK,__s2_00,2), iVar3 == 0)) &&
(iVar3 = memcmp(&SNAP_802_1H,__s2,6), iVar3 == 0)) goto LAB_00024dd8;
memmove(auStack_54,param_3,6) //possible issue identified - semgrep
memmove(auStack_4e,(void *)((int)param_3 + 6),6) //possible issue identified - semgrep
memmove(auStack_48,__s2_00,2) //possible issue identified - semgrep
uVar4 = uVar4 - 8 & 0xffff;
bVar1 = __s2 == (void *)0x0;
__s2 = (void *)((int)param_3 + 0x16);
if (bVar1) goto LAB_00024e34;
uVar4 = uVar4 + 0xe;
iVar3 = (int)__s2 + (-0xe - iVar8);
}
else {
LAB_00024dd8:
local_58 = (undefined1)(uVar4 >> 8);
local_57 = (undefined1)uVar4;
memmove(auStack_54,param_3,6) //possible issue identified - semgrep
memmove(auStack_4e,(void *)((int)param_3 + 6),6) //possible issue identified - semgrep
memmove(auStack_48,&local_58,2) //possible issue identified - semgrep
LAB_00024e34:
iVar3 = (int)__s2 + local_30;
}
uVar6 = local_40;
if ((uVar7 < *(byte *)(param_1 + 0x51aa)) && (uVar7 < 0x10)) {
iVar2 = param_1 + uVar7 * 0x1140;
uVar5 = (uint)*(ushort *)(iVar2 + 0x5924);
if (uVar5 != 0) {
local_3c = (uint)*(ushort *)(iVar2 + 0x5926);
uVar6 = uVar5;
}
}
VLAN_8023_Header_Copy(uVar6,local_3c,auStack_54,0xe,iVar3,uVar7,&TPID);
iVar3 = ClonePacket(param_1,param_2,iVar3,uVar4 + iVar8 & 0xffff);
if (iVar3 != 0) {
Announce_or_Forward_802_3_Packet(param_1,iVar3,*(undefined1 *)(param_2 + 0x28));
}
uVar4 = local_34 + 3 & 0xfffc;
if (0x5d8 < (uVar4 - 0x20 & 0xffff)) break;
local_40 = uVar6;
if (uVar4 < param_4) {
param_4 = param_4 - uVar4;
param_3 = (void *)((int)param_3 + uVar4);
}
else {
param_4 = 0;
}
}
RTMPFreeNdisPacket(param_1,param_2);
return local_38;
}