ccp: update to latest version of libccp, now requires waiting until ccp is running to open sending unix socket

master
Frank Cangialosi 2018-10-21 17:31:41 -04:00
parent 65fcdbadc4
commit 6f6ca166b6
4 changed files with 26 additions and 16 deletions

View File

@ -92,9 +92,9 @@ void setup_ccp_connection(mtcp_manager_t mtcp) {
mtcp_thread_context_t ctx = mtcp->ctx;
int cpu = ctx->cpu;
//char cpu_str[2] = "";
int send_sock, recv_sock;
int recv_sock;
int path_len;
struct sockaddr_un local, remote;
struct sockaddr_un local;
if ((recv_sock = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1) {
TRACE_ERROR("failed to create unix recv socket for ccp comm\n");
@ -107,23 +107,11 @@ void setup_ccp_connection(mtcp_manager_t mtcp) {
unlink(local.sun_path);
path_len = strlen(local.sun_path) + sizeof(local.sun_family);
if (bind(recv_sock, (struct sockaddr *)&local, path_len) == -1) {
TRACE_ERROR("failed to bind to unix://%s%d\n", FROM_CCP_PREFIX, cpu);
TRACE_ERROR("failed to bind to unix://%s%d because %s\n", FROM_CCP_PREFIX, cpu, strerror(errno));
exit(-1);
}
mtcp->from_ccp = recv_sock;
if ((send_sock = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1) {
TRACE_ERROR("failed to create unix send socket for ccp comm\n");
exit(-1);
}
remote.sun_family = AF_UNIX;
strcpy(remote.sun_path, TO_CCP_PREFIX);//TODO:CCP
path_len = strlen(remote.sun_path) + sizeof(remote.sun_family);
if (connect(send_sock, (struct sockaddr *)&remote, path_len) == -1) {
TRACE_ERROR("failed to connect to unix://%s\n", TO_CCP_PREFIX);
exit(-1);
}
mtcp->to_ccp = send_sock;
struct ccp_datapath dp = {
.set_cwnd = &_dp_set_cwnd,
@ -143,6 +131,24 @@ void setup_ccp_connection(mtcp_manager_t mtcp) {
}
void setup_ccp_send_socket(mtcp_manager_t mtcp) {
int send_sock;
int path_len;
struct sockaddr_un remote;
if ((send_sock = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1) {
TRACE_ERROR("failed to create unix send socket for ccp comm\n");
exit(-1);
}
remote.sun_family = AF_UNIX;
strcpy(remote.sun_path, TO_CCP_PREFIX);//TODO:CCP
path_len = strlen(remote.sun_path) + sizeof(remote.sun_family);
if (connect(send_sock, (struct sockaddr *)&remote, path_len) == -1) {
TRACE_ERROR("failed to connect to unix://%s because %s\n", TO_CCP_PREFIX, strerror(errno));
exit(-1);
}
mtcp->to_ccp = send_sock;
}
void destroy_ccp_connection(mtcp_manager_t mtcp) {
ccp_free();
close(mtcp->from_ccp);

View File

@ -1112,6 +1112,9 @@ CCPRecvLoopThread(void *arg) {
}
break;
}
if (!mtcp->to_ccp) {
setup_ccp_send_socket(mtcp);
}
ccp_read_msg(recvBuf, bytes_recvd);
} while(1);
}

View File

@ -20,6 +20,7 @@
#define EVENT_ECN 4
void setup_ccp_connection(mtcp_manager_t mtcp);
void setup_ccp_send_socket(mtcp_manager_t mtcp);
void destroy_ccp_connection(mtcp_manager_t mtcp);
void ccp_create(mtcp_manager_t mtcp, tcp_stream *stream);
void ccp_cong_control(mtcp_manager_t mtcp, tcp_stream *stream, uint32_t ack, uint64_t bytes_delivered, uint64_t packets_delivered);

@ -1 +1 @@
Subproject commit 5f91d69f09c4eb4cd1c066f512cc3b24ef02a09b
Subproject commit 68cce87ae82008371d101ff56df971d24ec6acdd