Skip to content

Commit

Permalink
implement dev tun
Browse files Browse the repository at this point in the history
  • Loading branch information
wangyu- committed Oct 27, 2017
1 parent f641088 commit caa8320
Show file tree
Hide file tree
Showing 8 changed files with 374 additions and 76 deletions.
63 changes: 62 additions & 1 deletion common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ char iptables_rule[200]="";

program_mode_t client_or_server=unset_mode;//0 unset; 1client 2server

working_mode_t working_mode=unset_working_mode;
working_mode_t working_mode=tunnel_mode;

int socket_buf_size=1024*1024;

struct random_fd_t
{
Expand Down Expand Up @@ -526,3 +528,62 @@ int create_fifo(char * file)
return fifo_fd;
}


int new_listen_socket(int &fd,u32_t ip,int port)
{
fd =socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

int yes = 1;
//setsockopt(udp_fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes));

struct sockaddr_in local_me={0};

socklen_t slen = sizeof(sockaddr_in);
//memset(&local_me, 0, sizeof(local_me));
local_me.sin_family = AF_INET;
local_me.sin_port = htons(port);
local_me.sin_addr.s_addr = ip;

if (bind(fd, (struct sockaddr*) &local_me, slen) == -1) {
mylog(log_fatal,"socket bind error\n");
//perror("socket bind error");
myexit(1);
}
setnonblocking(fd);
set_buf_size(fd,socket_buf_size);

mylog(log_debug,"local_listen_fd=%d\n,",fd);

return 0;
}
int new_connected_socket(int &fd,u32_t ip,int port)
{
char ip_port[40];
sprintf(ip_port,"%s:%d",my_ntoa(ip),port);

struct sockaddr_in remote_addr_in = { 0 };

socklen_t slen = sizeof(sockaddr_in);
//memset(&remote_addr_in, 0, sizeof(remote_addr_in));
remote_addr_in.sin_family = AF_INET;
remote_addr_in.sin_port = htons(port);
remote_addr_in.sin_addr.s_addr = ip;

fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (fd < 0) {
mylog(log_warn, "[%s]create udp_fd error\n", ip_port);
return -1;
}
setnonblocking(fd);
set_buf_size(fd, socket_buf_size);

mylog(log_debug, "[%s]created new udp_fd %d\n", ip_port, fd);
int ret = connect(fd, (struct sockaddr *) &remote_addr_in, slen);
if (ret != 0) {
mylog(log_warn, "[%s]fd connect fail\n",ip_port);
close(fd);
return -1;
}
return 0;
}

6 changes: 5 additions & 1 deletion common.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ enum working_mode_t {unset_working_mode=0,tunnel_mode,tun_dev_mode};
extern working_mode_t working_mode;

extern int delay_capacity;

extern int socket_buf_size;

typedef u32_t id_t;

Expand Down Expand Up @@ -220,4 +220,8 @@ int create_fifo(char * file);
int create_new_udp(int &new_udp_fd,int remote_address_uint32,int remote_port);
*/

int new_listen_socket(int &fd,u32_t ip,int port);

int new_connected_socket(int &fd,u32_t ip,int port);

#endif /* COMMON_H_ */
7 changes: 4 additions & 3 deletions main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,13 @@
#include "fec_manager.h"
#include "misc.h"
#include "tunnel.h"
#include "tun_dev.h"
using namespace std;


int main(int argc, char *argv[])
{
working_mode=tunnel_mode;


//working_mode=tunnel_mode;

assert(sizeof(u64_t)==8);
assert(sizeof(i64_t)==8);
Expand Down Expand Up @@ -47,9 +46,11 @@ int main(int argc, char *argv[])
{
if(client_or_server==client_mode)
{
tun_dev_client_event_loop();
}
else
{
tun_dev_server_event_loop();
}
}

Expand Down
39 changes: 32 additions & 7 deletions misc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ fd_manager_t fd_manager;
int time_mono_test=0;


int socket_buf_size=1024*1024;



int from_normal_to_fec(conn_info_t & conn_info,char *data,int len,int & out_n,char **&out_arr,int *&out_len,my_time_t *&out_delay)
Expand Down Expand Up @@ -551,6 +551,7 @@ void process_arg(int argc, char *argv[])
{"fec", required_argument, 0,'f'},
{"jitter", required_argument, 0,'j'},
{"fifo", required_argument, 0, 1},
{"tun-dev", optional_argument, 0, 1},
{NULL, 0, 0, 0}
};
int option_index = 0;
Expand Down Expand Up @@ -868,6 +869,12 @@ void process_arg(int argc, char *argv[])

mylog(log_info,"fifo_file =%s \n",fifo_file);
}
else if(strcmp(long_options[option_index].name,"tun-dev")==0)
{
//sscanf(optarg,"%s",fifo_file);
mylog(log_info,"enabled tun-dev mode\n");
working_mode=tun_dev_mode;
}
else
{
mylog(log_fatal,"unknown option\n");
Expand All @@ -880,12 +887,6 @@ void process_arg(int argc, char *argv[])
}
}

if (no_l)
mylog(log_fatal,"error: -i not found\n");
if (no_r)
mylog(log_fatal,"error: -o not found\n");
if (no_l || no_r)
myexit(-1);
if (is_client == 0 && is_server == 0)
{
mylog(log_fatal,"-s -c hasnt been set\n");
Expand All @@ -905,6 +906,30 @@ void process_arg(int argc, char *argv[])
client_or_server=server_mode;
}


if(working_mode==tunnel_mode)
{
if (no_l)
mylog(log_fatal,"error: -l not found\n");
if (no_r)
mylog(log_fatal,"error: -r not found\n");
if (no_l || no_r)
myexit(-1);
}
else if(working_mode==tun_dev_mode)
{
if(client_or_server==client_mode&&no_r)
{
mylog(log_fatal,"error: -r not found\n");
myexit(-1);
}
else if(client_or_server==server_mode&&no_l)
{
mylog(log_fatal,"error: -l not found\n");
myexit(-1);
}
}

print_parameter();

}
Expand Down
2 changes: 1 addition & 1 deletion misc.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ extern fd_manager_t fd_manager;

extern int time_mono_test;

extern int socket_buf_size;



int from_normal_to_fec(conn_info_t & conn_info,char *data,int len,int & out_n,char **&out_arr,int *&out_len,my_time_t *&out_delay);
Expand Down
Loading

0 comments on commit caa8320

Please sign in to comment.