169 lines
4.2 KiB
C
169 lines
4.2 KiB
C
/*
|
|
* Copyright (c) 2018-2019 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef TP_H
|
|
#define TP_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <sys/types.h>
|
|
#include <json.h>
|
|
#include <net/net_pkt.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)),
|
|
};
|
|
|
|
bool tp_input(struct net_pkt *pkt);
|
|
|
|
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(struct net_if *iface, void *data, size_t data_len,
|
|
const char *file, int line);
|
|
#define tp_output(_iface, _data, _data_len) \
|
|
_tp_output(_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);
|
|
void tp_nbuf_unref(struct net_buf *nbuf, const char *file, int line,
|
|
const char *func);
|
|
void tp_nbuf_stat(void);
|
|
|
|
struct net_pkt *tp_pkt_alloc(size_t len, 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);
|
|
|
|
u32_t tp_seq_track(int kind, u32_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(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 */
|