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