/** @file
 * @brief VLAN specific definitions.
 *
 * Virtual LAN specific definitions.
 */

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

#ifndef __ETHERNET_VLAN_H
#define __ETHERNET_VLAN_H

/**
 * @brief VLAN definitions and helpers
 * @defgroup vlan Virtual LAN definitions and helpers
 * @ingroup networking
 * @{
 */

#include <zephyr/types.h>

#ifdef __cplusplus
extern "C" {
#endif

#define NET_VLAN_TAG_UNSPEC 0x0fff

/* Get VLAN identifier from TCI */
static inline u16_t net_eth_vlan_get_vid(u16_t tci)
{
	return tci & 0x0fff;
}

/* Get Drop Eligible Indicator from TCI */
static inline u8_t net_eth_vlan_get_dei(u16_t tci)
{
	return (tci >> 12) & 0x01;
}

/* Get Priority Code Point from TCI */
static inline u8_t net_eth_vlan_get_pcp(u16_t tci)
{
	return (tci >> 13) & 0x07;
}

/* Set VLAN identifier to TCI */
static inline u16_t net_eth_vlan_set_vid(u16_t tci, u16_t vid)
{
	return (tci & 0xf000) | (vid & 0x0fff);
}

/* Set Drop Eligible Indicator to TCI */
static inline u16_t net_eth_vlan_set_dei(u16_t tci, bool dei)
{
	return (tci & 0xefff) | ((!!dei) << 12);
}

/* Set Priority Code Point to TCI */
static inline u16_t net_eth_vlan_set_pcp(u16_t tci, u8_t pcp)
{
	return (tci & 0x1fff) | ((pcp & 0x07) << 13);
}

#ifdef __cplusplus
}
#endif

/**
 * @}
 */


#endif /* __ETHERNET_VLAN_H */
