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
RunTimeOpts *rtOpts, long *acc_latency, long *acc_interval, timeval_t *last_rx)
{
struct my_socket *s = (struct my_socket *)sock;
struct bench_pkt pkt;
struct bench_pkt *pkt;
char buf[PACKET_SIZE];
struct msghdr msg;
struct iovec entry;
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
memset(&msg, 0, sizeof(msg));
msg.msg_iov = &entry;
msg.msg_iovlen = 1;
entry.iov_base = &pkt;
entry.iov_len = len;
entry.iov_base = &buf;
entry.iov_len = PACKET_SIZE;
msg.msg_name = (caddr_t)&from_addr;
msg.msg_namelen = sizeof(from_addr);
msg.msg_control = &control;
msg.msg_controllen = sizeof(control);
int ret = recvmsg(s->fd, &msg, MSG_DONTWAIT);
gettimeofday(&pkt.rx, NULL);
if (!pkt.size2) pkt.size2 = ret;
pkt = (struct bench_pkt*)buf;
gettimeofday(&pkt->rx, NULL);
if (!pkt->size2) pkt->size2 = ret;
if(ret < 0 && errno==EAGAIN) return 0; // would be blocking
if(ret == -EAGAIN) return 0;
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_sec = pkt.rx.tv_sec-pkt.tx.tv_sec-1;
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;
}
else
{
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_usec = pkt->rx.tv_usec - pkt->tx.tv_usec;
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
{
// 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)
+ 1000*1000*(long)(pkt.rx.tv_sec-last_rx->tv_sec-1);
*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);
}
else
{
*acc_interval = *acc_interval + (long)(pkt.rx.tv_usec-last_rx->tv_usec)
+ 1000*1000*(long)(pkt.rx.tv_sec-last_rx->tv_sec);
*acc_interval = *acc_interval + (long)(pkt->rx.tv_usec-last_rx->tv_usec)
+ 1000*1000*(long)(pkt->rx.tv_sec-last_rx->tv_sec);
}
last_rx->tv_usec = pkt.rx.tv_usec;
last_rx->tv_sec = pkt.rx.tv_sec;
last_rx->tv_usec = pkt->rx.tv_usec;
last_rx->tv_sec = pkt->rx.tv_sec;
if(rtOpts->show_rxtx_data == DEBUG_DETAIL)
printf("n %4i transmision time: %9li.%06li [s] tx_size: %i rx_size: %i\n",
pkt.seq,
pkt.xx.tv_sec,
pkt.xx.tv_usec,
pkt.size,
pkt.size2);
pkt->seq,
pkt->xx.tv_sec,
pkt->xx.tv_usec,
pkt->size,
pkt->size2);
*data=(int)pkt.seq;
*data=(int)pkt->seq;
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