Skip to content
Snippets Groups Projects
Commit 03b95a26 authored by dmitriy.gerasimov's avatar dmitriy.gerasimov
Browse files

Merge branch 'feature-4380' into 'master'

fixed vpn client

See merge request !217
parents 6faf624b 4005b443
No related branches found
No related tags found
4 merge requests!251Master,!250Master,!220bugs-4547,!217fixed vpn client
Pipeline #5621 passed with stage
in 11 seconds
...@@ -1317,13 +1317,16 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) ...@@ -1317,13 +1317,16 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
// for client only // for client only
case VPN_PACKET_OP_CODE_VPN_RECV:{ case VPN_PACKET_OP_CODE_VPN_RECV:{
a_ch->stream->esocket->last_ping_request = time(NULL); // not ping, but better ;-) a_ch->stream->esocket->last_ping_request = time(NULL); // not ping, but better ;-)
//ch_sf_tun_client_send(CH_VPN(a_ch), l_vpn_pkt->data, l_vpn_pkt->header.op_data.data_size);
dap_events_socket_t *l_es = dap_chain_net_vpn_client_tun_get_esock();
// Find tun socket for current worker // Find tun socket for current worker
ch_sf_tun_socket_t * l_tun = s_tun_sockets[a_ch->stream_worker->worker->id]; ch_sf_tun_socket_t *l_tun = l_es ? l_es->_inheritor : NULL;
//ch_sf_tun_socket_t * l_tun = s_tun_sockets[a_ch->stream_worker->worker->id];
assert(l_tun); assert(l_tun);
s_stream_session_esocket_send(l_srv_session, l_tun->es, l_vpn_pkt->data, l_vpn_pkt->header.op_data.data_size); s_stream_session_esocket_send(l_srv_session, l_tun->es, l_vpn_pkt->data, l_vpn_pkt->header.op_data.data_size);
} break; } break;
// for servier only // for server only
case VPN_PACKET_OP_CODE_VPN_SEND: { case VPN_PACKET_OP_CODE_VPN_SEND: {
ch_sf_tun_socket_t * l_tun = s_tun_sockets[a_ch->stream_worker->worker->id]; ch_sf_tun_socket_t * l_tun = s_tun_sockets[a_ch->stream_worker->worker->id];
assert(l_tun); assert(l_tun);
......
...@@ -253,6 +253,32 @@ static void m_client_tun_write(dap_events_socket_t * a_es, void * arg) ...@@ -253,6 +253,32 @@ static void m_client_tun_write(dap_events_socket_t * a_es, void * arg)
// log_it(L_WARNING, __PRETTY_FUNCTION__); // log_it(L_WARNING, __PRETTY_FUNCTION__);
} }
void m_client_tun_new(dap_events_socket_t * a_es, void * arg)
{
(void) arg;
ch_sf_tun_socket_t * l_tun_socket = DAP_NEW_Z(ch_sf_tun_socket_t);
if ( l_tun_socket ){
l_tun_socket->worker = a_es->worker;
l_tun_socket->worker_id = l_tun_socket->worker->id;
l_tun_socket->es = a_es;
//s_tun_sockets_queue_msg[a_es->worker->id] = dap_events_socket_create_type_queue_ptr_unsafe(a_es->worker, s_tun_recv_msg_callback );
//s_tun_sockets[a_es->worker->id] = l_tun_socket;
a_es->_inheritor = l_tun_socket;
//s_tun_attach_queue( a_es->fd );
{
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_flags = IFF_ATTACH_QUEUE;
ioctl(a_es->fd, TUNSETQUEUE, (void *)&ifr);
}
log_it(L_NOTICE,"New TUN event socket initialized for worker %u" , l_tun_socket->worker_id);
}else{
log_it(L_ERROR, "Can't allocate memory for tun socket");
}
}
static void m_client_tun_read(dap_events_socket_t * a_es, void * arg) static void m_client_tun_read(dap_events_socket_t * a_es, void * arg)
{ {
const static int tun_MTU = 100000; /// TODO Replace with detection of MTU size const static int tun_MTU = 100000; /// TODO Replace with detection of MTU size
...@@ -304,6 +330,10 @@ static void m_client_tun_error(dap_events_socket_t * a_es, int a_arg) ...@@ -304,6 +330,10 @@ static void m_client_tun_error(dap_events_socket_t * a_es, int a_arg)
log_it(L_WARNING, " TUN client problems: code %d", a_arg); log_it(L_WARNING, " TUN client problems: code %d", a_arg);
} }
dap_events_socket_t* dap_chain_net_vpn_client_tun_get_esock(void) {
return s_tun_events_socket;
}
int dap_chain_net_vpn_client_tun_create(const char *a_ipv4_addr_str, const char *a_ipv4_gw_str) int dap_chain_net_vpn_client_tun_create(const char *a_ipv4_addr_str, const char *a_ipv4_gw_str)
{ {
// char dev[IFNAMSIZ] = { 0 }; // char dev[IFNAMSIZ] = { 0 };
...@@ -412,6 +442,7 @@ int dap_chain_net_vpn_client_tun_create(const char *a_ipv4_addr_str, const char ...@@ -412,6 +442,7 @@ int dap_chain_net_vpn_client_tun_create(const char *a_ipv4_addr_str, const char
pthread_mutex_init(&s_clients_mutex, NULL); pthread_mutex_init(&s_clients_mutex, NULL);
static dap_events_socket_callbacks_t l_s_callbacks = { static dap_events_socket_callbacks_t l_s_callbacks = {
.new_callback = m_client_tun_new,//m_es_tun_new;
.read_callback = m_client_tun_read,// for server .read_callback = m_client_tun_read,// for server
.write_callback = m_client_tun_write,// for client .write_callback = m_client_tun_write,// for client
.error_callback = m_client_tun_error, .error_callback = m_client_tun_error,
...@@ -421,6 +452,7 @@ int dap_chain_net_vpn_client_tun_create(const char *a_ipv4_addr_str, const char ...@@ -421,6 +452,7 @@ int dap_chain_net_vpn_client_tun_create(const char *a_ipv4_addr_str, const char
s_tun_events_socket = dap_events_socket_wrap_no_add(dap_events_get_default(), s_fd_tun, &l_s_callbacks); s_tun_events_socket = dap_events_socket_wrap_no_add(dap_events_get_default(), s_fd_tun, &l_s_callbacks);
s_tun_events_socket->type = DESCRIPTOR_TYPE_FILE; s_tun_events_socket->type = DESCRIPTOR_TYPE_FILE;
dap_worker_add_events_socket_auto(s_tun_events_socket); dap_worker_add_events_socket_auto(s_tun_events_socket);
//dap_events_socket_assign_on_worker_mt(l_es, a_worker);
s_tun_events_socket->_inheritor = NULL; s_tun_events_socket->_inheritor = NULL;
//return 0; //return 0;
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include "dap_chain_net_srv_vpn.h" #include "dap_chain_net_srv_vpn.h"
int dap_chain_net_vpn_client_tun_init(const char *a_ipv4_gw_str); int dap_chain_net_vpn_client_tun_init(const char *a_ipv4_gw_str);
dap_events_socket_t* dap_chain_net_vpn_client_tun_get_esock(void);
int dap_chain_net_vpn_client_tun_create(const char *a_ipv4_addr_str, const char *a_ipv4_gw_str); int dap_chain_net_vpn_client_tun_create(const char *a_ipv4_addr_str, const char *a_ipv4_gw_str);
int dap_chain_net_vpn_client_tun_delete(void); int dap_chain_net_vpn_client_tun_delete(void);
int dap_chain_net_vpn_client_tun_status(void); int dap_chain_net_vpn_client_tun_status(void);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment