17#ifndef NMSG_MSGMOD_PLUGIN_H
18#define NMSG_MSGMOD_PLUGIN_H
22#include <protobuf-c/protobuf-c.h>
23#include <nmsg/nmsg.pb-c.h>
25struct nmsg_msgmod_field;
28#define NMSG_MSGMOD_VERSION 9
31typedef nmsg_res (*nmsg_msgmod_init_fp)(
void **clos);
34typedef nmsg_res (*nmsg_msgmod_fini_fp)(
void **clos);
37typedef nmsg_res (*nmsg_msgmod_payload_to_pres_fp)(Nmsg__NmsgPayload *np,
42typedef nmsg_res (*nmsg_msgmod_ipdg_to_payload_fp)(
void *clos,
43 const struct nmsg_ipdg *dg,
44 uint8_t **pbuf,
size_t *sz);
46typedef nmsg_res (*nmsg_msgmod_pkt_to_payload_fp)(
void *clos,
50typedef nmsg_res (*nmsg_msgmod_pcap_init_fp)(
void *clos, nmsg_pcap_t pcap);
53typedef nmsg_res (*nmsg_msgmod_msg_load_fp)(nmsg_message_t m,
void **msg_clos);
56typedef nmsg_res (*nmsg_msgmod_msg_fini_fp)(nmsg_message_t m,
void *msg_clos);
59typedef nmsg_res (*nmsg_msgmod_field_print_fp)(nmsg_message_t m,
60 struct nmsg_msgmod_field *field,
62 struct nmsg_strbuf *sb,
66typedef nmsg_res (*nmsg_msgmod_field_get_fp)(nmsg_message_t m,
67 struct nmsg_msgmod_field *field,
74typedef nmsg_res (*nmsg_msgmod_field_format_fp)(nmsg_message_t m,
75 struct nmsg_msgmod_field *field,
77 struct nmsg_strbuf *sb,
81typedef nmsg_res (*nmsg_msgmod_field_parse_fp)(nmsg_message_t m,
82 struct nmsg_msgmod_field *field,
89#define NMSG_MSGMOD_FIELD_PRINTER(funcname) \
90 nmsg_res funcname(nmsg_message_t m, \
91 struct nmsg_msgmod_field *field, \
93 struct nmsg_strbuf *sb, \
97#define NMSG_MSGMOD_FIELD_GETTER(funcname) \
98 nmsg_res funcname(nmsg_message_t m, \
99 struct nmsg_msgmod_field *field, \
106#define NMSG_MSGMOD_FIELD_FORMATTER(funcname) \
107 nmsg_res funcname(nmsg_message_t m, \
108 struct nmsg_msgmod_field *field, \
110 struct nmsg_strbuf *sb, \
114#define NMSG_MSGMOD_FIELD_PARSER(funcname) \
115 nmsg_res funcname(nmsg_message_t m, \
116 struct nmsg_msgmod_field *field, \
123#define NMSG_MSGMOD_REQUIRED_INIT \
124 .msgver = NMSG_MSGMOD_VERSION, \
125 .protobuf_c_version_number = PROTOBUF_C_VERSION_NUMBER
144struct nmsg_msgmod_field {
146 nmsg_msgmod_field_type type;
155 nmsg_msgmod_field_print_fp print;
158 nmsg_msgmod_field_get_fp get;
161 const ProtobufCFieldDescriptor *descr;
164 nmsg_msgmod_field_format_fp format;
167 nmsg_msgmod_field_parse_fp parse;
175#define NMSG_MSGMOD_FIELD_END { 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
191 nmsg_msgmod_type_transparent,
192 nmsg_msgmod_type_opaque
207struct nmsg_msgmod_plugin {
218 nmsg_msgmod_type type;
224 struct nmsg_idname vendor;
230 struct nmsg_idname msgtype;
235 nmsg_msgmod_init_fp init;
240 nmsg_msgmod_fini_fp fini;
247 nmsg_msgmod_msg_load_fp msg_load;
252 nmsg_msgmod_msg_fini_fp msg_fini;
262 nmsg_msgmod_payload_to_pres_fp payload_to_pres;
270 nmsg_msgmod_ipdg_to_payload_fp ipdg_to_payload;
279 const ProtobufCMessageDescriptor *pbdescr;
286 struct nmsg_msgmod_field *fields;
294 nmsg_msgmod_pkt_to_payload_fp pkt_to_payload;
304 uint32_t protobuf_c_version_number;
310 nmsg_msgmod_pcap_init_fp pcap_init;