[vlan] Allow external code to identify VLAN priority as well as tag

Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/838/head
Michael Brown 2022-12-09 14:40:54 +00:00
parent b0ded89e91
commit 5e62b4bc6c
3 changed files with 19 additions and 7 deletions

View File

@ -61,7 +61,19 @@ struct vlan_header {
*/ */
#define VLAN_PRIORITY_IS_VALID( priority ) ( (priority) <= 7 ) #define VLAN_PRIORITY_IS_VALID( priority ) ( (priority) <= 7 )
extern unsigned int vlan_tag ( struct net_device *netdev ); extern unsigned int vlan_tci ( struct net_device *netdev );
/**
* Get the VLAN tag
*
* @v netdev Network device
* @ret tag VLAN tag, or 0 if device is not a VLAN device
*/
static inline __attribute__ (( always_inline )) unsigned int
vlan_tag ( struct net_device *netdev ) {
return VLAN_TAG ( vlan_tci ( netdev ) );
}
extern int vlan_can_be_trunk ( struct net_device *trunk ); extern int vlan_can_be_trunk ( struct net_device *trunk );
extern int vlan_create ( struct net_device *trunk, unsigned int tag, extern int vlan_create ( struct net_device *trunk, unsigned int tag,
unsigned int priority ); unsigned int priority );

View File

@ -1171,12 +1171,12 @@ static void net_step ( struct process *process __unused ) {
} }
/** /**
* Get the VLAN tag (when VLAN support is not present) * Get the VLAN tag control information (when VLAN support is not present)
* *
* @v netdev Network device * @v netdev Network device
* @ret tag 0, indicating that device is not a VLAN device * @ret tag 0, indicating that device is not a VLAN device
*/ */
__weak unsigned int vlan_tag ( struct net_device *netdev __unused ) { __weak unsigned int vlan_tci ( struct net_device *netdev __unused ) {
return 0; return 0;
} }

View File

@ -288,17 +288,17 @@ struct net_protocol vlan_protocol __net_protocol = {
}; };
/** /**
* Get the VLAN tag * Get the VLAN tag control information
* *
* @v netdev Network device * @v netdev Network device
* @ret tag VLAN tag, or 0 if device is not a VLAN device * @ret tci VLAN tag control information, or 0 if not a VLAN device
*/ */
unsigned int vlan_tag ( struct net_device *netdev ) { unsigned int vlan_tci ( struct net_device *netdev ) {
struct vlan_device *vlan; struct vlan_device *vlan;
if ( netdev->op == &vlan_operations ) { if ( netdev->op == &vlan_operations ) {
vlan = netdev->priv; vlan = netdev->priv;
return vlan->tag; return ( VLAN_TCI ( vlan->tag, vlan->priority ) );
} else { } else {
return 0; return 0;
} }