Add interface name when outputting packets dropped.

Add interface name (colon delimited) to SP_DROPS ('D') message so when dropped
packets are outputted, they include the interface name for clarity.

Bug: 13498
Change-Id: I68cdde4f20a574580f089dc5096d815cde5d3357
Reviewed-on: https://code.wireshark.org/review/31218
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
Michael Mann 2018-12-27 11:34:09 -05:00 committed by Anders Broman
parent d68a8a3605
commit 785621dcca
5 changed files with 34 additions and 18 deletions

View File

@ -1703,21 +1703,30 @@ sync_pipe_input_cb(gint source, gpointer user_data)
/* (an error message doesn't mean we have to stop capturing) */
break;
case SP_BAD_FILTER: {
char *ch=NULL;
int indx=0;
const char *message=NULL;
guint32 indx = 0;
const gchar* end;
ch = strtok(buffer, ":");
if (ch) {
indx = (int)strtol(ch, NULL, 10);
ch = strtok(NULL, ":");
if (ws_strtou32(buffer, &end, &indx) && end[0] == ':') {
message = end + 1;
}
capture_input_cfilter_error_message(cap_session, indx, ch);
capture_input_cfilter_error_message(cap_session, indx, (char*)message);
/* the capture child will close the sync_pipe, nothing to do for now */
break;
}
case SP_DROPS:
capture_input_drops(cap_session, (guint32)strtoul(buffer, NULL, 10));
case SP_DROPS: {
const char *name = NULL;
const gchar* end;
guint32 num = 0;
if (ws_strtou32(buffer, &end, &num) && end[0] == ':') {
name = end + 1;
}
capture_input_drops(cap_session, num, (char*)name);
break;
}
default:
g_assert_not_reached();
}

View File

@ -121,7 +121,7 @@ capture_input_new_packets(capture_session *cap_session, int to_read);
* Capture child told us how many dropped packets it counted.
*/
extern void
capture_input_drops(capture_session *cap_session, guint32 dropped);
capture_input_drops(capture_session *cap_session, guint32 dropped, char* interface_name);
/**
* Capture child told us that an error has occurred while starting the capture.

View File

@ -5550,17 +5550,16 @@ report_capture_error(const char *error_msg, const char *secondary_error_msg)
static void
report_packet_drops(guint32 received, guint32 pcap_drops, guint32 drops, guint32 flushed, guint32 ps_ifdrop, gchar *name)
{
char tmp[SP_DECISIZE+1+1];
guint32 total_drops = pcap_drops + drops + flushed;
g_snprintf(tmp, sizeof(tmp), "%u", total_drops);
if (capture_child) {
char* tmp = g_strdup_printf("%u:%s", total_drops, name);
g_log(LOG_DOMAIN_CAPTURE_CHILD, G_LOG_LEVEL_DEBUG,
"Packets received/dropped on interface '%s': %u/%u (pcap:%u/dumpcap:%u/flushed:%u/ps_ifdrop:%u)",
name, received, total_drops, pcap_drops, drops, flushed, ps_ifdrop);
/* XXX: Need to provide interface id, changes to consumers required. */
pipe_write_block(2, SP_DROPS, tmp);
g_free(tmp);
} else {
fprintf(stderr,
"Packets received/dropped on interface '%s': %u/%u (pcap:%u/dumpcap:%u/flushed:%u/ps_ifdrop:%u) (%.1f%%)\n",

View File

@ -2777,7 +2777,7 @@ report_counts_siginfo(int signum _U_)
/* capture child detected any packet drops? */
void
capture_input_drops(capture_session *cap_session _U_, guint32 dropped)
capture_input_drops(capture_session *cap_session _U_, guint32 dropped, char* interface_name)
{
if (print_packet_counts) {
/* We're printing packet counts to stderr.
@ -2788,7 +2788,11 @@ capture_input_drops(capture_session *cap_session _U_, guint32 dropped)
if (dropped != 0) {
/* We're printing packet counts to stderr.
Send a newline so that we move to the line after the packet count. */
fprintf(stderr, "%u packet%s dropped\n", dropped, plurality(dropped, "", "s"));
if (interface_name != NULL) {
fprintf(stderr, "%u packet%s dropped from %s\n", dropped, plurality(dropped, "", "s"), interface_name);
} else {
fprintf(stderr, "%u packet%s dropped\n", dropped, plurality(dropped, "", "s"));
}
}
}

View File

@ -527,9 +527,13 @@ capture_input_new_packets(capture_session *cap_session, int to_read)
/* Capture child told us how many dropped packets it counted.
*/
void
capture_input_drops(capture_session *cap_session, guint32 dropped)
capture_input_drops(capture_session *cap_session, guint32 dropped, char* interface_name)
{
g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_INFO, "%u packet%s dropped", dropped, plurality(dropped, "", "s"));
if (interface_name != NULL) {
g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_INFO, "%u packet%s dropped from %s", dropped, plurality(dropped, "", "s"), interface_name);
} else {
g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_INFO, "%u packet%s dropped", dropped, plurality(dropped, "", "s"));
}
g_assert(cap_session->state == CAPTURE_RUNNING);