12#include <QtCore/private/qduplicatetracker_p.h> 
   14#ifndef QT_NO_NETWORKINTERFACE 
   16#if defined(QT_NO_CLOCK_MONOTONIC) 
   20#if defined(QT_LINUXBASE) 
   21#  define QT_NO_GETIFADDRS 
   24#ifndef QT_NO_GETIFADDRS 
   29#  include <arpa/inet.h> 
   30#  ifndef SIOCGIFBRDADDR 
   31#    define SIOCGIFBRDADDR 0x8919 
   35#include <qplatformdefs.h> 
   45    if (sa->sa_family == AF_INET)
 
   46        address.setAddress(htonl(((sockaddr_in *)sa)->sin_addr.s_addr));
 
   47    else if (sa->sa_family == 
AF_INET6) {
 
   48        address.setAddress(((sockaddr_in6 *)sa)->sin6_addr.s6_addr);
 
   49        int scope = ((sockaddr_in6 *)sa)->sin6_scope_id;
 
   50        if (scope && scope == ifindex) {
 
   64#ifndef QT_NO_IPV6IFNAME 
   65    return ::if_nametoindex(
name.toLatin1());
 
   66#elif defined(SIOCGIFINDEX) 
   73    memset(&req, 0, 
sizeof(ifreq));
 
   74    memcpy(req.ifr_name, name8bit, qMin<int>(name8bit.
length() + 1, 
sizeof(req.ifr_name) - 1));
 
   78#  if QT_CONFIG(ifr_index) 
   93#ifndef QT_NO_IPV6IFNAME 
   94    char buf[IF_NAMESIZE];
 
   97#elif defined(SIOCGIFNAME) 
  101        memset(&req, 0, 
sizeof(ifreq));
 
  102#  if QT_CONFIG(ifr_index) 
  103        req.ifr_index = 
index;
 
  105        req.ifr_ifindex = 
index;
 
  127#ifdef QT_NO_GETIFADDRS 
  133#ifdef QT_NO_IPV6IFNAME 
  135    struct ifconf interfaceList;
 
  136    static const int STORAGEBUFFER_GROWTH = 256;
 
  140        storageBuffer.
resize(storageBuffer.
size() + STORAGEBUFFER_GROWTH);
 
  141        interfaceList.ifc_buf = storageBuffer.
data();
 
  142        interfaceList.ifc_len = storageBuffer.
size();
 
  146            if (
int(interfaceList.ifc_len + 
sizeof(ifreq) + 64) < storageBuffer.
size()) {
 
  148                storageBuffer.
resize(interfaceList.ifc_len);
 
  155        if (storageBuffer.
size() > 100000) {
 
  161    int interfaceCount = interfaceList.ifc_len / 
sizeof(ifreq);
 
  162    for (
int i = 0; 
i < interfaceCount; ++
i) {
 
  173    struct if_nameindex *interfaceList = ::if_nameindex();
 
  174    for (
struct if_nameindex *
ptr = interfaceList; 
ptr && 
ptr->if_name; ++
ptr)
 
  177    if_freenameindex(interfaceList);
 
  188#if !defined(QT_NO_IPV6IFNAME) || defined(SIOCGIFINDEX) 
  192#    if QT_CONFIG(ifr_index) 
  193        ifindex = req.ifr_index;
 
  195        ifindex = req.ifr_ifindex;
 
  198    ifindex = if_nametoindex(req.ifr_name);
 
  203    for ( ; if_it != interfaces.
end(); ++if_it)
 
  204        if ((*if_it)->index == ifindex) {
 
  213    for ( ; if_it != interfaces.
end(); ++if_it)
 
  224        iface->index = ifindex;
 
  243        memset(&req, 0, 
sizeof(ifreq));
 
  244        memcpy(req.ifr_name, *
it, qMin<int>(
it->length() + 1, 
sizeof(req.ifr_name) - 1));
 
  255            memcpy(req.ifr_name, oldName, qMin<int>(oldName.
length() + 1, 
sizeof(req.ifr_name) - 1));
 
  280            sockaddr *sa = &req.ifr_addr;
 
  286                    sockaddr *sa = &req.ifr_addr;
 
  287                    if (sa->sa_family == AF_INET)
 
  294                sockaddr *sa = &req.ifr_addr;
 
  312#  include <features.h> 
  316# if defined(Q_OS_LINUX) &&  __GLIBC__ - 0 >= 2 && __GLIBC_MINOR__ - 0 >= 1 && !defined(QT_LINUXBASE) 
  317#  include <netpacket/packet.h> 
  333    for (ifaddrs *
ptr = rawList; 
ptr; 
ptr = 
ptr->ifa_next) {
 
  334        if (
ptr->ifa_addr && 
ptr->ifa_addr->sa_family == AF_PACKET) {
 
  335            sockaddr_ll *sll = (sockaddr_ll *)
ptr->ifa_addr;
 
  338            iface->index = sll->sll_ifindex;
 
  341            iface->hardwareAddress = 
iface->makeHwAddress(sll->sll_halen, (
uchar*)sll->sll_addr);
 
  343            const bool sawIfaceIndex = seenIndexes.
hasSeen(
iface->index);
 
  352    for (ifaddrs *
ptr = rawList; 
ptr; 
ptr = 
ptr->ifa_next) {
 
  353        if (!
ptr->ifa_addr || 
ptr->ifa_addr->sa_family != AF_PACKET) {
 
  358            int ifindex = if_nametoindex(
ptr->ifa_name);
 
  359            if (seenIndexes.
hasSeen(ifindex))
 
  366            iface->index = ifindex;
 
  380# elif defined(Q_OS_BSD4) 
  382#  include <net/if_dl.h> 
  383#if defined(QT_PLATFORM_UIKIT) 
  385#  include <net/if_types.h> 
  387#  include <net/if_media.h> 
  388#  include <net/if_types.h> 
  389#  include <netinet/in_var.h> 
  393static int openSocket(
int &
socket)
 
  433        switch (
IFM_TYPE(req->ifm_current)) {
 
  454        struct ifmediareq mediareq;
 
  458    memset(&mediareq, 0, 
sizeof(mediareq));
 
  461    static_assert(
sizeof(mediareq.ifm_name) == 
sizeof(req.ifr_name));
 
  462    static_assert(offsetof(
struct ifmediareq, ifm_name) == 0);
 
  463    static_assert(offsetof(
struct ifreq, ifr_name) == 0);
 
  468        if (
ptr->ifa_addr && 
ptr->ifa_addr->sa_family == AF_LINK) {
 
  472            sockaddr_dl *sdl = (sockaddr_dl *)
ptr->ifa_addr;
 
  473            iface->index = sdl->sdl_index;
 
  476            iface->hardwareAddress = 
iface->makeHwAddress(sdl->sdl_alen, (
uchar*)LLADDR(sdl));
 
  478            qstrncpy(mediareq.ifm_name, 
ptr->ifa_name, 
sizeof(mediareq.ifm_name));
 
  498        qErrnoWarning(
"QNetworkInterface: could not create IPv6 socket");
 
  502    qstrncpy(ifr.ifr_name, ifname, 
sizeof(ifr.ifr_name));
 
  505    ifr.ifr_addr = *
reinterpret_cast<struct sockaddr_in6 *
>(sa);
 
  510    int flags = ifr.ifr_ifru.ifru_flags6;
 
  516    ifr.ifr_addr = *
reinterpret_cast<struct sockaddr_in6 *
>(sa);
 
  523    auto toDeadline = [](time_t when) {
 
  526#if defined(QT_NO_CLOCK_MONOTONIC) 
  535    entry->setAddressLifetime(toDeadline(ifr.ifr_ifru.ifru_lifetime.ia6t_preferred),
 
  536                              toDeadline(ifr.ifr_ifru.ifru_lifetime.ia6t_expire));
 
  547    for (ifaddrs *
ptr = rawList; 
ptr; 
ptr = 
ptr->ifa_next) {
 
  549        int ifindex = if_nametoindex(
ptr->ifa_name);
 
  552        for ( ; if_it != interfaces.
end(); ++if_it)
 
  553            if ((*if_it)->index == ifindex)
 
  557        if (if_it == interfaces.
end()) {
 
  562            iface->index = ifindex;
 
  595        for ( ; if_it != interfaces.
end(); ++if_it)
 
  596            if ((*if_it)->name == 
name) {
 
  604            int ifindex = if_nametoindex(
ptr->ifa_name);
 
  605            for (if_it = interfaces.
begin(); if_it != interfaces.
end(); ++if_it)
 
  606                if ((*if_it)->index == ifindex) {
 
  620        if (
entry.ip().isNull())
 
  629        iface->addressEntries << 
entry;
 
char * data()
\macro QT_NO_CAST_FROM_BYTEARRAY
 
qsizetype size() const noexcept
Returns the number of bytes in this byte array.
 
qsizetype length() const noexcept
Same as size().
 
void resize(qsizetype size)
Sets the size of the byte array to size bytes.
 
static qint64 currentSecsSinceEpoch() noexcept
 
void setPreciseRemainingTime(qint64 secs, qint64 nsecs=0, Qt::TimerType type=Qt::CoarseTimer) noexcept
Sets the remaining time for this QDeadlineTimer object to secs seconds plus nsecs nanoseconds from no...
 
static constexpr ForeverConstant Forever
 
void setPreciseDeadline(qint64 secs, qint64 nsecs=0, Qt::TimerType type=Qt::CoarseTimer) noexcept
Sets the deadline for this QDeadlineTimer object to be secs seconds and nsecs nanoseconds since the r...
 
The QHostAddress class provides an IP address.
 
The QNetworkAddressEntry class stores one IP address supported by a network interface,...
 
static uint interfaceIndexFromName(const QString &name)
 
static QString interfaceNameFromIndex(uint index)
 
static void calculateDnsEligibility(QNetworkAddressEntry *entry, bool isTemporary, bool isDeprecated)
 
InterfaceType
Specifies the type of hardware (PHY layer, OSI level 1) this interface is, if it could be determined.
 
const_iterator constBegin() const noexcept
 
const_iterator constEnd() const noexcept
 
\macro QT_RESTRICTED_CAST_FROM_ASCII
 
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
 
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
 
QSet< QString >::iterator it
 
void qErrnoWarning(const char *msg,...)
 
Combined button and popup list for selecting options.
 
constexpr QBindableInterface iface
 
Q_CORE_EXPORT char * qstrncpy(char *dst, const char *src, size_t len)
 
static int qt_safe_close(int fd)
 
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
 
static ControlElement< T > * ptr(QWidget *widget)
 
static int qt_safe_ioctl(int sockfd, unsigned long request, T arg)
 
static int qt_safe_socket(int domain, int type, int protocol, int flags=0)
 
static QNetworkInterface::InterfaceType probeIfType(int socket, struct ifreq *req, short arptype)
 
#define IN6_IFF_DEPRECATED
 
#define IN6_IFF_TEMPORARY
 
#define SIOCGIFALIFETIME_IN6
 
static void getAddressExtraInfo(QNetworkAddressEntry *entry, struct sockaddr *sa, const char *ifname)
 
static QList< QNetworkInterfacePrivate * > interfaceListing()
 
static QT_BEGIN_NAMESPACE QHostAddress addressFromSockaddr(sockaddr *sa, int ifindex=0, const QString &ifname=QString())
 
static int getMtu(int socket, struct ifreq *req)
 
static QList< QNetworkInterfacePrivate * > createInterfaces(ifaddrs *rawList)
 
static QT_BEGIN_NAMESPACE QNetworkInterface::InterfaceFlags convertFlags(uint rawFlags)
 
GLenum GLuint GLenum GLsizei const GLchar * buf
 
GLuint GLuint64EXT address
 
#define QT_BEGIN_INCLUDE_NAMESPACE
 
#define QT_END_INCLUDE_NAMESPACE
 
QDeadlineTimer deadline(30s)