From 8e0bb0ae16599f89be3f0937c00976ef28ec7f25 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 24 Nov 2016 16:58:12 +0100 Subject: [PATCH] MINOR: connection: add names for transport and data layers This makes debugging easier and avoids having to put ugly checks against certain well-known internal struct pointers. --- include/proto/connection.h | 33 ++------------------------------- include/types/connection.h | 2 ++ src/checks.c | 1 + src/raw_sock.c | 1 + src/session.c | 1 + src/ssl_sock.c | 1 + src/stream_interface.c | 2 ++ 7 files changed, 10 insertions(+), 31 deletions(-) diff --git a/include/proto/connection.h b/include/proto/connection.h index 0724512c3..fce602599 100644 --- a/include/proto/connection.h +++ b/include/proto/connection.h @@ -607,45 +607,16 @@ static inline const char *conn_get_ctrl_name(const struct connection *conn) static inline const char *conn_get_xprt_name(const struct connection *conn) { - static char ptr[19]; /* 0x... */ - extern struct xprt_ops raw_sock; // should theorically not be exported - extern struct xprt_ops ssl_sock; // should theorically not be exported - if (!conn_xprt_ready(conn)) return "NONE"; - - if (conn->xprt == &raw_sock) - return "RAW"; - -#ifdef USE_OPENSSL - if (conn->xprt == &ssl_sock) - return "SSL"; -#endif - snprintf(ptr, sizeof(ptr), "%p", conn->xprt); - return ptr; + return conn->xprt->name; } static inline const char *conn_get_data_name(const struct connection *conn) { - static char ptr[19]; /* 0x... */ - extern struct data_cb sess_conn_cb; // should theorically not be exported - extern struct data_cb si_conn_cb; // should theorically not be exported - extern struct data_cb check_conn_cb; // should theorically not be exported - if (!conn->data) return "NONE"; - - if (conn->data == &sess_conn_cb) - return "SESS"; - - if (conn->data == &si_conn_cb) - return "STRM"; - - if (conn->data == &check_conn_cb) - return "CHCK"; - - snprintf(ptr, sizeof(ptr), "%p", conn->data); - return ptr; + return conn->data->name; } diff --git a/include/types/connection.h b/include/types/connection.h index 11eff490c..8b732ff75 100644 --- a/include/types/connection.h +++ b/include/types/connection.h @@ -213,6 +213,7 @@ struct xprt_ops { void (*shutw)(struct connection *, int); /* shutw function */ void (*close)(struct connection *); /* close the transport layer */ int (*init)(struct connection *conn); /* initialize the transport layer */ + char name[8]; /* transport layer name, zero-terminated */ }; /* data_cb describes the data layer's recv and send callbacks which are called @@ -230,6 +231,7 @@ struct data_cb { void (*send)(struct connection *conn); /* data-layer send callback */ int (*wake)(struct connection *conn); /* data-layer callback to report activity */ int (*init)(struct connection *conn); /* data-layer initialization */ + char name[8]; /* data layer name, zero-terminated */ }; struct my_tcphdr { diff --git a/src/checks.c b/src/checks.c index 84a0f583c..a9b89d090 100644 --- a/src/checks.c +++ b/src/checks.c @@ -1414,6 +1414,7 @@ struct data_cb check_conn_cb = { .recv = event_srv_chk_r, .send = event_srv_chk_w, .wake = wake_srv_chk, + .name = "CHCK", }; /* diff --git a/src/raw_sock.c b/src/raw_sock.c index c093377cf..0883c57a6 100644 --- a/src/raw_sock.c +++ b/src/raw_sock.c @@ -416,6 +416,7 @@ struct xprt_ops raw_sock = { .shutr = NULL, .shutw = NULL, .close = NULL, + .name = "RAW", }; /* diff --git a/src/session.c b/src/session.c index cdf57e388..93fdf5248 100644 --- a/src/session.c +++ b/src/session.c @@ -41,6 +41,7 @@ struct data_cb sess_conn_cb = { .send = NULL, .wake = conn_update_session, .init = conn_complete_session, + .name = "SESS", }; /* Create a a new session and assign it to frontend , listener
  • , diff --git a/src/ssl_sock.c b/src/ssl_sock.c index ef03525fc..c0e4d75fc 100644 --- a/src/ssl_sock.c +++ b/src/ssl_sock.c @@ -6127,6 +6127,7 @@ struct xprt_ops ssl_sock = { .shutw = ssl_sock_shutw, .close = ssl_sock_close, .init = ssl_sock_init, + .name = "SSL", }; #if (OPENSSL_VERSION_NUMBER >= 0x1000200fL && !defined OPENSSL_NO_TLSEXT && !defined OPENSSL_IS_BORINGSSL && !defined LIBRESSL_VERSION_NUMBER) diff --git a/src/stream_interface.c b/src/stream_interface.c index d39d7647e..4f93a2e2a 100644 --- a/src/stream_interface.c +++ b/src/stream_interface.c @@ -86,12 +86,14 @@ struct data_cb si_conn_cb = { .recv = si_conn_recv_cb, .send = si_conn_send_cb, .wake = si_conn_wake_cb, + .name = "STRM", }; struct data_cb si_idle_conn_cb = { .recv = si_idle_conn_null_cb, .send = si_idle_conn_null_cb, .wake = si_idle_conn_wake_cb, + .name = "IDLE", }; /*