mirror of https://github.com/ipxe/ipxe.git
[netdevice] Add vlan_tag() to get the VLAN tag of a network device
The iBFT has a VLAN field that should be filled in. Add the vlan_tag() function to extract the VLAN tag of a network device. Since VLAN support is optional, define a weak function that returns 0 when iPXE is built without VLAN support. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/8/head
parent
09c5109b85
commit
7426177d63
|
@ -61,6 +61,7 @@ struct vlan_header {
|
||||||
|
|
||||||
extern struct net_device * vlan_find ( struct net_device *trunk,
|
extern struct net_device * vlan_find ( struct net_device *trunk,
|
||||||
unsigned int tag );
|
unsigned int tag );
|
||||||
|
extern unsigned int vlan_tag ( struct net_device *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 );
|
||||||
|
|
|
@ -33,6 +33,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
||||||
#include <ipxe/init.h>
|
#include <ipxe/init.h>
|
||||||
#include <ipxe/device.h>
|
#include <ipxe/device.h>
|
||||||
#include <ipxe/errortab.h>
|
#include <ipxe/errortab.h>
|
||||||
|
#include <ipxe/vlan.h>
|
||||||
#include <ipxe/netdevice.h>
|
#include <ipxe/netdevice.h>
|
||||||
|
|
||||||
/** @file
|
/** @file
|
||||||
|
@ -783,5 +784,15 @@ static void net_step ( struct process *process __unused ) {
|
||||||
net_poll();
|
net_poll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the VLAN tag (when VLAN support is not present)
|
||||||
|
*
|
||||||
|
* @v netdev Network device
|
||||||
|
* @ret tag 0, indicating that device is not a VLAN device
|
||||||
|
*/
|
||||||
|
__weak unsigned int vlan_tag ( struct net_device *netdev __unused ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/** Networking stack process */
|
/** Networking stack process */
|
||||||
PERMANENT_PROCESS ( net_process, net_step );
|
PERMANENT_PROCESS ( net_process, net_step );
|
||||||
|
|
|
@ -282,6 +282,23 @@ struct net_protocol vlan_protocol __net_protocol = {
|
||||||
.rx = vlan_rx,
|
.rx = vlan_rx,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the VLAN tag
|
||||||
|
*
|
||||||
|
* @v netdev Network device
|
||||||
|
* @ret tag VLAN tag, or 0 if device is not a VLAN device
|
||||||
|
*/
|
||||||
|
unsigned int vlan_tag ( struct net_device *netdev ) {
|
||||||
|
struct vlan_device *vlan;
|
||||||
|
|
||||||
|
if ( netdev->op == &vlan_operations ) {
|
||||||
|
vlan = netdev->priv;
|
||||||
|
return vlan->tag;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if network device can be used as a VLAN trunk device
|
* Check if network device can be used as a VLAN trunk device
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue