/* WARNING: Removing unreachable block (ram,0x0040a960) */
/* WARNING: Removing unreachable block (ram,0x0040a990) */
/* WARNING: Heritage AFTER dead removal. Example location: r0x0041f00c : 0x00405e70 */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: ram */
undefined1 ** packetio_recv_handler(int param_1)
{
bool bVar1;
byte bVar2;
undefined1 uVar4;
undefined1 uVar5;
undefined1 uVar6;
undefined1 uVar7;
undefined1 uVar8;
undefined1 uVar9;
short sVar10;
undefined2 uVar11;
longlong lVar12;
ushort uVar13;
undefined1 uVar14;
uint uVar15;
int *piVar16;
char *pcVar17;
undefined1 **ppuVar18;
undefined1 *puVar19;
undefined4 uVar20;
undefined4 *puVar21;
char cVar22;
int iVar23;
byte bVar24;
char *pcVar25;
ushort *puVar26;
undefined4 uVar27;
byte bVar28;
undefined1 **ppuVar29;
undefined1 **ppuVar30;
byte bVar31;
byte *pbVar32;
undefined1 **ppuVar33;
undefined1 *puVar34;
uint uVar35;
uint uVar36;
undefined1 *puVar37;
uint uVar38;
short *psVar39;
int *piVar40;
uint *puVar41;
int iVar42;
int *piVar43;
undefined2 *puVar44;
int iVar45;
int iVar46;
int iVar47;
code *pcVar48;
undefined *puVar49;
int *piVar50;
undefined *puVar51;
byte bVar52;
timeval local_34;
uint local_2c;
uint local_28;
byte bVar3;
uVar15 = osl_read(param_1,&g_rxbuf,0x800) //possible issue identified - semgrep
g_rcvd_pkt_len = uVar15;
if (uVar15 == 0) {
piVar16 = __errno_location();
pcVar17 = strerror(*piVar16);
die("packetio_recv_handler: error on read: %s\n",pcVar17);
}
if ((undefined1 **)(uint)(uVar15 < 0xe) != (undefined1 **)0x0) {
return (undefined1 **)(uint)(uVar15 < 0xe);
}
g_qltlv_hdr = &DAT_0042c420;
g_ethernet_hdr = &g_rxbuf;
g_base_hdr = &DAT_0042c40e;
g_discover_hdr = &DAT_0042c420;
g_hello_hdr = &DAT_0042c420;
if (_DAT_0042c40c != -0x2678) {
return (undefined1 **)(uint)(uVar15 < 0x20);
}
if ((undefined1 **)(uint)(uVar15 < 0x20) != (undefined1 **)0x0) {
local_34.tv_usec = (__suseconds_t)DAT_0042c40a;
local_34.tv_sec = (__time_t)DAT_0042c409;
local_2c = (uint)DAT_0042c40b;
local_28 = (uint)g_rxbuf;
ppuVar18 = (undefined1 **)
warn("packetio_recv_handler: frame with truncated Base header (len=%d src=%02x:%02x:%02x:%02x:%02x:%02x dst=%02x:%02x:%02x:%02x:%02x:%02x); ignoring\n"
,uVar15,DAT_0042c406,DAT_0042c407,DAT_0042c408);
return ppuVar18;
}
if (DAT_0042c40e != '\x01') {
return (undefined1 **)0x1;
}
ppuVar18 = (undefined1 **)(uint)DAT_0042c411;
g_opcode = ppuVar18;
if (DAT_0042c40f != 2) {
if (1 < DAT_0042c40f) {
return (undefined1 **)(uint)(ppuVar18 < (undefined1 **)0xd);
}
if ((undefined1 **)(uint)(ppuVar18 < (undefined1 **)0xd) == (undefined1 **)0x0) {
return (undefined1 **)0x0;
}
if (((ppuVar18 != (undefined1 **)0x4) && (ppuVar18 != (undefined1 **)0x1)) &&
((((g_hwaddr != DAT_0042c412 ||
((DAT_0042c413 != DAT_0041f029 || (DAT_0042c414 != DAT_0041f02a)))) ||
(DAT_0042c415 != DAT_0041f02b)) ||
((DAT_0042c416 != DAT_0041f02c || (DAT_0042c417 != DAT_0041f02d)))))) {
if (DAT_0042c412 != 0xff) {
return (undefined1 **)0xff;
}
if ((undefined1 **)(uint)DAT_0042c413 != (undefined1 **)0xff) {
return (undefined1 **)(uint)DAT_0042c413;
}
if ((undefined1 **)(uint)DAT_0042c414 != (undefined1 **)0xff) {
return (undefined1 **)(uint)DAT_0042c414;
}
if ((undefined1 **)(uint)DAT_0042c415 != (undefined1 **)0xff) {
return (undefined1 **)(uint)DAT_0042c415;
}
if ((undefined1 **)(uint)DAT_0042c416 != (undefined1 **)0xff) {
return (undefined1 **)(uint)DAT_0042c416;
}
if ((undefined1 **)(uint)DAT_0042c417 != (undefined1 **)0xff) {
return (undefined1 **)(uint)DAT_0042c417;
}
}
if ((((DAT_0042c412 & 1) != 0) && ((undefined1 **)0x1 < ppuVar18)) &&
(ppuVar18 != (undefined1 **)0x8)) {
pcVar17 =
"packetio_recv_handler: broadcast of g_opcode %d (from realsrc=%02x:%02x:%02x:%02x:%02x:%02x) is illegal; dropping\n"
;
bVar2 = DAT_0042c413;
bVar3 = DAT_0042c412;
bVar31 = DAT_0042c414;
bVar28 = DAT_0042c415;
bVar52 = DAT_0042c416;
bVar24 = DAT_0042c417;
LAB_00405b0c:
local_2c = (uint)bVar24;
local_34.tv_usec = (__suseconds_t)bVar52;
local_34.tv_sec = (__time_t)bVar28;
ppuVar18 = (undefined1 **)warn(pcVar17,ppuVar18,bVar3,bVar2,bVar31);
return ppuVar18;
}
ppuVar33 = (undefined1 **)((_DAT_0042c41e & 0xff) << 8 | (uint)(_DAT_0042c41e >> 8));
if (ppuVar33 == (undefined1 **)0x0) {
if (((int)ppuVar18 - 5U < 3) || (ppuVar18 == (undefined1 **)0xa)) {
pcVar17 =
"packetio_recv_handler: g_opcode %d (from realsrc=%02x:%02x:%02x:%02x:%02x:%02xmust have seqnum\n"
;
bVar2 = DAT_0042c419;
bVar3 = DAT_0042c418;
bVar31 = DAT_0042c41a;
bVar28 = DAT_0042c41b;
bVar52 = DAT_0042c41c;
bVar24 = DAT_0042c41d;
goto LAB_00405b0c;
}
}
else if (ppuVar18 != (undefined1 **)0x0) {
if (((ppuVar18 != (undefined1 **)0x2) && (ppuVar18 != (undefined1 **)0x5)) &&
((ppuVar18 != (undefined1 **)0x6 &&
((((ppuVar18 != (undefined1 **)0x7 && (ppuVar18 != (undefined1 **)0x9)) &&
(ppuVar18 != (undefined1 **)0xa)) &&
((ppuVar18 != (undefined1 **)0xb && (ppuVar18 != (undefined1 **)0xc)))))))) {
local_34.tv_usec = (__suseconds_t)DAT_0042c41b;
local_28 = (uint)DAT_0042c41d;
local_2c = (uint)DAT_0042c41c;
local_34.tv_sec = (__time_t)DAT_0042c41a;
ppuVar18 = (undefined1 **)
warn("packetio_recv_handler: g_opcode %d with seq=%u (from realsrc=%02x:%02x:%02x:%02x:%02x:%02x) is illegal; dropping\n"
,ppuVar18,ppuVar33,DAT_0042c418,DAT_0042c419);
return ppuVar18;
}
ppuVar29 = (undefined1 **)(uint)g_rtxseqnum;
if (ppuVar33 == ppuVar29) {
if ((undefined1 **)(uint)g_re_tx_opcode != ppuVar18) {
return (undefined1 **)(uint)g_re_tx_opcode;
}
ppuVar18 = (undefined1 **)tx_write(g_re_txbuf,g_re_tx_len);
return ppuVar18;
}
ppuVar30 = (undefined1 **)((int)ppuVar29 + 1);
if (ppuVar29 != (undefined1 **)0x0) {
if (((uint)ppuVar30 & 0xffff) == 0) {
ppuVar30 = (undefined1 **)0x1;
}
if (ppuVar33 != ppuVar30) {
return ppuVar30;
}
}
}
g_sequencenum = (short)ppuVar33;
DAT_0042af60 = 0;
g_this_event = 0;
DAT_0042af50 = (int *)0x0;
DAT_0042af54 = 0;
DAT_0042af58 = 0;
DAT_0042af5c = 0;
if ((undefined1 **)0xc < ppuVar18) {
DAT_0042af50 = (int *)0x0;
DAT_0042af54 = 0;
DAT_0042af5c = 0;
g_this_event = 0;
DAT_0042af58 = 0;
DAT_0042af60 = 0;
return (undefined1 **)&g_sequencenum;
}
ppuVar33 = (undefined1 **)(&_gp + (&switchD_00405d0c::switchdataD_0040e0a0)[(int)ppuVar18]);
switch(ppuVar18) {
case (undefined1 **)0x0:
if (0x23 < g_rcvd_pkt_len) {
g_this_event = 1;
goto switchD_00405d0c_caseD_4;
}
pcVar17 =
"verify_discover: frame with truncated Discover header (len=%d src=%02x:%02x:%02x:%02x:%02x:%02x dst=%02x:%02x:%02x:%02x:%02x:%02x); ignoring\n"
;
break;
case (undefined1 **)0x1:
if (0x2e < g_rcvd_pkt_len) {
LAB_00406200:
g_this_event = 0;
goto switchD_00405d0c_caseD_4;
}
pcVar17 =
"rx_hello: frame with truncated Hello header (len=%d src=%02x:%02x:%02x:%02x:%02x:%02x dst=%02x:%02x:%02x:%02x:%02x:%02x); ignoring\n"
;
break;
case (undefined1 **)0x2:
g_totalPause = 0;
g_neededPackets = 0;
g_neededBytes = 0;
if (g_rcvd_pkt_len < 0x22) {
local_34.tv_sec = (__time_t)DAT_0042c409;
local_34.tv_usec = (__suseconds_t)DAT_0042c40a;
local_2c = (uint)DAT_0042c40b;
local_28 = (uint)g_rxbuf;
warn("validate_emit: frame with truncated Emit header (len=%d src=%02x:%02x:%02x:%02x:%02x:%02x dst=%02x:%02x:%02x:%02x:%02x:%02x); ignoring\n"
,g_rcvd_pkt_len,DAT_0042c406,DAT_0042c407,DAT_0042c408);
}
else {
uVar15 = (uint)CONCAT11(DAT_0042c420,DAT_0042c421);
uVar38 = 0;
pbVar32 = &DAT_0042c422;
while( true ) {
if ((&g_rxbuf + g_rcvd_pkt_len < pbVar32 + 0xe) || ((int)uVar15 <= (int)uVar38)) break;
g_totalPause = pbVar32[1] + g_totalPause;
if (1 < *pbVar32) {
local_34.tv_sec = (__time_t)DAT_0042c40a;
pcVar17 =
"validate_emit: emitee_desc from %02x:%02x:%02x:%02x:%02x:%02x with unknown type=%d; ignoring whole Emit request\n"
;
local_34.tv_usec = (__suseconds_t)DAT_0042c40b;
local_2c = (uint)*pbVar32;
bVar24 = DAT_0042c406;
bVar28 = DAT_0042c407;
bVar31 = DAT_0042c408;
bVar52 = DAT_0042c409;
LAB_00406054:
warn(pcVar17,bVar24,bVar28,bVar31,bVar52) //possible issue identified - semgrep
goto LAB_004060c4;
}
bVar24 = pbVar32[2];
if (((((g_hwaddr != bVar24) || (pbVar32[3] != DAT_0041f029)) ||
(pbVar32[4] != DAT_0041f02a)) ||
(((pbVar32[5] != DAT_0041f02b || (pbVar32[6] != DAT_0041f02c)) ||
(pbVar32[7] != DAT_0041f02d)))) &&
(((bVar24 != 0 || (pbVar32[3] != 0xd)) ||
((pbVar32[4] != 0x3a ||
(((uint)pbVar32[5] << 0x10 | (uint)pbVar32[6] << 8 | (uint)pbVar32[7]) < 0xd7f140))))
)) {
bVar52 = pbVar32[5];
bVar28 = pbVar32[3];
bVar31 = pbVar32[4];
local_34.tv_sec = (__time_t)pbVar32[6];
local_34.tv_usec = (__suseconds_t)pbVar32[7];
pcVar17 =
"validate_emit: emitee_desc with src=%02x:%02x:%02x:%02x:%02x:%02x is invalid; ignoring whole Emit request\n"
;
goto LAB_00406054;
}
bVar24 = pbVar32[8];
uVar38 = uVar38 + 1;
if ((bVar24 & 1) != 0) {
bVar52 = pbVar32[0xb];
bVar28 = pbVar32[9];
bVar31 = pbVar32[10];
local_34.tv_sec = (__time_t)pbVar32[0xc];
local_34.tv_usec = (__suseconds_t)pbVar32[0xd];
pcVar17 =
"validate_emit: emitee_desc with dst=%02x:%02x:%02x:%02x:%02x:%02x is invalid; ignoring whole Emit request\n"
;
goto LAB_00406054;
}
g_neededPackets = g_neededPackets + 1;
g_neededBytes = g_neededBytes + 0x20;
pbVar32 = pbVar32 + 0xe;
}
if (g_totalPause < 0x3e9) {
if (uVar38 != uVar15) {
warn("validate_emit: numdescs=%d but only %d descs in frame\n",uVar15,uVar38);
uVar15 = uVar38 & 0xffff;
}
if (g_sequencenum != 0) {
g_neededPackets = g_neededPackets + 1;
g_neededBytes = g_neededBytes + 0x20;
}
g_this_event = 2;
DAT_0042af60 = uVar15;
goto switchD_00405d0c_caseD_4;
}
warn("validate_emit: Emit contains emitee_descs with total pausetime %ums > %ums; ignoring whole Emit request\n"
,g_totalPause,1000);
}
LAB_004060c4:
g_this_event = 9;
return (undefined1 **)&g_this_event;
case (undefined1 **)0x3:
goto switchD_00405d0c_caseD_3;
case (undefined1 **)0x8:
g_this_event = 3;
default:
switchD_00405d0c_caseD_4:
DAT_0042af54 = 0;
DAT_0042af5c = 0;
for (piVar16 = &g_sessions;
((((*piVar16 == 0 || (*(char *)((int)piVar16 + 0xe) != g_base_hdr[10])) ||
(*(char *)((int)piVar16 + 0xf) != g_base_hdr[0xb])) ||
(((char)piVar16[4] != g_base_hdr[0xc] ||
(*(char *)((int)piVar16 + 0x11) != g_base_hdr[0xd])))) ||
((*(char *)((int)piVar16 + 0x12) != g_base_hdr[0xe] ||
(*(char *)((int)piVar16 + 0x13) != g_base_hdr[0xf])))); piVar16 = piVar16 + 10) {
if (piVar16 == (int *)&DAT_0042ce30) goto LAB_00407378;
}
if (piVar16 != (int *)0x0) goto LAB_004074b4;
LAB_00407378:
piVar40 = (int *)0x0;
if (g_opcode == (undefined4 *)0x0) {
piVar40 = &g_sessions;
do {
if (*piVar40 == 0) {
*piVar40 = 1;
piVar40[2] = 4;
*(undefined2 *)(piVar40 + 3) = 0;
*(undefined2 *)((int)piVar40 + 0xe) = 0;
*(undefined2 *)(piVar40 + 4) = 0;
*(undefined2 *)((int)piVar40 + 0x12) = 0;
piVar40[5] = 0;
*(undefined2 *)(piVar40 + 6) = 0;
*(undefined1 *)(piVar40 + 8) = 4;
piVar40[7] = 1;
piVar40[9] = 0;
puVar34 = g_base_hdr;
if (piVar40 != (int *)0x0) {
DAT_0042af54 = 1;
*(short *)(piVar40 + 3) = g_sequencenum;
memcpy((void *)((int)piVar40 + 0xe),puVar34 + 10,6) //possible issue identified - semgrep
memcpy(piVar40 + 5,g_ethernet_hdr + 6,6) //possible issue identified - semgrep
*(undefined1 *)(piVar40 + 8) = puVar34[1];
goto LAB_00407470;
}
break;
}
bVar1 = piVar40 != (int *)&DAT_0042ce30;
piVar40 = piVar40 + 10;
} while (bVar1);
warn("state_process_packet: no room to create new session. Packet dropped.\n");
ppuVar18 = (undefined1 **)0xffffffff;
}
else {
LAB_00407470:
piVar16 = piVar40;
if ((g_opcode == (undefined4 *)0x4) &&
((g_topo_session == (int *)0x0 || (piVar16 = g_topo_session, *g_topo_session == 0)))) {
piVar16 = piVar40;
}
LAB_004074b4:
DAT_0042af50 = piVar16;
iVar23 = smS_process_event(&g_this_event);
if ((iVar23 != 2) && (iVar23 = smE_process_event(&g_this_event), iVar23 != 2)) {
smT_process_event(&g_this_event);
}
ppuVar18 = (undefined1 **)0x0;
DAT_0042af54 = 0;
}
return ppuVar18;
case (undefined1 **)0xb:
if (0x23 < g_rcvd_pkt_len) goto LAB_00406200;
pcVar17 =
"query-ltlv-rcvd: frame with truncated qltlv header (len=%d src=%02x:%02x:%02x:%02x:%02x:%02x dst=%02x:%02x:%02x:%02x:%02x:%02x); ignoring\n"
;
}
local_34.tv_sec = (__time_t)DAT_0042c409;
local_34.tv_usec = (__suseconds_t)DAT_0042c40a;
local_2c = (uint)DAT_0042c40b;
local_28 = (uint)g_rxbuf;
warn(pcVar17,g_rcvd_pkt_len,DAT_0042c406,DAT_0042c407,DAT_0042c408) //possible issue identified - semgrep
ppuVar33 = (undefined1 **)0x9;
g_this_event = 9;
switchD_00405d0c_caseD_3:
return ppuVar33;
}
puVar49 = &_gp;
puVar51 = &_gp;
if ((undefined1 **)0xa < ppuVar18) {
pcVar48 = warn;
pcVar17 = "qospktrcv: g_opcode=%d is out of range for QoS msg; ignoring\n";
goto LAB_0040af10;
}
sVar10 = CONCAT11(DAT_0042c41e,DAT_0042c41f);
if (ppuVar18 != (undefined1 **)0xa) {
if (sVar10 == 0) {
pcVar48 = warn;
pcVar17 = "qospktrcv: g_opcode=%d must be sequenced; ignoring\n";
}
else {
if (((DAT_0042c412 == g_hwaddr) && (DAT_0042c413 == DAT_0041f029)) &&
((DAT_0042c414 == DAT_0041f02a &&
(((DAT_0042c415 == DAT_0041f02b && (DAT_0042c416 == DAT_0041f02c)) &&
(DAT_0042c417 == DAT_0041f02d)))))) goto LAB_0040a0ec;
pcVar48 = warn;
pcVar17 = "qospktrcv: g_opcode=%d must be directed; ignoring\n";
}
goto LAB_0040af10;
}
if (sVar10 != 0) {
pcVar17 = "qospktrcv: QosCounterLease must not be sequenced; ignoring\n";
LAB_0040a0dc:
ppuVar18 = (undefined1 **)warn(pcVar17);
return ppuVar18;
}
if (((((DAT_0042c412 != 0xff) || (DAT_0042c413 != 0xff)) || (DAT_0042c414 != 0xff)) ||
((DAT_0042c415 != 0xff || (DAT_0042c416 != 0xff)))) || (DAT_0042c417 != 0xff)) {
pcVar17 = "qospktrcv: QosCounterLease must be broadcasted; ignoring\n";
goto LAB_0040a0dc;
}
LAB_0040a0ec:
if ((undefined1 **)(uint)DAT_0042c406 != (undefined1 **)(uint)DAT_0042c418) {
return (undefined1 **)(uint)DAT_0042c418;
}
if ((undefined1 **)(uint)DAT_0042c407 != (undefined1 **)(uint)DAT_0042c419) {
return (undefined1 **)(uint)DAT_0042c419;
}
if ((undefined1 **)(uint)DAT_0042c408 != (undefined1 **)(uint)DAT_0042c41a) {
return (undefined1 **)(uint)DAT_0042c41a;
}
if ((undefined1 **)(uint)DAT_0042c409 != (undefined1 **)(uint)DAT_0042c41b) {
return (undefined1 **)(uint)DAT_0042c41b;
}
if ((undefined1 **)(uint)DAT_0042c40a != (undefined1 **)(uint)DAT_0042c41c) {
return (undefined1 **)(uint)DAT_0042c41c;
}
if ((undefined1 **)(uint)DAT_0042c40b != (undefined1 **)(uint)DAT_0042c41d) {
return (undefined1 **)(uint)DAT_0042c41d;
}
if ((undefined1 **)(uint)g_rxbuf != (undefined1 **)(uint)DAT_0042c412) {
return (undefined1 **)(uint)DAT_0042c412;
}
if ((undefined1 **)(uint)DAT_0042c401 != (undefined1 **)(uint)DAT_0042c413) {
return (undefined1 **)(uint)DAT_0042c413;
}
if ((undefined1 **)(uint)DAT_0042c402 != (undefined1 **)(uint)DAT_0042c414) {
return (undefined1 **)(uint)DAT_0042c414;
}
if ((undefined1 **)(uint)DAT_0042c403 != (undefined1 **)(uint)DAT_0042c415) {
return (undefined1 **)(uint)DAT_0042c415;
}
if ((undefined1 **)(uint)DAT_0042c404 != (undefined1 **)(uint)DAT_0042c416) {
return (undefined1 **)(uint)DAT_0042c416;
}
if ((undefined1 **)(uint)DAT_0042c405 != (undefined1 **)(uint)DAT_0042c417) {
return (undefined1 **)(uint)DAT_0042c417;
}
if ((undefined1 **)0xa < ppuVar18) {
g_qinit_hdr = &DAT_0042c420;
g_snap_hdr = &DAT_0042c420;
g_qprb_hdr = &DAT_0042c420;
g_sequencenum = sVar10;
return &g_qinit_hdr;
}
ppuVar33 = (undefined1 **)(&_gp + (&switchD_0040a24c::switchdataD_0040e880)[(int)ppuVar18]);
g_qinit_hdr = &DAT_0042c420;
g_snap_hdr = &DAT_0042c420;
g_qprb_hdr = &DAT_0042c420;
g_sequencenum = sVar10;
switch(ppuVar18) {
case (undefined1 **)0x0:
if (g_rcvd_pkt_len < 0x21) {
ppuVar18 = (undefined1 **)
warn("qos_initsink: frame with truncated InitializeSink header (len=%d src=%02x:%02x:%02x:%02x:%02x:%02x dst=%02x:%02x:%02x:%02x:%02x:%02x); ignoring\n"
,g_rcvd_pkt_len,DAT_0042c406,DAT_0042c407,DAT_0042c408,DAT_0042c409,
DAT_0042c40a,DAT_0042c40b,g_rxbuf,DAT_0042c401,DAT_0042c402,DAT_0042c403,
DAT_0042c404,DAT_0042c405);
return ppuVar18;
}
if (DAT_0042c420 == -1) {
puVar21 = (undefined4 *)FUN_00409b80();
if (puVar21 != (undefined4 *)0x0) {
LAB_0040ad8c:
pcVar48 = *(code **)(puVar51 + -0x7d0c);
iVar23 = **(int **)(puVar51 + -0x7d40);
puVar21[0x48b] = 1;
(*pcVar48)((int)puVar21 + 0x1226,iVar23 + 10,6);
pcVar48 = *(code **)(puVar51 + -0x7dcc);
uVar11 = **(undefined2 **)(puVar51 + -0x7fb8);
uVar20 = *(undefined4 *)(puVar51 + -0x7cf0);
uVar27 = *(undefined4 *)(puVar51 + -0x7da0);
*puVar21 = 4;
(*pcVar48)(uVar20,uVar27,(int)puVar21 + 0x1226,2,1,uVar11,0);
pcVar17 = *(char **)(puVar51 + -0x7cf0);
uVar15 = **(uint **)(puVar51 + -0x7ce8);
puVar41 = *(uint **)(puVar51 + -0x7ec0);
pcVar48 = *(code **)(puVar51 + -0x7d0c);
*puVar41 = uVar15 << 0x18 | uVar15 >> 0x18 | uVar15 >> 8 & 0xff00 | (uVar15 & 0xff00) << 8;
(*pcVar48)(pcVar17 + 0x20,puVar41,4);
(**(code **)(puVar51 + -0x7edc))(pcVar17 + 0x24,*(undefined4 *)(puVar51 + -0x7f80));
pcVar48 = *(code **)(puVar51 + -0x7eb4);
ppuVar18 = (undefined1 **)0x2c;
break;
}
puVar21 = *(undefined4 **)(puVar51 + -0x7d04);
iVar23 = 0;
do {
iVar23 = iVar23 + 1;
if (puVar21[0x48b] == 0) goto LAB_0040ad8c;
puVar21 = puVar21 + 0x48c;
} while (iVar23 != 10);
(**(code **)(puVar51 + -0x7dcc))
(*(undefined4 *)(puVar51 + -0x7cf0),*(undefined4 *)(puVar51 + -0x7da0),
**(int **)(puVar51 + -0x7d40) + 10,2,6,**(undefined2 **)(puVar51 + -0x7fb8),0);
cVar22 = '\x01';
pcVar17 = *(char **)(puVar51 + -0x7cf0);
}
else {
fmt_base(g_txbuf,&g_hwaddr,&DAT_0042c418,2,6,sVar10,0);
pcVar17 = *(char **)(puVar51 + -0x7cf0);
cVar22 = '\x02';
}
pcVar17[0x21] = cVar22;
pcVar48 = *(code **)(puVar51 + -0x7eb4);
ppuVar18 = (undefined1 **)0x22;
pcVar17[0x20] = '\0';
break;
default:
goto switchD_0040a24c_caseD_1;
case (undefined1 **)0x2:
ioctl(*(int *)(g_osl + 8),0x8906,&local_34);
uVar38 = (uint)((longlong)local_34.tv_sec * 1000000);
uVar15 = uVar38 + local_34.tv_usec;
puVar41 = *(uint **)(puVar51 + -0x7e18);
*puVar41 = uVar15;
puVar41[1] = (uint)(uVar15 < uVar38) +
(int)((ulonglong)((longlong)local_34.tv_sec * 1000000) >> 0x20) +
(local_34.tv_usec >> 0x1f);
puVar21 = (undefined4 *)FUN_00409b80();
if (puVar21 == (undefined4 *)0x0) {
return (undefined1 **)0x0;
}
piVar16 = *(int **)(puVar51 + -0x7e58);
iVar23 = *piVar16;
*puVar21 = 4;
if (*(char *)(iVar23 + 0x18) != '\x01') {
if (*(char *)(iVar23 + 0x18) != '\0') {
return (undefined1 **)0x1;
}
uVar15 = (uint)*(byte *)(puVar21 + 1);
uVar35 = (uint)*(byte *)((int)puVar21 + 5);
uVar38 = uVar15;
do {
if (uVar35 + uVar15 <= uVar38) {
if (uVar35 < 8) {
uVar15 = uVar35 + uVar15 & 7;
*(byte *)((int)puVar21 + 5) = *(byte *)((int)puVar21 + 5) + 1;
}
else {
*(byte *)(puVar21 + 1) = *(byte *)(puVar21 + 1) + 1 & 7;
}
puVar44 = (undefined2 *)((int)puVar21 + uVar15 * 0x244 + 6);
uVar11 = **(undefined2 **)(puVar51 + -0x7fb8);
*(undefined2 *)(puVar21 + uVar15 * 0x91 + 2) = 0;
*puVar44 = uVar11;
LAB_0040a6c4:
uVar13 = puVar44[1];
piVar16 = *(int **)(puVar51 + -0x7e58);
pcVar48 = *(code **)(puVar51 + -0x7d0c);
iVar23 = *piVar16;
puVar44[1] = uVar13 + 1;
(*pcVar48)(puVar44 + (uint)uVar13 * 9 + 2,iVar23,8);
(**(code **)(puVar51 + -0x7edc))
(puVar44 + (uint)uVar13 * 9 + 6,*(undefined4 *)(puVar51 + -0x7e18));
bVar24 = *(byte *)(*piVar16 + 0x19);
*(undefined1 *)((int)puVar44 + (uint)uVar13 * 0x12 + 0x15) = 0;
*(byte *)(puVar44 + (uint)uVar13 * 9 + 10) = bVar24;
return (undefined1 **)(uint)bVar24;
}
uVar36 = uVar38 & 7;
puVar44 = (undefined2 *)((int)puVar21 + uVar36 * 0x244 + 6);
if (*(short *)((int)puVar21 + uVar36 * 0x244 + 6) == **(short **)(puVar51 + -0x7fb8)) {
if (0x1f < *(ushort *)(puVar21 + uVar36 * 0x91 + 2)) {
return (undefined1 **)0x0;
}
goto LAB_0040a6c4;
}
uVar38 = uVar38 + 1;
} while( true );
}
piVar40 = *(int **)(puVar51 + -0x7d40);
piVar43 = *(int **)(puVar51 + -0x7e80);
pcVar48 = *(code **)(puVar51 + -0x7d0c);
piVar50 = *(int **)(puVar51 + -0x7d60);
if (*(char *)(iVar23 + 0x1a) < '\0') {
pcVar17 = *(char **)(puVar51 + -0x7cf0);
(*pcVar48)(pcVar17,*piVar40 + 10,6);
(**(code **)(puVar51 + -0x7d0c))(pcVar17 + 6,*piVar40 + 4,6);
(**(code **)(puVar51 + -0x7d0c))(pcVar17 + 0x16,*piVar40 + 10,6);
(**(code **)(puVar51 + -0x7d0c))(pcVar17 + 0x1c,*piVar40 + 4,6);
puVar21 = (undefined4 *)*piVar16;
pcVar17[0xc] = -0x7f;
pcVar17[0xd] = '\0';
iVar23 = *piVar43;
pcVar17[0xe] = (char)((*(byte *)((int)puVar21 + 0x1a) & 0x7f) << 1);
pcVar17[0xf] = '\0';
uVar11 = *(undefined2 *)(iVar23 + 0xc);
pcVar25 = (char *)*piVar40;
pcVar17[0x11] = (char)((ushort)uVar11 >> 8);
pcVar17[0x10] = (char)uVar11;
pcVar17[0x12] = *pcVar25;
pcVar17[0x13] = pcVar25[1];
pcVar48 = *(code **)(puVar51 + -0x7edc);
pcVar17[0x14] = pcVar25[2];
pcVar17[0x15] = pcVar25[3];
uVar11 = *(undefined2 *)(pcVar25 + 0x10);
pcVar17[0x23] = (char)((ushort)uVar11 >> 8);
pcVar17[0x22] = (char)uVar11;
uVar20 = puVar21[1];
*(undefined4 *)(pcVar17 + 0x24) = *puVar21;
*(undefined4 *)(pcVar17 + 0x28) = uVar20;
cVar22 = *(char *)((int)puVar21 + 0x19) //possible issue identified - semgrep
pcVar17[0x3e] = *(char *)((int)puVar21 + 0x1a);
pcVar17[0x3d] = cVar22;
pcVar17[0x3c] = '\x02';
(*pcVar48)(pcVar17 + 0x2c,puVar41);
(**(code **)(puVar51 + -0x7d0c))
(pcVar17 + 0x3f,*piVar16 + 0x1b,pcVar17 + (*piVar50 - (*piVar16 + 0x1b)));
(**(code **)(puVar51 + -0x7d90))(*(undefined4 *)(g_osl + 8),0x8906,&local_34);
pcVar48 = *(code **)(puVar51 + -0x7edc);
*(longlong *)puVar41 = (longlong)local_34.tv_sec * 1000000 + (longlong)local_34.tv_usec;
(*pcVar48)(pcVar17 + 0x34,puVar41);
pcVar48 = *(code **)(puVar51 + -0x7eb4);
ppuVar18 = (undefined1 **)(*piVar50 + 4);
}
else {
*(undefined1 *)(iVar23 + 0x18) = 2;
(*pcVar48)(*piVar43,*piVar40 + 10,6);
(**(code **)(puVar51 + -0x7d0c))(*piVar43 + 6,*piVar40 + 4,6);
(**(code **)(puVar51 + -0x7d0c))(*piVar40 + 4,*piVar40 + 10,6);
(**(code **)(puVar51 + -0x7d0c))(*piVar40 + 10,*piVar43 + 6,6);
(**(code **)(puVar51 + -0x7edc))(*piVar16 + 8,puVar41);
(**(code **)(puVar51 + -0x7d90))(*(undefined4 *)(g_osl + 8),0x8906,&local_34);
iVar23 = *piVar16;
pcVar48 = *(code **)(puVar51 + -0x7edc);
*(longlong *)puVar41 = (longlong)local_34.tv_sec * 1000000 + (longlong)local_34.tv_usec;
(*pcVar48)(iVar23 + 0x10,puVar41);
ppuVar18 = (undefined1 **)*piVar50;
pcVar48 = *(code **)(puVar51 + -0x7eb4);
pcVar17 = *(char **)(puVar51 + -0x7e54);
}
break;
case (undefined1 **)0x3:
puVar21 = (undefined4 *)FUN_00409b80();
if (puVar21 == (undefined4 *)0x0) {
return (undefined1 **)0x0;
}
psVar39 = *(short **)(puVar51 + -0x7fb8);
sVar10 = *psVar39;
pcVar48 = *(code **)(puVar51 + -0x7dcc);
uVar20 = *(undefined4 *)(puVar51 + -0x7cf0);
uVar27 = *(undefined4 *)(puVar51 + -0x7da0);
*puVar21 = 4;
(*pcVar48)(uVar20,uVar27,(int)puVar21 + 0x1226,2,4,sVar10,0);
uVar15 = (uint)*(byte *)(puVar21 + 1);
uVar38 = *(byte *)((int)puVar21 + 5) + uVar15;
for (; uVar35 = uVar15 & 7, uVar15 < uVar38; uVar15 = uVar15 + 1) {
iVar23 = (int)puVar21 + uVar35 * 0x244 + 6;
if (*(short *)((int)puVar21 + uVar35 * 0x244 + 6) == *psVar39) {
uVar15 = (uint)*(ushort *)(puVar21 + uVar35 * 0x91 + 2);
goto LAB_0040a7c8;
}
}
uVar15 = 0;
iVar23 = 0;
LAB_0040a7c8:
puVar26 = *(ushort **)(puVar51 + -0x7ed8);
*puVar26 = (ushort)(uVar15 << 8) | (ushort)(uVar15 >> 8);
iVar42 = *(int *)(puVar51 + -0x7cf0);
uVar13 = *puVar26;
ppuVar18 = (undefined1 **)0x22;
*(undefined1 *)(iVar42 + 0x21) = *(undefined1 *)((int)puVar26 + 1);
*(char *)(iVar42 + 0x20) = (char)uVar13;
if (uVar15 != 0) {
(**(code **)(puVar51 + -0x7d0c))(iVar42 + 0x22,iVar23 + 4,uVar15 * 0x12);
ppuVar18 = (undefined1 **)(uVar15 * 0x12 + 0x22);
}
pcVar48 = *(code **)(puVar51 + -0x7eb4);
pcVar17 = *(char **)(puVar51 + -0x7cf0);
break;
case (undefined1 **)0x5:
puVar21 = (undefined4 *)FUN_00409b80();
if (puVar21 == (undefined4 *)0x0) {
iVar23 = **(int **)(puVar51 + -0x7d40);
ppuVar18 = (undefined1 **)
(**(code **)(puVar51 + -0x7fb0))
("packetio_recv_handler: no session active for %02x:%02x:%02x:%02x:%02x:%02x; ignoring...\n"
,*(undefined1 *)(iVar23 + 10),*(undefined1 *)(iVar23 + 0xb),
*(undefined1 *)(iVar23 + 0xc),*(undefined1 *)(iVar23 + 0xd),
*(undefined1 *)(iVar23 + 0xe),*(undefined1 *)(iVar23 + 0xf));
return ppuVar18;
}
*(undefined1 *)((int)puVar21 + 5) = 0;
pcVar48 = *(code **)(puVar51 + -0x7dcc);
uVar11 = **(undefined2 **)(puVar51 + -0x7fb8);
uVar20 = *(undefined4 *)(puVar51 + -0x7cf0);
uVar27 = *(undefined4 *)(puVar51 + -0x7da0);
puVar21[0x48b] = 0;
*puVar21 = 0;
(*pcVar48)(uVar20,uVar27,(int)puVar21 + 0x1226,2,7,uVar11,0);
ppuVar18 = (undefined1 **)0x20;
pcVar17 = *(char **)(puVar51 + -0x7cf0);
pcVar48 = *(code **)(puVar51 + -0x7eb4);
break;
case (undefined1 **)0x8:
fmt_base(g_txbuf,&g_hwaddr,&DAT_0042c418,2,9,sVar10,0);
(**(code **)(puVar51 + -0x7d48))(&local_34,0);
uVar15 = local_34.tv_usec - **(int **)(puVar51 + -0x7f88);
lVar12 = (longlong)local_34.tv_sec * 1000000 +
CONCAT44(((local_34.tv_usec >> 0x1f) - (*(int **)(puVar51 + -0x7f88))[1]) -
(uint)((uint)local_34.tv_usec < uVar15),uVar15);
uVar15 = (uint)lVar12;
uVar14 = (**(code **)(puVar51 + -0x7d70))
(uVar15 * 0x100,uVar15 >> 0x18 | (int)((ulonglong)lVar12 >> 0x20) * 0x100,
1000000,0);
iVar23 = *(int *)(puVar51 + -0x7cf0);
puVar26 = (ushort *)**(undefined4 **)(puVar51 + -0x7d3c);
*(undefined1 *)(iVar23 + 0x20) = uVar14;
*(undefined1 *)(iVar23 + 0x22) = 0;
*(undefined1 *)(iVar23 + 0x21) = 0;
uVar15 = (uint)**(byte **)(puVar51 + -0x7cb8);
if ((uint)*puVar26 < (uint)**(byte **)(puVar51 + -0x7cb8)) {
uVar15 = (uint)*puVar26;
}
uVar35 = uVar15 & 0xff;
uVar38 = (**(int **)(puVar51 + -0x7d08) + 0x3c) - uVar35;
puVar37 = (undefined1 *)(*(int *)(puVar51 + -0x7cf0) + 0x24);
*(char *)(*(int *)(puVar51 + -0x7cf0) + 0x23) = (char)uVar15;
iVar23 = *(int *)(puVar51 + -0x7dd0);
puVar34 = puVar37;
uVar15 = uVar35;
while( true ) {
uVar36 = uVar38 % 0x3c;
uVar38 = uVar36 + 1;
if (uVar15 == 0) break;
puVar19 = (undefined1 *)(iVar23 + uVar36 * 8);
uVar14 = puVar19[2];
uVar4 = puVar19[4];
uVar5 = puVar19[6];
uVar6 = puVar19[7];
uVar7 = puVar19[1];
uVar8 = puVar19[3];
uVar9 = puVar19[5];
puVar34[1] = *puVar19;
puVar34[3] = uVar14;
puVar34[5] = uVar4;
puVar34[7] = uVar5;
*puVar34 = uVar7;
puVar34[2] = uVar8;
puVar34[4] = uVar9;
puVar34[6] = uVar6;
uVar15 = uVar15 - 1;
puVar34 = puVar34 + 8;
}
piVar16 = *(int **)(puVar51 + -0x7ea8);
iVar45 = **(int **)(puVar51 + -0x7e9c);
iVar46 = **(int **)(puVar51 + -32000);
iVar42 = *piVar16;
iVar47 = **(int **)(puVar51 + -0x7cc0);
puVar37 = puVar37 + uVar35 * 8;
FUN_00409c58();
iVar23 = *piVar16;
uVar15 = iVar23 - iVar42;
if (iVar23 == iVar42) {
uVar15 = 0;
}
uVar15 = uVar15 >> 10 & 0xffff;
iVar23 = **(int **)(puVar51 + -0x7e9c);
puVar37[1] = (char)uVar15;
*puVar37 = (char)(uVar15 >> 8);
uVar15 = iVar23 - iVar45;
if (iVar23 == iVar45) {
uVar15 = 0;
}
iVar23 = **(int **)(puVar51 + -32000);
puVar37[3] = (char)(uVar15 & 0xffff);
puVar37[2] = (char)((uVar15 & 0xffff) >> 8);
uVar15 = iVar23 - iVar46;
if (iVar23 == iVar46) {
uVar15 = 0;
}
uVar15 = uVar15 >> 10 & 0xffff;
iVar23 = **(int **)(puVar51 + -0x7cc0);
puVar37[5] = (char)uVar15;
puVar37[4] = (char)(uVar15 >> 8);
uVar15 = iVar23 - iVar47;
if (iVar23 == iVar47) {
uVar15 = 0;
}
puVar37[7] = (char)(uVar15 & 0xffff);
pcVar48 = *(code **)(puVar51 + -0x7eb4);
**(int **)(puVar51 + -0x7ea8) = iVar42;
pcVar17 = *(char **)(puVar51 + -0x7cf0);
**(int **)(puVar51 + -0x7e9c) = iVar45;
ppuVar18 = (undefined1 **)(uVar35 * 8 + 0x2c);
**(int **)(puVar51 + -32000) = iVar46;
**(int **)(puVar51 + -0x7cc0) = iVar47;
puVar37[6] = (char)((uVar15 & 0xffff) >> 8);
break;
case (undefined1 **)0xa:
if (g_samples_remaining == 0) {
gettimeofday(&local_34,(__timezone_ptr_t)0x0);
local_34.tv_sec = local_34.tv_sec + 1;
puVar49 = puVar51;
uVar20 = (**(code **)(puVar51 + -0x7e7c))(&local_34,FUN_0040af4c,0);
**(undefined4 **)(puVar49 + -0x7e6c) = uVar20;
}
ppuVar33 = *(undefined1 ***)(puVar49 + -0x7e5c);
*ppuVar33 = (undefined1 *)0x12c;
goto switchD_0040a24c_caseD_1;
}
LAB_0040af10:
ppuVar33 = (undefined1 **)(*pcVar48)(pcVar17,ppuVar18);
switchD_0040a24c_caseD_1:
return ppuVar33;
}