// Copyright (c) 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_BASE_NET_UTIL_MAC_H_
#define NET_BASE_NET_UTIL_MAC_H_

// This file is only used to expose some of the internals
// of net_util_mac.cc to tests.

#include "base/macros.h"
#include "net/base/net_export.h"
#include "net/base/net_util.h"

struct ifaddrs;
struct sockaddr;

namespace net {
namespace internal {

class NET_EXPORT IPAttributesGetterMac {
 public:
  IPAttributesGetterMac() {}
  virtual ~IPAttributesGetterMac() {}
  virtual bool IsInitialized() const = 0;
  virtual bool GetIPAttributes(const char* ifname,
                               const sockaddr* sock_addr,
                               int* native_attributes) = 0;

 private:
  DISALLOW_COPY_AND_ASSIGN(IPAttributesGetterMac);
};

NET_EXPORT bool GetNetworkListImpl(NetworkInterfaceList* networks,
                                   int policy,
                                   const ifaddrs* interfaces,
                                   IPAttributesGetterMac* ip_attributes_getter);

}  // namespace internal
}  // namespace net

#endif  // NET_BASE_NET_UTIL_MAC_H_
