Simplified debugging by allowing multiple levels.

'ocserv -d' now accepts a numeric option from 0 (no debugging) to 9
(maximum verbosity).
This commit is contained in:
Nikos Mavrogiannopoulos
2014-02-17 20:19:39 +01:00
parent 1eab85479c
commit be332174f8
7 changed files with 33 additions and 36 deletions
+1 -7
View File
@@ -551,14 +551,8 @@ int cmd_parser (int argc, char **argv, struct cfg_st* config)
if (HAVE_OPT(PID_FILE)) if (HAVE_OPT(PID_FILE))
pid_file = OPT_ARG(PID_FILE); pid_file = OPT_ARG(PID_FILE);
if (HAVE_OPT(TLS_DEBUG))
config->tls_debug = 1;
if (HAVE_OPT(HTTP_DEBUG))
config->http_debug = 1;
if (HAVE_OPT(DEBUG)) if (HAVE_OPT(DEBUG))
config->debug = 1; config->debug = OPT_VALUE_DEBUG;
if (HAVE_OPT(CONFIG)) { if (HAVE_OPT(CONFIG)) {
cfg_file = OPT_ARG(CONFIG); cfg_file = OPT_ARG(CONFIG);
+12 -2
View File
@@ -91,10 +91,15 @@ void __attribute__ ((format(printf, 3, 4)))
return; return;
if (priority == LOG_HTTP_DEBUG) { if (priority == LOG_HTTP_DEBUG) {
if (ws->config->http_debug == 0) if (ws->config->debug < DEBUG_HTTP)
return; return;
else else
priority = LOG_INFO; priority = LOG_INFO;
} else if (priority == LOG_TRANSFER_DEBUG) {
if (ws->config->debug < DEBUG_TRANSFERRED)
return;
else
priority = LOG_DEBUG;
} }
ip = human_addr((void*)&ws->remote_addr, ws->remote_addr_len, ip = human_addr((void*)&ws->remote_addr, ws->remote_addr_len,
@@ -127,7 +132,12 @@ void __attribute__ ((format(printf, 4, 5)))
return; return;
if (priority == LOG_HTTP_DEBUG) { if (priority == LOG_HTTP_DEBUG) {
if (s->config->http_debug == 0) if (s->config->debug < DEBUG_HTTP)
return;
else
priority = LOG_DEBUG;
} else if (priority == LOG_TRANSFER_DEBUG) {
if (s->config->debug < DEBUG_TRANSFERRED)
return; return;
else else
priority = LOG_DEBUG; priority = LOG_DEBUG;
+1 -1
View File
@@ -855,7 +855,7 @@ int main(int argc, char** argv)
flags = LOG_PID|LOG_NDELAY; flags = LOG_PID|LOG_NDELAY;
#ifdef LOG_PERROR #ifdef LOG_PERROR
if (config.debug != 0 || config.http_debug != 0 || config.tls_debug != 0) if (config.debug != 0)
flags |= LOG_PERROR; flags |= LOG_PERROR;
#endif #endif
openlog("ocserv", flags, LOG_DAEMON); openlog("ocserv", flags, LOG_DAEMON);
+2 -12
View File
@@ -32,21 +32,11 @@ flag = {
doc = ""; doc = "";
}; };
flag = {
name = tls-debug;
descrip = "Enable verbose TLS debugging information";
doc = "";
};
flag = {
name = http-debug;
descrip = "Enable verbose HTTP debugging information";
doc = "";
};
flag = { flag = {
name = debug; name = debug;
value = d; value = d;
arg-type = number;
arg-range = "0 -> 9999";
descrip = "Enable verbose network debugging information"; descrip = "Enable verbose network debugging information";
doc = ""; doc = "";
}; };
+1 -1
View File
@@ -557,7 +557,7 @@ const char* perr;
char *tmp; char *tmp;
unsigned len; unsigned len;
if (s->config->tls_debug) { if (s->config->debug >= DEBUG_TLS) {
gnutls_global_set_log_function(tls_log_func); gnutls_global_set_log_function(tls_log_func);
gnutls_global_set_log_level(9); gnutls_global_set_log_level(9);
} }
+5 -2
View File
@@ -44,6 +44,10 @@
# define _ATTR_PACKED # define _ATTR_PACKED
#endif #endif
#define DEBUG_BASIC 1
#define DEBUG_HTTP 2
#define DEBUG_TRANSFERRED 3
#define DEBUG_TLS 4
#define AC_PKT_DATA 0 /* Uncompressed data */ #define AC_PKT_DATA 0 /* Uncompressed data */
#define AC_PKT_DPD_OUT 3 /* Dead Peer Detection */ #define AC_PKT_DPD_OUT 3 /* Dead Peer Detection */
@@ -75,6 +79,7 @@ extern int syslog_open;
#define ERR_CTL -12 #define ERR_CTL -12
#define LOG_HTTP_DEBUG 2048 #define LOG_HTTP_DEBUG 2048
#define LOG_TRANSFER_DEBUG 2049
#define MAX_CIPHERSUITE_NAME 64 #define MAX_CIPHERSUITE_NAME 64
#define MAX_DTLS_CIPHERSUITE_NAME 24 #define MAX_DTLS_CIPHERSUITE_NAME 24
@@ -198,8 +203,6 @@ struct cfg_st {
unsigned keepalive; unsigned keepalive;
unsigned dpd; unsigned dpd;
unsigned foreground; unsigned foreground;
unsigned tls_debug;
unsigned http_debug;
unsigned debug; unsigned debug;
unsigned max_clients; unsigned max_clients;
unsigned max_same_clients; unsigned max_same_clients;
+11 -11
View File
@@ -1484,7 +1484,7 @@ static int connect_handler(worker_st * ws)
ws->buffer[6] = AC_PKT_TERM_SERVER; ws->buffer[6] = AC_PKT_TERM_SERVER;
ws->buffer[7] = 0; ws->buffer[7] = 0;
oclog(ws, LOG_DEBUG, oclog(ws, LOG_TRANSFER_DEBUG,
"sending disconnect message in TLS channel"); "sending disconnect message in TLS channel");
ret = tls_send(ws->session, ws->buffer, 8); ret = tls_send(ws->session, ws->buffer, 8);
GNUTLS_FATAL_ERR(ret); GNUTLS_FATAL_ERR(ret);
@@ -1543,7 +1543,7 @@ static int connect_handler(worker_st * ws)
if (bandwidth_update(&b_tx, l - 1, ws->conn_mtu, &tnow) if (bandwidth_update(&b_tx, l - 1, ws->conn_mtu, &tnow)
!= 0) { != 0) {
tls_retry = 0; tls_retry = 0;
oclog(ws, LOG_DEBUG, "sending %d byte(s)\n", l); oclog(ws, LOG_TRANSFER_DEBUG, "sending %d byte(s)\n", l);
if (ws->udp_state == UP_ACTIVE) { if (ws->udp_state == UP_ACTIVE) {
ws->buffer[7] = AC_PKT_DATA; ws->buffer[7] = AC_PKT_DATA;
@@ -1556,7 +1556,7 @@ static int connect_handler(worker_st * ws)
if (ret == GNUTLS_E_LARGE_PACKET) { if (ret == GNUTLS_E_LARGE_PACKET) {
mtu_not_ok(ws); mtu_not_ok(ws);
oclog(ws, LOG_DEBUG, oclog(ws, LOG_TRANSFER_DEBUG,
"retrying (TLS) %d\n", l); "retrying (TLS) %d\n", l);
tls_retry = 1; tls_retry = 1;
} else if (ret >= ws->conn_mtu } else if (ret >= ws->conn_mtu
@@ -1589,7 +1589,7 @@ static int connect_handler(worker_st * ws)
ret = ret =
tls_recv(ws->session, ws->buffer, tls_recv(ws->session, ws->buffer,
ws->buffer_size); ws->buffer_size);
oclog(ws, LOG_DEBUG, "received %d byte(s) (TLS)", ret); oclog(ws, LOG_TRANSFER_DEBUG, "received %d byte(s) (TLS)", ret);
GNUTLS_FATAL_ERR(ret); GNUTLS_FATAL_ERR(ret);
@@ -1652,7 +1652,7 @@ static int connect_handler(worker_st * ws)
tls_recv(ws->dtls_session, tls_recv(ws->dtls_session,
ws->buffer, ws->buffer,
ws->buffer_size); ws->buffer_size);
oclog(ws, LOG_DEBUG, oclog(ws, LOG_TRANSFER_DEBUG,
"received %d byte(s) (DTLS)", ret); "received %d byte(s) (DTLS)", ret);
GNUTLS_FATAL_ERR(ret); GNUTLS_FATAL_ERR(ret);
@@ -1697,7 +1697,7 @@ static int connect_handler(worker_st * ws)
} }
} else } else
oclog(ws, LOG_DEBUG, oclog(ws, LOG_TRANSFER_DEBUG,
"no data received (%d)", ret); "no data received (%d)", ret);
udp_recv_time = now; udp_recv_time = now;
@@ -1799,16 +1799,16 @@ static int parse_data(struct worker_st *ws, gnutls_session_t ts, /* the interfac
switch (head) { switch (head) {
case AC_PKT_DPD_RESP: case AC_PKT_DPD_RESP:
oclog(ws, LOG_DEBUG, "received DPD response"); oclog(ws, LOG_TRANSFER_DEBUG, "received DPD response");
break; break;
case AC_PKT_KEEPALIVE: case AC_PKT_KEEPALIVE:
oclog(ws, LOG_DEBUG, "received keepalive"); oclog(ws, LOG_TRANSFER_DEBUG, "received keepalive");
break; break;
case AC_PKT_DPD_OUT: case AC_PKT_DPD_OUT:
if (ws->session == ts) { if (ws->session == ts) {
ret = tls_send(ts, "STF\x01\x00\x00\x04\x00", 8); ret = tls_send(ts, "STF\x01\x00\x00\x04\x00", 8);
oclog(ws, LOG_DEBUG, oclog(ws, LOG_TRANSFER_DEBUG,
"received TLS DPD; sent response (%d bytes)", "received TLS DPD; sent response (%d bytes)",
ret); ret);
} else { } else {
@@ -1821,7 +1821,7 @@ static int parse_data(struct worker_st *ws, gnutls_session_t ts, /* the interfac
ret = tls_send(ts, ws->buffer, 1); ret = tls_send(ts, ws->buffer, 1);
} }
oclog(ws, LOG_DEBUG, oclog(ws, LOG_TRANSFER_DEBUG,
"received DTLS DPD; sent response (%d bytes)", "received DTLS DPD; sent response (%d bytes)",
ret); ret);
} }
@@ -1837,7 +1837,7 @@ static int parse_data(struct worker_st *ws, gnutls_session_t ts, /* the interfac
exit_worker(ws); exit_worker(ws);
break; break;
case AC_PKT_DATA: case AC_PKT_DATA:
oclog(ws, LOG_DEBUG, "writing %d byte(s) to TUN", oclog(ws, LOG_TRANSFER_DEBUG, "writing %d byte(s) to TUN",
(int)buf_size); (int)buf_size);
ret = force_write(ws->tun_fd, buf, buf_size); ret = force_write(ws->tun_fd, buf, buf_size);
if (ret == -1) { if (ret == -1) {