aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
authorDavid M. Syzdek <david.syzdek@acsalaska.com>2020-01-30 12:10:16 -0900
committerDavid M. Syzdek <david.syzdek@acsalaska.com>2020-01-30 12:10:16 -0900
commiteb39cd14c419b37363e9e60d836074424b61bcea (patch)
treed3ab62e0a0e0e1c20ac1c95ffee6d5fe64e37796 /src
parent78183989166c2cd59073c253abbb4189cda70e70 (diff)
downloadakcom-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.c23
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;",