1*9f74838fSAsias He #include "kvm/uip.h" 2*9f74838fSAsias He uip_tx_do_arp(struct uip_tx_arg * arg)3*9f74838fSAsias Heint uip_tx_do_arp(struct uip_tx_arg *arg) 4*9f74838fSAsias He { 5*9f74838fSAsias He struct uip_arp *arp, *arp2; 6*9f74838fSAsias He struct uip_info *info; 7*9f74838fSAsias He struct uip_buf *buf; 8*9f74838fSAsias He 9*9f74838fSAsias He info = arg->info; 10*9f74838fSAsias He buf = uip_buf_clone(arg); 11*9f74838fSAsias He 12*9f74838fSAsias He arp = (struct uip_arp *)(arg->eth); 13*9f74838fSAsias He arp2 = (struct uip_arp *)(buf->eth); 14*9f74838fSAsias He 15*9f74838fSAsias He /* 16*9f74838fSAsias He * ARP replay code: 2 17*9f74838fSAsias He */ 18*9f74838fSAsias He arp2->op = htons(0x2); 19*9f74838fSAsias He arp2->dmac = arp->smac; 20*9f74838fSAsias He arp2->dip = arp->sip; 21*9f74838fSAsias He 22*9f74838fSAsias He if (arp->dip == htonl(info->host_ip)) { 23*9f74838fSAsias He arp2->smac = info->host_mac; 24*9f74838fSAsias He arp2->sip = htonl(info->host_ip); 25*9f74838fSAsias He 26*9f74838fSAsias He uip_buf_set_used(info, buf); 27*9f74838fSAsias He } 28*9f74838fSAsias He 29*9f74838fSAsias He return 0; 30*9f74838fSAsias He } 31