summaryrefslogtreecommitdiff
path: root/wiretap/wtap_opttypes.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2016-05-22 00:02:33 -0400
committerMichael Mann <mmann78@netscape.net>2016-05-26 12:44:58 +0000
commit7ca8e46ffb95a31b8df15019298f8404723e68b4 (patch)
tree9529fc3b27072e7bad671b2ee405d2b8ea91ab09 /wiretap/wtap_opttypes.c
parentc0e679e0a991103db30bb8d57e8172ab29671884 (diff)
downloadwireshark-7ca8e46ffb95a31b8df15019298f8404723e68b4.tar.gz
Remove write capabilities from wtap_optionblocks.
The write functionality was too PCAPNG-specific and the intention is to keep the option blocks as generic as possible. So moved the write functionality back to pcapng.c and added a wtap_opttype API to loop through all options in the block (wtap_optionblock_foreach_option) Change-Id: Iaf49126a1a3e2ed60ae02c52878ca22671dac335 Reviewed-on: https://code.wireshark.org/review/15525 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'wiretap/wtap_opttypes.c')
-rw-r--r--wiretap/wtap_opttypes.c445
1 files changed, 26 insertions, 419 deletions
diff --git a/wiretap/wtap_opttypes.c b/wiretap/wtap_opttypes.c
index 9c53b48a9d..87c874a1a4 100644
--- a/wiretap/wtap_opttypes.c
+++ b/wiretap/wtap_opttypes.c
@@ -40,7 +40,6 @@ typedef struct wtap_opt_register
const char *name; /**< name of block */
const char *description; /**< human-readable description of block */
wtap_block_create_func create;
- wtap_write_func write;
wtap_mand_free_func free_mand;
wtap_mand_copy_func copy_mand;
} wtap_opt_register_t;
@@ -50,8 +49,6 @@ typedef struct wtap_optblock_internal {
const char *description; /**< human-readable description of option */
guint number; /**< Option index */
wtap_opttype_e type; /**< type of that option */
- wtap_opttype_option_write_size write_size; /**< Number of bytes to write to file (0 for don't write) */
- wtap_opttype_option_write write_data; /**< write option data to dumper */
} wtap_optblock_internal_t;
typedef struct wtap_optblock_value {
@@ -93,7 +90,7 @@ static void wtap_opttype_block_register(int block_type, wtap_opt_register_t *blo
}
int wtap_opttype_register_custom_block_type(const char* name, const char* description, wtap_block_create_func create,
- wtap_write_func write_func, wtap_mand_free_func free_mand, wtap_mand_copy_func copy_mand)
+ wtap_mand_free_func free_mand, wtap_mand_copy_func copy_mand)
{
int block_type;
@@ -110,7 +107,6 @@ int wtap_opttype_register_custom_block_type(const char* name, const char* descri
custom_block_list[num_custom_blocks].name = name;
custom_block_list[num_custom_blocks].description = description;
custom_block_list[num_custom_blocks].create = create;
- custom_block_list[num_custom_blocks].write = write_func;
custom_block_list[num_custom_blocks].free_mand = free_mand;
custom_block_list[num_custom_blocks].copy_mand = copy_mand;
block_list[block_type] = &custom_block_list[num_custom_blocks];
@@ -224,8 +220,6 @@ void wtap_optionblock_copy_options(wtap_optionblock_t dest_block, wtap_optionblo
reg_optblock.name = src_internal->name;
reg_optblock.description = src_internal->description;
reg_optblock.type = src_internal->type;
- reg_optblock.write_size_func = src_internal->write_size;
- reg_optblock.write_func = src_internal->write_data;
reg_optblock.option = src_value->option;
reg_optblock.default_val = src_value->default_val;
@@ -256,87 +250,18 @@ void wtap_optionblock_copy_options(wtap_optionblock_t dest_block, wtap_optionblo
}
}
-gboolean wtap_optionblock_write(struct wtap_dumper *wdh, wtap_optionblock_t block, int *err)
-{
- if ((block == NULL) || (block->info->write == NULL))
- {
- *err = WTAP_ERR_INTERNAL;
- return FALSE;
- }
-
- return block->info->write(wdh, block, err);
-}
-
-static guint32 wtap_optionblock_get_option_write_size(wtap_optionblock_t block)
+void wtap_optionblock_foreach_option(wtap_optionblock_t block, wtap_optionblock_foreach_func func, void* user_data)
{
guint i;
- guint32 options_total_length = 0, length;
+ wtap_optblock_internal_t *internal_data;
wtap_optblock_value_t *value;
for (i = 0; i < block->option_values->len; i++)
{
+ internal_data = g_array_index(block->option_infos, wtap_optblock_internal_t*, i);
value = g_array_index(block->option_values, wtap_optblock_value_t*, i);
- if ((value->info->write_size != NULL) && (value->info->write_data != NULL))
- {
- length = value->info->write_size(&value->option);
- options_total_length += length;
- /* Add bytes for option header if option should be written */
- if (length > 0) {
- /* Add optional padding to 32 bits */
- if ((options_total_length & 0x03) != 0)
- {
- options_total_length += 4 - (options_total_length & 0x03);
- }
- options_total_length += 4;
- }
- }
+ func(block, internal_data->number, value->info->type, &value->option, user_data);
}
-
- return options_total_length;
-}
-
-static gboolean wtap_optionblock_write_options(struct wtap_dumper *wdh, wtap_optionblock_t block, guint32 options_total_length, int *err)
-{
- guint i;
- wtap_optblock_value_t *value;
- struct pcapng_option_header option_hdr;
- guint32 length;
-
- /* Check if we have at least 1 option to write */
- if (options_total_length == 0)
- return TRUE;
-
- for (i = 0; i < block->option_values->len; i++)
- {
- value = g_array_index(block->option_values, wtap_optblock_value_t*, i);
- if ((value->info->write_size != NULL) && (value->info->write_data != NULL) &&
- ((length = value->info->write_size(&value->option)) > 0))
- {
- /* Write the option */
- wtap_debug("wtap_optionblock_write %s, field:'%s' length: %u", block->description, value->info->description, length);
-
- /* String options don't consider pad bytes part of the length, so readjust here */
- if (value->info->type == WTAP_OPTTYPE_STRING)
- length = (guint32)strlen(value->option.stringval) & 0xffff;
-
- option_hdr.type = value->info->number;
- option_hdr.value_length = length;
- if (!wtap_dump_file_write(wdh, &option_hdr, 4, err))
- return FALSE;
- wdh->bytes_dumped += 4;
-
- if (!value->info->write_data(wdh, &value->option, err))
- return FALSE;
- }
- }
-
- /* Write end of options */
- option_hdr.type = OPT_EOFOPT;
- option_hdr.value_length = 0;
- if (!wtap_dump_file_write(wdh, &option_hdr, 4, err))
- return FALSE;
- wdh->bytes_dumped += 4;
- return TRUE;
}
int wtap_optionblock_add_option(wtap_optionblock_t block, guint option_id, wtap_optblock_reg_t* option)
@@ -355,8 +280,6 @@ int wtap_optionblock_add_option(wtap_optionblock_t block, guint option_id, wtap_
opt_internal->description = option->description;
opt_internal->number = option_id;
opt_internal->type = option->type;
- opt_internal->write_size = option->write_size_func;
- opt_internal->write_data = option->write_func;
opt_value->info = opt_internal;
@@ -439,48 +362,6 @@ int wtap_optionblock_get_option_string(wtap_optionblock_t block, guint option_id
return WTAP_OPTTYPE_SUCCESS;
}
-guint32 wtap_opttype_write_size_string(wtap_option_type* data)
-{
- guint32 size, pad;
- if ((data == NULL) ||(data->stringval == NULL))
- return 0;
-
- size = (guint32)strlen(data->stringval) & 0xffff;
- if ((size % 4)) {
- pad = 4 - (size % 4);
- } else {
- pad = 0;
- }
-
- return size+pad;
-}
-
-gboolean wtap_opttype_write_data_string(struct wtap_dumper* wdh, wtap_option_type* data, int *err)
-{
- guint32 size = (guint32)strlen(data->stringval) & 0xffff;
- guint32 pad;
- const guint32 zero_pad = 0;
-
- if (!wtap_dump_file_write(wdh, data->stringval, size, err))
- return FALSE;
- wdh->bytes_dumped += size;
-
- if ((size % 4)) {
- pad = 4 - (size % 4);
- } else {
- pad = 0;
- }
-
- /* write padding (if any) */
- if (pad != 0) {
- if (!wtap_dump_file_write(wdh, &zero_pad, pad, err))
- return FALSE;
- wdh->bytes_dumped += pad;
- }
-
- return TRUE;
-}
-
int wtap_optionblock_set_option_uint64(wtap_optionblock_t block, guint option_id, guint64 value)
{
wtap_optblock_value_t* opt_value = wtap_optionblock_get_option(block, option_id);
@@ -511,52 +392,6 @@ int wtap_optionblock_get_option_uint64(wtap_optionblock_t block, guint option_id
return WTAP_OPTTYPE_SUCCESS;
}
-guint32 wtap_opttype_write_uint64_not0(wtap_option_type* data)
-{
- if (data == NULL)
- return 0;
-
- if (data->uint64val == 0)
- return 0;
-
- /* value */
- return 8;
-}
-
-guint32 wtap_opttype_write_uint64_not_minus1(wtap_option_type* data)
-{
- if (data == NULL)
- return 0;
-
- if (data->uint64val == G_GUINT64_CONSTANT(0xFFFFFFFFFFFFFFFF))
- return 0;
-
- /* value */
- return 8;
-}
-
-gboolean wtap_opttype_write_data_uint64(struct wtap_dumper* wdh, wtap_option_type* data, int *err)
-{
- if (!wtap_dump_file_write(wdh, &data->uint64val, sizeof(guint64), err))
- return FALSE;
- wdh->bytes_dumped += 8;
- return TRUE;
-}
-
-static gboolean wtap_opttype_write_data_uint64_timestamp(struct wtap_dumper* wdh, wtap_option_type* data, int *err)
-{
- guint32 high, low;
-
- high = (guint32)(data->uint64val >> 32);
- low = (guint32)(data->uint64val >> 0);
- if (!wtap_dump_file_write(wdh, &high, sizeof(guint32), err))
- return FALSE;
- wdh->bytes_dumped += 4;
- if (!wtap_dump_file_write(wdh, &low, sizeof(guint32), err))
- return FALSE;
- wdh->bytes_dumped += 4;
- return TRUE;
-}
int wtap_optionblock_set_option_uint8(wtap_optionblock_t block, guint option_id, guint8 value)
{
@@ -588,32 +423,6 @@ int wtap_optionblock_get_option_uint8(wtap_optionblock_t block, guint option_id,
return WTAP_OPTTYPE_SUCCESS;
}
-guint32 wtap_opttype_write_uint8_not0(wtap_option_type* data)
-{
- if (data == NULL)
- return 0;
-
- if (data->uint8val == 0)
- return 0;
-
- return 1;
-}
-
-gboolean wtap_opttype_write_data_uint8(struct wtap_dumper* wdh, wtap_option_type* data, int *err)
-{
- const guint32 zero_pad = 0;
-
- if (!wtap_dump_file_write(wdh, &data->uint8val, 1, err))
- return FALSE;
- wdh->bytes_dumped += 1;
-
- if (!wtap_dump_file_write(wdh, &zero_pad, 3, err))
- return FALSE;
- wdh->bytes_dumped += 3;
-
- return TRUE;
-}
-
int wtap_optionblock_set_option_custom(wtap_optionblock_t block, guint option_id, void* value)
{
wtap_optblock_value_t* opt_value = wtap_optionblock_get_option(block, option_id);
@@ -650,10 +459,10 @@ int wtap_optionblock_get_option_custom(wtap_optionblock_t block, guint option_id
static void shb_create(wtap_optionblock_t block)
{
- static wtap_optblock_reg_t comment_option = {"opt_comment", "Optional comment", WTAP_OPTTYPE_STRING, wtap_opttype_write_size_string, wtap_opttype_write_data_string, {0}, {0}};
- static wtap_optblock_reg_t hardware_option = {"hardware", "SBH Hardware", WTAP_OPTTYPE_STRING, wtap_opttype_write_size_string, wtap_opttype_write_data_string, {0}, {0}};
- static wtap_optblock_reg_t os_option = {"os", "SBH Operating System", WTAP_OPTTYPE_STRING, wtap_opttype_write_size_string, wtap_opttype_write_data_string, {0}, {0}};
- static wtap_optblock_reg_t user_appl_option = {"user_appl", "SBH User Application", WTAP_OPTTYPE_STRING, wtap_opttype_write_size_string, wtap_opttype_write_data_string, {0}, {0}};
+ static wtap_optblock_reg_t comment_option = {"opt_comment", "Optional comment", WTAP_OPTTYPE_STRING, {0}, {0}};
+ static wtap_optblock_reg_t hardware_option = {"hardware", "SBH Hardware", WTAP_OPTTYPE_STRING, {0}, {0}};
+ static wtap_optblock_reg_t os_option = {"os", "SBH Operating System", WTAP_OPTTYPE_STRING, {0}, {0}};
+ static wtap_optblock_reg_t user_appl_option = {"user_appl", "SBH User Application", WTAP_OPTTYPE_STRING, {0}, {0}};
wtapng_mandatory_section_t* section_mand = g_new(wtapng_mandatory_section_t, 1);
@@ -677,52 +486,6 @@ static void shb_create(wtap_optionblock_t block)
wtap_optionblock_add_option(block, OPT_SHB_USERAPPL, &user_appl_option);
}
-static gboolean shb_write(struct wtap_dumper *wdh, wtap_optionblock_t block, int *err)
-{
- pcapng_block_header_t bh;
- pcapng_section_header_block_t shb;
- wtapng_mandatory_section_t* mand_data = (wtapng_mandatory_section_t*)block->mandatory_data;
- guint32 options_total_length;
-
- wtap_debug("write_section_header_block: Have shb_hdr");
-
- options_total_length = wtap_optionblock_get_option_write_size(block);
- if (options_total_length > 0)
- {
- /* End-of-options tag */
- options_total_length += 4;
- }
-
- /* write block header */
- bh.block_type = BLOCK_TYPE_SHB;
- bh.block_total_length = (guint32)(sizeof(bh) + sizeof(shb) + options_total_length + 4);
-
- if (!wtap_dump_file_write(wdh, &bh, sizeof bh, err))
- return FALSE;
- wdh->bytes_dumped += sizeof bh;
-
- /* write block fixed content */
- shb.magic = 0x1A2B3C4D;
- shb.version_major = 1;
- shb.version_minor = 0;
- shb.section_length = mand_data->section_length;
-
- if (!wtap_dump_file_write(wdh, &shb, sizeof shb, err))
- return FALSE;
- wdh->bytes_dumped += sizeof shb;
-
- if (!wtap_optionblock_write_options(wdh, block, options_total_length, err))
- return FALSE;
-
- /* write block footer */
- if (!wtap_dump_file_write(wdh, &bh.block_total_length,
- sizeof bh.block_total_length, err))
- return FALSE;
- wdh->bytes_dumped += sizeof bh.block_total_length;
-
- return TRUE;
-}
-
static void shb_copy_mand(wtap_optionblock_t dest_block, wtap_optionblock_t src_block)
{
memcpy(dest_block->mandatory_data, src_block->mandatory_data, sizeof(wtapng_mandatory_section_t));
@@ -730,7 +493,7 @@ static void shb_copy_mand(wtap_optionblock_t dest_block, wtap_optionblock_t src_
static void nrb_create(wtap_optionblock_t block)
{
- static wtap_optblock_reg_t comment_option = {"opt_comment", "Optional comment", WTAP_OPTTYPE_STRING, wtap_opttype_write_size_string, wtap_opttype_write_data_string, {0}, {0}};
+ static wtap_optblock_reg_t comment_option = {"opt_comment", "Optional comment", WTAP_OPTTYPE_STRING, {0}, {0}};
/* Set proper values for the union */
comment_option.option.stringval = NULL;
@@ -743,14 +506,14 @@ static void nrb_create(wtap_optionblock_t block)
static void isb_create(wtap_optionblock_t block)
{
- static wtap_optblock_reg_t comment_option = {"opt_comment", "Optional comment", WTAP_OPTTYPE_STRING, wtap_opttype_write_size_string, wtap_opttype_write_data_string, {0}, {0}};
- static wtap_optblock_reg_t starttime_option = {"start_time", "Start Time", WTAP_OPTTYPE_UINT64, wtap_opttype_write_uint64_not0, wtap_opttype_write_data_uint64_timestamp, {0}, {0}};
- static wtap_optblock_reg_t endtime_option = {"end_time", "End Time", WTAP_OPTTYPE_UINT64, wtap_opttype_write_uint64_not0, wtap_opttype_write_data_uint64_timestamp, {0}, {0}};
- static wtap_optblock_reg_t rcv_pkt_option = {"recv", "Receive Packets", WTAP_OPTTYPE_UINT64, wtap_opttype_write_uint64_not_minus1, wtap_opttype_write_data_uint64, {0}, {0}};
- static wtap_optblock_reg_t drop_pkt_option = {"drop", "Dropped Packets", WTAP_OPTTYPE_UINT64, wtap_opttype_write_uint64_not_minus1, wtap_opttype_write_data_uint64, {0}, {0}};
- static wtap_optblock_reg_t filteraccept_option = {"filter_accept", "Filter Accept", WTAP_OPTTYPE_UINT64, wtap_opttype_write_uint64_not_minus1, wtap_opttype_write_data_uint64, {0}, {0}};
- static wtap_optblock_reg_t os_drop_option = {"os_drop", "OS Dropped Packets", WTAP_OPTTYPE_UINT64, wtap_opttype_write_uint64_not_minus1, wtap_opttype_write_data_uint64, {0}, {0}};
- static wtap_optblock_reg_t user_deliv_option = {"user_deliv", "User Delivery", WTAP_OPTTYPE_UINT64, wtap_opttype_write_uint64_not_minus1, wtap_opttype_write_data_uint64, {0}, {0}};
+ static wtap_optblock_reg_t comment_option = {"opt_comment", "Optional comment", WTAP_OPTTYPE_STRING, {0}, {0}};
+ static wtap_optblock_reg_t starttime_option = {"start_time", "Start Time", WTAP_OPTTYPE_UINT64, {0}, {0}};
+ static wtap_optblock_reg_t endtime_option = {"end_time", "End Time", WTAP_OPTTYPE_UINT64, {0}, {0}};
+ static wtap_optblock_reg_t rcv_pkt_option = {"recv", "Receive Packets", WTAP_OPTTYPE_UINT64, {0}, {0}};
+ static wtap_optblock_reg_t drop_pkt_option = {"drop", "Dropped Packets", WTAP_OPTTYPE_UINT64, {0}, {0}};
+ static wtap_optblock_reg_t filteraccept_option = {"filter_accept", "Filter Accept", WTAP_OPTTYPE_UINT64, {0}, {0}};
+ static wtap_optblock_reg_t os_drop_option = {"os_drop", "OS Dropped Packets", WTAP_OPTTYPE_UINT64, {0}, {0}};
+ static wtap_optblock_reg_t user_deliv_option = {"user_deliv", "User Delivery", WTAP_OPTTYPE_UINT64, {0}, {0}};
block->mandatory_data = g_new0(wtapng_if_stats_mandatory_t, 1);
@@ -782,51 +545,6 @@ static void isb_create(wtap_optionblock_t block)
wtap_optionblock_add_option(block, OPT_ISB_USRDELIV, &user_deliv_option);
}
-static gboolean isb_write(struct wtap_dumper *wdh, wtap_optionblock_t block, int *err)
-{
- pcapng_block_header_t bh;
- pcapng_interface_statistics_block_t isb;
- guint32 options_total_length;
- wtapng_if_stats_mandatory_t* mand_data = (wtapng_if_stats_mandatory_t*)block->mandatory_data;
-
- wtap_debug("write_interface_statistics_block");
-
- options_total_length = wtap_optionblock_get_option_write_size(block);
- if (options_total_length > 0)
- {
- /* End-of-options tag */
- options_total_length += 4;
- }
-
- /* write block header */
- bh.block_type = BLOCK_TYPE_ISB;
- bh.block_total_length = (guint32)(sizeof(bh) + sizeof(isb) + options_total_length + 4);
-
- if (!wtap_dump_file_write(wdh, &bh, sizeof bh, err))
- return FALSE;
- wdh->bytes_dumped += sizeof bh;
-
- /* write block fixed content */
- isb.interface_id = mand_data->interface_id;
- isb.timestamp_high = mand_data->ts_high;
- isb.timestamp_low = mand_data->ts_low;
-
- if (!wtap_dump_file_write(wdh, &isb, sizeof isb, err))
- return FALSE;
- wdh->bytes_dumped += sizeof isb;
-
- if (!wtap_optionblock_write_options(wdh, block, options_total_length, err))
- return FALSE;
-
- /* write block footer */
- if (!wtap_dump_file_write(wdh, &bh.block_total_length,
- sizeof bh.block_total_length, err))
- return FALSE;
- wdh->bytes_dumped += sizeof bh.block_total_length;
-
- return TRUE;
-}
-
static void isb_copy_mand(wtap_optionblock_t dest_block, wtap_optionblock_t src_block)
{
memcpy(dest_block->mandatory_data, src_block->mandatory_data, sizeof(wtapng_if_stats_mandatory_t));
@@ -839,71 +557,16 @@ static void idb_filter_free(void* data)
g_free(filter->if_filter_bpf_bytes);
}
-static guint32 idb_filter_write_size(wtap_option_type* data)
-{
- wtapng_if_descr_filter_t* filter;
- guint32 size, pad;
-
- if (data == NULL)
- return 0;
-
- filter = (wtapng_if_descr_filter_t*)data->customval.data;
- if ((filter == NULL) || (filter->if_filter_str == NULL))
- return 0;
-
- size = (guint32)(strlen(filter->if_filter_str) + 1) & 0xffff;
- if ((size % 4)) {
- pad = 4 - (size % 4);
- } else {
- pad = 0;
- }
-
- return pad + size;
-}
-
-static gboolean idb_filter_write(struct wtap_dumper* wdh, wtap_option_type* data, int *err)
-{
- wtapng_if_descr_filter_t* filter = (wtapng_if_descr_filter_t*)data->customval.data;
- guint32 size, pad;
- const guint32 zero_pad = 0;
-
- size = (guint32)(strlen(filter->if_filter_str) + 1) & 0xffff;
- if ((size % 4)) {
- pad = 4 - (size % 4);
- } else {
- pad = 0;
- }
-
- /* Write the zero indicating libpcap filter variant */
- if (!wtap_dump_file_write(wdh, &zero_pad, 1, err))
- return FALSE;
- wdh->bytes_dumped += 1;
-
- /* if_filter_str_len includes the leading byte indicating filter type (libpcap str or BPF code) */
- if (!wtap_dump_file_write(wdh, filter->if_filter_str, size-1, err))
- return FALSE;
- wdh->bytes_dumped += size - 1;
-
- /* write padding (if any) */
- if (pad != 0) {
- if (!wtap_dump_file_write(wdh, &zero_pad, pad, err))
- return FALSE;
- wdh->bytes_dumped += pad;
- }
-
- return TRUE;
-}
-
static void idb_create(wtap_optionblock_t block)
{
- static wtap_optblock_reg_t comment_option = {"opt_comment", "Optional comment", WTAP_OPTTYPE_STRING, wtap_opttype_write_size_string, wtap_opttype_write_data_string, {0}, {0}};
- static wtap_optblock_reg_t name_option = {"name", "Device name", WTAP_OPTTYPE_STRING, wtap_opttype_write_size_string, wtap_opttype_write_data_string, {0}, {0}};
- static wtap_optblock_reg_t description_option = {"description", "Device description", WTAP_OPTTYPE_STRING, wtap_opttype_write_size_string, wtap_opttype_write_data_string, {0}, {0}};
- static wtap_optblock_reg_t speed_option = {"speed", "Interface speed (in bps)", WTAP_OPTTYPE_UINT64, wtap_opttype_write_uint64_not0, wtap_opttype_write_data_uint64, {0}, {0}};
- static wtap_optblock_reg_t tsresol_option = {"ts_resolution", "Resolution of timestamps", WTAP_OPTTYPE_UINT8, wtap_opttype_write_uint8_not0, wtap_opttype_write_data_uint8, {0}, {0}};
- static wtap_optblock_reg_t filter_option = {"filter", "Filter string", WTAP_OPTTYPE_CUSTOM, idb_filter_write_size, idb_filter_write, {0}, {0}};
- static wtap_optblock_reg_t os_option = {"os", "Operating System", WTAP_OPTTYPE_STRING, wtap_opttype_write_size_string, wtap_opttype_write_data_string, {0}, {0}};
- static wtap_optblock_reg_t fcslen_option = {"fcslen", "FCS Length", WTAP_OPTTYPE_UINT8, NULL, NULL, {0}, {0}};
+ static wtap_optblock_reg_t comment_option = {"opt_comment", "Optional comment", WTAP_OPTTYPE_STRING, {0}, {0}};
+ static wtap_optblock_reg_t name_option = {"name", "Device name", WTAP_OPTTYPE_STRING, {0}, {0}};
+ static wtap_optblock_reg_t description_option = {"description", "Device description", WTAP_OPTTYPE_STRING, {0}, {0}};
+ static wtap_optblock_reg_t speed_option = {"speed", "Interface speed (in bps)", WTAP_OPTTYPE_UINT64, {0}, {0}};
+ static wtap_optblock_reg_t tsresol_option = {"ts_resolution", "Resolution of timestamps", WTAP_OPTTYPE_UINT8, {0}, {0}};
+ static wtap_optblock_reg_t filter_option = {"filter", "Filter string", WTAP_OPTTYPE_CUSTOM, {0}, {0}};
+ static wtap_optblock_reg_t os_option = {"os", "Operating System", WTAP_OPTTYPE_STRING, {0}, {0}};
+ static wtap_optblock_reg_t fcslen_option = {"fcslen", "FCS Length", WTAP_OPTTYPE_UINT8, {0}, {0}};
wtapng_if_descr_filter_t default_filter;
memset(&default_filter, 0, sizeof(default_filter));
@@ -942,58 +605,6 @@ static void idb_create(wtap_optionblock_t block)
wtap_optionblock_add_option(block, OPT_IDB_FCSLEN, &fcslen_option);
}
-static gboolean idb_write(struct wtap_dumper *wdh, wtap_optionblock_t block, int *err)
-{
- pcapng_block_header_t bh;
- pcapng_interface_description_block_t idb;
- wtapng_if_descr_mandatory_t* mand_data = (wtapng_if_descr_mandatory_t*)block->mandatory_data;
- guint32 options_total_length;
-
- wtap_debug("write_interface_description_block: encap = %d (%s), snaplen = %d",
- mand_data->link_type,
- wtap_encap_string(wtap_pcap_encap_to_wtap_encap(mand_data->link_type)),
- mand_data->snap_len);
-
- if (mand_data->link_type == (guint16)-1) {
- *err = WTAP_ERR_UNWRITABLE_ENCAP;
- return FALSE;
- }
-
- options_total_length = wtap_optionblock_get_option_write_size(block);
- if (options_total_length > 0)
- {
- /* End-of-options tag */
- options_total_length += 4;
- }
-
- /* write block header */
- bh.block_type = BLOCK_TYPE_IDB;
- bh.block_total_length = (guint32)(sizeof(bh) + sizeof(idb) + options_total_length + 4);
-
- if (!wtap_dump_file_write(wdh, &bh, sizeof bh, err))
- return FALSE;
- wdh->bytes_dumped += sizeof bh;
-
- /* write block fixed content */
- idb.linktype = mand_data->link_type;
- idb.reserved = 0;
- idb.snaplen = mand_data->snap_len;
-
- if (!wtap_dump_file_write(wdh, &idb, sizeof idb, err))
- return FALSE;
- wdh->bytes_dumped += sizeof idb;
-
- if (!wtap_optionblock_write_options(wdh, block, options_total_length, err))
- return FALSE;
-
- /* write block footer */
- if (!wtap_dump_file_write(wdh, &bh.block_total_length,
- sizeof bh.block_total_length, err))
- return FALSE;
- wdh->bytes_dumped += sizeof bh.block_total_length;
- return TRUE;
-}
-
static void idb_free_mand(wtap_optionblock_t block)
{
guint j;
@@ -1040,7 +651,6 @@ void wtap_opttypes_initialize(void)
"SHB", /* name */
"Section Header Block", /* description */
shb_create, /* create */
- shb_write, /* write */
NULL, /* free_mand */
shb_copy_mand, /* copy_mand */
};
@@ -1049,7 +659,6 @@ void wtap_opttypes_initialize(void)
"NRB", /* name */
"Name Resolution Block", /* description */
nrb_create, /* create */
- NULL, /* write */
NULL, /* free_mand */
NULL, /* copy_mand */
};
@@ -1058,7 +667,6 @@ void wtap_opttypes_initialize(void)
"ISB", /* name */
"Interface Statistics Block", /* description */
isb_create, /* create */
- isb_write, /* write */
NULL, /* free_mand */
isb_copy_mand, /* copy_mand */
};
@@ -1067,7 +675,6 @@ void wtap_opttypes_initialize(void)
"IDB", /* name */
"Interface Description Block", /* description */
idb_create, /* create */
- idb_write, /* write */
idb_free_mand, /* free_mand */
idb_copy_mand, /* copy_mand */
};