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