forked from osmocom/wireshark
![Mikael Kanstrup](/assets/img/avatar_default.png)
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>
72 lines
1.7 KiB
C
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 */
|