wireshark/caputils/iface_monitor.h
Mikael Kanstrup b08003309b Remove the periodic interface update in wireless toolbar
The wireless toolbar retrieves the full list of network interfaces
every 1.5 seconds to keep its list of interfaces updated. This
not only adds unnecessary load on the system it also generates
plenty of netlink traffic. When capturing packets on nlmon
interfaces they are flooded with packets generated by Wireshark
itself making it hard to understand the traffic that's really present
on the system.

Remove the periodic interface update and instead listen to network
interface change events and update only when something has changed.

The wireless toolbar need to know all when wireless interfaces are
added/removed, not only whether an interface is 'up' or not so
iface_monitor changes were also necessary.

Bug: 15576
Change-Id: I8fb19fd919dfef1b6b35bf48790b105ecd2b60a8
Reviewed-on: https://code.wireshark.org/review/32350
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
2019-03-08 07:30:04 +00:00

72 lines
1.7 KiB
C

/* iface_monitor.h
* interface monitor by Pontus Fuchs <pontus.fuchs@gmail.com>
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef IFACE_MONITOR_H
#define IFACE_MONITOR_H
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifdef HAVE_LIBPCAP
/*
* Callback for interface changes.
*
* iface is a pointer to the name of the interface.
*
* up is 1 if the interface is up, 0 if it's down.
*
* XXX - we really want "gone", not "down", where "gone" may include
* "down" if the OS requires an interface to be up in order to start
* a capture on it (as is the case in Linux and in macOS prior to
* Lion), but should also include *gone*, as in "there is no longer
* an interface with this name, so it's neither down nor up".
*
* We also may want other events, such as address changes, so what
* we might want is "add", "remove", and "modify" as the events.
*/
typedef void (*iface_mon_cb)(const char *iface, int added, int up);
/*
* Start watching for interface changes.
*/
int
iface_mon_start(iface_mon_cb cb);
/*
* Stop watching for interface changes.
*/
void
iface_mon_stop(void);
/*
* Get the socket on which interface changes are delivered, so that
* we can add it to the event loop.
*
* XXX - what if it's not a socket or other file descriptor?
*/
int
iface_mon_get_sock(void);
/*
* Call this if something is readable from the interface change socket.
* It will call the callback as appropriate.
*/
void
iface_mon_event(void);
#endif /* HAVE_LIBPCAP */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* IFACE_MONITOR_H */