89   uip_ipaddr_t srcipaddr, destipaddr;
 
   95 #define ARP_HWTYPE_ETH 1 
  104   {{0xff,0xff,0xff,0xff,0xff,0xff}};
 
  107 static uip_ipaddr_t ipaddr;
 
  110 static uint8_t arptime;
 
  111 static uint8_t tmpage;
 
  113 #define BUF   ((struct arp_hdr *)&uip_buf[0]) 
  114 #define IPBUF ((struct ethip_hdr *)&uip_buf[0]) 
  119 #define PRINTF(...) printf(__VA_ARGS__) 
  134     memset(&arp_table[i].ipaddr, 0, 4);
 
  150   struct arp_entry *tabptr;
 
  154     tabptr = &arp_table[i];
 
  155     if(uip_ipaddr_cmp(&tabptr->ipaddr, &uip_all_zeroes_addr) &&
 
  157       memset(&tabptr->ipaddr, 0, 4);
 
  165 uip_arp_update(uip_ipaddr_t *ipaddr, 
struct uip_eth_addr *ethaddr)
 
  167   register struct arp_entry *tabptr = arp_table;
 
  173     tabptr = &arp_table[i];
 
  176     if(!uip_ipaddr_cmp(&tabptr->ipaddr, &uip_all_zeroes_addr)) {
 
  180       if(uip_ipaddr_cmp(ipaddr, &tabptr->ipaddr)) {
 
  183         memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6);
 
  184         tabptr->time = arptime;
 
  197     tabptr = &arp_table[i];
 
  198     if(uip_ipaddr_cmp(&tabptr->ipaddr, &uip_all_zeroes_addr)) {
 
  205   if(i == UIP_ARPTAB_SIZE) {
 
  209       tabptr = &arp_table[i];
 
  210       if(arptime - tabptr->time > tmpage) {
 
  211         tmpage = arptime - tabptr->time;
 
  216     tabptr = &arp_table[i];
 
  222   memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6);
 
  223   tabptr->time = arptime;
 
  247   if((IPBUF->srcipaddr[0] & uip_netmask[0]) !=
 
  248      (uip_hostaddr[0] & uip_netmask[0])) {
 
  251   if((IPBUF->srcipaddr[1] & uip_netmask[1]) !=
 
  252      (uip_hostaddr[1] & uip_netmask[1])) {
 
  255   uip_arp_update(IPBUF->srcipaddr, &(IPBUF->ethhdr.src));
 
  287   if(
uip_len < 
sizeof(
struct arp_hdr)) {
 
  293   switch(BUF->opcode) {
 
  299     PRINTF(
"uip_arp_arpin: request for %d.%d.%d.%d (we are %d.%d.%d.%d)\n",
 
  300            BUF->dipaddr.u8[0], BUF->dipaddr.u8[1],
 
  301            BUF->dipaddr.u8[2], BUF->dipaddr.u8[3],
 
  302            uip_hostaddr.u8[0], uip_hostaddr.u8[1],
 
  303            uip_hostaddr.u8[2], uip_hostaddr.u8[3]);
 
  304     if(uip_ipaddr_cmp(&BUF->dipaddr, &uip_hostaddr)) {
 
  308       uip_arp_update(&BUF->sipaddr, &BUF->shwaddr);
 
  312       memcpy(BUF->dhwaddr.addr, BUF->shwaddr.addr, 6);
 
  313       memcpy(BUF->shwaddr.addr, 
uip_lladdr.addr, 6);
 
  314       memcpy(BUF->ethhdr.src.addr, 
uip_lladdr.addr, 6);
 
  315       memcpy(BUF->ethhdr.dest.addr, BUF->dhwaddr.addr, 6);
 
  320       BUF->ethhdr.type = 
UIP_HTONS(UIP_ETHTYPE_ARP);
 
  321       uip_len = 
sizeof(
struct arp_hdr);
 
  327     if(uip_ipaddr_cmp(&BUF->dipaddr, &uip_hostaddr)) {
 
  328       uip_arp_update(&BUF->sipaddr, &BUF->shwaddr);
 
  366   struct arp_entry *tabptr = arp_table;
 
  376   if(uip_ipaddr_cmp(&IPBUF->destipaddr, &uip_broadcast_addr)) {
 
  377     memcpy(IPBUF->ethhdr.dest.addr, broadcast_ethaddr.addr, 6);
 
  378   } 
else if(IPBUF->destipaddr.u8[0] == 224) {
 
  380     IPBUF->ethhdr.dest.addr[0] = 0x01;
 
  381     IPBUF->ethhdr.dest.addr[1] = 0x00;
 
  382     IPBUF->ethhdr.dest.addr[2] = 0x5e;
 
  383     IPBUF->ethhdr.dest.addr[3] = IPBUF->destipaddr.u8[1];
 
  384     IPBUF->ethhdr.dest.addr[4] = IPBUF->destipaddr.u8[2];
 
  385     IPBUF->ethhdr.dest.addr[5] = IPBUF->destipaddr.u8[3];
 
  398       if(uip_ipaddr_cmp(&ipaddr, &tabptr->ipaddr)) {
 
  404     if(i == UIP_ARPTAB_SIZE) {
 
  408       memset(BUF->ethhdr.dest.addr, 0xff, 6);
 
  409       memset(BUF->dhwaddr.addr, 0x00, 6);
 
  410       memcpy(BUF->ethhdr.src.addr, 
uip_lladdr.addr, 6);
 
  411       memcpy(BUF->shwaddr.addr, 
uip_lladdr.addr, 6);
 
  417       BUF->protocol = 
UIP_HTONS(UIP_ETHTYPE_IP);
 
  420       BUF->ethhdr.type = 
UIP_HTONS(UIP_ETHTYPE_ARP);
 
  424       uip_len = 
sizeof(
struct arp_hdr);
 
  429     memcpy(IPBUF->ethhdr.dest.addr, tabptr->ethaddr.addr, 6);
 
  431   memcpy(IPBUF->ethhdr.src.addr, 
uip_lladdr.addr, 6);
 
  433   IPBUF->ethhdr.type = 
UIP_HTONS(UIP_ETHTYPE_IP);