1 #include "kvm/uip.h" 2 uip_tx_do_ipv4(struct uip_tx_arg * arg)3int uip_tx_do_ipv4(struct uip_tx_arg *arg) 4 { 5 struct uip_ip *ip; 6 7 ip = (struct uip_ip *)(arg->eth); 8 9 if (uip_ip_hdrlen(ip) != 20) { 10 pr_warning("IP header length is not 20 bytes"); 11 return -1; 12 } 13 14 switch (ip->proto) { 15 case UIP_IP_P_ICMP: 16 uip_tx_do_ipv4_icmp(arg); 17 break; 18 case UIP_IP_P_TCP: 19 uip_tx_do_ipv4_tcp(arg); 20 break; 21 case UIP_IP_P_UDP: 22 uip_tx_do_ipv4_udp(arg); 23 break; 24 default: 25 break; 26 } 27 28 return 0; 29 } 30