| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- #ifndef LUAT_NETDRV_H
- #define LUAT_NETDRV_H
- #include "lwip/pbuf.h"
- #include "luat_ulwip.h"
- struct luat_netdrv;
- typedef void (*luat_netdrv_dataout_cb)(struct luat_netdrv* drv, void* userdata, uint8_t* buff, uint16_t len);
- typedef int (*luat_netdrv_bootup_cb)(struct luat_netdrv* drv, void* userdata);
- typedef int (*luat_netdrv_ready_cb)(struct luat_netdrv* drv, void* userdata);
- typedef int (*luat_netdrv_dhcp_set)(struct luat_netdrv* drv, void* userdata, int enable);
- typedef int (*luat_netdrv_ctrl_cb)(struct luat_netdrv* drv, void* userdata, int cmd, void* param);
- typedef int (*luat_netdrv_debug_cb)(struct luat_netdrv* drv, void* userdata, int enable);
- #define MACFMT "%02X%02X%02X%02X%02X%02X"
- #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]
- enum {
- LUAT_NETDRV_TP_NATIVE,
- LUAT_NETDRV_TP_CH390H,
- LUAT_NETDRV_TP_W5100,
- LUAT_NETDRV_TP_W5500,
- LUAT_NETDRV_TP_SPINET,
- LUAT_NETDRV_TP_UARTNET,
- LUAT_NETDRV_TP_USB
- };
- enum {
- LUAT_NETDRV_CTRL_RESET,
- LUAT_NETDRV_CTRL_DOWN,
- };
- typedef struct luat_netdrv_conf
- {
- int32_t id;
- int32_t impl;
- uint8_t spiid;
- uint8_t cspin;
- uint8_t rstpin;
- uint8_t irqpin;
- uint16_t mtu;
- uint8_t flags;
- // Wireguard相关参数
- #ifdef LUAT_USE_NETDRV_WG
- const char* wg_private_key;
- uint16_t wg_listen_port;
- uint16_t wg_keepalive;
- const char* wg_preshared_key;
-
- const char* wg_endpoint_key;
- const char* wg_endpoint_ip;
- uint16_t wg_endpoint_port;
- #endif
- }luat_netdrv_conf_t;
- typedef struct luat_netdrv_statics_item
- {
- uint64_t counter;
- uint64_t bytes;
- }luat_netdrv_statics_item_t;
- typedef struct luat_netdrv_statics
- {
- luat_netdrv_statics_item_t in;
- luat_netdrv_statics_item_t out;
- luat_netdrv_statics_item_t drop;
- }luat_netdrv_statics_t;
- typedef struct luat_netdrv {
- int32_t id;
- struct netif* netif;
- ulwip_ctx_t* ulwip;
- luat_netdrv_dataout_cb dataout;
- luat_netdrv_bootup_cb boot;
- luat_netdrv_ready_cb ready;
- luat_netdrv_dhcp_set dhcp;
- luat_netdrv_statics_t statics;
- void* userdata;
- luat_netdrv_ctrl_cb ctrl;
- uint8_t gw_mac[6];
- luat_netdrv_debug_cb debug;
- }luat_netdrv_t;
- luat_netdrv_t* luat_netdrv_setup(luat_netdrv_conf_t *conf);
- int luat_netdrv_dhcp(int32_t id, int32_t enable);
- int luat_netdrv_ready(int32_t id);
- int luat_netdrv_register(int32_t id, luat_netdrv_t* drv);
- int luat_netdrv_mac(int32_t id, const char* new, char* old);
- void luat_netdrv_stat_inc(luat_netdrv_statics_item_t* stat, size_t len);
- #define NETDRV_STAT_IN(ndrv, len) luat_netdrv_stat_inc(&ndrv->statics.in, len)
- #define NETDRV_STAT_OUT(ndrv, len) luat_netdrv_stat_inc(&ndrv->statics.out, len)
- #define NETDRV_STAT_DROP(ndrv, len) luat_netdrv_stat_inc(&ndrv->statics.drop, len)
- luat_netdrv_t* luat_netdrv_get(int id);
- void luat_netdrv_print_pkg(const char* tat, uint8_t* buff, size_t len);
- // 辅助函数
- uint32_t alg_hdr_16bitsum(const uint16_t *buff, uint16_t len);
- uint16_t alg_iphdr_chksum(const uint16_t *buff, uint16_t len);
- uint16_t alg_tcpudphdr_chksum(uint32_t src_addr, uint32_t dst_addr, uint8_t proto, const uint16_t *buff, uint16_t len);
- // 辅助传递函数
- typedef struct netdrv_pkg_msg
- {
- struct netif * netif;
- uint16_t len;
- uint8_t buff[4];
- }netdrv_pkg_msg_t;
- void luat_netdrv_netif_input(void* args);
- int luat_netdrv_netif_input_proxy(struct netif * netif, uint8_t* buff, uint16_t len);
- void luat_netdrv_print_tm(const char * tag);
- void luat_netdrv_debug_set(int id, int enable);
- void luat_netdrv_netif_set_down(struct netif* netif);
- void luat_netdrv_netif_set_link_down(struct netif* netif);
- int luat_netdrv_dhcp_opt(luat_netdrv_t* drv, void* userdata, int enable);
- extern uint32_t g_netdrv_debug_enable;
- #ifndef __NETDRV_CODE_IN_RAM__
- #ifdef __LUAT_C_CODE_IN_RAM__
- #define __NETDRV_CODE_IN_RAM__ __LUAT_C_CODE_IN_RAM__
- #else
- #define __NETDRV_CODE_IN_RAM__
- #endif
- #endif
- #endif
|