diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c index bcc4144f8e31112efed9e1903d56074dd29a3daf..9ba8db186f44b867cb924aa7c20c6ad6c3310fc5 100644 --- a/modules/service/vpn/dap_chain_net_srv_vpn.c +++ b/modules/service/vpn/dap_chain_net_srv_vpn.c @@ -123,7 +123,7 @@ typedef struct vpn_local_network { #endif bool auto_cpu_reassignment; - ch_vpn_pkt_t * pkt_out[400]; + dap_stream_ch_vpn_pkt_t * pkt_out[400]; size_t pkt_out_size; size_t pkt_out_rindex; size_t pkt_out_windex; @@ -159,7 +159,7 @@ typedef struct tun_socket_msg{ struct in_addr addr; } ip_unassigment; struct{ // CH VPN send operation - ch_vpn_pkt_t * pkt; + dap_stream_ch_vpn_pkt_t * pkt; } ch_vpn_send; }; } tun_socket_msg_t; @@ -241,10 +241,10 @@ static int s_tun_attach_queue(int fd); #endif static bool s_tun_client_send_data(dap_chain_net_srv_ch_vpn_info_t * a_ch_vpn_info, const void * a_data, size_t a_data_size); -static bool s_tun_client_send_data_unsafe(dap_chain_net_srv_ch_vpn_t * l_ch_vpn, ch_vpn_pkt_t * l_pkt_out); +static bool s_tun_client_send_data_unsafe(dap_chain_net_srv_ch_vpn_t * l_ch_vpn, dap_stream_ch_vpn_pkt_t * l_pkt_out); -static bool s_tun_client_send_data_unsafe(dap_chain_net_srv_ch_vpn_t * l_ch_vpn, ch_vpn_pkt_t * l_pkt_out) +static bool s_tun_client_send_data_unsafe(dap_chain_net_srv_ch_vpn_t * l_ch_vpn, dap_stream_ch_vpn_pkt_t * l_pkt_out) { dap_chain_net_srv_stream_session_t *l_srv_session = DAP_CHAIN_NET_SRV_STREAM_SESSION(l_ch_vpn->ch->stream->session); dap_chain_net_srv_usage_t *l_usage = l_srv_session->usage_active;// dap_chain_net_srv_usage_find_unsafe(l_srv_session, l_ch_vpn->usage_id); @@ -272,7 +272,7 @@ static bool s_tun_client_send_data_unsafe(dap_chain_net_srv_ch_vpn_t * l_ch_vpn, * @param a_pkt_out * @return */ -static bool s_tun_client_send_data_inter(dap_events_socket_t * a_es_input, dap_chain_net_srv_ch_vpn_t * a_ch_vpn, ch_vpn_pkt_t * a_pkt_out) +static bool s_tun_client_send_data_inter(dap_events_socket_t * a_es_input, dap_chain_net_srv_ch_vpn_t * a_ch_vpn, dap_stream_ch_vpn_pkt_t * a_pkt_out) { dap_chain_net_srv_stream_session_t * l_srv_session = DAP_CHAIN_NET_SRV_STREAM_SESSION (a_ch_vpn->ch->stream->session ); dap_chain_net_srv_usage_t * l_usage = l_srv_session->usage_active;// dap_chain_net_srv_usage_find_unsafe(l_srv_session, a_ch_vpn->usage_id); @@ -297,7 +297,7 @@ static bool s_tun_client_send_data_inter(dap_events_socket_t * a_es_input, dap_c static bool s_tun_client_send_data(dap_chain_net_srv_ch_vpn_info_t * l_ch_vpn_info, const void * a_data, size_t a_data_size) { assert(a_data_size > sizeof (dap_os_iphdr_t)); - ch_vpn_pkt_t *l_pkt_out = DAP_NEW_Z_SIZE(ch_vpn_pkt_t, sizeof(l_pkt_out->header) + a_data_size); + dap_stream_ch_vpn_pkt_t *l_pkt_out = DAP_NEW_Z_SIZE(dap_stream_ch_vpn_pkt_t, sizeof(l_pkt_out->header) + a_data_size); if (!l_pkt_out) { log_it(L_CRITICAL, "%s", c_error_memory_alloc); return false; @@ -1523,7 +1523,7 @@ static void s_update_limits(dap_stream_ch_t * a_ch , static void send_pong_pkt(dap_stream_ch_t* a_ch) { // log_it(L_DEBUG,"---------------------------------- PONG!"); - ch_vpn_pkt_t *pkt_out = (ch_vpn_pkt_t*) calloc(1, sizeof(pkt_out->header)); + dap_stream_ch_vpn_pkt_t *pkt_out = (dap_stream_ch_vpn_pkt_t*) calloc(1, sizeof(pkt_out->header)); if (!pkt_out) { log_it(L_CRITICAL, "%s", c_error_memory_alloc); return; @@ -1552,7 +1552,7 @@ static void s_ch_packet_in_vpn_address_request(dap_stream_ch_t *a_ch, dap_chain_ if ( l_ch_vpn->addr_ipv4.s_addr ) { log_it(L_WARNING, "IP address is already leased"); - ch_vpn_pkt_t* pkt_out = DAP_NEW_STACK_SIZE(ch_vpn_pkt_t, sizeof(pkt_out->header)); + dap_stream_ch_vpn_pkt_t* pkt_out = DAP_NEW_STACK_SIZE(dap_stream_ch_vpn_pkt_t, sizeof(pkt_out->header)); if (!pkt_out) { log_it(L_CRITICAL, "%s", c_error_memory_alloc); return; @@ -1584,7 +1584,7 @@ static void s_ch_packet_in_vpn_address_request(dap_stream_ch_t *a_ch, dap_chain_ HASH_ADD(hh, s_ch_vpn_addrs, addr_ipv4, sizeof (l_ch_vpn->addr_ipv4), l_ch_vpn); pthread_rwlock_unlock( &s_clients_rwlock ); - ch_vpn_pkt_t *l_pkt_out = DAP_NEW_STACK_SIZE(ch_vpn_pkt_t, + dap_stream_ch_vpn_pkt_t *l_pkt_out = DAP_NEW_STACK_SIZE(dap_stream_ch_vpn_pkt_t, sizeof(l_pkt_out->header) + sizeof(l_ch_vpn->addr_ipv4) + sizeof(s_raw_server->ipv4_network_addr)); l_pkt_out->header.sock_id = s_raw_server->tun_fd; l_pkt_out->header.op_code = VPN_PACKET_OP_CODE_VPN_ADDR_REPLY; @@ -1687,7 +1687,7 @@ static void s_ch_packet_in_vpn_address_request(dap_stream_ch_t *a_ch, dap_chain_ HASH_ADD(hh, s_ch_vpn_addrs, addr_ipv4, sizeof (l_ch_vpn->addr_ipv4), l_ch_vpn); pthread_rwlock_unlock( &s_clients_rwlock ); - ch_vpn_pkt_t *pkt_out = DAP_NEW_STACK_SIZE(ch_vpn_pkt_t, + dap_stream_ch_vpn_pkt_t *pkt_out = DAP_NEW_STACK_SIZE(dap_stream_ch_vpn_pkt_t, sizeof(pkt_out->header) + sizeof(l_ch_vpn->addr_ipv4) + sizeof(s_raw_server->ipv4_gw)); pkt_out->header.sock_id = s_raw_server->tun_fd; pkt_out->header.op_code = VPN_PACKET_OP_CODE_VPN_ADDR_REPLY; @@ -1713,7 +1713,7 @@ static void s_ch_packet_in_vpn_address_request(dap_stream_ch_t *a_ch, dap_chain_ } } else { // All the network is filled with clients, can't lease a new address log_it(L_ERROR, "No free IP address left, can't lease one..."); - ch_vpn_pkt_t* pkt_out = DAP_NEW_STACK_SIZE(ch_vpn_pkt_t, sizeof(pkt_out->header)); + dap_stream_ch_vpn_pkt_t* pkt_out = DAP_NEW_STACK_SIZE(dap_stream_ch_vpn_pkt_t, sizeof(pkt_out->header)); pkt_out->header.sock_id = s_raw_server->tun_fd; pkt_out->header.op_code = VPN_PACKET_OP_CODE_PROBLEM; pkt_out->header.usage_id = a_usage->id; @@ -1741,7 +1741,7 @@ static void s_ch_packet_in_vpn_address_request(dap_stream_ch_t *a_ch, dap_chain_ static bool s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) { dap_stream_ch_pkt_t * l_pkt = (dap_stream_ch_pkt_t *) a_arg; - ch_vpn_pkt_t *l_vpn_pkt = (ch_vpn_pkt_t*)l_pkt->data; + dap_stream_ch_vpn_pkt_t *l_vpn_pkt = (dap_stream_ch_vpn_pkt_t*)l_pkt->data; if (l_pkt->hdr.data_size < sizeof(l_vpn_pkt->header)) { log_it(L_WARNING, "Data size of stream channel packet %u is lesser than size of VPN packet header %zu", l_pkt->hdr.data_size, sizeof(l_vpn_pkt->header)); @@ -1942,7 +1942,7 @@ static bool s_es_tun_write(dap_events_socket_t *a_es, void *arg) size_t l_shift = 0; debug_if(s_debug_more, L_DEBUG, "Write %lu bytes to tun", l_tun->es->buf_out_size); for (ssize_t l_pkt_size = 0, l_bytes_written = 0; l_tun->es->buf_out_size; ) { - ch_vpn_pkt_t *l_vpn_pkt = (ch_vpn_pkt_t *)(l_tun->es->buf_out + l_shift); + dap_stream_ch_vpn_pkt_t *l_vpn_pkt = (dap_stream_ch_vpn_pkt_t *)(l_tun->es->buf_out + l_shift); l_pkt_size = l_vpn_pkt->header.op_data.data_size; debug_if(s_debug_more, L_DEBUG, "Packet: op_code 0x%02x, data size %ld", l_vpn_pkt->header.op_code, l_pkt_size); diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c index 03ea305bfad2f114c215134cbacebf109461d008..753da5a7267b94b1d8d934331f99ecc7d2089149 100644 --- a/modules/service/vpn/dap_chain_net_vpn_client.c +++ b/modules/service/vpn/dap_chain_net_vpn_client.c @@ -181,7 +181,7 @@ static int s_callback_client_success(dap_chain_net_srv_t * a_srv, uint32_t a_usa if(l_ch) { // Is present in hash table such destination address size_t l_ipv4_str_len = 0; //dap_strlen(a_ipv4_str); - ch_vpn_pkt_t *pkt_out = (ch_vpn_pkt_t*) calloc(1, sizeof(pkt_out->header) + l_ipv4_str_len); + dap_stream_ch_vpn_pkt_t *pkt_out = (dap_stream_ch_vpn_pkt_t*) calloc(1, sizeof(pkt_out->header) + l_ipv4_str_len); if (!pkt_out) { log_it(L_CRITICAL, "%s", c_error_memory_alloc); dap_stream_session_unlock(); @@ -682,7 +682,7 @@ dap_chain_net_vpn_client_status_t dap_chain_net_vpn_client_status(void) */ void dap_chain_net_vpn_client_pkt_in(dap_stream_ch_t* a_ch, dap_stream_ch_pkt_t* a_pkt) { - ch_vpn_pkt_t * l_sf_pkt = (ch_vpn_pkt_t *) a_pkt->data; + dap_stream_ch_vpn_pkt_t * l_sf_pkt = (dap_stream_ch_vpn_pkt_t *) a_pkt->data; size_t l_sf_pkt_data_size = a_pkt->hdr.data_size - sizeof(l_sf_pkt->header); if(!a_pkt->hdr.data_size) { diff --git a/modules/service/vpn/dap_chain_net_vpn_client_tun.c b/modules/service/vpn/dap_chain_net_vpn_client_tun.c index f5de32b36fd1feed2f823239d4ade8858b8b51a0..0b3da1c064f4688115525480dd1b3e70632f648d 100644 --- a/modules/service/vpn/dap_chain_net_vpn_client_tun.c +++ b/modules/service/vpn/dap_chain_net_vpn_client_tun.c @@ -384,7 +384,7 @@ static void m_client_tun_read(dap_events_socket_t * a_es, void * arg) log_it(L_ERROR, "No remote client for incoming ip packet %s -> %s", l_str_saddr, l_str_daddr); break; } - ch_vpn_pkt_t* pkt_out = DAP_NEW_STACK_SIZE(ch_vpn_pkt_t, sizeof(pkt_out->header) + l_read_bytes); + dap_stream_ch_vpn_pkt_t* pkt_out = DAP_NEW_STACK_SIZE(dap_stream_ch_vpn_pkt_t, sizeof(pkt_out->header) + l_read_bytes); pkt_out->header.op_code = VPN_PACKET_OP_CODE_VPN_SEND; pkt_out->header.sock_id = s_fd_tun; pkt_out->header.op_data.data_size = l_read_bytes; @@ -617,7 +617,7 @@ int dap_chain_net_vpn_client_tun_status(void) static void ch_sf_pkt_send(dap_stream_ch_t * a_ch, void * a_data, size_t a_data_size) { - ch_vpn_pkt_t *l_pkt_out; + dap_stream_ch_vpn_pkt_t *l_pkt_out; size_t l_pkt_out_size = sizeof(l_pkt_out->header) + a_data_size; //log_it(L_DEBUG,"Peer for addr %s found (pkt_size %d)" // ,inet_ntoa(in_daddr), read_ret); @@ -625,7 +625,7 @@ static void ch_sf_pkt_send(dap_stream_ch_t * a_ch, void * a_data, size_t a_data_ log_it(L_ERROR, "Try to send to NULL channel"); return; } - l_pkt_out = DAP_NEW_SIZE(ch_vpn_pkt_t, l_pkt_out_size); + l_pkt_out = DAP_NEW_SIZE(dap_stream_ch_vpn_pkt_t, l_pkt_out_size); memset(&l_pkt_out->header,0,sizeof(l_pkt_out->header)); l_pkt_out->header.op_code = VPN_PACKET_OP_CODE_VPN_RECV; l_pkt_out->header.sock_id = a_ch->stream->esocket->socket; @@ -669,7 +669,7 @@ void ch_sf_tun_client_send(dap_chain_net_srv_ch_vpn_t * ch_sf, void * pkt_data, // if((ret = write(raw_server->tun_fd, sf_pkt->data, sf_pkt->header.op_data.data_size))<0){ log_it(L_ERROR, "write() error %d : \"%s\"", errno, dap_strerror(errno)); //log_it(ERROR,"raw socket ring buffer overflowed"); - ch_vpn_pkt_t *pkt_out = (ch_vpn_pkt_t*) calloc(1, sizeof(pkt_out->header)); + dap_stream_ch_vpn_pkt_t *pkt_out = (dap_stream_ch_vpn_pkt_t*) calloc(1, sizeof(pkt_out->header)); if (!pkt_out) { log_it(L_CRITICAL, "%s", c_error_memory_alloc); if(in_daddr_str) @@ -702,7 +702,7 @@ void ch_sf_tun_client_send(dap_chain_net_srv_ch_vpn_t * ch_sf, void * pkt_data, * @param a_pkt * @param a_pkt_data_size */ -int ch_sf_tun_addr_leased(dap_chain_net_srv_ch_vpn_t * a_sf, ch_vpn_pkt_t * a_pkt, size_t a_pkt_data_size) +int ch_sf_tun_addr_leased(dap_chain_net_srv_ch_vpn_t * a_sf, dap_stream_ch_vpn_pkt_t * a_pkt, size_t a_pkt_data_size) { if(a_pkt_data_size < (2 * sizeof(struct in_addr))) { log_it(L_ERROR, "Too small ADDR_REPLY packet (%zu bytes, need at least %zu", a_pkt_data_size, 2 * sizeof(struct in_addr)); diff --git a/modules/service/vpn/include/dap_chain_net_srv_vpn.h b/modules/service/vpn/include/dap_chain_net_srv_vpn.h index a60b0fe7199abe27ec707437eb411ab1dc6b2720..fdbae700319d5b7b22979baff69fba823579cb92 100644 --- a/modules/service/vpn/include/dap_chain_net_srv_vpn.h +++ b/modules/service/vpn/include/dap_chain_net_srv_vpn.h @@ -62,7 +62,7 @@ #define TUN_MTU 0xFFFF -typedef struct ch_vpn_pkt { +typedef struct dap_stream_ch_vpn_pkt { struct { int sock_id; // Client's socket id uint32_t op_code; // Operation code @@ -70,25 +70,21 @@ typedef struct ch_vpn_pkt { union { struct { // L4 connect operation uint32_t addr_size; - uint16_t port; - uint16_t padding; - } DAP_ALIGN_PACKED op_connect; + uint16_t port DAP_ALIGNED(4); + } DAP_PACKED op_connect; struct { // For data transmission, usualy for I/O functions - uint32_t data_size; - uint32_t padding; - } DAP_ALIGN_PACKED op_data; + uint32_t data_size DAP_ALIGNED(8); + } DAP_PACKED op_data; struct { // We have a problem and we know that! - uint32_t code; // I hope we'll have no more than 4B+ problems, not I?? - uint32_t padding_padding_padding_damned_padding_nobody_nowhere_uses_this_fild_but_if_wil_change_me_pls_with_an_auto_rename; - } DAP_ALIGN_PACKED op_problem; + uint32_t code DAP_ALIGNED(8); // I hope we'll have no more than 4B+ problems, not I?? + } DAP_PACKED op_problem; struct { - uint32_t padding1; - uint32_t padding2; - } DAP_ALIGN_PACKED raw; // Raw access to OP bytes + uint64_t op_data_raw DAP_ALIGNED(8); + } DAP_PACKED raw; // Raw access to OP bytes }; } DAP_ALIGN_PACKED header; byte_t data[]; // Binary data nested by packet -}DAP_ALIGN_PACKED ch_vpn_pkt_t; +}DAP_ALIGN_PACKED dap_stream_ch_vpn_pkt_t; typedef struct dap_chain_net_srv_vpn_tun_socket dap_chain_net_srv_vpn_tun_socket_t; typedef struct dap_chain_net_srv_ch_vpn dap_chain_net_srv_ch_vpn_t; diff --git a/modules/service/vpn/include/dap_chain_net_vpn_client_tun.h b/modules/service/vpn/include/dap_chain_net_vpn_client_tun.h index e1c84a307e83c564355b567bc12877682e91f545..1d5022b564311abb91de0b7cbb8584a28d6c9707 100644 --- a/modules/service/vpn/include/dap_chain_net_vpn_client_tun.h +++ b/modules/service/vpn/include/dap_chain_net_vpn_client_tun.h @@ -31,5 +31,5 @@ int dap_chain_net_vpn_client_tun_create(const char *a_ipv4_addr_str, const char int dap_chain_net_vpn_client_tun_delete(void); int dap_chain_net_vpn_client_tun_status(void); -int ch_sf_tun_addr_leased(dap_chain_net_srv_ch_vpn_t * a_sf, ch_vpn_pkt_t * a_pkt, size_t a_pkt_data_size); +int ch_sf_tun_addr_leased(dap_chain_net_srv_ch_vpn_t * a_sf, dap_stream_ch_vpn_pkt_t * a_pkt, size_t a_pkt_data_size); void ch_sf_tun_client_send(dap_chain_net_srv_ch_vpn_t * ch_sf, void * pkt_data, size_t pkt_data_size);