rem: int udp_output(struct inpcb *inp, struct mbuf *m, struct mbuf *addr,struct mbuf *control)
add: static int udp_output(struct inpcb *inp, struct mbuf *m, struct mbuf *addr, struct mbuf *control)
context: int udp_output(struct inpcb *inp, struct mbuf *m, struct mbuf *addr,struct mbuf *control){	struct udpiphdr *ui;	uint16 len = m->m_pkthdr.len;	uint16 hdrlen = len + (uint16)sizeof(struct udpiphdr);	struct in_addr laddr;	int error = 0;	if (control)		m_freem(control);	if (addr) {		laddr = inp->laddr;		if (inp->faddr.s_addr != INADDR_ANY) {			error = EISCONN;			goto release;		}		error = in_pcbconnect(inp, addr);		if (error)			goto release;	} else {		if (inp->faddr.s_addr == INADDR_ANY) {			error = ENOTCONN;			goto release;		}	}	M_PREPEND(m, sizeof(*ui));	if (!m) {		error = ENOMEM;		goto release;	}	ui = mtod(m, struct udpiphdr *);	ui->ui_next = ui->ui_prev = NULL;	ui->ui_x1 = 0;	ui->ui_pr = IPPROTO_UDP;	ui->ui_len = htons(len + sizeof(struct udphdr));		ui->ui_src = inp->laddr;	ui->ui_dst = inp->faddr;	ui->ui_sport = inp->lport;	ui->ui_dport = inp->fport;	ui->ui_ulen = ui->ui_len;	ui->ui_sum = 0;	if (udpcksum)		ui->ui_sum = in_cksum(m, hdrlen, 0);	if (ui->ui_sum == 0)		ui->ui_sum = 0xffff;	((struct ip*)ui)->ip_len = hdrlen;	((struct ip*)ui)->ip_ttl = 64;	/* XXX - Fix this! */	((struct ip*)ui)->ip_tos = 0;	/* XXX - Fix this! */	/* XXX - add multicast options when available! */	error = proto[IPPROTO_IP]->pr_output(m,					inp->inp_options, &inp->inp_route,					inp->inp_socket->so_options & (SO_DONTROUTE | SO_BROADCAST),					NULL /* inp->inp_moptions */ );	if (addr) {		in_pcbdisconnect(inp); /* remove temporary route */		inp->laddr = laddr;	}	return error;release:	m_freem(m);	return error;}