if_start(void)

{

	struct mbuf *ifm, *ifqt;



	DEBUG_CALL("if_start");



	if (if_queued == 0)

	   return; /* Nothing to do */



 again:

        /* check if we can really output */

        if (!slirp_can_output())

            return;



	/*

	 * See which queue to get next packet from

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

	 */

	if (if_fastq.ifq_next != &if_fastq) {

		ifm = if_fastq.ifq_next;

	} else {

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

		if (next_m != &if_batchq)

		   ifm = next_m;

		else

		   ifm = if_batchq.ifq_next;



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

		next_m = ifm->ifq_next;

	}

	/* Remove it from the queue */

	ifqt = ifm->ifq_prev;

	remque(ifm);

	--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;

	}



	/* Encapsulate the packet for sending */

        if_encap(ifm->m_data, ifm->m_len);



        m_free(ifm);



	if (if_queued)

	   goto again;

}

if_start(void)

{

	struct mbuf *ifm, *ifqt;



	DEBUG_CALL("if_start");



	if (if_queued == 0)

	   return; 



 again:

        

        if (!slirp_can_output())

            return;



	







	if (if_fastq.ifq_next != &if_fastq) {

		ifm = if_fastq.ifq_next;

	} else {

		

		if (next_m != &if_batchq)

		   ifm = next_m;

		else

		   ifm = if_batchq.ifq_next;



		

		next_m = ifm->ifq_next;

	}

	

	ifqt = ifm->ifq_prev;

	remque(ifm);

	--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_encap(ifm->m_data, ifm->m_len);



        m_free(ifm);



	if (if_queued)

	   goto again;

}

FUNC_0(void)

{

	struct mbuf *VAR_0, *VAR_1;



	DEBUG_CALL("FUNC_0");



	if (if_queued == 0)

	   return; 



 again:

        

        if (!slirp_can_output())

            return;



	







	if (if_fastq.ifq_next != &if_fastq) {

		VAR_0 = if_fastq.ifq_next;

	} else {

		

		if (next_m != &if_batchq)

		   VAR_0 = next_m;

		else

		   VAR_0 = if_batchq.ifq_next;



		

		next_m = VAR_0->ifq_next;

	}

	

	VAR_1 = VAR_0->ifq_prev;

	remque(VAR_0);

	--if_queued;



	

	if (VAR_0->ifs_next !=  VAR_0) {

		insque(VAR_0->ifs_next, VAR_1);

		ifs_remque(VAR_0);

	}



	

	if (VAR_0->ifq_so) {

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

		   

		   VAR_0->ifq_so->so_nqueued = 0;

	}



	

        if_encap(VAR_0->m_data, VAR_0->m_len);



        m_free(VAR_0);



	if (if_queued)

	   goto again;

}

FUNC_0(void)
{ struct mbuf *VAR_0, *VAR_1; DEBUG_CALL("FUNC_0"); if (if_queued == 0)
return; again:
if (!slirp_can_output())
return; if (if_fastq.ifq_next != &if_fastq) { VAR_0 = if_fastq.ifq_next; } else { if (next_m != &if_batchq)
VAR_0 = next_m; else
VAR_0 = if_batchq.ifq_next; next_m = VAR_0->ifq_next; } VAR_1 = VAR_0->ifq_prev; remque(VAR_0); --if_queued; if (VAR_0->ifs_next !=  VAR_0) { insque(VAR_0->ifs_next, VAR_1); ifs_remque(VAR_0); } if (VAR_0->ifq_so) { if (--VAR_0->ifq_so->so_queued == 0)
VAR_0->ifq_so->so_nqueued = 0; } if_encap(VAR_0->m_data, VAR_0->m_len); m_free(VAR_0); if (if_queued)
goto again; }