diff options
| author | David M. Syzdek <david.syzdek@acsalaska.com> | 2020-01-30 12:10:16 -0900 |
|---|---|---|
| committer | David M. Syzdek <david.syzdek@acsalaska.com> | 2020-01-30 12:10:16 -0900 |
| commit | eb39cd14c419b37363e9e60d836074424b61bcea (patch) | |
| tree | d3ab62e0a0e0e1c20ac1c95ffee6d5fe64e37796 /src | |
| parent | 78183989166c2cd59073c253abbb4189cda70e70 (diff) | |
| download | akcom-udpecho-eb39cd14c419b37363e9e60d836074424b61bcea.tar.gz akcom-udpecho-eb39cd14c419b37363e9e60d836074424b61bcea.tar.bz2 akcom-udpecho-eb39cd14c419b37363e9e60d836074424b61bcea.tar.xz akcom-udpecho-eb39cd14c419b37363e9e60d836074424b61bcea.zip | |
Adding debug statements
Diffstat (limited to 'src')
| -rw-r--r-- | src/akcom-udpechod.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/akcom-udpechod.c b/src/akcom-udpechod.c index df2c573..8f28664 100644 --- a/src/akcom-udpechod.c +++ b/src/akcom-udpechod.c | |||
| @@ -294,12 +294,14 @@ int main(int argc, char * argv[]) | |||
| 294 | syslog(LOG_NOTICE, "daemon starting"); | 294 | syslog(LOG_NOTICE, "daemon starting"); |
| 295 | 295 | ||
| 296 | // configure signals | 296 | // configure signals |
| 297 | syslog(LOG_DEBUG, "configuring signal handling"); | ||
| 297 | signal(SIGPIPE, SIG_IGN); | 298 | signal(SIGPIPE, SIG_IGN); |
| 298 | signal(SIGINT, my_sighandler); | 299 | signal(SIGINT, my_sighandler); |
| 299 | signal(SIGQUIT, my_sighandler); | 300 | signal(SIGQUIT, my_sighandler); |
| 300 | signal(SIGTERM, my_sighandler); | 301 | signal(SIGTERM, my_sighandler); |
| 301 | 302 | ||
| 302 | // seed psuedo random number generator | 303 | // seed psuedo random number generator |
| 304 | syslog(LOG_DEBUG, "seeding psuedo random number generator"); | ||
| 303 | clock_gettime(CLOCK_REALTIME, &ts); | 305 | clock_gettime(CLOCK_REALTIME, &ts); |
| 304 | seed = (int)ts.tv_sec; | 306 | seed = (int)ts.tv_sec; |
| 305 | seed += (int)ts.tv_nsec; | 307 | seed += (int)ts.tv_nsec; |
| @@ -358,6 +360,7 @@ int my_daemonize(void) | |||
| 358 | } sin; | 360 | } sin; |
| 359 | 361 | ||
| 360 | // create lock file | 362 | // create lock file |
| 363 | syslog(LOG_DEBUG, "creating PID file"); | ||
| 361 | strncpy(pidfile, cnf.pidfile, sizeof(pidfile)-7); | 364 | strncpy(pidfile, cnf.pidfile, sizeof(pidfile)-7); |
| 362 | strcat(pidfile, "XXXXXX"); | 365 | strcat(pidfile, "XXXXXX"); |
| 363 | if ((fd = mkstemp(pidfile)) == -1) | 366 | if ((fd = mkstemp(pidfile)) == -1) |
| @@ -365,6 +368,7 @@ int my_daemonize(void) | |||
| 365 | syslog(LOG_ERR, "error: mkstemp(): %s", strerror(errno)); | 368 | syslog(LOG_ERR, "error: mkstemp(): %s", strerror(errno)); |
| 366 | return(-1); | 369 | return(-1); |
| 367 | }; | 370 | }; |
| 371 | syslog(LOG_DEBUG, "temp pidfile: %s", pidfile); | ||
| 368 | if ((rc = link(pidfile, cnf.pidfile)) == -1) | 372 | if ((rc = link(pidfile, cnf.pidfile)) == -1) |
| 369 | { | 373 | { |
| 370 | syslog(LOG_ERR, "error: mkstemp(): %s", strerror(errno)); | 374 | syslog(LOG_ERR, "error: mkstemp(): %s", strerror(errno)); |
| @@ -376,6 +380,7 @@ int my_daemonize(void) | |||
| 376 | syslog(LOG_DEBUG, "pidfile: %s", cnf.pidfile); | 380 | syslog(LOG_DEBUG, "pidfile: %s", cnf.pidfile); |
| 377 | 381 | ||
| 378 | // creates socket | 382 | // creates socket |
| 383 | syslog(LOG_DEBUG, "creating UDP socket"); | ||
| 379 | if ((s = socket(PF_INET6, SOCK_DGRAM, 0)) == -1) | 384 | if ((s = socket(PF_INET6, SOCK_DGRAM, 0)) == -1) |
| 380 | { | 385 | { |
| 381 | syslog(LOG_ERR, "socket error: %s", strerror(errno)); | 386 | syslog(LOG_ERR, "socket error: %s", strerror(errno)); |
| @@ -385,6 +390,7 @@ int my_daemonize(void) | |||
| 385 | }; | 390 | }; |
| 386 | 391 | ||
| 387 | // set socket options | 392 | // set socket options |
| 393 | syslog(LOG_DEBUG, "setting socket options"); | ||
| 388 | opt = 1; | 394 | opt = 1; |
| 389 | if ((rc = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *)&opt, sizeof(int))) == -1) | 395 | if ((rc = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *)&opt, sizeof(int))) == -1) |
| 390 | { | 396 | { |
| @@ -396,6 +402,7 @@ int my_daemonize(void) | |||
| 396 | }; | 402 | }; |
| 397 | 403 | ||
| 398 | // bind socket to interface | 404 | // bind socket to interface |
| 405 | syslog(LOG_DEBUG, "binding socket"); | ||
| 399 | bzero(&sin, sizeof(sin)); | 406 | bzero(&sin, sizeof(sin)); |
| 400 | sin.s6.sin6_family = AF_INET6; | 407 | sin.s6.sin6_family = AF_INET6; |
| 401 | sin.s6.sin6_addr = in6addr_any; | 408 | sin.s6.sin6_addr = in6addr_any; |
| @@ -426,11 +433,13 @@ int my_daemonize(void) | |||
| 426 | // fork process | 433 | // fork process |
| 427 | if ((cnf.dont_fork)) | 434 | if ((cnf.dont_fork)) |
| 428 | { | 435 | { |
| 436 | syslog(LOG_DEBUG, "writing PID to pidfile"); | ||
| 429 | snprintf(buff, sizeof(buff), "%i", getpid()); | 437 | snprintf(buff, sizeof(buff), "%i", getpid()); |
| 430 | write(fd, buff, strlen(buff)); | 438 | write(fd, buff, strlen(buff)); |
| 431 | close(fd); | 439 | close(fd); |
| 432 | return(s); | 440 | return(s); |
| 433 | }; | 441 | }; |
| 442 | syslog(LOG_DEBUG, "forking process"); | ||
| 434 | oldpid = getpid(); | 443 | oldpid = getpid(); |
| 435 | switch(pid = fork()) | 444 | switch(pid = fork()) |
| 436 | { | 445 | { |
| @@ -446,12 +455,14 @@ int my_daemonize(void) | |||
| 446 | 455 | ||
| 447 | default: | 456 | default: |
| 448 | syslog(LOG_INFO, "forking to %i", pid); | 457 | syslog(LOG_INFO, "forking to %i", pid); |
| 458 | closelog(); | ||
| 449 | close(fd); | 459 | close(fd); |
| 450 | close(s); | 460 | close(s); |
| 451 | return(0); | 461 | return(0); |
| 452 | }; | 462 | }; |
| 453 | 463 | ||
| 454 | // record PID in pidfile | 464 | // record PID in pidfile |
| 465 | syslog(LOG_DEBUG, "writing forked PID to pidfile"); | ||
| 455 | snprintf(buff, sizeof(buff), "%i", pid); | 466 | snprintf(buff, sizeof(buff), "%i", pid); |
| 456 | write(fd, buff, strlen(buff)); | 467 | write(fd, buff, strlen(buff)); |
| 457 | close(fd); | 468 | close(fd); |
| @@ -485,6 +496,7 @@ int my_loop(int s, size_t * connp) | |||
| 485 | } udpbuff; | 496 | } udpbuff; |
| 486 | 497 | ||
| 487 | // setup poller | 498 | // setup poller |
| 499 | syslog(LOG_DEBUG, "waiting for echo request"); | ||
| 488 | fds[0].fd = s; | 500 | fds[0].fd = s; |
| 489 | fds[0].events = POLLIN; | 501 | fds[0].events = POLLIN; |
| 490 | fds[0].revents = 0; | 502 | fds[0].revents = 0; |
| @@ -495,11 +507,13 @@ int my_loop(int s, size_t * connp) | |||
| 495 | (*connp)++; | 507 | (*connp)++; |
| 496 | 508 | ||
| 497 | // read data | 509 | // read data |
| 510 | syslog(LOG_DEBUG, "conn %zu: reading data", *connp); | ||
| 498 | sinlen = sizeof(struct sockaddr_storage); | 511 | sinlen = sizeof(struct sockaddr_storage); |
| 499 | if ((ssize = recvfrom(s, udpbuff.bytes, sizeof(udpbuff), 0, &sin.sa, &sinlen)) == -1) | 512 | if ((ssize = recvfrom(s, udpbuff.bytes, sizeof(udpbuff), 0, &sin.sa, &sinlen)) == -1) |
| 500 | return(-1); | 513 | return(-1); |
| 501 | 514 | ||
| 502 | // grab timestamp | 515 | // grab timestamp |
| 516 | syslog(LOG_DEBUG, "conn %zu: calculating recv timestamp", *connp); | ||
| 503 | clock_gettime(CLOCK_REALTIME, &ts); | 517 | clock_gettime(CLOCK_REALTIME, &ts); |
| 504 | ms = (uint64_t)(ts.tv_sec * 1000000000); | 518 | ms = (uint64_t)(ts.tv_sec * 1000000000); |
| 505 | ms += (uint64_t)ts.tv_nsec; | 519 | ms += (uint64_t)ts.tv_nsec; |
| @@ -508,22 +522,26 @@ int my_loop(int s, size_t * connp) | |||
| 508 | switch(sin.ss.ss_family) | 522 | switch(sin.ss.ss_family) |
| 509 | { | 523 | { |
| 510 | case AF_INET: | 524 | case AF_INET: |
| 525 | syslog(LOG_DEBUG, "conn %zu: processing client IPv4 address", *connp); | ||
| 511 | inet_ntop(AF_INET, &sin.s4, addr_str, sizeof(addr_str)); | 526 | inet_ntop(AF_INET, &sin.s4, addr_str, sizeof(addr_str)); |
| 512 | port = ntohs(sin.s4.sin_port); | 527 | port = ntohs(sin.s4.sin_port); |
| 513 | break; | 528 | break; |
| 514 | 529 | ||
| 515 | case AF_INET6: | 530 | case AF_INET6: |
| 531 | syslog(LOG_DEBUG, "conn %zu: processing client IPv6 address", *connp); | ||
| 516 | inet_ntop(AF_INET6, &sin.s6, addr_str, sizeof(addr_str)); | 532 | inet_ntop(AF_INET6, &sin.s6, addr_str, sizeof(addr_str)); |
| 517 | port = ntohs(sin.s6.sin6_port); | 533 | port = ntohs(sin.s6.sin6_port); |
| 518 | break; | 534 | break; |
| 519 | 535 | ||
| 520 | default: | 536 | default: |
| 537 | syslog(LOG_DEBUG, "conn %zu: ignoring unknown address family: %i", *connp, sin.ss.ss_family); | ||
| 521 | return(0); | 538 | return(0); |
| 522 | }; | 539 | }; |
| 523 | 540 | ||
| 524 | // process echo+ packet | 541 | // process echo+ packet |
| 525 | if ((cnf.echoplus)) | 542 | if ((cnf.echoplus)) |
| 526 | { | 543 | { |
| 544 | syslog(LOG_DEBUG, "conn %zu: intializing echo plus header", *connp); | ||
| 527 | udpbuff.msg->res_sn = udpbuff.msg->req_sn; | 545 | udpbuff.msg->res_sn = udpbuff.msg->req_sn; |
| 528 | udpbuff.msg->recv_time = htonl(ms & 0xFFFFFFFFLL); | 546 | udpbuff.msg->recv_time = htonl(ms & 0xFFFFFFFFLL); |
| 529 | udpbuff.msg->failures = 0; | 547 | udpbuff.msg->failures = 0; |
| @@ -553,10 +571,12 @@ int my_loop(int s, size_t * connp) | |||
| 553 | if (cnf.delay > 0) | 571 | if (cnf.delay > 0) |
| 554 | { | 572 | { |
| 555 | delay = rand() % cnf.delay; | 573 | delay = rand() % cnf.delay; |
| 574 | syslog(LOG_DEBUG, "conn %zu: delaying response for %i ms", *connp, delay); | ||
| 556 | usleep(delay); | 575 | usleep(delay); |
| 557 | }; | 576 | }; |
| 558 | 577 | ||
| 559 | // grab timestamp | 578 | // grab timestamp |
| 579 | syslog(LOG_DEBUG, "conn %zu: calculating sent timestamp", *connp); | ||
| 560 | clock_gettime(CLOCK_REALTIME, &ts); | 580 | clock_gettime(CLOCK_REALTIME, &ts); |
| 561 | ts.tv_nsec++; | 581 | ts.tv_nsec++; |
| 562 | ms = (uint64_t)(ts.tv_sec * 1000000000); | 582 | ms = (uint64_t)(ts.tv_sec * 1000000000); |
| @@ -564,7 +584,10 @@ int my_loop(int s, size_t * connp) | |||
| 564 | 584 | ||
| 565 | // send response | 585 | // send response |
| 566 | if ((cnf.echoplus)) | 586 | if ((cnf.echoplus)) |
| 587 | { | ||
| 588 | syslog(LOG_DEBUG, "conn %zu: updating echo plus header", *connp); | ||
| 567 | udpbuff.msg->reply_time = htonl(ms & 0xFFFFFFFFLL); | 589 | udpbuff.msg->reply_time = htonl(ms & 0xFFFFFFFFLL); |
| 590 | }; | ||
| 568 | sendto(s, udpbuff.bytes, ssize, 0, &sin.sa, sinlen); | 591 | sendto(s, udpbuff.bytes, ssize, 0, &sin.sa, sinlen); |
| 569 | syslog(LOG_INFO, | 592 | syslog(LOG_INFO, |
| 570 | "client: [%s]:%i; sent bytes: %zi; timestamp: %lu.%09lu; seq: %u; delay: %u usec;", | 593 | "client: [%s]:%i; sent bytes: %zi; timestamp: %lu.%09lu; seq: %u; delay: %u usec;", |
