luat_netdrv_napt.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #ifndef LUAT_NETDRV_NAPT_H
  2. #define LUAT_NETDRV_NAPT_H
  3. #include "lwip/pbuf.h"
  4. // 返回值定义
  5. #define NAPT_RET_OK 0 // 转发成功
  6. #define NAPT_RET_SKIP 1 // 跳过处理,让LWIP继续
  7. #define NAPT_RET_NO_MAPPING -1 // 未找到映射关系
  8. #define NAPT_RET_NO_MEMORY -2 // 内存不足
  9. #define NAPT_RET_LOCK_FAIL -3 // 加锁失败
  10. #define NAPT_RET_INVALID_CTX -4 // NAPT上下文无效
  11. // #define IP_NAPT_TIMEOUT_MS_TCP (30*60*1000)
  12. #define IP_NAPT_TIMEOUT_MS_TCP_DISCON (20*1000)
  13. #ifndef NAPT_TCP_MAP_ITEM_MAX
  14. #if defined(TYPE_EC718HM)
  15. #define NAPT_TCP_MAP_ITEM_MAX (8*1024)
  16. #elif defined(TYPE_EC718PM)
  17. #define NAPT_TCP_MAP_ITEM_MAX (4*1024)
  18. #else
  19. #define NAPT_TCP_MAP_ITEM_MAX (2*1024)
  20. #endif
  21. #endif
  22. typedef struct luat_netdrv_napt_icmp
  23. {
  24. uint8_t is_vaild;
  25. uint8_t adapter_id;
  26. uint16_t inet_id;
  27. uint16_t wnet_id;
  28. uint32_t inet_ip;
  29. uint32_t wnet_ip;
  30. uint8_t inet_mac[6];
  31. uint64_t tm_ms; // 最后通信时间
  32. }luat_netdrv_napt_icmp_t;
  33. typedef struct luat_netdrv_napt_tcpudp
  34. {
  35. uint8_t is_vaild;
  36. uint8_t adapter_id;
  37. uint32_t inet_ip;
  38. uint16_t inet_port;
  39. uint32_t wnet_ip;
  40. uint16_t wnet_port;
  41. uint16_t wnet_local_port;
  42. uint8_t inet_mac[6];
  43. uint64_t tm_ms; // 最后通信时间
  44. // TCP状态记录
  45. unsigned int fin1 : 1;
  46. unsigned int fin2 : 1;
  47. unsigned int finack1 : 1;
  48. unsigned int finack2 : 1;
  49. unsigned int synack : 1;
  50. unsigned int rst : 1;
  51. }luat_netdrv_napt_tcpudp_t;
  52. typedef struct napt_ctx
  53. {
  54. luat_netdrv_t* net;
  55. luat_netdrv_t* drv_gw;
  56. uint8_t* buff;
  57. size_t len;
  58. struct eth_hdr* eth;
  59. struct ip_hdr* iphdr;
  60. int is_wnet;
  61. }napt_ctx_t;
  62. struct luat_netdrv_napt_llist;
  63. typedef struct luat_netdrv_napt_llist
  64. {
  65. struct luat_netdrv_napt_llist* next;
  66. luat_netdrv_napt_tcpudp_t item;
  67. }luat_netdrv_napt_llist_t;
  68. typedef struct luat_netdrv_napt_ctx{
  69. uint32_t ip_tp;
  70. size_t clean_tm;
  71. size_t item_max;
  72. size_t item_last;
  73. luat_netdrv_napt_tcpudp_t items[NAPT_TCP_MAP_ITEM_MAX];
  74. luat_rtos_mutex_t lock;
  75. uint32_t *port_used;
  76. }luat_netdrv_napt_ctx_t;
  77. int luat_napt_icmp_handle(napt_ctx_t* ctx);
  78. int luat_napt_tcp_handle(napt_ctx_t* ctx);
  79. int luat_napt_udp_handle(napt_ctx_t* ctx);
  80. void luat_netdrv_napt_tcp_cleanup(void);
  81. void luat_netdrv_napt_udp_cleanup(void);
  82. int luat_netdrv_napt_pkg_input(int id, uint8_t* buff, size_t len);
  83. int luat_netdrv_napt_pkg_input_pbuf(int id, struct pbuf* p);
  84. // 维护影响关系
  85. int luat_netdrv_napt_tcp_wan2lan(napt_ctx_t* ctx, luat_netdrv_napt_tcpudp_t* mapping, luat_netdrv_napt_ctx_t *napt_ctx);
  86. int luat_netdrv_napt_tcp_lan2wan(napt_ctx_t* ctx, luat_netdrv_napt_tcpudp_t* mapping, luat_netdrv_napt_ctx_t *napt_ctx);
  87. void luat_netdrv_napt_enable(int adapter_id);
  88. void luat_netdrv_napt_disable(void);
  89. #endif