wiretap: Add enum generation

This commit is contained in:
João Valverde 2022-10-02 01:55:51 +01:00
parent 9faaf0ecff
commit 3c99478cef
12 changed files with 707 additions and 72 deletions

View File

@ -429,14 +429,6 @@ set_target_properties(wscbor_test PROPERTIES
EXCLUDE_FROM_DEFAULT_BUILD True
)
# This tries to parse C headers using Python to extract enums for
# introspection. It is slow and has some particular dependencies.
# It's also not foolproof. It should not be part of the ALL target.
add_custom_target(gen-enums
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tools/make-enums.py
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
CHECKAPI(
NAME
epan

View File

@ -5,9 +5,8 @@
*
* SPDX-License-Identifier: GPL-2.0-or-later
*
* Generated automatically from make-enums.py.
*
* It can be re-created using "make gen-enums".
* Generated automatically from make-enums.py. It can be re-created by running
* "tools/make-enums.py" from the top source directory.
*
* It is fine to edit this file by hand. Particularly if a symbol
* disappears from the API it can just be removed here. There is no

View File

@ -19,11 +19,6 @@ const ws_enum_t *epan_inspect_enums(void)
return all_enums;
}
static int compare_enum(const void *needle, const void *memb)
{
return strcmp(needle, ((const ws_enum_t *)memb)->symbol);
}
size_t epan_inspect_enums_count(void)
{
/* Exclude null terminator */
@ -32,6 +27,5 @@ size_t epan_inspect_enums_count(void)
const ws_enum_t *epan_inspect_enums_bsearch(const char *needle)
{
return bsearch(needle, all_enums, epan_inspect_enums_count(),
sizeof(ws_enum_t), compare_enum);
return ws_enums_bsearch(all_enums, epan_inspect_enums_count(), needle);
}

View File

@ -8,16 +8,12 @@
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef _INTROSPECTION_H_
#define _INTROSPECTION_H_
#ifndef _EPAN_INTROSPECTION_H_
#define _EPAN_INTROSPECTION_H_
#include <stddef.h>
#include <ws_symbol_export.h>
typedef struct {
const char *symbol;
int value;
} ws_enum_t;
#include <wsutil/introspection.h>
/** Returns an array of ws_enum_t elements. The array is sorted and
* ends with {NULL, 0}.

View File

@ -20,37 +20,14 @@ import sys
import argparse
from pyclibrary import CParser
default_infiles = [
"epan/address.h",
"epan/ipproto.h",
"epan/proto.h",
"epan/ftypes/ftypes.h",
"epan/stat_groups.h",
]
def parse_files(infiles, outfile):
default_outfile = "epan/introspection-enums.c"
print("Input: {}".format(infiles))
print("Output: '{}'".format(outfile))
argp = argparse.ArgumentParser()
argp.add_argument("-o", "--outfile")
argp.add_argument("infiles", nargs="*")
args = argp.parse_args()
parser = CParser(infiles)
if args.infiles:
infiles = args.infiles
else:
infiles = default_infiles
if args.outfile:
outfile = args.outfile
else:
outfile = default_outfile
print("input: {}".format(infiles))
print("output: {}".format(outfile))
parser = CParser(infiles)
source = """\
source = """\
/*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
@ -58,9 +35,8 @@ source = """\
*
* SPDX-License-Identifier: GPL-2.0-or-later
*
* Generated automatically from %s.
*
* It can be re-created using "make gen-enums".
* Generated automatically from %s. It can be re-created by running
* "tools/make-enums.py" from the top source directory.
*
* It is fine to edit this file by hand. Particularly if a symbol
* disappears from the API it can just be removed here. There is no
@ -69,36 +45,49 @@ source = """\
*/
""" % (os.path.basename(sys.argv[0]))
for f in infiles:
source += '#include <{}>\n'.format(f)
for f in infiles:
source += '#include <{}>\n'.format(f)
source += """
source += """
#define ENUM(arg) { #arg, arg }
static ws_enum_t all_enums[] = {
"""
definitions = parser.defs['values']
symbols = list(definitions.keys())
symbols.sort()
definitions = parser.defs['values']
symbols = list(definitions.keys())
symbols.sort()
for s in symbols:
if isinstance(definitions[s], int):
source += ' ENUM({}),\n'.format(s)
for s in symbols:
if isinstance(definitions[s], int):
source += ' ENUM({}),\n'.format(s)
source += """\
source += """\
{ NULL, 0 },
};
"""
try:
fh = open(outfile, 'w')
except OSError:
sys.exit('Unable to write ' + outfile + '.\n')
try:
fh = open(outfile, 'w')
except OSError:
sys.exit('Unable to write ' + outfile + '.\n')
fh.write(source)
fh.close()
fh.write(source)
fh.close()
epan_files = [
"epan/address.h",
"epan/ipproto.h",
"epan/proto.h",
"epan/ftypes/ftypes.h",
"epan/stat_groups.h",
]
parse_files(epan_files, "epan/introspection-enums.c")
wtap_files = [
"wiretap/wtap.h",
]
parse_files(wtap_files, "wiretap/introspection-enums.c")
#
# Editor modelines - https://www.wireshark.org/tools/modelines.html

View File

@ -9,6 +9,7 @@
set(WIRETAP_PUBLIC_HEADERS
file_wrappers.h
introspection.h
merge.h
pcap-encap.h
pcapng_module.h
@ -112,6 +113,7 @@ set(WIRETAP_MODULE_FILES
set(WIRETAP_NONGENERATED_C_FILES
${WIRETAP_C_MODULE_FILES}
${CMAKE_CURRENT_SOURCE_DIR}/pcapng.c
${CMAKE_CURRENT_SOURCE_DIR}/introspection.c
${CMAKE_CURRENT_SOURCE_DIR}/libpcap.c
${CMAKE_CURRENT_SOURCE_DIR}/file_access.c
${CMAKE_CURRENT_SOURCE_DIR}/file_wrappers.c

View File

@ -0,0 +1,538 @@
/*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*
* Generated automatically from make-enums.py. It can be re-created by running
* "tools/make-enums.py" from the top source directory.
*
* It is fine to edit this file by hand. Particularly if a symbol
* disappears from the API it can just be removed here. There is no
* requirement to re-run the generator script.
*
*/
#include <wiretap/wtap.h>
#define ENUM(arg) { #arg, arg }
static ws_enum_t all_enums[] = {
ENUM(AAL_1),
ENUM(AAL_2),
ENUM(AAL_3_4),
ENUM(AAL_5),
ENUM(AAL_OAMCELL),
ENUM(AAL_SIGNALLING),
ENUM(AAL_UNKNOWN),
ENUM(AAL_USER),
ENUM(ASCEND_MAX_STR_LEN),
ENUM(ASCEND_PFX_ETHER),
ENUM(ASCEND_PFX_ISDN_R),
ENUM(ASCEND_PFX_ISDN_X),
ENUM(ASCEND_PFX_WDD),
ENUM(ASCEND_PFX_WDS_R),
ENUM(ASCEND_PFX_WDS_X),
ENUM(ATM_AAL2_NOPHDR),
ENUM(ATM_NO_HEC),
ENUM(ATM_RAW_CELL),
ENUM(ATM_REASSEMBLY_ERROR),
ENUM(BBLOG_TYPE_EVENT_BLOCK),
ENUM(BBLOG_TYPE_SKIPPED_BLOCK),
ENUM(BLOCK_NOT_SUPPORTED),
ENUM(BTHCI_CHANNEL_ACL),
ENUM(BTHCI_CHANNEL_COMMAND),
ENUM(BTHCI_CHANNEL_EVENT),
ENUM(BTHCI_CHANNEL_ISO),
ENUM(BTHCI_CHANNEL_SCO),
ENUM(COSINE_DIR_RX),
ENUM(COSINE_DIR_TX),
ENUM(COSINE_ENCAP_ATM),
ENUM(COSINE_ENCAP_ETH),
ENUM(COSINE_ENCAP_FR),
ENUM(COSINE_ENCAP_HDLC),
ENUM(COSINE_ENCAP_PPP),
ENUM(COSINE_ENCAP_PPoATM),
ENUM(COSINE_ENCAP_PPoFR),
ENUM(COSINE_ENCAP_TEST),
ENUM(COSINE_ENCAP_UNKNOWN),
ENUM(COSINE_MAX_IF_NAME_LEN),
ENUM(FROM_DCE),
ENUM(FT_SORT_BY_DESCRIPTION),
ENUM(FT_SORT_BY_NAME),
ENUM(GSM_UM_CHANNEL_AGCH),
ENUM(GSM_UM_CHANNEL_BCCH),
ENUM(GSM_UM_CHANNEL_CCCH),
ENUM(GSM_UM_CHANNEL_FACCH),
ENUM(GSM_UM_CHANNEL_PCH),
ENUM(GSM_UM_CHANNEL_RACH),
ENUM(GSM_UM_CHANNEL_SACCH),
ENUM(GSM_UM_CHANNEL_SDCCH),
ENUM(GSM_UM_CHANNEL_UNKNOWN),
ENUM(IRDA_CLASS_FRAME),
ENUM(IRDA_CLASS_LOG),
ENUM(IRDA_CLASS_MASK),
ENUM(IRDA_INCOMING),
ENUM(IRDA_LOG_MESSAGE),
ENUM(IRDA_MISSED_MSG),
ENUM(IRDA_OUTGOING),
ENUM(K12_PORT_ATMPVC),
ENUM(K12_PORT_DS0S),
ENUM(K12_PORT_DS1),
ENUM(LLCP_PHDR_FLAG_SENT),
ENUM(MAXNAMELEN),
ENUM(MAX_ERF_EHDR),
ENUM(MTP2_ANNEX_A_NOT_USED),
ENUM(MTP2_ANNEX_A_USED),
ENUM(MTP2_ANNEX_A_USED_UNKNOWN),
ENUM(MULTIPLE_BLOCKS_SUPPORTED),
ENUM(MULTIPLE_OPTIONS_SUPPORTED),
ENUM(ONE_BLOCK_SUPPORTED),
ENUM(ONE_OPTION_SUPPORTED),
ENUM(OPEN_INFO_HEURISTIC),
ENUM(OPEN_INFO_MAGIC),
ENUM(OPTION_NOT_SUPPORTED),
ENUM(PACK_FLAGS_CRC_ERROR),
ENUM(PACK_FLAGS_DIRECTION_INBOUND),
ENUM(PACK_FLAGS_DIRECTION_MASK),
ENUM(PACK_FLAGS_DIRECTION_OUTBOUND),
ENUM(PACK_FLAGS_DIRECTION_SHIFT),
ENUM(PACK_FLAGS_DIRECTION_UNKNOWN),
ENUM(PACK_FLAGS_FCS_LENGTH_MASK),
ENUM(PACK_FLAGS_FCS_LENGTH_SHIFT),
ENUM(PACK_FLAGS_PACKET_TOO_LONG),
ENUM(PACK_FLAGS_PACKET_TOO_SHORT),
ENUM(PACK_FLAGS_PREAMBLE_ERROR),
ENUM(PACK_FLAGS_RECEPTION_TYPE_BROADCAST),
ENUM(PACK_FLAGS_RECEPTION_TYPE_MASK),
ENUM(PACK_FLAGS_RECEPTION_TYPE_MULTICAST),
ENUM(PACK_FLAGS_RECEPTION_TYPE_PROMISCUOUS),
ENUM(PACK_FLAGS_RECEPTION_TYPE_SHIFT),
ENUM(PACK_FLAGS_RECEPTION_TYPE_UNICAST),
ENUM(PACK_FLAGS_RECEPTION_TYPE_UNSPECIFIED),
ENUM(PACK_FLAGS_RESERVED_MASK),
ENUM(PACK_FLAGS_START_FRAME_DELIMITER_ERROR),
ENUM(PACK_FLAGS_SYMBOL_ERROR),
ENUM(PACK_FLAGS_UNALIGNED_FRAME),
ENUM(PACK_FLAGS_WRONG_INTER_FRAME_GAP),
ENUM(PHDR_802_11AD_MAX_FREQUENCY),
ENUM(PHDR_802_11AD_MIN_FREQUENCY),
ENUM(PHDR_802_11A_CHANNEL_TYPE_HALF_CLOCKED),
ENUM(PHDR_802_11A_CHANNEL_TYPE_NORMAL),
ENUM(PHDR_802_11A_CHANNEL_TYPE_QUARTER_CLOCKED),
ENUM(PHDR_802_11A_TURBO_TYPE_DYNAMIC_TURBO),
ENUM(PHDR_802_11A_TURBO_TYPE_NORMAL),
ENUM(PHDR_802_11A_TURBO_TYPE_STATIC_TURBO),
ENUM(PHDR_802_11A_TURBO_TYPE_TURBO),
ENUM(PHDR_802_11G_MODE_NORMAL),
ENUM(PHDR_802_11G_MODE_SUPER_G),
ENUM(PHDR_802_11_0_LENGTH_PSDU_S1G_NDP),
ENUM(PHDR_802_11_0_LENGTH_PSDU_VENDOR_SPECIFIC),
ENUM(PHDR_802_11_A_MPDU_DELIM_CRC_ERROR),
ENUM(PHDR_802_11_BANDWIDTH_160_MHZ),
ENUM(PHDR_802_11_BANDWIDTH_20LL),
ENUM(PHDR_802_11_BANDWIDTH_20LLL),
ENUM(PHDR_802_11_BANDWIDTH_20LLU),
ENUM(PHDR_802_11_BANDWIDTH_20LU),
ENUM(PHDR_802_11_BANDWIDTH_20LUL),
ENUM(PHDR_802_11_BANDWIDTH_20LUU),
ENUM(PHDR_802_11_BANDWIDTH_20UL),
ENUM(PHDR_802_11_BANDWIDTH_20ULL),
ENUM(PHDR_802_11_BANDWIDTH_20ULU),
ENUM(PHDR_802_11_BANDWIDTH_20UU),
ENUM(PHDR_802_11_BANDWIDTH_20UUL),
ENUM(PHDR_802_11_BANDWIDTH_20UUU),
ENUM(PHDR_802_11_BANDWIDTH_20_20L),
ENUM(PHDR_802_11_BANDWIDTH_20_20U),
ENUM(PHDR_802_11_BANDWIDTH_20_MHZ),
ENUM(PHDR_802_11_BANDWIDTH_40LL),
ENUM(PHDR_802_11_BANDWIDTH_40LU),
ENUM(PHDR_802_11_BANDWIDTH_40UL),
ENUM(PHDR_802_11_BANDWIDTH_40UU),
ENUM(PHDR_802_11_BANDWIDTH_40_40L),
ENUM(PHDR_802_11_BANDWIDTH_40_40U),
ENUM(PHDR_802_11_BANDWIDTH_40_MHZ),
ENUM(PHDR_802_11_BANDWIDTH_80_80L),
ENUM(PHDR_802_11_BANDWIDTH_80_80U),
ENUM(PHDR_802_11_BANDWIDTH_80_MHZ),
ENUM(PHDR_802_11_DATA_NOT_CAPTURED),
ENUM(PHDR_802_11_LAST_PART_OF_A_MPDU),
ENUM(PHDR_802_11_PHY_11A),
ENUM(PHDR_802_11_PHY_11AC),
ENUM(PHDR_802_11_PHY_11AD),
ENUM(PHDR_802_11_PHY_11AH),
ENUM(PHDR_802_11_PHY_11AX),
ENUM(PHDR_802_11_PHY_11B),
ENUM(PHDR_802_11_PHY_11BE),
ENUM(PHDR_802_11_PHY_11G),
ENUM(PHDR_802_11_PHY_11N),
ENUM(PHDR_802_11_PHY_11_DSSS),
ENUM(PHDR_802_11_PHY_11_FHSS),
ENUM(PHDR_802_11_PHY_11_IR),
ENUM(PHDR_802_11_PHY_UNKNOWN),
ENUM(PHDR_802_11_SOUNDING_PSDU),
ENUM(REC_TYPE_CUSTOM_BLOCK),
ENUM(REC_TYPE_FT_SPECIFIC_EVENT),
ENUM(REC_TYPE_FT_SPECIFIC_REPORT),
ENUM(REC_TYPE_PACKET),
ENUM(REC_TYPE_SYSCALL),
ENUM(REC_TYPE_SYSTEMD_JOURNAL_EXPORT),
ENUM(SITA_ERROR_NO_BUFFER),
ENUM(SITA_ERROR_RX_ABORT),
ENUM(SITA_ERROR_RX_BREAK),
ENUM(SITA_ERROR_RX_CD_LOST),
ENUM(SITA_ERROR_RX_COLLISION),
ENUM(SITA_ERROR_RX_CRC),
ENUM(SITA_ERROR_RX_DPLL),
ENUM(SITA_ERROR_RX_FRAME_LEN_VIOL),
ENUM(SITA_ERROR_RX_FRAME_LONG),
ENUM(SITA_ERROR_RX_FRAME_SHORT),
ENUM(SITA_ERROR_RX_FRAMING),
ENUM(SITA_ERROR_RX_NONOCTET_ALIGNED),
ENUM(SITA_ERROR_RX_OVERRUN),
ENUM(SITA_ERROR_RX_PARITY),
ENUM(SITA_ERROR_RX_UNDEF1),
ENUM(SITA_ERROR_RX_UNDEF2),
ENUM(SITA_ERROR_RX_UNDEF3),
ENUM(SITA_ERROR_TX_CTS_LOST),
ENUM(SITA_ERROR_TX_RETX_LIMIT),
ENUM(SITA_ERROR_TX_UART_ERROR),
ENUM(SITA_ERROR_TX_UNDEF1),
ENUM(SITA_ERROR_TX_UNDEF2),
ENUM(SITA_ERROR_TX_UNDEF3),
ENUM(SITA_ERROR_TX_UNDEF4),
ENUM(SITA_ERROR_TX_UNDERRUN),
ENUM(SITA_FRAME_DIR),
ENUM(SITA_FRAME_DIR_RXED),
ENUM(SITA_FRAME_DIR_TXED),
ENUM(SITA_PROTO_ALC),
ENUM(SITA_PROTO_ASYNC_BLKIO),
ENUM(SITA_PROTO_ASYNC_INTIO),
ENUM(SITA_PROTO_BOP_FRL),
ENUM(SITA_PROTO_BOP_LAPB),
ENUM(SITA_PROTO_DPM_LINK),
ENUM(SITA_PROTO_ETHERNET),
ENUM(SITA_PROTO_I2C),
ENUM(SITA_PROTO_PPP_HDLC),
ENUM(SITA_PROTO_SDLC),
ENUM(SITA_PROTO_TOKENRING),
ENUM(SITA_PROTO_UNUSED),
ENUM(SITA_PROTO_UTS),
ENUM(SITA_SIG_CTS),
ENUM(SITA_SIG_DCD),
ENUM(SITA_SIG_DSR),
ENUM(SITA_SIG_DTR),
ENUM(SITA_SIG_RTS),
ENUM(SITA_SIG_UNDEF1),
ENUM(SITA_SIG_UNDEF2),
ENUM(SITA_SIG_UNDEF3),
ENUM(TRAF_FR),
ENUM(TRAF_GPRS_NS),
ENUM(TRAF_ILMI),
ENUM(TRAF_IPSILON),
ENUM(TRAF_LANE),
ENUM(TRAF_LLCMX),
ENUM(TRAF_SPANS),
ENUM(TRAF_SSCOP),
ENUM(TRAF_ST_IPSILON_FT0),
ENUM(TRAF_ST_IPSILON_FT1),
ENUM(TRAF_ST_IPSILON_FT2),
ENUM(TRAF_ST_LANE_802_3),
ENUM(TRAF_ST_LANE_802_3_MC),
ENUM(TRAF_ST_LANE_802_5),
ENUM(TRAF_ST_LANE_802_5_MC),
ENUM(TRAF_ST_LANE_LE_CTRL),
ENUM(TRAF_ST_UNKNOWN),
ENUM(TRAF_ST_VCMX_802_3),
ENUM(TRAF_ST_VCMX_802_3_FCS),
ENUM(TRAF_ST_VCMX_802_4),
ENUM(TRAF_ST_VCMX_802_4_FCS),
ENUM(TRAF_ST_VCMX_802_5),
ENUM(TRAF_ST_VCMX_802_5_FCS),
ENUM(TRAF_ST_VCMX_802_6),
ENUM(TRAF_ST_VCMX_802_6_FCS),
ENUM(TRAF_ST_VCMX_BPDU),
ENUM(TRAF_ST_VCMX_FDDI),
ENUM(TRAF_ST_VCMX_FDDI_FCS),
ENUM(TRAF_ST_VCMX_FRAGMENTS),
ENUM(TRAF_UMTS_FP),
ENUM(TRAF_UNKNOWN),
ENUM(TRAF_VCMX),
ENUM(WTAP_COMMENT_PER_INTERFACE),
ENUM(WTAP_COMMENT_PER_PACKET),
ENUM(WTAP_COMMENT_PER_SECTION),
ENUM(WTAP_ENCAP_3MB_ETHERNET),
ENUM(WTAP_ENCAP_APPLE_IP_OVER_IEEE1394),
ENUM(WTAP_ENCAP_ARCNET),
ENUM(WTAP_ENCAP_ARCNET_LINUX),
ENUM(WTAP_ENCAP_ASCEND),
ENUM(WTAP_ENCAP_ATM_PDUS),
ENUM(WTAP_ENCAP_ATM_PDUS_UNTRUNCATED),
ENUM(WTAP_ENCAP_ATM_RFC1483),
ENUM(WTAP_ENCAP_AUERSWALD_LOG),
ENUM(WTAP_ENCAP_AUTOSAR_DLT),
ENUM(WTAP_ENCAP_AX25),
ENUM(WTAP_ENCAP_AX25_KISS),
ENUM(WTAP_ENCAP_BACNET_MS_TP),
ENUM(WTAP_ENCAP_BACNET_MS_TP_WITH_PHDR),
ENUM(WTAP_ENCAP_BER),
ENUM(WTAP_ENCAP_BLUETOOTH_BREDR_BB),
ENUM(WTAP_ENCAP_BLUETOOTH_H4),
ENUM(WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR),
ENUM(WTAP_ENCAP_BLUETOOTH_HCI),
ENUM(WTAP_ENCAP_BLUETOOTH_LE_LL),
ENUM(WTAP_ENCAP_BLUETOOTH_LE_LL_WITH_PHDR),
ENUM(WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR),
ENUM(WTAP_ENCAP_CAN20B),
ENUM(WTAP_ENCAP_CATAPULT_DCT2000),
ENUM(WTAP_ENCAP_CHDLC),
ENUM(WTAP_ENCAP_CHDLC_WITH_PHDR),
ENUM(WTAP_ENCAP_CISCO_IOS),
ENUM(WTAP_ENCAP_COSINE),
ENUM(WTAP_ENCAP_DBUS),
ENUM(WTAP_ENCAP_DOCSIS),
ENUM(WTAP_ENCAP_DOCSIS31_XRA31),
ENUM(WTAP_ENCAP_DPAUXMON),
ENUM(WTAP_ENCAP_DPNSS),
ENUM(WTAP_ENCAP_DVBCI),
ENUM(WTAP_ENCAP_EBHSCR),
ENUM(WTAP_ENCAP_ENC),
ENUM(WTAP_ENCAP_EPON),
ENUM(WTAP_ENCAP_ERF),
ENUM(WTAP_ENCAP_ERI_ENB_LOG),
ENUM(WTAP_ENCAP_ETHERNET),
ENUM(WTAP_ENCAP_ETHERNET_MPACKET),
ENUM(WTAP_ENCAP_ETW),
ENUM(WTAP_ENCAP_FDDI),
ENUM(WTAP_ENCAP_FDDI_BITSWAPPED),
ENUM(WTAP_ENCAP_FIBRE_CHANNEL_FC2),
ENUM(WTAP_ENCAP_FIBRE_CHANNEL_FC2_WITH_FRAME_DELIMS),
ENUM(WTAP_ENCAP_FLEXRAY),
ENUM(WTAP_ENCAP_FRELAY),
ENUM(WTAP_ENCAP_FRELAY_WITH_PHDR),
ENUM(WTAP_ENCAP_GCOM_SERIAL),
ENUM(WTAP_ENCAP_GCOM_TIE1),
ENUM(WTAP_ENCAP_GFP_F),
ENUM(WTAP_ENCAP_GFP_T),
ENUM(WTAP_ENCAP_GPRS_LLC),
ENUM(WTAP_ENCAP_GSM_UM),
ENUM(WTAP_ENCAP_HHDLC),
ENUM(WTAP_ENCAP_I2C_LINUX),
ENUM(WTAP_ENCAP_IEEE802_15_4),
ENUM(WTAP_ENCAP_IEEE802_15_4_NOFCS),
ENUM(WTAP_ENCAP_IEEE802_15_4_NONASK_PHY),
ENUM(WTAP_ENCAP_IEEE802_15_4_TAP),
ENUM(WTAP_ENCAP_IEEE802_16_MAC_CPS),
ENUM(WTAP_ENCAP_IEEE_802_11),
ENUM(WTAP_ENCAP_IEEE_802_11_AVS),
ENUM(WTAP_ENCAP_IEEE_802_11_NETMON),
ENUM(WTAP_ENCAP_IEEE_802_11_PRISM),
ENUM(WTAP_ENCAP_IEEE_802_11_RADIOTAP),
ENUM(WTAP_ENCAP_IEEE_802_11_WITH_RADIO),
ENUM(WTAP_ENCAP_INFINIBAND),
ENUM(WTAP_ENCAP_IPMB_KONTRON),
ENUM(WTAP_ENCAP_IPMI_TRACE),
ENUM(WTAP_ENCAP_IPNET),
ENUM(WTAP_ENCAP_IP_OVER_FC),
ENUM(WTAP_ENCAP_IP_OVER_IB_PCAP),
ENUM(WTAP_ENCAP_IP_OVER_IB_SNOOP),
ENUM(WTAP_ENCAP_IRDA),
ENUM(WTAP_ENCAP_ISDN),
ENUM(WTAP_ENCAP_ISO14443),
ENUM(WTAP_ENCAP_IXVERIWAVE),
ENUM(WTAP_ENCAP_JPEG_JFIF),
ENUM(WTAP_ENCAP_JSON),
ENUM(WTAP_ENCAP_JUNIPER_ATM1),
ENUM(WTAP_ENCAP_JUNIPER_ATM2),
ENUM(WTAP_ENCAP_JUNIPER_CHDLC),
ENUM(WTAP_ENCAP_JUNIPER_ETHER),
ENUM(WTAP_ENCAP_JUNIPER_FRELAY),
ENUM(WTAP_ENCAP_JUNIPER_GGSN),
ENUM(WTAP_ENCAP_JUNIPER_MLFR),
ENUM(WTAP_ENCAP_JUNIPER_MLPPP),
ENUM(WTAP_ENCAP_JUNIPER_PPP),
ENUM(WTAP_ENCAP_JUNIPER_PPPOE),
ENUM(WTAP_ENCAP_JUNIPER_ST),
ENUM(WTAP_ENCAP_JUNIPER_SVCS),
ENUM(WTAP_ENCAP_JUNIPER_VN),
ENUM(WTAP_ENCAP_JUNIPER_VP),
ENUM(WTAP_ENCAP_K12),
ENUM(WTAP_ENCAP_LAPB),
ENUM(WTAP_ENCAP_LAPD),
ENUM(WTAP_ENCAP_LAYER1_EVENT),
ENUM(WTAP_ENCAP_LIN),
ENUM(WTAP_ENCAP_LINUX_ATM_CLIP),
ENUM(WTAP_ENCAP_LINUX_LAPD),
ENUM(WTAP_ENCAP_LOCALTALK),
ENUM(WTAP_ENCAP_LOGCAT),
ENUM(WTAP_ENCAP_LOGCAT_BRIEF),
ENUM(WTAP_ENCAP_LOGCAT_LONG),
ENUM(WTAP_ENCAP_LOGCAT_PROCESS),
ENUM(WTAP_ENCAP_LOGCAT_TAG),
ENUM(WTAP_ENCAP_LOGCAT_THREAD),
ENUM(WTAP_ENCAP_LOGCAT_THREADTIME),
ENUM(WTAP_ENCAP_LOGCAT_TIME),
ENUM(WTAP_ENCAP_LOG_3GPP),
ENUM(WTAP_ENCAP_LOOP),
ENUM(WTAP_ENCAP_LORATAP),
ENUM(WTAP_ENCAP_MA_WFP_CAPTURE_2V4),
ENUM(WTAP_ENCAP_MA_WFP_CAPTURE_2V6),
ENUM(WTAP_ENCAP_MA_WFP_CAPTURE_AUTH_V4),
ENUM(WTAP_ENCAP_MA_WFP_CAPTURE_AUTH_V6),
ENUM(WTAP_ENCAP_MA_WFP_CAPTURE_V4),
ENUM(WTAP_ENCAP_MA_WFP_CAPTURE_V6),
ENUM(WTAP_ENCAP_MIME),
ENUM(WTAP_ENCAP_MOST),
ENUM(WTAP_ENCAP_MP4),
ENUM(WTAP_ENCAP_MPEG),
ENUM(WTAP_ENCAP_MPEG_2_TS),
ENUM(WTAP_ENCAP_MTP2),
ENUM(WTAP_ENCAP_MTP2_WITH_PHDR),
ENUM(WTAP_ENCAP_MTP3),
ENUM(WTAP_ENCAP_MUX27010),
ENUM(WTAP_ENCAP_NETANALYZER),
ENUM(WTAP_ENCAP_NETANALYZER_TRANSPARENT),
ENUM(WTAP_ENCAP_NETLINK),
ENUM(WTAP_ENCAP_NETMON_HEADER),
ENUM(WTAP_ENCAP_NETMON_NETWORK_INFO_EX),
ENUM(WTAP_ENCAP_NETMON_NET_FILTER),
ENUM(WTAP_ENCAP_NETMON_NET_NETEVENT),
ENUM(WTAP_ENCAP_NETTL_ETHERNET),
ENUM(WTAP_ENCAP_NETTL_FDDI),
ENUM(WTAP_ENCAP_NETTL_RAW_ICMP),
ENUM(WTAP_ENCAP_NETTL_RAW_ICMPV6),
ENUM(WTAP_ENCAP_NETTL_RAW_IP),
ENUM(WTAP_ENCAP_NETTL_RAW_TELNET),
ENUM(WTAP_ENCAP_NETTL_TOKEN_RING),
ENUM(WTAP_ENCAP_NETTL_UNKNOWN),
ENUM(WTAP_ENCAP_NETTL_X25),
ENUM(WTAP_ENCAP_NFC_LLCP),
ENUM(WTAP_ENCAP_NFLOG),
ENUM(WTAP_ENCAP_NORDIC_BLE),
ENUM(WTAP_ENCAP_NSTRACE_1_0),
ENUM(WTAP_ENCAP_NSTRACE_2_0),
ENUM(WTAP_ENCAP_NSTRACE_3_0),
ENUM(WTAP_ENCAP_NSTRACE_3_5),
ENUM(WTAP_ENCAP_NULL),
ENUM(WTAP_ENCAP_OLD_PFLOG),
ENUM(WTAP_ENCAP_PACKETLOGGER),
ENUM(WTAP_ENCAP_PER_PACKET),
ENUM(WTAP_ENCAP_PFLOG),
ENUM(WTAP_ENCAP_PKTAP),
ENUM(WTAP_ENCAP_PPI),
ENUM(WTAP_ENCAP_PPP),
ENUM(WTAP_ENCAP_PPP_ETHER),
ENUM(WTAP_ENCAP_PPP_WITH_PHDR),
ENUM(WTAP_ENCAP_RAW_IP),
ENUM(WTAP_ENCAP_RAW_IP4),
ENUM(WTAP_ENCAP_RAW_IP6),
ENUM(WTAP_ENCAP_RAW_IPFIX),
ENUM(WTAP_ENCAP_REDBACK),
ENUM(WTAP_ENCAP_RFC7468),
ENUM(WTAP_ENCAP_RTAC_SERIAL),
ENUM(WTAP_ENCAP_RUBY_MARSHAL),
ENUM(WTAP_ENCAP_SCCP),
ENUM(WTAP_ENCAP_SCTP),
ENUM(WTAP_ENCAP_SDH),
ENUM(WTAP_ENCAP_SDLC),
ENUM(WTAP_ENCAP_SITA),
ENUM(WTAP_ENCAP_SLIP),
ENUM(WTAP_ENCAP_SLL),
ENUM(WTAP_ENCAP_SLL2),
ENUM(WTAP_ENCAP_SOCKETCAN),
ENUM(WTAP_ENCAP_STANAG_4607),
ENUM(WTAP_ENCAP_STANAG_5066_D_PDU),
ENUM(WTAP_ENCAP_SYMANTEC),
ENUM(WTAP_ENCAP_SYSTEMD_JOURNAL),
ENUM(WTAP_ENCAP_TNEF),
ENUM(WTAP_ENCAP_TOKEN_RING),
ENUM(WTAP_ENCAP_TZSP),
ENUM(WTAP_ENCAP_UNKNOWN),
ENUM(WTAP_ENCAP_USBPCAP),
ENUM(WTAP_ENCAP_USB_2_0),
ENUM(WTAP_ENCAP_USB_2_0_FULL_SPEED),
ENUM(WTAP_ENCAP_USB_2_0_HIGH_SPEED),
ENUM(WTAP_ENCAP_USB_2_0_LOW_SPEED),
ENUM(WTAP_ENCAP_USB_DARWIN),
ENUM(WTAP_ENCAP_USB_FREEBSD),
ENUM(WTAP_ENCAP_USB_LINUX),
ENUM(WTAP_ENCAP_USB_LINUX_MMAPPED),
ENUM(WTAP_ENCAP_USER0),
ENUM(WTAP_ENCAP_USER1),
ENUM(WTAP_ENCAP_USER10),
ENUM(WTAP_ENCAP_USER11),
ENUM(WTAP_ENCAP_USER12),
ENUM(WTAP_ENCAP_USER13),
ENUM(WTAP_ENCAP_USER14),
ENUM(WTAP_ENCAP_USER15),
ENUM(WTAP_ENCAP_USER2),
ENUM(WTAP_ENCAP_USER3),
ENUM(WTAP_ENCAP_USER4),
ENUM(WTAP_ENCAP_USER5),
ENUM(WTAP_ENCAP_USER6),
ENUM(WTAP_ENCAP_USER7),
ENUM(WTAP_ENCAP_USER8),
ENUM(WTAP_ENCAP_USER9),
ENUM(WTAP_ENCAP_V5_EF),
ENUM(WTAP_ENCAP_VPP),
ENUM(WTAP_ENCAP_VSOCK),
ENUM(WTAP_ENCAP_WFLEET_HDLC),
ENUM(WTAP_ENCAP_WIRESHARK_UPPER_PDU),
ENUM(WTAP_ENCAP_X2E_SERIAL),
ENUM(WTAP_ENCAP_X2E_XORAYA),
ENUM(WTAP_ENCAP_ZBNCP),
ENUM(WTAP_ENCAP_ZWAVE_SERIAL),
ENUM(WTAP_ERR_BAD_FILE),
ENUM(WTAP_ERR_CANT_CLOSE),
ENUM(WTAP_ERR_CANT_OPEN),
ENUM(WTAP_ERR_CANT_SEEK),
ENUM(WTAP_ERR_CANT_SEEK_COMPRESSED),
ENUM(WTAP_ERR_CANT_WRITE),
ENUM(WTAP_ERR_CANT_WRITE_TO_PIPE),
ENUM(WTAP_ERR_CHECK_WSLUA),
ENUM(WTAP_ERR_COMPRESSION_NOT_SUPPORTED),
ENUM(WTAP_ERR_DECOMPRESS),
ENUM(WTAP_ERR_DECOMPRESSION_NOT_SUPPORTED),
ENUM(WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED),
ENUM(WTAP_ERR_FILE_UNKNOWN_FORMAT),
ENUM(WTAP_ERR_INTERNAL),
ENUM(WTAP_ERR_NOT_REGULAR_FILE),
ENUM(WTAP_ERR_PACKET_TOO_LARGE),
ENUM(WTAP_ERR_RANDOM_OPEN_PIPE),
ENUM(WTAP_ERR_RANDOM_OPEN_STDIN),
ENUM(WTAP_ERR_SHORT_READ),
ENUM(WTAP_ERR_SHORT_WRITE),
ENUM(WTAP_ERR_TIME_STAMP_NOT_SUPPORTED),
ENUM(WTAP_ERR_UNC_OVERFLOW),
ENUM(WTAP_ERR_UNSUPPORTED),
ENUM(WTAP_ERR_UNWRITABLE_ENCAP),
ENUM(WTAP_ERR_UNWRITABLE_FILE_TYPE),
ENUM(WTAP_ERR_UNWRITABLE_REC_DATA),
ENUM(WTAP_ERR_UNWRITABLE_REC_TYPE),
ENUM(WTAP_FILE_TYPE_SUBTYPE_UNKNOWN),
ENUM(WTAP_GZIP_COMPRESSED),
ENUM(WTAP_HAS_CAP_LEN),
ENUM(WTAP_HAS_INTERFACE_ID),
ENUM(WTAP_HAS_SECTION_NUMBER),
ENUM(WTAP_HAS_TS),
ENUM(WTAP_LZ4_COMPRESSED),
ENUM(WTAP_MAX_PACKET_SIZE_DBUS),
ENUM(WTAP_MAX_PACKET_SIZE_EBHSCR),
ENUM(WTAP_MAX_PACKET_SIZE_STANDARD),
ENUM(WTAP_MAX_PACKET_SIZE_USBPCAP),
ENUM(WTAP_OPEN_ERROR),
ENUM(WTAP_OPEN_MINE),
ENUM(WTAP_OPEN_NOT_MINE),
ENUM(WTAP_TSPREC_CSEC),
ENUM(WTAP_TSPREC_DSEC),
ENUM(WTAP_TSPREC_MSEC),
ENUM(WTAP_TSPREC_NSEC),
ENUM(WTAP_TSPREC_PER_PACKET),
ENUM(WTAP_TSPREC_SEC),
ENUM(WTAP_TSPREC_UNKNOWN),
ENUM(WTAP_TSPREC_USEC),
ENUM(WTAP_TYPE_AUTO),
ENUM(WTAP_UNCOMPRESSED),
ENUM(WTAP_ZSTD_COMPRESSED),
{ NULL, 0 },
};

31
wiretap/introspection.c Normal file
View File

@ -0,0 +1,31 @@
/*
* Copyright 2021, João Valverde <j@v6e.pt>
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "config.h"
#include "introspection.h"
#include <string.h>
#include <stdlib.h>
#include "introspection-enums.c"
const ws_enum_t *wtap_inspect_enums(void)
{
return all_enums;
}
size_t wtap_inspect_enums_count(void)
{
/* Exclude null terminator */
return sizeof(all_enums)/sizeof(ws_enum_t) - 1;
}
const ws_enum_t *wtap_inspect_enums_bsearch(const char *needle)
{
return ws_enums_bsearch(all_enums, wtap_inspect_enums_count(), needle);
}

36
wiretap/introspection.h Normal file
View File

@ -0,0 +1,36 @@
/** @file
* Copyright 2021, João Valverde <j@v6e.pt>
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef _WTAP_INTROSPECTION_H_
#define _WTAP_INTROSPECTION_H_
#include <stddef.h>
#include <ws_symbol_export.h>
#include <wsutil/introspection.h>
/** Returns an array of ws_enum_t elements. The array is sorted and
* ends with {NULL, 0}.
*
* It can be used by language bindings to the Wireshark API to obtain
* the value of some magic constants. The array can be binary searched,
* imported to a hash table, serialized, etc.
*/
WS_DLL_PUBLIC
const ws_enum_t *wtap_inspect_enums(void);
/** Returns size of enums array not including null terminator. */
WS_DLL_PUBLIC
size_t wtap_inspect_enums_count(void);
/** Performs a binary search for the magic constant "needle". */
WS_DLL_PUBLIC
const ws_enum_t *wtap_inspect_enums_bsearch(const char *needle);
#endif

View File

@ -45,6 +45,7 @@ set(WSUTIL_PUBLIC_HEADERS
inet_ipv4.h
inet_ipv6.h
interface.h
introspection.h
jsmn.h
json_dumper.h
mpeg-audio.h
@ -110,6 +111,7 @@ set(WSUTIL_COMMON_FILES
g711.c
inet_addr.c
interface.c
introspection.c
jsmn.c
json_dumper.c
mpeg-audio.c

27
wsutil/introspection.c Normal file
View File

@ -0,0 +1,27 @@
/*
* Copyright 2021, João Valverde <j@v6e.pt>
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "config.h"
#include "introspection.h"
#include <string.h>
#include <stdlib.h>
static int
compare_enum(const void *needle, const void *memb)
{
return strcmp(needle, ((const ws_enum_t *)memb)->symbol);
}
const ws_enum_t *
ws_enums_bsearch(const ws_enum_t *enums, size_t count,
const char *needle)
{
return bsearch(needle, enums, count, sizeof(ws_enum_t), compare_enum);
}

29
wsutil/introspection.h Normal file
View File

@ -0,0 +1,29 @@
/** @file
* Copyright 2021, João Valverde <j@v6e.pt>
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef _INTROSPECTION_H_
#define _INTROSPECTION_H_
#include <stddef.h>
#include <ws_symbol_export.h>
typedef struct {
const char *symbol;
int value;
} ws_enum_t;
/** Performs a binary search for the magic constant "needle". */
WS_DLL_PUBLIC
const ws_enum_t *
ws_enums_bsearch(const ws_enum_t *enums, size_t count,
const char *needle);
#endif