if_start(Slirp *slirp)

{

    uint64_t now = qemu_get_clock_ns(rt_clock);

    int requeued = 0;

	struct mbuf *ifm, *ifqt;



	DEBUG_CALL("if_start");



	if (slirp->if_queued == 0)

	   return; /* Nothing to do */



 again:

        /* check if we can really output */

        if (!slirp_can_output(slirp->opaque))

            return;



	/*

	 * See which queue to get next packet from

	 * If there's something in the fastq, select it immediately

	 */

	if (slirp->if_fastq.ifq_next != &slirp->if_fastq) {

		ifm = slirp->if_fastq.ifq_next;

	} else {

		/* Nothing on fastq, see if next_m is valid */

		if (slirp->next_m != &slirp->if_batchq)

		   ifm = slirp->next_m;

		else

		   ifm = slirp->if_batchq.ifq_next;



		/* Set which packet to send on next iteration */

		slirp->next_m = ifm->ifq_next;

	}

	/* Remove it from the queue */

	ifqt = ifm->ifq_prev;

	remque(ifm);

	slirp->if_queued--;



	/* If there are more packets for this session, re-queue them */

	if (ifm->ifs_next != /* ifm->ifs_prev != */ ifm) {

		insque(ifm->ifs_next, ifqt);

		ifs_remque(ifm);

	}



	/* Update so_queued */

	if (ifm->ifq_so) {

		if (--ifm->ifq_so->so_queued == 0)

		   /* If there's no more queued, reset nqueued */

		   ifm->ifq_so->so_nqueued = 0;

	}



        if (ifm->expiration_date < now) {

            /* Expired */

            m_free(ifm);

        } else {

            /* Encapsulate the packet for sending */

            if (if_encap(slirp, ifm)) {

                m_free(ifm);

            } else {

                /* re-queue */

                insque(ifm, ifqt);

                requeued++;

            }

        }



	if (slirp->if_queued)

	   goto again;



        slirp->if_queued = requeued;

}

if_start(Slirp *slirp)

{

    uint64_t now = qemu_get_clock_ns(rt_clock);

    int requeued = 0;

	struct mbuf *ifm, *ifqt;



	DEBUG_CALL("if_start");



	if (slirp->if_queued == 0)

	   return; 



 again:

        

        if (!slirp_can_output(slirp->opaque))

            return;



	







	if (slirp->if_fastq.ifq_next != &slirp->if_fastq) {

		ifm = slirp->if_fastq.ifq_next;

	} else {

		

		if (slirp->next_m != &slirp->if_batchq)

		   ifm = slirp->next_m;

		else

		   ifm = slirp->if_batchq.ifq_next;



		

		slirp->next_m = ifm->ifq_next;

	}

	

	ifqt = ifm->ifq_prev;

	remque(ifm);

	slirp->if_queued--;



	

	if (ifm->ifs_next !=  ifm) {

		insque(ifm->ifs_next, ifqt);

		ifs_remque(ifm);

	}



	

	if (ifm->ifq_so) {

		if (--ifm->ifq_so->so_queued == 0)

		   

		   ifm->ifq_so->so_nqueued = 0;

	}



        if (ifm->expiration_date < now) {

            

            m_free(ifm);

        } else {

            

            if (if_encap(slirp, ifm)) {

                m_free(ifm);

            } else {

                

                insque(ifm, ifqt);

                requeued++;

            }

        }



	if (slirp->if_queued)

	   goto again;



        slirp->if_queued = requeued;

}

		slirp->next_m = ifm->ifq_next; 	slirp->if_queued--;         if (ifm->expiration_date < now) {             m_free(ifm);         } else {             if (if_encap(slirp, ifm)) {                 m_free(ifm);             } else {                 insque(ifm, ifqt);                 requeued++;
FUNC_0(Slirp *VAR_0)

{

    uint64_t now = qemu_get_clock_ns(rt_clock);

    int VAR_1 = 0;

	struct mbuf *VAR_2, *VAR_3;



	DEBUG_CALL("FUNC_0");



	if (VAR_0->if_queued == 0)

	   return; 



 again:

        

        if (!slirp_can_output(VAR_0->opaque))

            return;



	







	if (VAR_0->if_fastq.ifq_next != &VAR_0->if_fastq) {

		VAR_2 = VAR_0->if_fastq.ifq_next;

	} else {

		

		if (VAR_0->next_m != &VAR_0->if_batchq)

		   VAR_2 = VAR_0->next_m;

		else

		   VAR_2 = VAR_0->if_batchq.ifq_next;



		

		VAR_0->next_m = VAR_2->ifq_next;

	}

	

	VAR_3 = VAR_2->ifq_prev;

	remque(VAR_2);

	VAR_0->if_queued--;



	

	if (VAR_2->ifs_next !=  VAR_2) {

		insque(VAR_2->ifs_next, VAR_3);

		ifs_remque(VAR_2);

	}



	

	if (VAR_2->ifq_so) {

		if (--VAR_2->ifq_so->so_queued == 0)

		   

		   VAR_2->ifq_so->so_nqueued = 0;

	}



        if (VAR_2->expiration_date < now) {

            

            m_free(VAR_2);

        } else {

            

            if (if_encap(VAR_0, VAR_2)) {

                m_free(VAR_2);

            } else {

                

                insque(VAR_2, VAR_3);

                VAR_1++;

            }

        }



	if (VAR_0->if_queued)

	   goto again;



        VAR_0->if_queued = VAR_1;

}

FUNC_0(Slirp *VAR_0)
{ uint64_t now = qemu_get_clock_ns(rt_clock); int VAR_1 = 0; struct mbuf *VAR_2, *VAR_3; DEBUG_CALL("FUNC_0"); if (VAR_0->if_queued == 0)
return; again:
if (!slirp_can_output(VAR_0->opaque))
return; if (VAR_0->if_fastq.ifq_next != &VAR_0->if_fastq) { VAR_2 = VAR_0->if_fastq.ifq_next; } else { if (VAR_0->next_m != &VAR_0->if_batchq)
VAR_2 = VAR_0->next_m; else
VAR_2 = VAR_0->if_batchq.ifq_next; VAR_0->next_m = VAR_2->ifq_next; } VAR_3 = VAR_2->ifq_prev; remque(VAR_2); VAR_0->if_queued--; if (VAR_2->ifs_next !=  VAR_2) { insque(VAR_2->ifs_next, VAR_3); ifs_remque(VAR_2); } if (VAR_2->ifq_so) { if (--VAR_2->ifq_so->so_queued == 0)
VAR_2->ifq_so->so_nqueued = 0; } if (VAR_2->expiration_date < now) { m_free(VAR_2); } else { if (if_encap(VAR_0, VAR_2)) { m_free(VAR_2); } else { insque(VAR_2, VAR_3); VAR_1++; } } if (VAR_0->if_queued)
goto again; VAR_0->if_queued = VAR_1; }