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