luat_netdrv.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #ifndef LUAT_NETDRV_H
  2. #define LUAT_NETDRV_H
  3. #include "lwip/pbuf.h"
  4. #include "luat_ulwip.h"
  5. struct luat_netdrv;
  6. typedef void (*luat_netdrv_dataout_cb)(struct luat_netdrv* drv, void* userdata, uint8_t* buff, uint16_t len);
  7. typedef int (*luat_netdrv_bootup_cb)(struct luat_netdrv* drv, void* userdata);
  8. typedef int (*luat_netdrv_ready_cb)(struct luat_netdrv* drv, void* userdata);
  9. typedef int (*luat_netdrv_dhcp_set)(struct luat_netdrv* drv, void* userdata, int enable);
  10. typedef int (*luat_netdrv_ctrl_cb)(struct luat_netdrv* drv, void* userdata, int cmd, void* param);
  11. typedef int (*luat_netdrv_debug_cb)(struct luat_netdrv* drv, void* userdata, int enable);
  12. #define MACFMT "%02X%02X%02X%02X%02X%02X"
  13. #define MAC_ARG(x) ((uint8_t*)(x))[0],((uint8_t*)(x))[1],((uint8_t*)(x))[2],((uint8_t*)(x))[3],((uint8_t*)(x))[4],((uint8_t*)(x))[5]
  14. enum {
  15. LUAT_NETDRV_TP_NATIVE,
  16. LUAT_NETDRV_TP_CH390H,
  17. LUAT_NETDRV_TP_W5100,
  18. LUAT_NETDRV_TP_W5500,
  19. LUAT_NETDRV_TP_SPINET,
  20. LUAT_NETDRV_TP_UARTNET,
  21. LUAT_NETDRV_TP_USB
  22. };
  23. enum {
  24. LUAT_NETDRV_CTRL_RESET,
  25. };
  26. typedef struct luat_netdrv_conf
  27. {
  28. int32_t id;
  29. int32_t impl;
  30. uint8_t spiid;
  31. uint8_t cspin;
  32. uint8_t rstpin;
  33. uint8_t irqpin;
  34. uint16_t mtu;
  35. uint8_t flags;
  36. // Wireguard相关参数
  37. #ifdef LUAT_USE_NETDRV_WG
  38. const char* wg_private_key;
  39. uint16_t wg_listen_port;
  40. uint16_t wg_keepalive;
  41. const char* wg_preshared_key;
  42. const char* wg_endpoint_key;
  43. const char* wg_endpoint_ip;
  44. uint16_t wg_endpoint_port;
  45. #endif
  46. }luat_netdrv_conf_t;
  47. typedef struct luat_netdrv_statics_item
  48. {
  49. uint64_t counter;
  50. uint64_t bytes;
  51. }luat_netdrv_statics_item_t;
  52. typedef struct luat_netdrv_statics
  53. {
  54. luat_netdrv_statics_item_t in;
  55. luat_netdrv_statics_item_t out;
  56. luat_netdrv_statics_item_t drop;
  57. }luat_netdrv_statics_t;
  58. typedef struct luat_netdrv {
  59. int32_t id;
  60. struct netif* netif;
  61. ulwip_ctx_t* ulwip;
  62. luat_netdrv_dataout_cb dataout;
  63. luat_netdrv_bootup_cb boot;
  64. luat_netdrv_ready_cb ready;
  65. luat_netdrv_dhcp_set dhcp;
  66. luat_netdrv_statics_t statics;
  67. void* userdata;
  68. luat_netdrv_ctrl_cb ctrl;
  69. uint8_t gw_mac[6];
  70. luat_netdrv_debug_cb debug;
  71. }luat_netdrv_t;
  72. luat_netdrv_t* luat_netdrv_setup(luat_netdrv_conf_t *conf);
  73. int luat_netdrv_dhcp(int32_t id, int32_t enable);
  74. int luat_netdrv_ready(int32_t id);
  75. int luat_netdrv_register(int32_t id, luat_netdrv_t* drv);
  76. int luat_netdrv_mac(int32_t id, const char* new, char* old);
  77. void luat_netdrv_stat_inc(luat_netdrv_statics_item_t* stat, size_t len);
  78. #define NETDRV_STAT_IN(ndrv, len) luat_netdrv_stat_inc(&ndrv->statics.in, len)
  79. #define NETDRV_STAT_OUT(ndrv, len) luat_netdrv_stat_inc(&ndrv->statics.out, len)
  80. #define NETDRV_STAT_DROP(ndrv, len) luat_netdrv_stat_inc(&ndrv->statics.drop, len)
  81. luat_netdrv_t* luat_netdrv_get(int id);
  82. void luat_netdrv_print_pkg(const char* tat, uint8_t* buff, size_t len);
  83. // 辅助函数
  84. uint32_t alg_hdr_16bitsum(const uint16_t *buff, uint16_t len);
  85. uint16_t alg_iphdr_chksum(const uint16_t *buff, uint16_t len);
  86. uint16_t alg_tcpudphdr_chksum(uint32_t src_addr, uint32_t dst_addr, uint8_t proto, const uint16_t *buff, uint16_t len);
  87. // 辅助传递函数
  88. typedef struct netdrv_pkg_msg
  89. {
  90. struct netif * netif;
  91. uint16_t len;
  92. uint8_t buff[4];
  93. }netdrv_pkg_msg_t;
  94. void luat_netdrv_netif_input(void* args);
  95. int luat_netdrv_netif_input_proxy(struct netif * netif, uint8_t* buff, uint16_t len);
  96. void luat_netdrv_print_tm(const char * tag);
  97. void luat_netdrv_debug_set(int id, int enable);
  98. void luat_netdrv_netif_set_down(struct netif* netif);
  99. void luat_netdrv_netif_set_link_down(struct netif* netif);
  100. int luat_netdrv_dhcp_opt(luat_netdrv_t* drv, void* userdata, int enable);
  101. extern uint32_t g_netdrv_debug_enable;
  102. #ifndef __NETDRV_CODE_IN_RAM__
  103. #ifdef __LUAT_C_CODE_IN_RAM__
  104. #define __NETDRV_CODE_IN_RAM__ __LUAT_C_CODE_IN_RAM__
  105. #else
  106. #define __NETDRV_CODE_IN_RAM__
  107. #endif
  108. #endif
  109. #endif