xref: /kvmtool/net/uip/ipv4.c (revision dd7a270b5512c4ff611b95487c0b0f2d3b827e55)
167ba1b25SAsias He #include "kvm/uip.h"
267ba1b25SAsias He 
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) {
150134a2a7SAsias He 	case 0x01: /* ICMP */
160134a2a7SAsias He 		uip_tx_do_ipv4_icmp(arg);
170134a2a7SAsias He 		break;
18*dd7a270bSAsias He 	case 0x11: /* UDP */
19*dd7a270bSAsias He 		uip_tx_do_ipv4_udp(arg);
20*dd7a270bSAsias He 		break;
210134a2a7SAsias He 	default:
220134a2a7SAsias He 		break;
230134a2a7SAsias He 	}
240134a2a7SAsias He 
2567ba1b25SAsias He 	return 0;
2667ba1b25SAsias He }
27