Commit 400b86fe authored by Grzegorz Daniluk's avatar Grzegorz Daniluk

networkTool: receiving function didn't have proper buffer for received frames

parent 39e8f379
...@@ -121,7 +121,8 @@ int rx_seq_from(my_socket *sock, wr_sockaddr_t *from, int *data, size_t data_len ...@@ -121,7 +121,8 @@ int rx_seq_from(my_socket *sock, wr_sockaddr_t *from, int *data, size_t data_len
RunTimeOpts *rtOpts, long *acc_latency, long *acc_interval, timeval_t *last_rx) RunTimeOpts *rtOpts, long *acc_latency, long *acc_interval, timeval_t *last_rx)
{ {
struct my_socket *s = (struct my_socket *)sock; struct my_socket *s = (struct my_socket *)sock;
struct bench_pkt pkt; struct bench_pkt *pkt;
char buf[PACKET_SIZE];
struct msghdr msg; struct msghdr msg;
struct iovec entry; struct iovec entry;
struct sockaddr_ll from_addr; struct sockaddr_ll from_addr;
...@@ -135,61 +136,62 @@ int rx_seq_from(my_socket *sock, wr_sockaddr_t *from, int *data, size_t data_len ...@@ -135,61 +136,62 @@ int rx_seq_from(my_socket *sock, wr_sockaddr_t *from, int *data, size_t data_len
memset(&msg, 0, sizeof(msg)); memset(&msg, 0, sizeof(msg));
msg.msg_iov = &entry; msg.msg_iov = &entry;
msg.msg_iovlen = 1; msg.msg_iovlen = 1;
entry.iov_base = &pkt; entry.iov_base = &buf;
entry.iov_len = len; entry.iov_len = PACKET_SIZE;
msg.msg_name = (caddr_t)&from_addr; msg.msg_name = (caddr_t)&from_addr;
msg.msg_namelen = sizeof(from_addr); msg.msg_namelen = sizeof(from_addr);
msg.msg_control = &control; msg.msg_control = &control;
msg.msg_controllen = sizeof(control); msg.msg_controllen = sizeof(control);
int ret = recvmsg(s->fd, &msg, MSG_DONTWAIT); int ret = recvmsg(s->fd, &msg, MSG_DONTWAIT);
gettimeofday(&pkt.rx, NULL); pkt = (struct bench_pkt*)buf;
if (!pkt.size2) pkt.size2 = ret; gettimeofday(&pkt->rx, NULL);
if (!pkt->size2) pkt->size2 = ret;
if(ret < 0 && errno==EAGAIN) return 0; // would be blocking if(ret < 0 && errno==EAGAIN) return 0; // would be blocking
if(ret == -EAGAIN) return 0; if(ret == -EAGAIN) return 0;
if(ret <= 0) return ret; if(ret <= 0) return ret;
if((pkt.rx.tv_usec-pkt.tx.tv_usec)<0) if((pkt->rx.tv_usec-pkt->tx.tv_usec)<0)
{ {
pkt.xx.tv_usec = 1000*1000+pkt.rx.tv_usec-pkt.tx.tv_usec; pkt->xx.tv_usec = 1000*1000+pkt->rx.tv_usec-pkt->tx.tv_usec;
pkt.xx.tv_sec = pkt.rx.tv_sec-pkt.tx.tv_sec-1; pkt->xx.tv_sec = pkt->rx.tv_sec-pkt->tx.tv_sec-1;
} }
else else
{ {
pkt.xx.tv_usec = pkt.rx.tv_usec - pkt.tx.tv_usec; pkt->xx.tv_usec = pkt->rx.tv_usec - pkt->tx.tv_usec;
pkt.xx.tv_sec = pkt.rx.tv_sec - pkt.tx.tv_sec; pkt->xx.tv_sec = pkt->rx.tv_sec - pkt->tx.tv_sec;
} }
(*acc_latency) = (*acc_latency) + (long)pkt.xx.tv_usec; (*acc_latency) = (*acc_latency) + (long)pkt->xx.tv_usec;
if(last_rx->tv_sec == 0 && last_rx->tv_usec == 0) //first if(last_rx->tv_sec == 0 && last_rx->tv_usec == 0) //first
{ {
// first time, do nothing // first time, do nothing
} }
else if((pkt.rx.tv_usec-last_rx->tv_usec)<0) else if((pkt->rx.tv_usec-last_rx->tv_usec)<0)
{ {
*acc_interval = *acc_interval + (long)(1000*1000+pkt.rx.tv_usec-last_rx->tv_usec) *acc_interval = *acc_interval + (long)(1000*1000+pkt->rx.tv_usec-last_rx->tv_usec)
+ 1000*1000*(long)(pkt.rx.tv_sec-last_rx->tv_sec-1); + 1000*1000*(long)(pkt->rx.tv_sec-last_rx->tv_sec-1);
} }
else else
{ {
*acc_interval = *acc_interval + (long)(pkt.rx.tv_usec-last_rx->tv_usec) *acc_interval = *acc_interval + (long)(pkt->rx.tv_usec-last_rx->tv_usec)
+ 1000*1000*(long)(pkt.rx.tv_sec-last_rx->tv_sec); + 1000*1000*(long)(pkt->rx.tv_sec-last_rx->tv_sec);
} }
last_rx->tv_usec = pkt.rx.tv_usec; last_rx->tv_usec = pkt->rx.tv_usec;
last_rx->tv_sec = pkt.rx.tv_sec; last_rx->tv_sec = pkt->rx.tv_sec;
if(rtOpts->show_rxtx_data == DEBUG_DETAIL) if(rtOpts->show_rxtx_data == DEBUG_DETAIL)
printf("n %4i transmision time: %9li.%06li [s] tx_size: %i rx_size: %i\n", printf("n %4i transmision time: %9li.%06li [s] tx_size: %i rx_size: %i\n",
pkt.seq, pkt->seq,
pkt.xx.tv_sec, pkt->xx.tv_sec,
pkt.xx.tv_usec, pkt->xx.tv_usec,
pkt.size, pkt->size,
pkt.size2); pkt->size2);
*data=(int)pkt.seq; *data=(int)pkt->seq;
return (ret); return (ret);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment