Пример #1
0
static gboolean
is_duplicate_idb(const wtap_optionblock_t idb1, const wtap_optionblock_t idb2)
{
    wtapng_if_descr_mandatory_t *idb1_mand, *idb2_mand;
    guint64 idb1_if_speed, idb2_if_speed;
    guint8 idb1_if_tsresol, idb2_if_tsresol;
    guint8 idb1_if_fcslen, idb2_if_fcslen;
    char *idb1_opt_comment, *idb2_opt_comment, *idb1_if_name, *idb2_if_name,
         *idb1_if_description, *idb2_if_description, *idb1_if_os, *idb2_if_os;

    g_assert(idb1 && idb2);
    idb1_mand = (wtapng_if_descr_mandatory_t*)wtap_optionblock_get_mandatory_data(idb1);
    idb2_mand = (wtapng_if_descr_mandatory_t*)wtap_optionblock_get_mandatory_data(idb2);

    merge_debug("merge::is_duplicate_idb() called");
    merge_debug("idb1_mand->wtap_encap == idb2_mand->wtap_encap: %s",
                (idb1_mand->wtap_encap == idb2_mand->wtap_encap) ? "TRUE":"FALSE");
    merge_debug("idb1_mand->time_units_per_second == idb2_mand->time_units_per_second: %s",
                (idb1_mand->time_units_per_second == idb2_mand->time_units_per_second) ? "TRUE":"FALSE");
    merge_debug("idb1_mand->tsprecision == idb2_mand->tsprecision: %s",
                (idb1_mand->tsprecision == idb2_mand->tsprecision) ? "TRUE":"FALSE");
    merge_debug("idb1_mand->link_type == idb2_mand->link_type: %s",
                (idb1_mand->link_type == idb2_mand->link_type) ? "TRUE":"FALSE");
    merge_debug("idb1_mand->snap_len == idb2_mand->snap_len: %s",
                (idb1_mand->snap_len == idb2_mand->snap_len) ? "TRUE":"FALSE");

    wtap_optionblock_get_option_uint64(idb1, OPT_IDB_SPEED, &idb1_if_speed);
    wtap_optionblock_get_option_uint64(idb2, OPT_IDB_SPEED, &idb2_if_speed);
    merge_debug("idb1_if_speed == idb2_if_speed: %s",
                (idb1_if_speed == idb2_if_speed) ? "TRUE":"FALSE");

    wtap_optionblock_get_option_uint8(idb1, OPT_IDB_TSRESOL, &idb1_if_tsresol);
    wtap_optionblock_get_option_uint8(idb2, OPT_IDB_TSRESOL, &idb2_if_tsresol);
    merge_debug("idb1_if_tsresol == idb2_if_tsresol: %s",
                (idb1_if_tsresol == idb2_if_tsresol) ? "TRUE":"FALSE");

    wtap_optionblock_get_option_uint8(idb1, OPT_IDB_FCSLEN, &idb1_if_fcslen);
    wtap_optionblock_get_option_uint8(idb2, OPT_IDB_FCSLEN, &idb2_if_fcslen);
    merge_debug("idb1_if_fcslen == idb2_if_fcslen: %s",
                (idb1_if_fcslen == idb2_if_fcslen) ? "TRUE":"FALSE");

    wtap_optionblock_get_option_string(idb1, OPT_COMMENT, &idb1_opt_comment);
    wtap_optionblock_get_option_string(idb2, OPT_COMMENT, &idb2_opt_comment);
    merge_debug("g_strcmp0(idb1_opt_comment, idb2_opt_comment) == 0: %s",
                (g_strcmp0(idb1_opt_comment, idb2_opt_comment) == 0) ? "TRUE":"FALSE");

    wtap_optionblock_get_option_string(idb1, OPT_IDB_NAME, &idb1_if_name);
    wtap_optionblock_get_option_string(idb2, OPT_IDB_NAME, &idb2_if_name);
    merge_debug("g_strcmp0(idb1_if_name, idb2_if_name) == 0: %s",
                (g_strcmp0(idb1_if_name, idb2_if_name) == 0) ? "TRUE":"FALSE");

    wtap_optionblock_get_option_string(idb1, OPT_IDB_DESCR, &idb1_if_description);
    wtap_optionblock_get_option_string(idb2, OPT_IDB_DESCR, &idb2_if_description);
    merge_debug("g_strcmp0(idb1_if_description, idb2_if_description) == 0: %s",
                (g_strcmp0(idb1_if_description, idb2_if_description) == 0) ? "TRUE":"FALSE");

    wtap_optionblock_get_option_string(idb1, OPT_IDB_OS, &idb1_if_os);
    wtap_optionblock_get_option_string(idb2, OPT_IDB_OS, &idb2_if_os);
    merge_debug("g_strcmp0(idb1_if_os, idb2_if_os) == 0: %s",
                (g_strcmp0(idb1_if_os, idb2_if_os) == 0) ? "TRUE":"FALSE");
    merge_debug("merge::is_duplicate_idb() returning");

    /* does not compare filters nor interface statistics */
    return (idb1_mand->wtap_encap == idb2_mand->wtap_encap &&
            idb1_mand->time_units_per_second == idb2_mand->time_units_per_second &&
            idb1_mand->tsprecision == idb2_mand->tsprecision &&
            idb1_mand->link_type == idb2_mand->link_type &&
            /* XXX: should snaplen not be compared? */
            idb1_mand->snap_len == idb2_mand->snap_len &&
            idb1_if_speed == idb2_if_speed &&
            idb1_if_tsresol == idb2_if_tsresol &&
            idb1_if_fcslen == idb2_if_fcslen &&
            g_strcmp0(idb1_opt_comment, idb2_opt_comment) == 0 &&
            g_strcmp0(idb1_if_name, idb2_if_name) == 0 &&
            g_strcmp0(idb1_if_description, idb2_if_description) == 0 &&
            g_strcmp0(idb1_if_os, idb2_if_os) == 0);
}
Пример #2
0
gchar *
wtap_get_debug_if_descr(const wtap_optionblock_t if_descr,
                        const int indent,
                        const char* line_end)
{
	char* tmp_content;
	wtapng_if_descr_mandatory_t* if_descr_mand;
	GString *info = g_string_new("");
	guint64 tmp64;
	gint8 itmp8;
	guint8 tmp8;
	wtapng_if_descr_filter_t* if_filter;

	g_assert(if_descr);

	if_descr_mand = (wtapng_if_descr_mandatory_t*)wtap_optionblock_get_mandatory_data(if_descr);
	wtap_optionblock_get_option_string(if_descr, OPT_IDB_NAME, &tmp_content);
	g_string_printf(info,
			"%*cName = %s%s", indent, ' ',
			tmp_content ? tmp_content : "UNKNOWN",
			line_end);

	wtap_optionblock_get_option_string(if_descr, OPT_IDB_DESCR, &tmp_content);
	g_string_append_printf(info,
			"%*cDescription = %s%s", indent, ' ',
			tmp_content ? tmp_content : "NONE",
			line_end);

	g_string_append_printf(info,
			"%*cEncapsulation = %s (%d/%u - %s)%s", indent, ' ',
			wtap_encap_string(if_descr_mand->wtap_encap),
			if_descr_mand->wtap_encap,
			if_descr_mand->link_type,
			wtap_encap_short_string(if_descr_mand->wtap_encap),
			line_end);

	wtap_optionblock_get_option_uint64(if_descr, OPT_IDB_SPEED, &tmp64);
	g_string_append_printf(info,
			"%*cSpeed = %" G_GINT64_MODIFIER "u%s", indent, ' ',
			tmp64,
			line_end);

	g_string_append_printf(info,
			"%*cCapture length = %u%s", indent, ' ',
			if_descr_mand->snap_len,
			line_end);

	wtap_optionblock_get_option_uint8(if_descr, OPT_IDB_FCSLEN, &itmp8);
	g_string_append_printf(info,
			"%*cFCS length = %d%s", indent, ' ',
			itmp8,
			line_end);

	g_string_append_printf(info,
			"%*cTime precision = %s (%d)%s", indent, ' ',
			wtap_tsprec_string(if_descr_mand->tsprecision),
			if_descr_mand->tsprecision,
			line_end);

	g_string_append_printf(info,
			"%*cTime ticks per second = %" G_GINT64_MODIFIER "u%s", indent, ' ',
			if_descr_mand->time_units_per_second,
			line_end);

	wtap_optionblock_get_option_uint8(if_descr, OPT_IDB_TSRESOL, &tmp8);
	g_string_append_printf(info,
			"%*cTime resolution = 0x%.2x%s", indent, ' ',
			tmp8,
			line_end);

	wtap_optionblock_get_option_custom(if_descr, OPT_IDB_FILTER, (void**)&if_filter);
	g_string_append_printf(info,
			"%*cFilter string = %s%s", indent, ' ',
			if_filter->if_filter_str ? if_filter->if_filter_str : "NONE",
			line_end);

	wtap_optionblock_get_option_string(if_descr, OPT_IDB_OS, &tmp_content);
	g_string_append_printf(info,
			"%*cOperating system = %s%s", indent, ' ',
			tmp_content ? tmp_content : "UNKNOWN",
			line_end);

	wtap_optionblock_get_option_string(if_descr, OPT_COMMENT, &tmp_content);
	g_string_append_printf(info,
			"%*cComment = %s%s", indent, ' ',
			tmp_content ? tmp_content : "NONE",
			line_end);

	g_string_append_printf(info,
			"%*cBPF filter length = %u%s", indent, ' ',
			if_filter->bpf_filter_len,
			line_end);

	g_string_append_printf(info,
			"%*cNumber of stat entries = %u%s", indent, ' ',
			if_descr_mand->num_stat_entries,
			line_end);

	return g_string_free(info, FALSE);
}