net_lwip2.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #ifndef __NET_LWIP_H__
  2. #define __NET_LWIP_H__
  3. #include "luat_base.h"
  4. #include "dns_def.h"
  5. #include "luat_network_adapter.h"
  6. #include "dhcp_def.h"
  7. #ifdef LWIP_NUM_SOCKETS
  8. #if LWIP_NUM_SOCKETS > 16
  9. #define MAX_SOCK_NUM 16
  10. #else
  11. #define MAX_SOCK_NUM LWIP_NUM_SOCKETS
  12. #endif
  13. #else
  14. #define MAX_SOCK_NUM 8
  15. #endif
  16. typedef struct
  17. {
  18. llist_head node;
  19. uint64_t tag; //考虑到socket复用的问题,必须有tag来做比对
  20. luat_ip_addr_t ip;
  21. uint8_t *data;
  22. uint32_t read_pos;
  23. uint16_t len;
  24. uint16_t port;
  25. uint8_t is_sending;
  26. uint8_t is_need_ack;
  27. }socket_data_t;
  28. typedef struct
  29. {
  30. uint64_t socket_tag;
  31. dns_client_t *dns_client[NW_ADAPTER_INDEX_LWIP_NETIF_QTY];
  32. socket_ctrl_t socket[MAX_SOCK_NUM];
  33. ip_addr_t ec618_ipv6;
  34. struct netif *lwip_netif[NW_ADAPTER_INDEX_LWIP_NETIF_QTY];
  35. CBFuncEx_t socket_cb;
  36. void *user_data;
  37. void *task_handle;
  38. uint32_t socket_busy;
  39. uint32_t socket_connect;
  40. uint8_t netif_network_ready[NW_ADAPTER_INDEX_LWIP_NETIF_QTY];
  41. // DNS相关
  42. struct udp_pcb *dns_udp[NW_ADAPTER_INDEX_LWIP_NETIF_QTY];
  43. HANDLE dns_timer[NW_ADAPTER_INDEX_LWIP_NETIF_QTY];
  44. uint8_t next_socket_index;
  45. HANDLE arp_timer;
  46. dhcp_client_info_t *dhcpc[NW_ADAPTER_INDEX_LWIP_NETIF_QTY];
  47. }net_lwip2_ctrl_struct;
  48. void net_lwip2_register_adapter(uint8_t adapter_index);
  49. void net_lwip2_init(uint8_t adapter_index);
  50. int net_lwip_check_all_ack(int socket_id);
  51. void net_lwip2_set_netif(uint8_t adapter_index, struct netif *netif);
  52. struct netif * net_lwip2_get_netif(uint8_t adapter_index);
  53. /*
  54. * 如果是需要使用静态IP,则需要先设置好IP,再设置linkup
  55. * 如果之前设置了静态IP,现在想用动态IP,需要先删掉静态IP,再linkup
  56. * 一旦linkup,如果没有使用静态IP,就会启动DHCP
  57. * 不能用过DHCP获取IP的网卡,必须先设置静态IP!!!!!!,比如GPRS
  58. */
  59. void net_lwip2_set_link_state(uint8_t adapter_index, uint8_t updown);
  60. void net_lwip2_set_dhcp_client(uint8_t adapter_index, dhcp_client_info_t *dhcp_client);
  61. #endif