Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / include / ipxe / vlan.h
1 #ifndef _IPXE_VLAN_H
2 #define _IPXE_VLAN_H
3
4 /**
5  * @file
6  *
7  * Virtual LANs
8  *
9  */
10
11 FILE_LICENCE ( GPL2_OR_LATER );
12
13 /** A VLAN header */
14 struct vlan_header {
15         /** Tag control information */
16         uint16_t tci;
17         /** Encapsulated protocol */
18         uint16_t net_proto;
19 } __attribute__ (( packed ));
20
21 /**
22  * Extract VLAN tag from tag control information
23  *
24  * @v tci               Tag control information
25  * @ret tag             VLAN tag
26  */
27 #define VLAN_TAG( tci ) ( (tci) & 0x0fff )
28
29 /**
30  * Extract VLAN priority from tag control information
31  *
32  * @v tci               Tag control information
33  * @ret priority        Priority
34  */
35 #define VLAN_PRIORITY( tci ) ( (tci) >> 13 )
36
37 /**
38  * Construct VLAN tag control information
39  *
40  * @v tag               VLAN tag
41  * @v priority          Priority
42  * @ret tci             Tag control information
43  */
44 #define VLAN_TCI( tag, priority ) ( ( (priority) << 13 ) | (tag) )
45
46 /**
47  * Check VLAN tag is valid
48  *
49  * @v tag               VLAN tag
50  * @ret is_valid        VLAN tag is valid
51  */
52 #define VLAN_TAG_IS_VALID( tag ) ( (tag) < 0xfff )
53
54 /**
55  * Check VLAN priority is valid
56  *
57  * @v priority          VLAN priority
58  * @ret is_valid        VLAN priority is valid
59  */
60 #define VLAN_PRIORITY_IS_VALID( priority ) ( (priority) <= 7 )
61
62 extern struct net_device * vlan_find ( struct net_device *trunk,
63                                        unsigned int tag );
64 extern unsigned int vlan_tag ( struct net_device *netdev );
65 extern int vlan_can_be_trunk ( struct net_device *trunk );
66 extern int vlan_create ( struct net_device *trunk, unsigned int tag,
67                          unsigned int priority );
68 extern int vlan_destroy ( struct net_device *netdev );
69
70 #endif /* _IPXE_VLAN_H */