This file is indexed.

/usr/include/x86_64-linux-gnu/qcc/IfConfig.h is in liballjoyn-common-dev-1504 15.04b-8.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/**
 * @file
 * Data structure and declaration of function for getting network interface configurations
 */

/******************************************************************************
 * Copyright AllSeen Alliance. All rights reserved.
 *
 *    Permission to use, copy, modify, and/or distribute this software for any
 *    purpose with or without fee is hereby granted, provided that the above
 *    copyright notice and this permission notice appear in all copies.
 *
 *    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 *    WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 *    MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 *    ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 *    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 *    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 *    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 ******************************************************************************/

#ifndef _IFCONFIG_H
#define _IFCONFIG_H

#ifndef __cplusplus
#error Only include IfConfig.h in C++ code.
#endif

#include <set>
#include <vector>
#include <Status.h>
#include <qcc/String.h>
#include <qcc/SocketTypes.h>

namespace qcc {

class IfConfigEntry {
  public:
    qcc::String m_name;     /**< The operating system-assigned name of this interface (e.g. "eth0" or "wlan0"). */
    qcc::String m_addr;     /**< A string representation of the IP address of this interface. */
    uint32_t m_prefixlen;   /**< The network prefix length, in the sense of CIDR, for the IP address of this interface. */
    AddressFamily m_family; /**< The address family of the IP address of this interface (AF_UNSPEC, AF_INET or AF_INET6). */

    static const uint32_t UP = 1;               /**< The interface is running and routes are in place. */
    static const uint32_t BROADCAST = 2;        /**< The interface has a valid broadcast address (can broadcast). */
    static const uint32_t DEBUG = 4;            /**< The underlying interface is in debug mode. */
    static const uint32_t LOOPBACK = 8;         /**< This is a loopback interface. */
    static const uint32_t POINTOPOINT = 16;     /**< This interface runs over a point to point link. */
    static const uint32_t RUNNING = 32;         /**< The hardware is running and can send and receive packets. */
    static const uint32_t NOARP = 64;           /**< There is no Address Resolution Protocol required or running. */
    static const uint32_t PROMISC = 128;        /**< The underlying device is in promiscuous mode. */
    static const uint32_t NOTRAILERS = 256;     /**< Avoid the use of trailers in BSD. */
    static const uint32_t ALLMULTI = 512;       /**< Receive all multicast packets.  Useful for multicast routing. */
    static const uint32_t MASTER = 1024;        /**< Load equalization code flag. */
    static const uint32_t SLAVE = 2048;         /**< Load equalization code flag. */
    static const uint32_t MULTICAST = 4096;     /**< The interface as capable of multicast transmission. */
    static const uint32_t PORTSEL = 8192;       /**< Marks the interface as capable of switching between media types. */
    static const uint32_t AUTOMEDIA = 16384;    /**< The interface is capable of automatically choosing media type. */
    static const uint32_t DYNAMIC = 32768;      /**< This interface has an IP address that can change (currently unused). */

    uint32_t m_flags;   /**< The combined interface flags for this interface. */
    uint32_t m_mtu;     /**< The maximum transmission unit (MTU) for this interface. */
    uint32_t m_index;   /**< The operating system generated interface index for this interface. */
};

typedef enum {
    QCC_RTM_IGNORED = -1,
    QCC_RTM_DELADDR = 0,
    QCC_RTM_NEWADDR = 1,
    QCC_RTM_SUSPEND = 2
} NetworkEventType;

const uint32_t QCC_AF_UNSPEC_INDEX = 0x0;
const uint32_t QCC_AF_INET_INDEX = 0x1;
const uint32_t QCC_AF_INET6_INDEX = 0x2;

typedef uint32_t NetworkEvent;
typedef std::set<NetworkEvent> NetworkEventSet;
#define NETWORK_EVENT_IF_INDEX(x) ((x) >> 2)
#define NETWORK_EVENT_IF_FAMILY(x) ((x) & 0x3)

/**
 * @brief Get information regarding the network interfaces on the
 * host.
 *
 * In the mobile device environment, it is often the case that network
 * interfaces will come up and go down unpredictably as the underlying Wi-Fi is
 * associated with or disassociated from access points as the device physically
 * moves.
 *
 * Different operating systems return different tidbits of information regarding
 * their network interfaces using sometimes wildly differing mechanisms, and
 * reporting what is conceptually the same information in sometimes wildly
 * differing formats.
 *
 * It is often desired to get information about network interfaces irrespective
 * of whether or not IP addresses are assigned or whether IPv4 or IPv6 addresses
 * may be present.
 *
 * This function provides an OS-indepenent way of reporting network interface
 * information in a relatively abstract way, providing as much or as little
 * information as may be available at any time.
 *
 * @param entries A vector of IfConfigEntry that will be filled out
 *     with information on the found network interfaces.
 *
 * @return Status of the operation.  Returns ER_OK on success.
 *
 * @see IfConfigEntry
 */
QStatus IfConfig(std::vector<IfConfigEntry>& entries);

/**
 * @brief Watch for network event notifications.
 *
 */
SocketFd NetworkEventSocket();

/**
 * @brief Process network event notifications.
 *
 */
NetworkEventType NetworkEventReceive(SocketFd sockFd, NetworkEventSet& networkEvents);

} // namespace ajn

#endif // _IFCONFIG_H