undefined4
RTMPCheckEtherType(int param_1,int param_2,int param_3,undefined4 param_4,byte *param_5,
byte *param_6)
{
short sVar1;
bool bVar2;
byte bVar3;
undefined1 uVar4;
uint uVar5;
uint uVar6;
ushort *puVar7;
int iVar8;
uint uVar9;
byte local_30;
byte local_2f [11];
if (((*(char *)(param_1 + 0x5b30) != '\0') ||
(bVar2 = false, (*(uint *)(param_1 + 0x16abc) & 0x100) != 0)) && (bVar2 = false, param_3 != 0)
) {
sVar1 = *(short *)(param_3 + 0x27e) //possible issue identified - semgrep
bVar2 = sVar1 == 0;
if (((ushort)(sVar1 - 1U) < 0x1f) && (bVar2 = true, (*(uint *)(param_3 + 0x414) & 1) == 0)) {
bVar2 = sVar1 == 0;
}
}
iVar8 = *(int *)(param_2 + 0x9c);
uVar9 = *(uint *)(param_2 + 0x4c);
if (iVar8 == 0) {
printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/cmm_data.c:%d assert pSrcBuffailed\n"
,0xb20);
}
*(undefined1 *)(param_2 + 0x2d) = 0;
uVar6 = (uint)CONCAT11(*(undefined1 *)(iVar8 + 0xc),*(undefined1 *)(iVar8 + 0xd));
puVar7 = (ushort *)(iVar8 + 0xe);
if (0x5dc < uVar6) {
LAB_00023690:
if (uVar6 == 0x8100) {
if (*(ushort *)(param_1 + 0x5924) == 0) {
bVar3 = *(byte *)(param_2 + 0x2d);
}
else {
if (((*puVar7 & 0xf) << 8 | (uint)(*puVar7 >> 8)) != (uint)*(ushort *)(param_1 + 0x5924)) {
return 0;
}
bVar3 = *(byte *)(param_2 + 0x2d);
}
*(byte *)(param_2 + 0x2d) = bVar3 | 0x10;
Sniff2BytesFromNdisBuffer(puVar7,2,&local_30,local_2f);
if (bVar2) {
bVar3 = (byte)*puVar7 >> 5;
*param_5 = bVar3;
*param_6 = *(byte *)((int)&MapUserPriorityToAccessCategory + (uint)bVar3);
}
uVar6 = (uint)local_30 * 0x100 + (uint)local_2f[0] & 0xffff;
puVar7 = puVar7 + 2;
goto LAB_000237c4;
}
if (uVar6 != 0x800) goto LAB_00023778;
if (bVar2) {
if ((*puVar7 & 0xf0) == 0x40) {
*param_5 = *(byte *)((int)puVar7 + 1) >> 5;
bVar3 = *param_5;
}
else {
bVar3 = *param_5;
}
*param_6 = *(byte *)((int)&MapUserPriorityToAccessCategory + (uint)bVar3);
goto LAB_00023804;
}
bVar3 = *(byte *)(param_2 + 0x2d);
goto LAB_0002382c;
}
if (((*(char *)(iVar8 + 0xe) == -0x56) && (*(char *)(iVar8 + 0xf) == -0x56)) &&
(*(char *)(iVar8 + 0x10) == '\x03')) {
Sniff2BytesFromNdisBuffer(puVar7,6,&local_30,local_2f);
*(byte *)(param_2 + 0x2d) = *(byte *)(param_2 + 0x2d) | 0x20;
uVar6 = (uint)local_30 * 0x100 + (uint)local_2f[0] & 0xffff;
puVar7 = (ushort *)(iVar8 + 0x16);
goto LAB_00023690;
}
LAB_00023778:
if (uVar6 == 0x86dd) {
uVar6 = 0x86dd;
if (bVar2) {
if (((byte)*puVar7 & 0xf0) == 0x60) {
*param_5 = (byte)(((uint)(byte)*puVar7 << 0x1c) >> 0x1d);
bVar3 = *param_5;
}
else {
bVar3 = *param_5;
}
*param_6 = *(byte *)((int)&MapUserPriorityToAccessCategory + (uint)bVar3);
LAB_000238fc:
if (bVar2) {
uVar6 = 0x86dd;
if ((*puVar7 & 0xf0) != 0x60) {
*param_5 = 0;
*param_6 = 0;
}
}
else {
uVar6 = 0x86dd;
}
}
goto LAB_00023938;
}
LAB_000237c4:
if (uVar6 == 0x806) {
bVar3 = *(byte *)(param_2 + 0x2d);
LAB_00023920:
bVar3 = bVar3 | 1;
LAB_0002392c:
*(byte *)(param_2 + 0x2d) = bVar3;
}
else {
uVar4 = (undefined1)(uVar6 >> 8);
if (0x806 < uVar6) {
if (uVar6 == 0x86dd) goto LAB_000238fc;
if (uVar6 != 0x888e) goto LAB_0002393c;
bVar3 = *(byte *)(param_2 + 0x2d) | 2;
goto LAB_0002392c;
}
if (uVar6 != 0x800) goto LAB_0002393c;
LAB_00023804:
if (bVar2) {
if ((*puVar7 & 0xf0) == 0x40) {
bVar3 = *(byte *)(param_2 + 0x2d);
goto LAB_0002382c;
}
*param_5 = 0;
*param_6 = 0;
}
else {
bVar3 = *(byte *)(param_2 + 0x2d);
LAB_0002382c:
*(byte *)(param_2 + 0x2d) = bVar3 | 4;
}
if (uVar9 < 0x23) {
printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/cmm_data.c:%d assert (pktLen > 34)failed\n"
,0xbd0);
bVar3 = *(byte *)((int)puVar7 + 9);
}
else {
bVar3 = *(byte *)((int)puVar7 + 9);
}
uVar6 = 0x800;
if (bVar3 == 0x11) {
if (uVar9 < 0x23) {
printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/cmm_data.c:%d assert (pktLen > 34)failed\n"
,0xbd3);
}
uVar9 = (puVar7[10] & 0xff) << 8 | (uint)*(byte *)((int)puVar7 + 0x15);
uVar5 = (puVar7[0xb] & 0xff) << 8 | (uint)(puVar7[0xb] >> 8);
if (uVar9 == 0x44) {
if (uVar5 == 0x43) {
bVar3 = *(byte *)(param_2 + 0x2d);
LAB_000238f4:
uVar6 = 0x800;
goto LAB_00023920;
}
uVar6 = 0x800;
}
else {
uVar6 = 0x800;
if (uVar9 == 0x43) {
if (uVar5 != 0x44) {
uVar4 = 8;
goto LAB_0002393c;
}
bVar3 = *(byte *)(param_2 + 0x2d);
goto LAB_000238f4;
}
}
}
}
LAB_00023938:
uVar4 = (undefined1)(uVar6 >> 8);
LAB_0002393c:
*(undefined1 *)(param_2 + 0x3a) = uVar4;
*(char *)(param_2 + 0x39) = (char)uVar6;
if (*(char *)(param_1 + (uint)*param_6 + 0x16aac) != '\0') {
*param_5 = 0;
*param_6 = 0;
}
return 1;
}