Lines Matching +full:short +full:- +full:ping

1 /*-
31 * reading clock after recv() completes or using kernel-supplied
32 * via recvmsg(). End-to-end time t(A->B->A) is then calculated
33 * and compared against time for both t(A->B) + t(B->A) to make
57 * Timeout to receive ping on the side B. 4x as large as on the side A,
101 #define SEC(x) ((x)->tv_sec)
102 #define NSEC(x) ((x)->tv_nsec)
108 SEC(ts) = (tv)->tv_sec; \
109 NSEC(ts) = (tv)->tv_usec * NSEC_IN_USEC; \
116 enum ts_types {TT_TIMESTAMP = -2, TT_BINTIME = -1,
123 switch (tcp->ts_type) { in get_clock_type()
140 switch (tcp->ts_type) { in get_scm_type()
161 switch (tcp->ts_type) { in get_scm_size()
183 oname2 = -1; in setup_ts_sockopt()
184 sval2 = -1; in setup_ts_sockopt()
186 switch (tcp->ts_type) { in setup_ts_sockopt()
192 sval2 = tcp->ts_type; in setup_ts_sockopt()
210 err(1, "%s: setup_udp: setsockopt(%d, %d, 1)", tcp->name, in setup_ts_sockopt()
213 if (oname2 == -1) in setup_ts_sockopt()
219 tcp->name, fd, oname2, sval2); in setup_ts_sockopt()
230 af_len = sizeof(tcp->sin[0].v4); in setup_udp()
232 tcp->sin[i].v4.sin_len = af_len; in setup_udp()
233 tcp->sin[i].v4.sin_family = AF_INET; in setup_udp()
234 tcp->sin[i].v4.sin_addr.s_addr = htonl(INADDR_LOOPBACK); in setup_udp()
235 tcp->fds[i] = socket(PF_INET, SOCK_DGRAM, 0); in setup_udp()
236 if (tcp->fds[i] < 0) in setup_udp()
237 err(1, "%s: setup_udp: socket", tcp->name); in setup_udp()
238 if (bind(tcp->fds[i], (struct sockaddr *)&tcp->sin[i], af_len) < 0) in setup_udp()
239 err(1, "%s: setup_udp: bind(%s, %d)", tcp->name, in setup_udp()
240 inet_ntoa(tcp->sin[i].v4.sin_addr), 0); in setup_udp()
242 if (getsockname(tcp->fds[i], (struct sockaddr *)&tcp->sin[i], &sin_len) < 0) in setup_udp()
243 err(1, "%s: setup_udp: getsockname(%d)", tcp->name, tcp->fds[i]); in setup_udp()
244 if (tcp->use_recvmsg != 0) { in setup_udp()
245 setup_ts_sockopt(tcp, tcp->fds[i]); in setup_udp()
248 tcp->pfds[i].fd = tcp->fds[i]; in setup_udp()
249 tcp->pfds[i].events = POLLIN; in setup_udp()
252 if (connect(tcp->fds[0], (struct sockaddr *)&tcp->sin[1], af_len) < 0) in setup_udp()
253 err(1, "%s: setup_udp: connect(%s, %d)", tcp->name, in setup_udp()
254 inet_ntoa(tcp->sin[1].v4.sin_addr), ntohs(tcp->sin[1].v4.sin_port)); in setup_udp()
255 if (connect(tcp->fds[1], (struct sockaddr *)&tcp->sin[0], af_len) < 0) in setup_udp()
256 err(1, "%s: setup_udp: connect(%s, %d)", tcp->name, in setup_udp()
257 inet_ntoa(tcp->sin[0].v4.sin_addr), ntohs(tcp->sin[0].v4.sin_port)); in setup_udp()
275 af_len = sizeof(tcp->sin[0].v6); in setup_udp6()
277 tcp->sin[i].v6.sin6_len = af_len; in setup_udp6()
278 tcp->sin[i].v6.sin6_family = AF_INET6; in setup_udp6()
279 tcp->sin[i].v6.sin6_addr = in6addr_loopback; in setup_udp6()
280 tcp->fds[i] = socket(PF_INET6, SOCK_DGRAM, 0); in setup_udp6()
281 if (tcp->fds[i] < 0) in setup_udp6()
282 err(1, "%s: setup_udp: socket", tcp->name); in setup_udp6()
283 if (bind(tcp->fds[i], (struct sockaddr *)&tcp->sin[i], af_len) < 0) in setup_udp6()
284 err(1, "%s: setup_udp: bind(%s, %d)", tcp->name, in setup_udp6()
285 inet_ntoa6(&tcp->sin[i].v6.sin6_addr), 0); in setup_udp6()
287 if (getsockname(tcp->fds[i], (struct sockaddr *)&tcp->sin[i], &sin_len) < 0) in setup_udp6()
288 err(1, "%s: setup_udp: getsockname(%d)", tcp->name, tcp->fds[i]); in setup_udp6()
289 if (tcp->use_recvmsg != 0) { in setup_udp6()
290 setup_ts_sockopt(tcp, tcp->fds[i]); in setup_udp6()
293 tcp->pfds[i].fd = tcp->fds[i]; in setup_udp6()
294 tcp->pfds[i].events = POLLIN; in setup_udp6()
297 if (connect(tcp->fds[0], (struct sockaddr *)&tcp->sin[1], af_len) < 0) in setup_udp6()
298 err(1, "%s: setup_udp: connect(%s, %d)", tcp->name, in setup_udp6()
299 inet_ntoa6(&tcp->sin[1].v6.sin6_addr), in setup_udp6()
300 ntohs(tcp->sin[1].v6.sin6_port)); in setup_udp6()
301 if (connect(tcp->fds[1], (struct sockaddr *)&tcp->sin[0], af_len) < 0) in setup_udp6()
302 err(1, "%s: setup_udp: connect(%s, %d)", tcp->name, in setup_udp6()
303 inet_ntoa6(&tcp->sin[0].v6.sin6_addr), in setup_udp6()
304 ntohs(tcp->sin[0].v6.sin6_port)); in setup_udp6()
311 close(tcp->fds[0]); in teardown_udp()
312 close(tcp->fds[1]); in teardown_udp()
321 slen = sizeof(tcp->test_pkts[pnum]); in send_pkt()
322 clock_gettime(get_clock_type(tcp), &tcp->test_pkts[pnum].tss[fdidx].sent); in send_pkt()
323 r = send(tcp->fds[fdidx], &tcp->test_pkts[pnum], slen, 0); in send_pkt()
325 err(1, "%s: %s: send(%d)", tcp->name, face, tcp->fds[fdidx]); in send_pkt()
328 errx(1, "%s: %s: send(%d): short send", tcp->name, face, in send_pkt()
329 tcp->fds[fdidx]); in send_pkt()
331 tcp->nsent += 1; in send_pkt()
334 #define PDATA(tcp, i) ((tcp)->test_pkts[(i)].data)
352 if ((cmsg->cmsg_level == SOL_SOCKET) && in hdr_extract_ts()
353 (cmsg->cmsg_type == scm_type)) { in hdr_extract_ts()
361 switch (tcp->ts_type) { in hdr_extract_ts()
403 rval = recvmsg(tcp->fds[fdidx], &msg, 0); in recv_pkt_recvmsg()
405 err(1, "%s: %s: recvmsg(%d)", tcp->name, face, tcp->fds[fdidx]); in recv_pkt_recvmsg()
408 errx(1, "%s: %s: recvmsg(%d): short recv", tcp->name, face, in recv_pkt_recvmsg()
409 tcp->fds[fdidx]); in recv_pkt_recvmsg()
421 rval = recv(tcp->fds[fdidx], buf, rlen, 0); in recv_pkt_recv()
424 err(1, "%s: %s: recv(%d)", tcp->name, face, tcp->fds[fdidx]); in recv_pkt_recv()
427 errx(1, "%s: %s: recv(%d): short recv", tcp->name, face, in recv_pkt_recv()
428 tcp->fds[fdidx]); in recv_pkt_recv()
439 pr = poll(&tcp->pfds[fdidx], 1, tout); in recv_pkt()
441 err(1, "%s: %s: poll(%d)", tcp->name, face, tcp->fds[fdidx]); in recv_pkt()
444 return (-1); in recv_pkt()
446 if(tcp->pfds[fdidx].revents != POLLIN) { in recv_pkt()
447 errx(1, "%s: %s: poll(%d): unexpected result", tcp->name, face, in recv_pkt()
448 tcp->fds[fdidx]); in recv_pkt()
451 if (tcp->use_recvmsg == 0) { in recv_pkt()
460 errx(1, "%s: %s: recv(%d): corrupted data, packet %d", tcp->name, in recv_pkt()
461 face, tcp->fds[fdidx], recv_buf.pnum); in recv_pkt()
463 tcp->nrecvd += 1; in recv_pkt()
464 memcpy(tcp->test_pkts[recv_buf.pnum].tss, recv_buf.tss, in recv_pkt()
466 tcp->test_pkts[recv_buf.pnum].lost = 0; in recv_pkt()
511 timespecsub(&tpp->tss[1].recvd, &tpp->tss[0].sent, &rttp->a2b); in calc_rtt()
512 timespecsub(&tpp->tss[0].recvd, &tpp->tss[1].sent, &rttp->b2a); in calc_rtt()
513 timespecadd(&rttp->a2b, &rttp->b2a, &rttp->a2b_b2a); in calc_rtt()
514 timespecsub(&tpp->tss[0].recvd, &tpp->tss[0].sent, &rttp->e2e); in calc_rtt()
552 if (pid == (pid_t)-1) { in test_run()
580 errx(1, "end-to-end trip time is too small"); in test_run()
582 errx(1, "end-to-end trip time is too large"); in test_run()