| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- /* SPDX-License-Identifier: GPL-2.0 */
- #undef TRACE_SYSTEM
- #define TRACE_SYSTEM handshake
- #if !defined(_TRACE_HANDSHAKE_H) || defined(TRACE_HEADER_MULTI_READ)
- #define _TRACE_HANDSHAKE_H
- #include <linux/net.h>
- #include <net/tls_prot.h>
- #include <linux/tracepoint.h>
- #include <trace/events/net_probe_common.h>
- #define TLS_RECORD_TYPE_LIST \
- record_type(CHANGE_CIPHER_SPEC) \
- record_type(ALERT) \
- record_type(HANDSHAKE) \
- record_type(DATA) \
- record_type(HEARTBEAT) \
- record_type(TLS12_CID) \
- record_type_end(ACK)
- #undef record_type
- #undef record_type_end
- #define record_type(x) TRACE_DEFINE_ENUM(TLS_RECORD_TYPE_##x);
- #define record_type_end(x) TRACE_DEFINE_ENUM(TLS_RECORD_TYPE_##x);
- TLS_RECORD_TYPE_LIST
- #undef record_type
- #undef record_type_end
- #define record_type(x) { TLS_RECORD_TYPE_##x, #x },
- #define record_type_end(x) { TLS_RECORD_TYPE_##x, #x }
- #define show_tls_content_type(type) \
- __print_symbolic(type, TLS_RECORD_TYPE_LIST)
- TRACE_DEFINE_ENUM(TLS_ALERT_LEVEL_WARNING);
- TRACE_DEFINE_ENUM(TLS_ALERT_LEVEL_FATAL);
- #define show_tls_alert_level(level) \
- __print_symbolic(level, \
- { TLS_ALERT_LEVEL_WARNING, "Warning" }, \
- { TLS_ALERT_LEVEL_FATAL, "Fatal" })
- #define TLS_ALERT_DESCRIPTION_LIST \
- alert_description(CLOSE_NOTIFY) \
- alert_description(UNEXPECTED_MESSAGE) \
- alert_description(BAD_RECORD_MAC) \
- alert_description(RECORD_OVERFLOW) \
- alert_description(HANDSHAKE_FAILURE) \
- alert_description(BAD_CERTIFICATE) \
- alert_description(UNSUPPORTED_CERTIFICATE) \
- alert_description(CERTIFICATE_REVOKED) \
- alert_description(CERTIFICATE_EXPIRED) \
- alert_description(CERTIFICATE_UNKNOWN) \
- alert_description(ILLEGAL_PARAMETER) \
- alert_description(UNKNOWN_CA) \
- alert_description(ACCESS_DENIED) \
- alert_description(DECODE_ERROR) \
- alert_description(DECRYPT_ERROR) \
- alert_description(TOO_MANY_CIDS_REQUESTED) \
- alert_description(PROTOCOL_VERSION) \
- alert_description(INSUFFICIENT_SECURITY) \
- alert_description(INTERNAL_ERROR) \
- alert_description(INAPPROPRIATE_FALLBACK) \
- alert_description(USER_CANCELED) \
- alert_description(MISSING_EXTENSION) \
- alert_description(UNSUPPORTED_EXTENSION) \
- alert_description(UNRECOGNIZED_NAME) \
- alert_description(BAD_CERTIFICATE_STATUS_RESPONSE) \
- alert_description(UNKNOWN_PSK_IDENTITY) \
- alert_description(CERTIFICATE_REQUIRED) \
- alert_description_end(NO_APPLICATION_PROTOCOL)
- #undef alert_description
- #undef alert_description_end
- #define alert_description(x) TRACE_DEFINE_ENUM(TLS_ALERT_DESC_##x);
- #define alert_description_end(x) TRACE_DEFINE_ENUM(TLS_ALERT_DESC_##x);
- TLS_ALERT_DESCRIPTION_LIST
- #undef alert_description
- #undef alert_description_end
- #define alert_description(x) { TLS_ALERT_DESC_##x, #x },
- #define alert_description_end(x) { TLS_ALERT_DESC_##x, #x }
- #define show_tls_alert_description(desc) \
- __print_symbolic(desc, TLS_ALERT_DESCRIPTION_LIST)
- DECLARE_EVENT_CLASS(handshake_event_class,
- TP_PROTO(
- const struct net *net,
- const struct handshake_req *req,
- const struct sock *sk
- ),
- TP_ARGS(net, req, sk),
- TP_STRUCT__entry(
- __field(const void *, req)
- __field(const void *, sk)
- __field(unsigned int, netns_ino)
- ),
- TP_fast_assign(
- __entry->req = req;
- __entry->sk = sk;
- __entry->netns_ino = net->ns.inum;
- ),
- TP_printk("req=%p sk=%p",
- __entry->req, __entry->sk
- )
- );
- #define DEFINE_HANDSHAKE_EVENT(name) \
- DEFINE_EVENT(handshake_event_class, name, \
- TP_PROTO( \
- const struct net *net, \
- const struct handshake_req *req, \
- const struct sock *sk \
- ), \
- TP_ARGS(net, req, sk))
- DECLARE_EVENT_CLASS(handshake_fd_class,
- TP_PROTO(
- const struct net *net,
- const struct handshake_req *req,
- const struct sock *sk,
- int fd
- ),
- TP_ARGS(net, req, sk, fd),
- TP_STRUCT__entry(
- __field(const void *, req)
- __field(const void *, sk)
- __field(int, fd)
- __field(unsigned int, netns_ino)
- ),
- TP_fast_assign(
- __entry->req = req;
- __entry->sk = req->hr_sk;
- __entry->fd = fd;
- __entry->netns_ino = net->ns.inum;
- ),
- TP_printk("req=%p sk=%p fd=%d",
- __entry->req, __entry->sk, __entry->fd
- )
- );
- #define DEFINE_HANDSHAKE_FD_EVENT(name) \
- DEFINE_EVENT(handshake_fd_class, name, \
- TP_PROTO( \
- const struct net *net, \
- const struct handshake_req *req, \
- const struct sock *sk, \
- int fd \
- ), \
- TP_ARGS(net, req, sk, fd))
- DECLARE_EVENT_CLASS(handshake_error_class,
- TP_PROTO(
- const struct net *net,
- const struct handshake_req *req,
- const struct sock *sk,
- int err
- ),
- TP_ARGS(net, req, sk, err),
- TP_STRUCT__entry(
- __field(const void *, req)
- __field(const void *, sk)
- __field(int, err)
- __field(unsigned int, netns_ino)
- ),
- TP_fast_assign(
- __entry->req = req;
- __entry->sk = sk;
- __entry->err = err;
- __entry->netns_ino = net->ns.inum;
- ),
- TP_printk("req=%p sk=%p err=%d",
- __entry->req, __entry->sk, __entry->err
- )
- );
- #define DEFINE_HANDSHAKE_ERROR(name) \
- DEFINE_EVENT(handshake_error_class, name, \
- TP_PROTO( \
- const struct net *net, \
- const struct handshake_req *req, \
- const struct sock *sk, \
- int err \
- ), \
- TP_ARGS(net, req, sk, err))
- DECLARE_EVENT_CLASS(handshake_alert_class,
- TP_PROTO(
- const struct sock *sk,
- unsigned char level,
- unsigned char description
- ),
- TP_ARGS(sk, level, description),
- TP_STRUCT__entry(
- /* sockaddr_in6 is always bigger than sockaddr_in */
- __array(__u8, saddr, sizeof(struct sockaddr_in6))
- __array(__u8, daddr, sizeof(struct sockaddr_in6))
- __field(unsigned int, netns_ino)
- __field(unsigned long, level)
- __field(unsigned long, description)
- ),
- TP_fast_assign(
- const struct inet_sock *inet = inet_sk(sk);
- memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
- memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
- TP_STORE_ADDR_PORTS(__entry, inet, sk);
- __entry->netns_ino = sock_net(sk)->ns.inum;
- __entry->level = level;
- __entry->description = description;
- ),
- TP_printk("src=%pISpc dest=%pISpc %s: %s",
- __entry->saddr, __entry->daddr,
- show_tls_alert_level(__entry->level),
- show_tls_alert_description(__entry->description)
- )
- );
- #define DEFINE_HANDSHAKE_ALERT(name) \
- DEFINE_EVENT(handshake_alert_class, name, \
- TP_PROTO( \
- const struct sock *sk, \
- unsigned char level, \
- unsigned char description \
- ), \
- TP_ARGS(sk, level, description))
- /*
- * Request lifetime events
- */
- DEFINE_HANDSHAKE_EVENT(handshake_submit);
- DEFINE_HANDSHAKE_ERROR(handshake_submit_err);
- DEFINE_HANDSHAKE_EVENT(handshake_cancel);
- DEFINE_HANDSHAKE_EVENT(handshake_cancel_none);
- DEFINE_HANDSHAKE_EVENT(handshake_cancel_busy);
- DEFINE_HANDSHAKE_EVENT(handshake_destruct);
- TRACE_EVENT(handshake_complete,
- TP_PROTO(
- const struct net *net,
- const struct handshake_req *req,
- const struct sock *sk,
- int status
- ),
- TP_ARGS(net, req, sk, status),
- TP_STRUCT__entry(
- __field(const void *, req)
- __field(const void *, sk)
- __field(int, status)
- __field(unsigned int, netns_ino)
- ),
- TP_fast_assign(
- __entry->req = req;
- __entry->sk = sk;
- __entry->status = status;
- __entry->netns_ino = net->ns.inum;
- ),
- TP_printk("req=%p sk=%p status=%d",
- __entry->req, __entry->sk, __entry->status
- )
- );
- /*
- * Netlink events
- */
- DEFINE_HANDSHAKE_ERROR(handshake_notify_err);
- DEFINE_HANDSHAKE_FD_EVENT(handshake_cmd_accept);
- DEFINE_HANDSHAKE_ERROR(handshake_cmd_accept_err);
- DEFINE_HANDSHAKE_FD_EVENT(handshake_cmd_done);
- DEFINE_HANDSHAKE_ERROR(handshake_cmd_done_err);
- /*
- * TLS Record events
- */
- TRACE_EVENT(tls_contenttype,
- TP_PROTO(
- const struct sock *sk,
- unsigned char type
- ),
- TP_ARGS(sk, type),
- TP_STRUCT__entry(
- /* sockaddr_in6 is always bigger than sockaddr_in */
- __array(__u8, saddr, sizeof(struct sockaddr_in6))
- __array(__u8, daddr, sizeof(struct sockaddr_in6))
- __field(unsigned int, netns_ino)
- __field(unsigned long, type)
- ),
- TP_fast_assign(
- const struct inet_sock *inet = inet_sk(sk);
- memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
- memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
- TP_STORE_ADDR_PORTS(__entry, inet, sk);
- __entry->netns_ino = sock_net(sk)->ns.inum;
- __entry->type = type;
- ),
- TP_printk("src=%pISpc dest=%pISpc %s",
- __entry->saddr, __entry->daddr,
- show_tls_content_type(__entry->type)
- )
- );
- /*
- * TLS Alert events
- */
- DEFINE_HANDSHAKE_ALERT(tls_alert_send);
- DEFINE_HANDSHAKE_ALERT(tls_alert_recv);
- #endif /* _TRACE_HANDSHAKE_H */
- #include <trace/define_trace.h>
|