/*
 * Copyright (c) 2016 Intel Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * @file
 * @brief IEEE 802.15.4 Net Management Private API
 */

#ifndef __IEEE802154_MGMT_PRIV_H__
#define __IEEE802154_MGMT_PRIV_H__

#include "ieee802154_frame.h"

#ifdef CONFIG_NET_MGMT

static inline bool ieee802154_is_scanning(struct net_if *iface)
{
	struct ieee802154_context *ctx = net_if_l2_data(iface);

	return !(!ctx->scan_ctx);
}

static inline void ieee802154_mgmt_init(struct net_if *iface)
{
	struct ieee802154_context *ctx = net_if_l2_data(iface);

	k_sem_init(&ctx->scan_ctx_lock, 1, 1);
}

/**
 * Handles the given Beacon frame.
 *
 * Returns NET_OK if successful. It's the caller's responsibility
 * to release the corresponding package in that case.
 */
enum net_verdict ieee802154_handle_beacon(struct net_if *iface,
					  struct ieee802154_mpdu *mpdu,
					  uint8_t lqi);

/**
 * Executes the given MAC command.
 *
 * Returns NET_OK if successful. It's the caller's responsibility
 * to release the corresponding package in that case.
 */
enum net_verdict ieee802154_handle_mac_command(struct net_if *iface,
					       struct ieee802154_mpdu *mpdu);

#else /* CONFIG_NET_MGMT */

#define ieee802154_is_scanning(...) false
#define ieee802154_mgmt_init(...)
#define ieee802154_handle_beacon(...) NET_DROP
#define ieee802154_handle_mac_command(...) NET_DROP

#endif /* CONFIG_NET_MGMT */

#endif /* __IEEE802154_MGMT_PRIV_H__ */
