Xinu7/src/cmd/download/vax/eload/src/udpipwr.c

/* udpipwr.c -- udpipwr */

#include "../h/deqna.h"
#include "../h/ether.h"
#include "../h/ip.h"
#include "../h/udp.h"
#include "../h/eload.h"

/*---------------------------------------------------------------------------
 * udpipwr -- write a udp packet over the ethernet
 *---------------------------------------------------------------------------
*/
udpipwr(myeaddr, idrecvd, wpkt, wcmd, wpktlen, rpkt, rcmd, rpktlen)
Eaddr	myeaddr;
Bool	idrecvd;
struct	epacket	*wpkt, *rpkt;
struct	dcmd	*wcmd, *rcmd;
int	wpktlen, rpktlen;
{
	register struct	ip *ipptr;

	if (idrecvd) {
	    ipptr = (struct ip *) wpkt->ep_data;
	    ipptr->i_paclen = hs2net(wpktlen-EHLEN);
	    ipptr->i_id = hs2net(net2hs(ipptr->i_id) + 1);
	    ipptr->i_cksum = 0;
	    ipptr->i_cksum = cksum(ipptr, IPHLEN>>1);
	    ((struct udp *)(ipptr->i_data))->u_udplen =
						  hs2net(wpktlen-EHLEN-IPHLEN);
	    ewrite(myeaddr, wcmd, wpkt, wpktlen, rcmd, rpkt, rpktlen);
	 }
}