void slirp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len)

{

    struct mbuf *m;

    int proto;



    if (pkt_len < ETH_HLEN)

        return;



    proto = ntohs(*(uint16_t *)(pkt + 12));

    switch(proto) {

    case ETH_P_ARP:

        arp_input(slirp, pkt, pkt_len);

        break;

    case ETH_P_IP:

        m = m_get(slirp);

        if (!m)

            return;

        /* Note: we add to align the IP header */

        if (M_FREEROOM(m) < pkt_len + 2) {

            m_inc(m, pkt_len + 2);

        }

        m->m_len = pkt_len + 2;

        memcpy(m->m_data + 2, pkt, pkt_len);



        m->m_data += 2 + ETH_HLEN;

        m->m_len -= 2 + ETH_HLEN;



        ip_input(m);

        break;

    default:

        break;

    }

}

void slirp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len)

{

    struct mbuf *m;

    int proto;



    if (pkt_len < ETH_HLEN)

        return;



    proto = ntohs(*(uint16_t *)(pkt + 12));

    switch(proto) {

    case ETH_P_ARP:

        arp_input(slirp, pkt, pkt_len);

        break;

    case ETH_P_IP:

        m = m_get(slirp);

        if (!m)

            return;

        

        if (M_FREEROOM(m) < pkt_len + 2) {

            m_inc(m, pkt_len + 2);

        }

        m->m_len = pkt_len + 2;

        memcpy(m->m_data + 2, pkt, pkt_len);



        m->m_data += 2 + ETH_HLEN;

        m->m_len -= 2 + ETH_HLEN;



        ip_input(m);

        break;

    default:

        break;

    }

}

void FUNC_0(Slirp *VAR_0, const uint8_t *VAR_1, int VAR_2)

{

    struct mbuf *VAR_3;

    int VAR_4;



    if (VAR_2 < ETH_HLEN)

        return;



    VAR_4 = ntohs(*(uint16_t *)(VAR_1 + 12));

    switch(VAR_4) {

    case ETH_P_ARP:

        arp_input(VAR_0, VAR_1, VAR_2);

        break;

    case ETH_P_IP:

        VAR_3 = m_get(VAR_0);

        if (!VAR_3)

            return;

        

        if (M_FREEROOM(VAR_3) < VAR_2 + 2) {

            m_inc(VAR_3, VAR_2 + 2);

        }

        VAR_3->m_len = VAR_2 + 2;

        memcpy(VAR_3->m_data + 2, VAR_1, VAR_2);



        VAR_3->m_data += 2 + ETH_HLEN;

        VAR_3->m_len -= 2 + ETH_HLEN;



        ip_input(VAR_3);

        break;

    default:

        break;

    }

}

void FUNC_0(Slirp *VAR_0, const uint8_t *VAR_1, int VAR_2)
{ struct mbuf *VAR_3; int VAR_4; if (VAR_2 < ETH_HLEN)
return; VAR_4 = ntohs(*(uint16_t *)(VAR_1 + 12)); switch(VAR_4) { case ETH_P_ARP:
arp_input(VAR_0, VAR_1, VAR_2); break; case ETH_P_IP:
VAR_3 = m_get(VAR_0); if (!VAR_3)
return; if (M_FREEROOM(VAR_3) < VAR_2 + 2) { m_inc(VAR_3, VAR_2 + 2); } VAR_3->m_len = VAR_2 + 2; memcpy(VAR_3->m_data + 2, VAR_1, VAR_2); VAR_3->m_data += 2 + ETH_HLEN; VAR_3->m_len -= 2 + ETH_HLEN; ip_input(VAR_3); break; default:
break; } }