xref: /kvmtool/net/uip/ipv4.c (revision 7b0155fed9b4b9fb7af1b54d4c19880a41b21768)
167ba1b25SAsias He #include "kvm/uip.h"
267ba1b25SAsias He 
uip_tx_do_ipv4(struct uip_tx_arg * arg)367ba1b25SAsias He int uip_tx_do_ipv4(struct uip_tx_arg *arg)
467ba1b25SAsias He {
567ba1b25SAsias He 	struct uip_ip *ip;
667ba1b25SAsias He 
767ba1b25SAsias He 	ip = (struct uip_ip *)(arg->eth);
867ba1b25SAsias He 
967ba1b25SAsias He 	if (uip_ip_hdrlen(ip) != 20) {
1067ba1b25SAsias He 		pr_warning("IP header length is not 20 bytes");
1167ba1b25SAsias He 		return -1;
1267ba1b25SAsias He 	}
1367ba1b25SAsias He 
140134a2a7SAsias He 	switch (ip->proto) {
15*7b0155feSAsias He 	case UIP_IP_P_ICMP:
160134a2a7SAsias He 		uip_tx_do_ipv4_icmp(arg);
170134a2a7SAsias He 		break;
18*7b0155feSAsias He 	case UIP_IP_P_TCP:
193df5d593SAsias He 		uip_tx_do_ipv4_tcp(arg);
203df5d593SAsias He 		break;
21*7b0155feSAsias He 	case UIP_IP_P_UDP:
22dd7a270bSAsias He 		uip_tx_do_ipv4_udp(arg);
23dd7a270bSAsias He 		break;
240134a2a7SAsias He 	default:
250134a2a7SAsias He 		break;
260134a2a7SAsias He 	}
270134a2a7SAsias He 
2867ba1b25SAsias He 	return 0;
2967ba1b25SAsias He }
30