diff options
Diffstat (limited to 'src/akcom-udpecho.c')
| -rw-r--r-- | src/akcom-udpecho.c | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/src/akcom-udpecho.c b/src/akcom-udpecho.c index d42c809..6e6cdaa 100644 --- a/src/akcom-udpecho.c +++ b/src/akcom-udpecho.c | |||
| @@ -128,6 +128,7 @@ struct udp_echo_plus | |||
| 128 | uint32_t reply_time; | 128 | uint32_t reply_time; |
| 129 | uint32_t failures; | 129 | uint32_t failures; |
| 130 | uint32_t iteration; | 130 | uint32_t iteration; |
| 131 | uint8_t bytes[]; | ||
| 131 | }; | 132 | }; |
| 132 | 133 | ||
| 133 | 134 | ||
| @@ -345,37 +346,45 @@ main( | |||
| 345 | return(1); | 346 | return(1); |
| 346 | }; | 347 | }; |
| 347 | 348 | ||
| 348 | 349 | // adjust defaults | |
| 349 | // allocate buffer | ||
| 350 | if ((fd = open("/dev/urandom", O_RDONLY)) == -1) | ||
| 351 | { | ||
| 352 | fprintf(stderr, "%s: open(/dev/urandom): %s\n", prog_name, strerror(errno)); | ||
| 353 | return(1); | ||
| 354 | }; | ||
| 355 | if (cnf_packetsize < sizeof(struct udp_echo_plus)) | 350 | if (cnf_packetsize < sizeof(struct udp_echo_plus)) |
| 356 | cnf_packetsize = sizeof(struct udp_echo_plus); | 351 | cnf_packetsize = sizeof(struct udp_echo_plus); |
| 357 | if ((sndbuff.data = malloc(cnf_packetsize)) == NULL) | 352 | |
| 353 | // allocate receive buffer | ||
| 354 | if ((rcvbuff.data = malloc(cnf_packetsize)) == NULL) | ||
| 358 | { | 355 | { |
| 359 | fprintf(stderr, "%s: out of virtual memory\n", prog_name); | 356 | fprintf(stderr, "%s: out of virtual memory\n", prog_name); |
| 360 | close(fd); | ||
| 361 | return(1); | 357 | return(1); |
| 362 | }; | 358 | }; |
| 363 | if ((rcvbuff.data = malloc(cnf_packetsize)) == NULL) | 359 | |
| 360 | // allocate send buffer | ||
| 361 | if ((sndbuff.data = malloc(cnf_packetsize)) == NULL) | ||
| 364 | { | 362 | { |
| 365 | fprintf(stderr, "%s: out of virtual memory\n", prog_name); | 363 | fprintf(stderr, "%s: out of virtual memory\n", prog_name); |
| 366 | close(fd); | 364 | free(rcvbuff.data); |
| 367 | return(1); | 365 | return(1); |
| 368 | }; | 366 | }; |
| 369 | if ((size = read(fd, sndbuff.data, cnf_packetsize)) == -1) | 367 | memset(sndbuff.data, 0, sizeof(struct udp_echo_plus)); |
| 368 | sndbuff.echoplus->iteration = htonl(1); | ||
| 369 | if (cnf_packetsize > sizeof(struct udp_echo_plus)) | ||
| 370 | { | 370 | { |
| 371 | fprintf(stderr, "%s: read(): %s\n", prog_name, strerror(errno)); | 371 | if ((fd = open("/dev/urandom", O_RDONLY)) == -1) |
| 372 | { | ||
| 373 | fprintf(stderr, "%s: open(/dev/urandom): %s\n", prog_name, strerror(errno)); | ||
| 374 | free(rcvbuff.data); | ||
| 375 | free(sndbuff.data); | ||
| 376 | return(1); | ||
| 377 | }; | ||
| 378 | if (read(fd, sndbuff.echoplus->bytes, cnf_packetsize-sizeof(struct udp_echo_plus)) == -1) | ||
| 379 | { | ||
| 380 | fprintf(stderr, "%s: read(): %s\n", prog_name, strerror(errno)); | ||
| 381 | close(fd); | ||
| 382 | free(sndbuff.data); | ||
| 383 | free(rcvbuff.data); | ||
| 384 | return(1); | ||
| 385 | }; | ||
| 372 | close(fd); | 386 | close(fd); |
| 373 | free(sndbuff.data); | ||
| 374 | free(rcvbuff.data); | ||
| 375 | return(1); | ||
| 376 | }; | 387 | }; |
| 377 | close(fd); | ||
| 378 | bzero(sndbuff.data, sizeof(struct udp_echo_plus)); | ||
| 379 | 388 | ||
| 380 | 389 | ||
| 381 | // resolve host | 390 | // resolve host |
| @@ -420,16 +429,6 @@ main( | |||
| 420 | start.tv_sec -= cnf_interval; | 429 | start.tv_sec -= cnf_interval; |
| 421 | epoch = 0; | 430 | epoch = 0; |
| 422 | 431 | ||
| 423 | |||
| 424 | // set packet information | ||
| 425 | sndbuff.echoplus->req_sn = 0; | ||
| 426 | sndbuff.echoplus->res_sn = 0; | ||
| 427 | sndbuff.echoplus->recv_time = 0; | ||
| 428 | sndbuff.echoplus->reply_time = 0; | ||
| 429 | sndbuff.echoplus->failures = 0; | ||
| 430 | sndbuff.echoplus->iteration = htonl(1); | ||
| 431 | |||
| 432 | |||
| 433 | // master loop | 432 | // master loop |
| 434 | while (!(should_stop)) | 433 | while (!(should_stop)) |
| 435 | { | 434 | { |
