rem: M_PREPEND(m, sizeof(struct ip));
add: M_PREPEND(m, (int) sizeof(struct ip));
context: int rip_output(struct mbuf *m, struct socket *so, uint32 dst){	struct ip *ip;	struct inpcb *inp = sotoinpcb(so);	struct mbuf *opts;	int flags = (so->so_options & SO_DONTROUTE) | IP_ALLOWBROADCAST;	if ((inp->inp_flags & INP_HDRINCL) == 0) {		M_PREPEND(m, sizeof(struct ip));		ip = mtod(m, struct ip *);		ip->ip_p = inp->inp_ip.ip_p;		ip->ip_len = m->m_pkthdr.len;		ip->ip_src = inp->laddr;		ip->ip_dst.s_addr = dst;		ip->ip_ttl = MAXTTL;		opts = inp->inp_options;		ip->ip_off = 0;		ip->ip_tos = 0;	} else {		ip = mtod(m, struct ip *);		/* ip_output relies on having the ip->ip_len in host		 * order...this is lame... */		ip->ip_len = ntohs(ip->ip_len);		if (ip->ip_id == 0)			if (ipm)				ip->ip_id = htons(ipm->ip_id());		opts = NULL;		flags |= IP_RAWOUTPUT;		ipstat.ips_rawout++;	}	if (ipm) {		return ipm->output(m, opts, &inp->inp_route, flags, NULL);	}	/* XXX - last arg should be inp->inp_moptions when we have multicast */	return 0;}