uip_etharp.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "uip_pbuf.h"
  2. #include "uip-conf.h"
  3. #include "rtdef.h"
  4. #include "uip.h"
  5. #include "uip_arp.h"
  6. #include "uip_netif.h"
  7. extern u16_t uip_len, uip_slen;
  8. void
  9. etharp_ip_input(struct netif *netif, struct pbuf *p)
  10. {
  11. u8_t *ptr;
  12. int i;
  13. ptr = p->payload;
  14. uip_len = p->len;
  15. for (i=0;i<p->len;i++) uip_buf[i] = ptr[i];
  16. uip_arp_ipin();
  17. uip_input();
  18. return;
  19. }
  20. void
  21. etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, struct pbuf *p)
  22. {
  23. u8_t *ptr,*pdata;
  24. //struct pbuf *q;
  25. int i;
  26. ptr = p->payload;
  27. uip_len = p->len;
  28. for (i=0;i<p->len;i++) uip_buf[i] = ptr[i];
  29. uip_arp_arpin(); //update arp table uip_arp_arpin
  30. if (uip_len)
  31. {
  32. if (( pdata =(u8_t*)rt_malloc(1500*sizeof(u8_t))) ==RT_NULL)
  33. {
  34. pbuf_free(p);
  35. return;
  36. }
  37. for (i=0; i < (UIP_LLH_LEN + 40); ++i)
  38. {
  39. pdata[i] = uip_buf[i];
  40. }
  41. for (; i < uip_len; ++i)
  42. {
  43. pdata[i] = uip_appdata[i - UIP_LLH_LEN - 40 ];
  44. }
  45. //q = p;
  46. p ->payload = pdata;
  47. p->len = uip_len;
  48. netif->linkoutput(netif,p);
  49. rt_free(pdata);
  50. pbuf_free(p);
  51. // pbuf_free(q);
  52. return ;
  53. // return 0; //ERR_OK
  54. }
  55. pbuf_free(p);
  56. }