Skip to content

Commit

Permalink
[netdevice] Add vlan_tag() to get the VLAN tag of a network device
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
stefanhaRH authored and mcb30 committed Mar 1, 2013
1 parent 09c5109 commit 7426177
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/include/ipxe/vlan.h
Expand Up @@ -61,6 +61,7 @@ struct vlan_header {

extern struct net_device * vlan_find ( struct net_device *trunk,
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_create ( struct net_device *trunk, unsigned int tag,
unsigned int priority );
Expand Down
11 changes: 11 additions & 0 deletions src/net/netdevice.c
Expand Up @@ -33,6 +33,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
#include <ipxe/init.h>
#include <ipxe/device.h>
#include <ipxe/errortab.h>
#include <ipxe/vlan.h>
#include <ipxe/netdevice.h>

/** @file
Expand Down Expand Up @@ -783,5 +784,15 @@ static void net_step ( struct process *process __unused ) {
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 */
PERMANENT_PROCESS ( net_process, net_step );
17 changes: 17 additions & 0 deletions src/net/vlan.c
Expand Up @@ -282,6 +282,23 @@ struct net_protocol vlan_protocol __net_protocol = {
.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
*
Expand Down

0 comments on commit 7426177

Please sign in to comment.