/* WARNING: Removing unreachable block (ram,0x00013b54) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 sw_net_rx_action(int param_1)
{
undefined1 uVar1;
ushort uVar2;
short sVar3;
short sVar4;
undefined2 uVar5;
bool bVar6;
byte bVar7;
char cVar8;
int iVar9;
uint uVar10;
code *pcVar11;
undefined4 uVar12;
char cVar13;
undefined4 *puVar14;
int *piVar15;
uint uVar16;
uint *puVar17;
int iVar18;
uint *puVar19;
int iVar20;
int iVar21;
undefined4 uVar22;
undefined4 *puVar23;
uint uVar24;
undefined4 local_48;
uint local_44;
uint local_40;
uint local_3c;
uint local_38;
undefined4 *local_34;
uint local_30;
if ((*(uint *)(param_1 + 0x60) & 0xffff0700) != 0x80000) {
return 0;
}
if (*(int *)(param_1 + 0xa4) != 1) {
return 0;
}
if ((*(uint *)(param_1 + 0x60) & 2) == 0) {
iVar9 = *(int *)(param_1 + 0x50);
}
else {
if ((**(uint **)(param_1 + 0x94) & 0xffff) != 1) {
return 0;
}
iVar9 = *(int *)(param_1 + 0x50);
}
if (iVar9 != 0) {
return 0;
}
uVar16 = *(uint *)(param_1 + 0x4c);
if (uVar16 < 0x14) {
return 0;
}
uVar2 = *(ushort *)((int)*(uint **)(param_1 + 0x88) + 2);
uVar10 = (uVar2 & 0xff) << 8 | (uint)(uVar2 >> 8);
if (uVar16 < uVar10) {
return 0;
}
if (uVar10 < (**(uint **)(param_1 + 0x88) & 0xf) << 2) {
return 0;
}
if (uVar10 < uVar16) {
*(uint *)(param_1 + 0x90) = *(int *)(param_1 + 0x9c) + uVar10;
*(uint *)(param_1 + 0x4c) = uVar10;
if ((*(uint *)(param_1 + 0x60) & 0xc) == 0xc) {
*(uint *)(param_1 + 0x60) = *(uint *)(param_1 + 0x60) & 0xfffffff3;
}
puVar17 = *(uint **)(param_1 + 0x88);
}
else {
puVar17 = *(uint **)(param_1 + 0x88);
}
if ((byte)puVar17[2] < 2) {
return 0;
}
if ((*puVar17 & 0xf) != 5) {
return 0;
}
if ((*puVar17 & 0xf0) != 0x40) {
return 0;
}
if ((*(ushort *)((int)puVar17 + 6) & 0xff3f) != 0) {
return 0;
}
uVar16 = (uint)*(byte *)((int)puVar17 + 9);
uVar24 = puVar17[4];
uVar10 = puVar17[3];
if (uVar16 == 6) {
if (*(uint *)(param_1 + 0x4c) < 0x28) {
return 0;
}
iVar9 = *(int *)(param_1 + 0x9c);
if ((*(uint *)(iVar9 + 0x20) & 0x700) != 0) {
return 0;
}
sVar4 = *(short *)(iVar9 + 0x16) //possible issue identified - semgrep
sVar3 = *(short *)(iVar9 + 0x14) //possible issue identified - semgrep
}
else {
if (uVar16 != 0x11) {
return 0;
}
if (*(uint *)(param_1 + 0x4c) < 0x1c) {
return 0;
}
sVar3 = *(short *)(*(int *)(param_1 + 0x9c) + 0x14) //possible issue identified - semgrep
sVar4 = *(short *)(*(int *)(param_1 + 0x9c) + 0x16) //possible issue identified - semgrep
}
iVar9 = sw_turbo_hash_fn(uVar10,sVar3,uVar24,sVar4,uVar16);
puVar23 = (undefined4 *)(&sw_turbo_hash)[iVar9];
while( true ) {
while( true ) {
while( true ) {
while( true ) {
while( true ) {
if (puVar23 == (undefined4 *)0x0) {
return 0;
}
if (puVar23[4] == uVar10) break;
puVar23 = (undefined4 *)*puVar23;
}
if (*(short *)(puVar23 + 0xf) == sVar3) break;
puVar23 = (undefined4 *)*puVar23;
}
if (puVar23[5] == uVar24) break;
puVar23 = (undefined4 *)*puVar23;
}
if (*(short *)((int)puVar23 + 0x3e) == sVar4) break;
puVar23 = (undefined4 *)*puVar23;
}
local_30 = (uint)*(byte *)(puVar23 + 0x12);
if (local_30 == uVar16) break;
puVar23 = (undefined4 *)*puVar23;
}
if (alphaautoqos == (int *)0x0) {
iVar9 = puVar23[0x16];
}
else {
iVar9 = *alphaautoqos;
if (iVar9 == 0) {
iVar9 = puVar23[0x16];
}
else {
if (iVar9 == 1) {
if (puVar23[0x14] == 0) {
if ((x_37712 == (int *)0x0) || (*x_37712 == 0)) {
blacklistx = (int *)blacklist_init(0x1e);
x_37712 = blacklistx;
}
if ((y_37713 == (int *)0x0) || (*y_37713 == 0)) {
blacklisty = (int *)blacklist_init(0x1e);
y_37713 = blacklisty;
}
if (x_37712 == (int *)0x0) {
iVar9 = puVar23[0x14];
}
else {
if (*x_37712 != 0) {
if (y_37713 == (int *)0x0) {
iVar9 = puVar23[0x14];
goto LAB_00012b40;
}
if (*y_37713 != 0) {
if (*(char *)((int)puVar23 + 0x49) == '\x01') {
uVar22 = puVar23[5];
uVar5 = *(undefined2 *)((int)puVar23 + 0x3e);
}
else {
uVar22 = puVar23[4];
uVar5 = *(undefined2 *)(puVar23 + 0xf);
}
iVar9 = blacklist_search(x_37712,uVar22,uVar5);
if (iVar9 != -1) {
iVar9 = puVar23[2];
puVar23[0x14] = 4;
puVar23[0x15] = 4;
*(undefined4 *)(iVar9 + 0x50) = 4;
*(undefined4 *)(iVar9 + 0x54) = 4;
}
}
}
iVar9 = puVar23[0x14];
}
LAB_00012b40:
if (iVar9 == 0) {
iVar9 = findsrdsentry_from123
(*(undefined2 *)(puVar23 + 0xf),*(undefined2 *)((int)puVar23 + 0x3e));
if (iVar9 < 0) {
iVar9 = 3;
}
puVar23[0x14] = iVar9;
if (puVar23[0x14] - 1 < 4) {
uVar22 = puVar23[0x14];
}
else {
puVar23[0x14] = 4;
uVar22 = puVar23[0x14];
}
iVar9 = puVar23[2];
puVar23[0x15] = uVar22;
*(undefined4 *)(iVar9 + 0x50) = uVar22;
*(undefined4 *)(iVar9 + 0x54) = uVar22;
if (qosdebug != 0) {
printk(&_LC47) //possible issue identified - semgrep
}
}
}
iVar9 = *(int *)(param_1 + 0xc);
if (lastsec_37717 == 0) {
net_enable_timestamp();
}
if (iVar9 - lastsec_37717 < 0xb) {
uVar16 = *(uint *)(param_1 + 0x4c);
}
else {
uVar10 = alphaautoqos[2] * 500;
uVar16 = alphaautoqos[1] * 500;
lastsec_37717 = iVar9;
if (qosdebug != 0) {
printk(&_LC48) //possible issue identified - semgrep
}
if ((((x_37712 != (int *)0x0) && (*x_37712 != 0)) && (y_37713 != (int *)0x0)) &&
(*y_37713 != 0)) {
enter_37725 = enter_37725 + 1;
if (enter_37725 % 0x13 == 0) {
addsrdsentry_frommqos();
}
if (enter_37725 % 0x13 == 0) {
printsrdsentry_from123();
}
if (enter_37725 % 0xd == 0) {
blacklist_print(y_37713);
}
if (enter_37725 % 5 == 0) {
blacklist_print(x_37712);
}
if (enter_37725 % 0x25 == 0) {
blacklist_testandclear(y_37713);
}
if (enter_37725 % 0x151 == 0) {
blacklist_testandclear(x_37712);
}
}
if (uVar16 == 0) {
local_40 = 500000;
}
else {
local_40 = 500000;
if ((int)uVar16 < 0x7a121) {
local_40 = uVar16;
}
}
if (uVar10 == 0) {
uVar16 = 500000;
}
else {
uVar16 = 500000;
if ((int)uVar10 < 0x7a121) {
uVar16 = uVar10;
}
}
local_34 = &sw_turbo_hash;
iVar9 = 0;
do {
for (puVar14 = (undefined4 *)*local_34; puVar14 != (undefined4 *)0x0;
puVar14 = (undefined4 *)*puVar14) {
local_3c = local_40;
local_38 = uVar16;
if (*(char *)((int)puVar14 + 0x49) == '\x01') {
local_3c = uVar16;
local_38 = local_40;
}
if ((x_37712 == (int *)0x0) || (*x_37712 == 0)) {
LAB_00013000:
uVar10 = puVar14[0x13];
}
else if (y_37713 == (int *)0x0) {
uVar10 = puVar14[0x13];
}
else {
if (*y_37713 == 0) goto LAB_00013000;
if (*(char *)((int)puVar14 + 0x49) == '\x01') {
uVar22 = puVar14[5];
uVar5 = *(undefined2 *)((int)puVar14 + 0x3e);
}
else {
uVar22 = puVar14[4];
uVar5 = *(undefined2 *)(puVar14 + 0xf);
}
iVar20 = blacklist_search(x_37712,uVar22,uVar5);
if (iVar20 == -1) {
iVar20 = blacklist_search(y_37713,uVar22,uVar5);
if (iVar20 == -1) {
iVar20 = blacklist_insert(y_37713,uVar22,uVar5);
if (iVar20 == -1) {
blacklist_freeall(y_37713);
goto LAB_00013000;
}
uVar10 = puVar14[0x13];
}
else {
if (local_38 < (uint)puVar14[0x13]) {
if ((-1 < iVar20) || (iVar20 <= y_37713[1])) {
iVar21 = iVar20 * 0x14 + *y_37713;
uVar10 = *(uint *)(iVar21 + 4);
if (uVar10 < 999) {
*(uint *)(iVar21 + 4) = uVar10 + 2;
}
}
}
else if ((-1 < iVar20) || (iVar20 <= y_37713[1])) {
iVar18 = iVar20 * 0x14 + *y_37713;
iVar21 = *(int *)(iVar18 + 4);
if (iVar21 != 0) {
*(int *)(iVar18 + 4) = iVar21 + -1;
}
}
if ((iVar20 < 0) && (y_37713[1] < iVar20)) {
uVar10 = puVar14[0x13];
}
else if (*(uint *)(iVar20 * 0x14 + *y_37713 + 4) < 0xb) {
uVar10 = puVar14[0x13];
}
else {
if (qosdebug != 0) {
printk("<=========FOUND BLACKLIST %x %d\n",uVar22,uVar5);
}
iVar20 = blacklist_insert(x_37712,uVar22,uVar5);
if (iVar20 == -1) {
blacklist_freeone(x_37712);
uVar10 = puVar14[0x13];
}
else {
uVar10 = puVar14[0x13];
}
}
}
}
else {
uVar10 = puVar14[0x13];
}
}
if ((local_38 < uVar10) || (local_3c < *(uint *)(puVar14[2] + 0x4c))) {
if (qosdebug == 0) {
iVar20 = puVar14[2];
}
else {
printk("<---bad guy %d-[%d]%d-%d\n",iVar9,uVar10,*(undefined2 *)(puVar14 + 0xf),
*(undefined2 *)((int)puVar14 + 0x3e));
iVar20 = puVar14[2];
}
puVar14[0x14] = 4;
*(undefined4 *)(iVar20 + 0x50) = 4;
uVar10 = puVar14[0x13];
}
else {
uVar10 = puVar14[0x13];
}
if (uVar10 < 9999) {
if (*(uint *)(puVar14[2] + 0x4c) < 9999) {
puVar14[0x14] = puVar14[0x15];
*(undefined4 *)(puVar14[2] + 0x50) = puVar14[0x15];
puVar14[0x13] = 0;
}
else {
puVar14[0x13] = 0;
}
}
else {
puVar14[0x13] = 0;
}
}
iVar9 = iVar9 + 1;
local_34 = local_34 + 1;
} while (iVar9 != 0x2000);
uVar16 = *(uint *)(param_1 + 0x4c);
}
if ((uVar16 & 0xfffff000) == 0) {
iVar9 = puVar23[0x13];
}
else {
if (qosdebug != 0) {
printk(&_LC51) //possible issue identified - semgrep
}
uVar16 = 0;
iVar9 = puVar23[0x13];
}
puVar23[0x13] = iVar9 + uVar16;
if ((puVar23[0x14] & 0xfffffff8) != 0) {
puVar23[0x14] = 0;
if (qosdebug == 0) {
uVar22 = puVar23[0x14];
goto LAB_00013160;
}
printk(&_LC52) //possible issue identified - semgrep
}
uVar22 = puVar23[0x14];
}
else {
uVar22 = 0;
if (iVar9 == 2) {
uVar22 = search_mqos_prio(puVar23);
}
}
LAB_00013160:
uVar16 = process_prec(uVar22);
iVar9 = *(int *)(param_1 + 0x88);
if ((*(byte *)(iVar9 + 1) & 0xe0) == uVar16) {
iVar9 = puVar23[0x16];
}
else {
if ((*(uint *)(param_1 + 0x60) & 2) == 0) {
uVar10 = (uint)*(byte *)(iVar9 + 1);
}
else if ((**(uint **)(param_1 + 0x94) & 0xffff) == 1) {
uVar10 = (uint)*(byte *)(iVar9 + 1);
}
else if (*(int *)(param_1 + 0x10) == 0) {
iVar9 = skb_copy(param_1,0x20);
if (iVar9 == 0) {
printk("may be need nf_drop ?\n");
}
kfree_skb(param_1);
iVar9 = *(int *)(iVar9 + 0x88);
uVar10 = (uint)*(byte *)(iVar9 + 1);
}
else {
uVar10 = (uint)*(byte *)(iVar9 + 1);
}
uVar16 = uVar16 & 0xff | *(byte *)(iVar9 + 1) & 0x1e;
*(char *)(iVar9 + 1) = (char)uVar16;
local_48 = CONCAT22((short)(uVar16 << 8),~(ushort)(uVar10 << 8));
iVar20 = csum_partial(&local_48,4,~*(ushort *)(iVar9 + 10));
*(ushort *)(iVar9 + 10) =
(short)((uint)(iVar20 * 0x10001) >> 0x10) +
(ushort)((uint)(iVar20 * 0x10001) < (uint)(iVar20 * 0x10000)) ^ 0xffff;
iVar9 = puVar23[0x16];
}
}
}
if (iVar9 == -1) {
uVar22 = need_tobe_skip(puVar23);
puVar23[0x16] = uVar22;
iVar9 = puVar23[0x16];
}
else {
iVar9 = puVar23[0x16];
}
if (iVar9 == 1) {
return 0;
}
if ((int)(uint)*(byte *)((int)puVar23 + 0x4a) < MIN_GONE) {
*(byte *)((int)puVar23 + 0x4a) = *(byte *)((int)puVar23 + 0x4a) + 1;
return 0;
}
if (*(char *)((int)puVar23 + 0x4b) != '\0') {
*(undefined1 *)((int)puVar23 + 0x4a) = 0;
*(undefined1 *)((int)puVar23 + 0x4b) = 0;
return 0;
}
if (local_30 == 6) {
if ((*(uint *)(puVar23[3] + 100) & 4) == 0) {
return 0;
}
puVar17 = *(uint **)(param_1 + 0x88);
}
else {
puVar17 = *(uint **)(param_1 + 0x88);
}
uVar16 = puVar17[1] + *puVar17;
uVar16 = uVar16 + puVar17[2] + (uint)(uVar16 < puVar17[1]);
uVar16 = uVar16 + puVar17[3] + (uint)(uVar16 < puVar17[2]);
iVar9 = (uVar16 < puVar17[3]) + uVar16;
puVar19 = puVar17 + 4;
do {
uVar16 = *puVar19;
puVar19 = puVar19 + 1;
uVar10 = iVar9 + uVar16;
iVar9 = (uVar10 < uVar16) + uVar10;
} while (puVar19 != puVar17 + (*puVar17 & 0xf));
if (((((uint)(iVar9 * 0x10001) >> 0x10) +
(uint)((uint)(iVar9 * 0x10001) < (uint)(iVar9 * 0x10000)) ^ 0xffff) & 0xffff) != 0) {
*(int *)(_DAT_0001d0ac + 4) = *(int *)(_DAT_0001d0ac + 4) + 1;
*(int *)(_DAT_0001d0ac + 8) = *(int *)(_DAT_0001d0ac + 8) + 1;
goto LAB_000139b4;
}
uVar22 = *(undefined4 *)(param_1 + 0x14);
if ((need_sync < (uint)puVar23[10]) && (puVar23[10] - need_sync < 0xfffffff)) {
uVar2 = *(ushort *)(puVar23 + 0x11);
}
else {
uVar1 = *(undefined1 *)((int)puVar17 + 1);
uVar16 = puVar17[3];
if (((*(byte *)((int)puVar23 + 0x49) & 2) != 0) &&
(iVar9 = ip_route_input_6(param_1,puVar23[7],uVar16,uVar1,uVar22,0), iVar9 != 0)) {
return 0;
}
if ((*(byte *)((int)puVar23 + 0x49) & 1) == 0) {
iVar9 = *(int *)(param_1 + 0x48);
}
else {
iVar9 = ip_route_input_6(param_1,*(undefined4 *)(*(int *)(param_1 + 0x88) + 0x10),uVar16,uVar1
,uVar22,puVar23[6]);
if (iVar9 != 0) {
return 0;
}
iVar9 = *(int *)(param_1 + 0x48);
}
iVar21 = *(int *)(iVar9 + 0x30);
iVar20 = *(int *)(iVar9 + 0x2c);
uVar22 = *(undefined4 *)(iVar9 + 0xc);
local_bh_disable();
if (iVar21 == 0) {
if ((iVar20 == 0) || ((*(byte *)(iVar20 + 0x1d) & 0xde) == 0)) {
dst_release(*(undefined4 *)(param_1 + 0x48));
*(undefined4 *)(param_1 + 0x48) = 0;
local_bh_enable();
return 0;
}
memcpy(puVar23 + 0xb,(void *)(iVar20 + 0x24),(uint)*(byte *)(*(int *)(iVar20 + 0xc) + 0xfc)) //possible issue identified - semgrep
*(undefined2 *)((int)puVar23 + 0x46) = 0;
}
else {
local_bh_disable();
memcpy(puVar23 + 0xb,(void *)(iVar21 + 0x14),0x10) //possible issue identified - semgrep
local_bh_enable();
*(undefined2 *)((int)puVar23 + 0x46) = *(undefined2 *)(iVar21 + 10);
}
puVar23[8] = uVar22;
*(short *)(puVar23 + 0x11) = (short)*(undefined4 *)(*(int *)(param_1 + 0x48) + 0x48);
uVar16 = _jiffies;
puVar23[10] = _jiffies;
if (uVar16 < need_sync) {
need_sync = uVar16 - 1;
}
local_bh_enable();
dst_release(*(undefined4 *)(param_1 + 0x48));
*(undefined4 *)(param_1 + 0x48) = 0;
uVar2 = *(ushort *)(puVar23 + 0x11);
}
puVar17 = *(uint **)(param_1 + 0x88);
if ((uint)uVar2 < *(uint *)(param_1 + 0x4c)) {
return 0;
}
if (*(char *)((int)puVar17 + 9) == '\x06') {
puVar19 = puVar17 + (*puVar17 & 0xf);
if ((*(byte *)((int)puVar23 + 0x49) & 1) != 0) {
if (*(ushort *)((int)puVar19 + 2) == 0x5000) {
if (_sw_disable_80 != 0) {
return 0;
}
uVar2 = (ushort)*puVar19;
}
else {
uVar2 = (ushort)*puVar19;
}
local_44 = (uint)*(ushort *)(puVar23 + 0x10);
local_48 = ~(uint)uVar2;
uVar16 = puVar17[3];
iVar9 = csum_partial(&local_48,8,~(uint)(ushort)puVar19[4]);
*(ushort *)(puVar19 + 4) =
(short)((uint)(iVar9 * 0x10001) >> 0x10) +
(ushort)((uint)(iVar9 * 0x10001) < (uint)(iVar9 * 0x10000)) ^ 0xffff;
local_44 = puVar23[6];
local_48 = ~uVar16;
iVar9 = csum_partial(&local_48,8,~(uint)(ushort)puVar19[4]);
*(ushort *)(puVar19 + 4) =
(short)((uint)(iVar9 * 0x10001) >> 0x10) +
(ushort)((uint)(iVar9 * 0x10001) < (uint)(iVar9 * 0x10000)) ^ 0xffff;
*(ushort *)puVar19 = *(ushort *)(puVar23 + 0x10);
}
if ((*(byte *)((int)puVar23 + 0x49) & 2) != 0) {
if ((ushort)*puVar19 == 0x5000) {
if (_sw_disable_80 != 0) {
return 0;
}
uVar2 = *(ushort *)((int)puVar19 + 2);
}
else {
uVar2 = *(ushort *)((int)puVar19 + 2);
}
local_44 = (uint)*(ushort *)((int)puVar23 + 0x42);
local_48 = ~(uint)uVar2;
uVar16 = puVar17[4];
iVar9 = csum_partial(&local_48,8,~(uint)(ushort)puVar19[4]);
*(ushort *)(puVar19 + 4) =
(short)((uint)(iVar9 * 0x10001) >> 0x10) +
(ushort)((uint)(iVar9 * 0x10001) < (uint)(iVar9 * 0x10000)) ^ 0xffff;
local_44 = puVar23[7];
local_48 = ~uVar16;
iVar9 = csum_partial(&local_48,8,~(uint)(ushort)puVar19[4]);
*(ushort *)(puVar19 + 4) =
(short)((uint)(iVar9 * 0x10001) >> 0x10) +
(ushort)((uint)(iVar9 * 0x10001) < (uint)(iVar9 * 0x10000)) ^ 0xffff;
*(ushort *)((int)puVar19 + 2) = *(ushort *)((int)puVar23 + 0x42);
goto LAB_00013788;
}
bVar7 = *(byte *)((int)puVar23 + 0x49);
}
else if (*(char *)((int)puVar17 + 9) == '\x11') {
puVar19 = puVar17 + (*puVar17 & 0xf);
if ((*(byte *)((int)puVar23 + 0x49) & 1) != 0) {
*(undefined2 *)puVar19 = *(undefined2 *)(puVar23 + 0x10);
}
if ((*(byte *)((int)puVar23 + 0x49) & 2) == 0) {
*(undefined2 *)((int)puVar19 + 6) = 0;
}
else {
*(undefined2 *)((int)puVar19 + 2) = *(undefined2 *)((int)puVar23 + 0x42);
*(undefined2 *)((int)puVar19 + 6) = 0;
}
LAB_00013788:
bVar7 = *(byte *)((int)puVar23 + 0x49);
}
else {
bVar7 = *(byte *)((int)puVar23 + 0x49);
}
if ((bVar7 & 1) == 0) {
bVar7 = *(byte *)((int)puVar23 + 0x49);
}
else {
local_44 = puVar23[6];
local_48 = ~puVar17[3];
iVar9 = csum_partial(&local_48,8,~(uint)*(ushort *)((int)puVar17 + 10));
*(ushort *)((int)puVar17 + 10) =
(short)((uint)(iVar9 * 0x10001) >> 0x10) +
(ushort)((uint)(iVar9 * 0x10001) < (uint)(iVar9 * 0x10000)) ^ 0xffff;
puVar17[3] = puVar23[6];
bVar7 = *(byte *)((int)puVar23 + 0x49);
}
if ((bVar7 & 2) != 0) {
local_44 = puVar23[7];
local_48 = ~puVar17[4];
iVar9 = csum_partial(&local_48,8,~(uint)*(ushort *)((int)puVar17 + 10));
*(ushort *)((int)puVar17 + 10) =
(short)((uint)(iVar9 * 0x10001) >> 0x10) +
(ushort)((uint)(iVar9 * 0x10001) < (uint)(iVar9 * 0x10000)) ^ 0xffff;
puVar17[4] = puVar23[7];
}
uVar22 = puVar23[3];
if (*(char *)((int)puVar17 + 9) == '\x11') {
pcVar11 = get_udp_timeout_stream;
}
else {
pcVar11 = get_tcp_timeout_established;
}
uVar12 = (*pcVar11)();
nf_ct_refresh_acct_stub(uVar22,0,param_1,uVar12);
if (puVar23[8] == 0) {
return 0;
}
uVar16 = (uint)*(ushort *)(puVar23[8] + 0xd2);
bVar6 = false;
if ((*(uint *)(param_1 + 0x60) & 2) != 0) {
bVar6 = (**(uint **)(param_1 + 0x94) & 0xffff) != 1;
}
if (uVar16 < 0x20) {
uVar16 = 0x20;
}
uVar10 = *(int *)(param_1 + 0x9c) - *(int *)(param_1 + 0x98);
iVar9 = uVar16 - uVar10;
if (uVar16 <= uVar10) {
iVar9 = 0;
}
if (iVar9 != 0 || bVar6) {
iVar9 = pskb_expand_head(param_1,iVar9 + 0x1fU & 0xffffffe0,0,0x20);
if (iVar9 != 0) goto LAB_000139b4;
sVar4 = *(short *)((int)puVar23 + 0x46) //possible issue identified - semgrep
}
else {
sVar4 = *(short *)((int)puVar23 + 0x46) //possible issue identified - semgrep
}
if (sVar4 == 0) {
puVar14 = *(undefined4 **)(puVar23[8] + 0xbc);
if (puVar14 == (undefined4 *)0x0) {
uVar22 = puVar23[8];
}
else {
pcVar11 = (code *)*puVar14;
if (pcVar11 == (code *)0x0) {
uVar22 = puVar23[8];
}
else {
iVar9 = (*pcVar11)(param_1,puVar23[8],
(*(ushort *)(param_1 + 0x62) & 0xff) << 8 |
(uint)(*(ushort *)(param_1 + 0x62) >> 8),puVar23 + 0xb,0,
*(undefined4 *)(param_1 + 0x4c));
if (iVar9 < 0) {
LAB_000139b4:
kfree_skb(param_1);
return 1;
}
uVar22 = puVar23[8];
}
}
}
else {
memcpy((void *)(*(int *)(param_1 + 0x9c) + -0x10),puVar23 + 0xb,0x10) //possible issue identified - semgrep
skb_push(param_1,*(undefined2 *)((int)puVar23 + 0x46));
uVar22 = puVar23[8];
}
*(undefined4 *)(param_1 + 0x14) = uVar22;
if (*(int *)(param_1 + 0x68) == 0) {
if (puVar23[9] == 4) {
cVar13 = *(char *)((int)puVar23 + 0x49) //possible issue identified - semgrep
cVar8 = '\x01';
}
else {
cVar8 = '\x01';
cVar13 = *(char *)((int)puVar23 + 0x49) //possible issue identified - semgrep
if (puVar23[9] != 1) {
cVar8 = '\x02';
}
}
iVar9 = 0;
if (cVar13 != cVar8) {
iVar9 = 3;
}
piVar15 = (int *)puVar23[3];
if (_kmem_cache_free << 0xf < 0) {
*piVar15 = *piVar15 + 1;
uVar16 = *(uint *)(param_1 + 0x60);
}
else {
uVar16 = Status & 1;
*piVar15 = *piVar15 + 1;
Status = Status & 0xfffffffe;
if (uVar16 != 0) {
Status = Status | 1;
}
uVar16 = *(uint *)(param_1 + 0x60);
}
*(undefined4 *)(param_1 + 0x68) = puVar23[3];
*(uint *)(param_1 + 0x60) = uVar16 & 0xffffff1f | iVar9 << 5;
}
*(int *)(_DAT_0001d0ac + 4) = *(int *)(_DAT_0001d0ac + 4) + 1;
*(int *)(_DAT_0001d0ac + 0x28) = *(int *)(_DAT_0001d0ac + 0x28) + 1;
dev_queue_xmit(param_1);
return 1;
}