xref: /kvmtool/net/uip/icmp.c (revision 42a6c572af1499be7a43780144e35432e6bdeb09)
1*0134a2a7SAsias He #include "kvm/uip.h"
2*0134a2a7SAsias He 
uip_tx_do_ipv4_icmp(struct uip_tx_arg * arg)3*0134a2a7SAsias He int uip_tx_do_ipv4_icmp(struct uip_tx_arg *arg)
4*0134a2a7SAsias He {
5*0134a2a7SAsias He 	struct uip_ip *ip, *ip2;
6*0134a2a7SAsias He 	struct uip_icmp *icmp2;
7*0134a2a7SAsias He 	struct uip_buf *buf;
8*0134a2a7SAsias He 
9*0134a2a7SAsias He 	buf		= uip_buf_clone(arg);
10*0134a2a7SAsias He 
11*0134a2a7SAsias He 	icmp2		= (struct uip_icmp *)(buf->eth);
12*0134a2a7SAsias He 	ip2		= (struct uip_ip *)(buf->eth);
13*0134a2a7SAsias He 	ip		= (struct uip_ip *)(arg->eth);
14*0134a2a7SAsias He 
15*0134a2a7SAsias He 	ip2->sip	= ip->dip;
16*0134a2a7SAsias He 	ip2->dip	= ip->sip;
17*0134a2a7SAsias He 	ip2->csum	= 0;
18*0134a2a7SAsias He 	/*
19*0134a2a7SAsias He 	 * ICMP reply: 0
20*0134a2a7SAsias He 	 */
21*0134a2a7SAsias He 	icmp2->type	= 0;
22*0134a2a7SAsias He 	icmp2->csum	= 0;
23*0134a2a7SAsias He 	ip2->csum	= uip_csum_ip(ip2);
24*0134a2a7SAsias He 	icmp2->csum	= uip_csum_icmp(icmp2);
25*0134a2a7SAsias He 
26*0134a2a7SAsias He 	uip_buf_set_used(arg->info, buf);
27*0134a2a7SAsias He 
28*0134a2a7SAsias He 	return 0;
29*0134a2a7SAsias He }
30