167ba1b25SAsias He #include "kvm/uip.h" 267ba1b25SAsias He uip_tx_do_ipv4(struct uip_tx_arg * arg)367ba1b25SAsias Heint 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