1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
/** @file
*
* Base function for extcaps
*
* Copyright 2016, Dario Lombardo
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef __EXTCAP_BASE_H__
#define __EXTCAP_BASE_H__
#include <glib.h>
#include <glib/gprintf.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <wsutil/ws_getopt.h>
#ifdef _WIN32
#include <io.h>
#endif
#include <wsutil/socket.h>
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
#define EXTCAP_BASE_OPTIONS_ENUM \
EXTCAP_OPT_LIST_INTERFACES, \
EXTCAP_OPT_VERSION, \
EXTCAP_OPT_LIST_DLTS, \
EXTCAP_OPT_INTERFACE, \
EXTCAP_OPT_CONFIG, \
EXTCAP_OPT_CONFIG_OPTION_NAME, \
EXTCAP_OPT_CONFIG_OPTION_VALUE, \
EXTCAP_OPT_CLEANUP_POSTKILL, \
EXTCAP_OPT_CAPTURE, \
EXTCAP_OPT_CAPTURE_FILTER, \
EXTCAP_OPT_FIFO, \
EXTCAP_OPT_LOG_LEVEL, \
EXTCAP_OPT_LOG_FILE
#define EXTCAP_BASE_OPTIONS \
{ "extcap-interfaces", ws_no_argument, NULL, EXTCAP_OPT_LIST_INTERFACES}, \
{ "extcap-version", ws_optional_argument, NULL, EXTCAP_OPT_VERSION}, \
{ "extcap-dlts", ws_no_argument, NULL, EXTCAP_OPT_LIST_DLTS}, \
{ "extcap-interface", ws_required_argument, NULL, EXTCAP_OPT_INTERFACE}, \
{ "extcap-config", ws_no_argument, NULL, EXTCAP_OPT_CONFIG}, \
{ "extcap-config-option-name", ws_required_argument, NULL, EXTCAP_OPT_CONFIG_OPTION_NAME}, \
{ "extcap-config-option-value", ws_required_argument, NULL, EXTCAP_OPT_CONFIG_OPTION_VALUE }, \
{ "extcap-cleanup-postkill", ws_no_argument, NULL, EXTCAP_OPT_CLEANUP_POSTKILL }, \
{ "capture", ws_no_argument, NULL, EXTCAP_OPT_CAPTURE}, \
{ "extcap-capture-filter", ws_required_argument, NULL, EXTCAP_OPT_CAPTURE_FILTER}, \
{ "fifo", ws_required_argument, NULL, EXTCAP_OPT_FIFO}, \
{ "log-level", ws_required_argument, NULL, EXTCAP_OPT_LOG_LEVEL}, \
{ "log-file", ws_required_argument, NULL, EXTCAP_OPT_LOG_FILE}
typedef struct _extcap_parameters
{
char * exename;
char * fifo;
char * interface;
char * capture_filter;
char * version;
char * compiled_with;
char * running_with;
char * helppage;
uint8_t capture;
uint8_t show_config;
uint8_t show_config_option;
char * config_option_name;
char * config_option_value;
char * ws_version;
/* private content */
GList * interfaces;
uint8_t do_version;
uint8_t do_list_dlts;
uint8_t do_list_interfaces;
uint8_t do_cleanup_postkill;
char * help_header;
GList * help_options;
enum ws_log_level debug;
void (*cleanup_postkill_cb)(void);
} extcap_parameters;
/* used to inform to extcap application that end of application is requested */
extern bool extcap_end_application;
void extcap_base_register_interface(extcap_parameters * extcap, const char * interface, const char * ifdescription, uint16_t dlt, const char * dltdescription );
void extcap_base_register_interface_ext(extcap_parameters * extcap, const char * interface, const char * ifdescription, uint16_t dlt, const char * dltname, const char * dltdescription );
/* used to inform extcap framework that graceful shutdown supported by the extcap
*/
bool extcap_base_register_graceful_shutdown_cb(extcap_parameters * extcap, void (*callback)(void));
/* used to cleanup extcap if previous program was terminated
*/
bool extcap_base_register_cleanup_postkill_cb(extcap_parameters* extcap, void (*callback)(void));
void extcap_base_set_util_info(extcap_parameters * extcap, const char * exename, const char * major, const char * minor, const char * release, const char * helppage);
void extcap_base_set_compiled_with(extcap_parameters * extcap, const char *fmt, ...);
void extcap_base_set_running_with(extcap_parameters * extcap, const char *fmt, ...);
uint8_t extcap_base_parse_options(extcap_parameters * extcap, int result, char * optargument);
uint8_t extcap_base_handle_interface(extcap_parameters * extcap);
void extcap_base_cleanup(extcap_parameters ** extcap);
void extcap_help_add_header(extcap_parameters * extcap, char * help_header);
void extcap_help_add_option(extcap_parameters * extcap, const char * help_option_name, const char * help_optionn_desc);
void extcap_version_print(extcap_parameters * extcap);
void extcap_help_print(extcap_parameters * extcap);
void extcap_cmdline_debug(char** ar, const unsigned n);
void extcap_config_debug(unsigned* count);
void extcap_base_help(void);
void extcap_log_init(void);
/*
* Report errors and warnings through ws_warning().
*
* Unfortunately, ws_warning() may be a macro, so we do it by calling
* ws_logv() with the appropriate arguments.
*/
void extcap_log_cmdarg_err(const char *msg_format, va_list ap);
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // __EXTCAP_BASE_H__
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html
*
* Local variables:
* c-basic-offset: 4
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* vi: set shiftwidth=4 tabstop=8 expandtab:
* :indentSize=4:tabSize=8:noTabs=true:
*/
|