EC600U_esp32_iap_uart/EC600U_t2n/t2n_priv.h
2024-02-05 17:39:56 +08:00

220 lines
5.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _TUN_EAT_H
#define _TUN_EAT_H
// #include "lwip/def.h"
#include "lwip/inet.h"
#include "lwip/inet_chksum.h"
#include "lwip/ip4_addr.h"
#include "lwip/udp.h"
#include "lwip/tcp.h"
#include "lwip/priv/tcp_priv.h"
#include "lwip/memp.h"
#include "lwip/netif.h"
#include "lwip/dns.h"
#include "queue.h"
typedef struct report_data
{
uint8_t flg;
uint8_t rsv;
uint8_t try_times;
uint8_t endpoint;
uint32_t last_send_time;
uint16_t pack_id;
uint16_t data_len;
uint8_t data[1024];
} report_data_t;
extern report_data_t *report_queue_get(void);
extern uint8_t drp_buf[];
int drp_write(uint8_t endpoint, uint8_t flag, uint16_t tran_id, void *data, int length);
#define IP_PROTO_UDP 17
#define IP_PROTO_TCP 6
#define T2N_PROTO_MASK 0x70
#define T2N_PROTO_HDP 0x00
#define T2N_PROTO_DRP 0x10
#define T2N_PROTO_UTP 0x20
#define T2N_PROTO_ICMP 0x30
#define T2N_PROTO_UDP 0x40
#define T2N_PROTO_TCP 0x50
#define T2N_PROTO_IPV4 0x60
#define T2N_PROTO_ETH 0x70
#define T2N_TTL_MASK 0x07
#define T2N_TTL 0x07
#define HTONS(x) ((((x)&0xff) << 8) | (((x)&0xff00) >> 8))
struct drp
{
unsigned short data_sum;
unsigned char hdr_sum;
unsigned char endpoint;
unsigned short pack_id;
unsigned short tcf_len;
unsigned char data[4];
};
struct hbp
{
unsigned char hdr_sum;
unsigned char status;
unsigned short pack_id;
};
struct utp
{
unsigned char hdr_sum; // 头部8字节校验码
unsigned char dest[3]; // 目的地址
unsigned short data_sum; // 除了头部外的校验玛
unsigned char src_ep; // 源端点号
unsigned char dest_ep; // 目的端点号
unsigned short pack_id; // 包序号
unsigned short tcf_len; // 传输控制和数据长度
};
struct tun
{
unsigned char hdr_sum;
unsigned char dest[3];
};
union prot {
struct hbp hbp; // 心跳包
struct drp drp; // 数据上报协议
struct tun tun; // 隧道透传
struct utp utp; // 设备到设备传输协议
};
struct t2n_hdr
{
unsigned char flags; // 控制位
unsigned char src[3]; // 源地址
#define drp_data_len prot.drp.data_len
#define drp_data_sum prot.drp.data_sum
#define drp_endpoint prot.drp.endpoint
#define drp_hdr_sum prot.drp.hdr_sum
#define drp_pack_id prot.drp.pack_id
#define drp_data prot.drp.data
#define utp_data_len prot.drp.data_len
#define utp_data_sum prot.drp.data_sum
#define utp_src_ep prot.drp.endpoint
#define utp_dst_ep prot.drp.hdr_sum
#define utp_pack_id prot.drp.pack_id
#define drp_data prot.drp.data
union prot prot; // 协议载荷由flags控制
};
// #define drp_data_len prot.drp.data_len
// #define drp_data_sum prot.drp.data_sum
// #define drp_endpoint prot.drp.endpoint
// #define drp_hdr_sum prot.drp.hdr_sum
// #define drp_pack_id prot.drp.pack_id
#define DRP_ACK 0x8 // 传输控制位 1 ACK包0 数据包
#define TCF_ACK 0x8 // 传输控制位 1 ACK包0 数据包
#define TCF_NEED_ACK 0x4 // 传输控制位 1 需要服务器ACK 0不需要
#define DRP_LEN_GET(t2n_hdr) (HTONS(t2n_hdr->prot.drp.tcf_len) & 0xfff)
#define DRP_LEN_SET(t2n_hdr, len) \
(t2n_hdr->prot.drp.tcf_len = (t2n_hdr->prot.drp.tcf_len & 0x00f0) | HTONS((len)&0xfff))
#define DRP_TCF_GET(t2n_hdr) ((t2n_hdr->prot.drp.tcf_len >> 4) & 0x0f)
#define DRP_TCF_SET(t2n_hdr, tcf) \
(t2n_hdr->prot.drp.tcf_len = (t2n_hdr->prot.drp.tcf_len & 0xff0f) | (((tcf) << 4) & 0xf0))
#define DRP_TCF_LEN_SET(t2n_hdr, tcf, length) \
t2n_hdr->prot.drp.tcf_len = HTONS((((tcf) << 12) & 0xf000) | ((length)&0x0fff))
#define UTP_LEN_GET(t2n_hdr) (HTONS(t2n_hdr->prot.utp.tcf_len) & 0xfff)
#define UTP_LEN_SET(t2n_hdr, len) \
(t2n_hdr->prot.utp.tcf_len = (t2n_hdr->prot.utp.tcf_len & 0x00f0) | HTONS((len)&0xfff))
#define UTP_TCF_GET(t2n_hdr) (t2n_hdr->prot.utp.tcf_len >> 4)
#define UTP_TCF_SET(t2n_hdr, tcf) \
(t2n_hdr->prot.utp.tcf_len = (t2n_hdr->prot.utp.tcf_len & 0xff0f) | (((tcf) << 4) & 0xf0))
#define UTP_TCF_LEN_SET(t2n_hdr, tcf, length) \
t2n_hdr->prot.utp.tcf_len = HTONS((((tcf) << 12) & 0xf000) | ((length)&0x0fff))
// #define UTP_SACK_GET(t2n_hdr) ((t2n_hdr->prot.utp.tcf_len & 0x08) != 0)
// #define UTP_SACK_SET(t2n_hdr,tcf) (t2n_hdr->prot.utp.tcf_len = (t2n_hdr->prot.utp.tcf_len &
// 0xff0f)|(((tcf)<<4)&0xf0))
#define DRP_CWND 4
#define HEADBREAT_PACK_SIZE 8
#define MIN_DRP_PACK_SIZE 12
#define DRP_HEAR_SIZE 12
#define DRP_STATUS_IDLE 1
#define DRP_STATUS_WACK 2
#define DRP_STATUS_ERROR 2
struct t2n_context
{
// u8_t my_ipaddr[4];
u32_t my_addr;
u32_t subnet_mask;
// struct ip_addr netmask;
// struct ip_addr gateway;
struct ip_addr server_ip;
// struct ip_addr remote_ip;
// struct udp_pcb *udp_pcb;
struct netif tun_if;
struct udp_pcb *udp_pcb;
// sockaddr_struct server_addr;
u16_t server_port;
uint8_t sim_id;
uint8_t ser_sel;
// u16_t remote_port;
u16_t tran_id;
u32_t last_gps_tick;
u32_t last_report_tick;
u32_t rpack_cnt;
u32_t tpack_cnt;
u32_t hb_delay;
u32_t time_out_cnt;
u32_t time_delay_cnt;
u32_t tx_time_cnt;
u32_t rx_time_cnt;
s8_t last_status;
s8_t status;
s8_t next_status;
u8_t gsm_state;
u8_t gprs_state;
u8_t dns_state;
u8_t socket_err_cnt;
u8_t gsm_err_cnt;
u8_t gprs_err_cnt;
u8_t dns_err_cnt1;
u8_t dns_err_cnt2;
u8_t login_err_cnt1;
u8_t login_err_cnt2;
s8_t login_status;
u8_t TxIcoCnt;
u8_t RxIcoCnt;
u16_t dns_id;
int is_login;
u32_t last_tx_time;
u32_t last_rx_time;
u32_t time_offset;
u32_t unacked;
u32_t last_drp_send;
QUEUE drp_queue_head;
QUEUE drp_wack_queue_head;
// ## new add
// LSAPI_SOCK_TcpipSocketAddr_t LocalAddr;
// LSAPI_SOCK_TcpipSocketAddr_t server_addr;
char imei[16];
int udp_sock_fd;
// int ser_sel;
};
typedef struct t2n_context t2n_context_t;
// extern int t2n_input(struct pbuf *pkt_buf);
// extern void t2n_poll(void);
#endif // _TUN_EAT_H