| /* |
| * Copyright (c) 2018-2020 Intel Corporation |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef TP_H |
| #define TP_H |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include <sys/types.h> |
| #include <zephyr/data/json.h> |
| #include <zephyr/net/net_pkt.h> |
| #include "connection.h" |
| |
| #if IS_ENABLED(CONFIG_NET_TEST_PROTOCOL) |
| |
| #define TP_SEQ 0 |
| #define TP_ACK 1 |
| |
| #define TP_BOOL 1 |
| #define TP_INT 2 |
| |
| enum tp_type { /* Test protocol message type */ |
| TP_NONE = 0, |
| TP_COMMAND, |
| TP_CONFIG_REQUEST, |
| TP_CONFIG_REPLY, |
| TP_INTROSPECT_REQUEST, |
| TP_INTROSPECT_REPLY, |
| TP_INTROSPECT_MEMORY_REQUEST, |
| TP_INTROSPECT_MEMORY_REPLY, |
| TP_INTROSPECT_PACKETS_REQUEST, |
| TP_INTROSPECT_PACKETS_REPLY, |
| TP_DEBUG_STOP, |
| TP_DEBUG_STEP, |
| TP_DEBUG_CONTINUE, |
| TP_DEBUG_RESPONSE, |
| TP_DEBUG_BREAKPOINT_ADD, |
| TP_DEBUG_BREAKPOINT_DELETE, |
| TP_TRACE_ADD, |
| TP_TRACE_DELETE |
| }; |
| |
| extern bool tp_trace; |
| extern enum tp_type tp_state; |
| |
| struct tp_msg { |
| const char *msg; |
| }; |
| |
| static const struct json_obj_descr tp_msg_dsc[] = { |
| JSON_OBJ_DESCR_PRIM(struct tp_msg, msg, JSON_TOK_STRING) |
| }; |
| |
| struct tp { |
| enum tp_type type; |
| const char *msg; |
| const char *status; |
| const char *state; |
| int seq; |
| int ack; |
| const char *rcv; |
| const char *data; |
| const char *op; |
| }; |
| |
| #define json_str(_type, _field) \ |
| JSON_OBJ_DESCR_PRIM(struct _type, _field, JSON_TOK_STRING) |
| #define json_num(_type, _field) \ |
| JSON_OBJ_DESCR_PRIM(struct _type, _field, JSON_TOK_NUMBER) |
| |
| static const struct json_obj_descr tp_descr[] = { |
| json_str(tp, msg), |
| json_str(tp, status), |
| json_str(tp, state), |
| json_num(tp, seq), |
| json_num(tp, ack), |
| json_str(tp, rcv), |
| json_str(tp, data), |
| json_str(tp, op), |
| }; |
| |
| struct tp_entry { |
| const char *key; |
| const char *value; |
| }; |
| |
| static const struct json_obj_descr tp_entry_dsc[] = { |
| JSON_OBJ_DESCR_PRIM(struct tp_entry, key, JSON_TOK_STRING), |
| JSON_OBJ_DESCR_PRIM(struct tp_entry, value, JSON_TOK_STRING), |
| }; |
| |
| struct tp_new { |
| const char *msg; |
| struct tp_entry data[10]; |
| size_t num_entries; |
| }; |
| |
| static const struct json_obj_descr tp_new_dsc[] = { |
| JSON_OBJ_DESCR_PRIM(struct tp_new, msg, JSON_TOK_STRING), |
| JSON_OBJ_DESCR_OBJ_ARRAY(struct tp_new, data, 10, num_entries, |
| tp_entry_dsc, ARRAY_SIZE(tp_entry_dsc)), |
| }; |
| |
| enum net_verdict tp_input(struct net_conn *net_conn, |
| struct net_pkt *pkt, |
| union net_ip_header *ip, |
| union net_proto_header *proto, |
| void *user_data); |
| |
| char *tp_basename(char *path); |
| const char *tp_hex_to_str(void *data, size_t len); |
| size_t tp_str_to_hex(void *buf, size_t bufsize, const char *s); |
| |
| void _tp_output(sa_family_t af, struct net_if *iface, void *data, |
| size_t data_len, const char *file, int line); |
| #define tp_output(_af, _iface, _data, _data_len) \ |
| _tp_output(_af, _iface, _data, _data_len, \ |
| tp_basename(__FILE__), __LINE__) |
| |
| void tp_pkt_adj(struct net_pkt *pkt, int req_len); |
| |
| enum tp_type tp_msg_to_type(const char *s); |
| |
| void *tp_malloc(size_t size, const char *file, int line, const char *func); |
| void tp_free(void *ptr, const char *file, int line, const char *func); |
| void *tp_calloc(size_t nmemb, size_t size, const char *file, int line, |
| const char *func); |
| void tp_mem_stat(void); |
| |
| struct net_buf *tp_nbuf_alloc(struct net_buf_pool *pool, size_t len, |
| const char *file, int line, const char *func); |
| struct net_buf *tp_nbuf_clone(struct net_buf *buf, const char *file, int line, |
| const char *func); |
| void tp_nbuf_unref(struct net_buf *nbuf, const char *file, int line, |
| const char *func); |
| void tp_nbuf_stat(void); |
| void tp_pkt_alloc(struct net_pkt *pkt, |
| const char *file, int line); |
| |
| struct net_pkt *tp_pkt_clone(struct net_pkt *pkt, const char *file, int line); |
| void tp_pkt_unref(struct net_pkt *pkt, const char *file, int line); |
| void tp_pkt_stat(void); |
| |
| uint32_t tp_seq_track(int kind, uint32_t *pvalue, int req, |
| const char *file, int line, const char *func); |
| void tp_seq_stat(void); |
| |
| struct tp *json_to_tp(void *data, size_t data_len); |
| enum tp_type json_decode_msg(void *data, size_t data_len); |
| struct tp_new *json_to_tp_new(void *data, size_t data_len); |
| void tp_encode(struct tp *tp, void *data, size_t *data_len); |
| void tp_new_to_json(struct tp_new *tp, void *data, size_t *data_len); |
| void tp_new_find_and_apply(struct tp_new *tp, const char *key, void *value, |
| int type); |
| void tp_out(sa_family_t af, struct net_if *iface, const char *msg, |
| const char *key, const char *value); |
| |
| bool tp_tap_input(struct net_pkt *pkt); |
| |
| #else /* else of IS_ENABLED(CONFIG_NET_TEST_PROTOCOL) */ |
| |
| #define tp_tap_input(_pkt) false |
| #define tp_input(_pkt) false |
| #define tp_out(args...) |
| |
| #endif /* end of IS_ENABLED(CONFIG_NET_TEST_PROTOCOL) */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* TP_H */ |