blob: 2a95ef948767c7711a4d63c0874ca803452c0a7b [file] [log] [blame]
// Copyright 2020 The Fuchsia 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 SRC_CONNECTIVITY_NETWORK_DRIVERS_NETWORK_DEVICE_MAC_TEST_UTIL_H_
#define SRC_CONNECTIVITY_NETWORK_DRIVERS_NETWORK_DEVICE_MAC_TEST_UTIL_H_
#include <lib/zx/event.h>
#include "mac_interface.h"
namespace network {
namespace testing {
constexpr zx_signals_t kConfigurationChangedEvent = ZX_USER_SIGNAL_0;
class FakeMacDeviceImpl : public ddk::MacAddrImplProtocol<FakeMacDeviceImpl> {
public:
FakeMacDeviceImpl();
zx_status_t CreateChild(std::unique_ptr<MacAddrDeviceInterface>* out);
void MacAddrImplGetAddress(uint8_t out_mac[MAC_SIZE]);
void MacAddrImplGetFeatures(features_t* out_features);
void MacAddrImplSetMode(mode_t mode, const uint8_t* multicast_macs_list,
size_t multicast_macs_count);
zx_status_t WaitConfigurationChanged();
uint8_t* mac() { return mac_; }
features_t& features() { return features_; }
mode_t mode() { return mode_; }
std::vector<MacAddress>& addresses() { return addresses_; }
mac_addr_impl_protocol_t proto() {
return mac_addr_impl_protocol_t{.ops = &mac_addr_impl_protocol_ops_, .ctx = this};
}
private:
uint8_t mac_[MAC_SIZE] = {0x00, 0x02, 0x03, 0x04, 0x05, 0x06};
features_t features_{};
mode_t mode_ = 0;
std::vector<MacAddress> addresses_;
zx::event event_;
};
} // namespace testing
} // namespace network
#endif // SRC_CONNECTIVITY_NETWORK_DRIVERS_NETWORK_DEVICE_MAC_TEST_UTIL_H_