luat_netdrv.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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. LUAT_NETDRV_CTRL_DOWN,
  26. };
  27. typedef struct luat_netdrv_conf
  28. {
  29. int32_t id;
  30. int32_t impl;
  31. uint8_t spiid;
  32. uint8_t cspin;
  33. uint8_t rstpin;
  34. uint8_t irqpin;
  35. uint16_t mtu;
  36. uint8_t flags;
  37. // Wireguard相关参数
  38. #ifdef LUAT_USE_NETDRV_WG
  39. const char* wg_private_key;
  40. uint16_t wg_listen_port;
  41. uint16_t wg_keepalive;
  42. const char* wg_preshared_key;
  43. const char* wg_endpoint_key;
  44. const char* wg_endpoint_ip;
  45. uint16_t wg_endpoint_port;
  46. #endif
  47. }luat_netdrv_conf_t;
  48. typedef struct luat_netdrv_statics_item
  49. {
  50. uint64_t counter;
  51. uint64_t bytes;
  52. }luat_netdrv_statics_item_t;
  53. typedef struct luat_netdrv_statics
  54. {
  55. luat_netdrv_statics_item_t in;
  56. luat_netdrv_statics_item_t out;
  57. luat_netdrv_statics_item_t drop;
  58. }luat_netdrv_statics_t;
  59. typedef struct luat_netdrv {
  60. int32_t id;
  61. struct netif* netif;
  62. ulwip_ctx_t* ulwip;
  63. luat_netdrv_dataout_cb dataout;
  64. luat_netdrv_bootup_cb boot;
  65. luat_netdrv_ready_cb ready;
  66. luat_netdrv_dhcp_set dhcp;
  67. luat_netdrv_statics_t statics;
  68. void* userdata;
  69. luat_netdrv_ctrl_cb ctrl;
  70. uint8_t gw_mac[6];
  71. luat_netdrv_debug_cb debug;
  72. }luat_netdrv_t;
  73. luat_netdrv_t* luat_netdrv_setup(luat_netdrv_conf_t *conf);
  74. int luat_netdrv_dhcp(int32_t id, int32_t enable);
  75. int luat_netdrv_ready(int32_t id);
  76. int luat_netdrv_register(int32_t id, luat_netdrv_t* drv);
  77. int luat_netdrv_mac(int32_t id, const char* new, char* old);
  78. void luat_netdrv_stat_inc(luat_netdrv_statics_item_t* stat, size_t len);
  79. #define NETDRV_STAT_IN(ndrv, len) luat_netdrv_stat_inc(&ndrv->statics.in, len)
  80. #define NETDRV_STAT_OUT(ndrv, len) luat_netdrv_stat_inc(&ndrv->statics.out, len)
  81. #define NETDRV_STAT_DROP(ndrv, len) luat_netdrv_stat_inc(&ndrv->statics.drop, len)
  82. luat_netdrv_t* luat_netdrv_get(int id);
  83. void luat_netdrv_print_pkg(const char* tat, uint8_t* buff, size_t len);
  84. // 辅助函数
  85. uint32_t alg_hdr_16bitsum(const uint16_t *buff, uint16_t len);
  86. uint16_t alg_iphdr_chksum(const uint16_t *buff, uint16_t len);
  87. uint16_t alg_tcpudphdr_chksum(uint32_t src_addr, uint32_t dst_addr, uint8_t proto, const uint16_t *buff, uint16_t len);
  88. // 辅助传递函数
  89. typedef struct netdrv_pkg_msg
  90. {
  91. struct netif * netif;
  92. uint16_t len;
  93. uint8_t buff[4];
  94. }netdrv_pkg_msg_t;
  95. void luat_netdrv_netif_input(void* args);
  96. int luat_netdrv_netif_input_proxy(struct netif * netif, uint8_t* buff, uint16_t len);
  97. void luat_netdrv_print_tm(const char * tag);
  98. void luat_netdrv_debug_set(int id, int enable);
  99. void luat_netdrv_netif_set_down(struct netif* netif);
  100. void luat_netdrv_netif_set_link_down(struct netif* netif);
  101. int luat_netdrv_dhcp_opt(luat_netdrv_t* drv, void* userdata, int enable);
  102. extern uint32_t g_netdrv_debug_enable;
  103. #ifndef __NETDRV_CODE_IN_RAM__
  104. #ifdef __LUAT_C_CODE_IN_RAM__
  105. #define __NETDRV_CODE_IN_RAM__ __LUAT_C_CODE_IN_RAM__
  106. #else
  107. #define __NETDRV_CODE_IN_RAM__
  108. #endif
  109. #endif
  110. #endif