mirror of https://github.com/ipxe/ipxe.git
[ethernet] Move Ethernet MAC address checking routines to ethernet.h
Originally-fixed-by: Faur Andrei <da3drus@gmail.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/1/head
parent
3fc4fd3213
commit
75333f464e
|
@ -18,6 +18,7 @@ FILE_LICENCE(GPL2_ONLY);
|
|||
#include <stdio.h>
|
||||
#include <ipxe/malloc.h>
|
||||
#include <ipxe/iobuf.h>
|
||||
#include <ipxe/ethernet.h>
|
||||
#include <byteswap.h>
|
||||
|
||||
#include "vxge_traffic.h"
|
||||
|
|
|
@ -211,22 +211,6 @@ struct vxgedev {
|
|||
char fw_version[VXGE_HW_FW_STRLEN];
|
||||
};
|
||||
|
||||
static inline int is_zero_ether_addr(const u8 *addr)
|
||||
{
|
||||
return !(addr[0] | addr[1] | addr[2] | addr[3] | addr[4] | addr[5]);
|
||||
}
|
||||
|
||||
static inline int is_multicast_ether_addr(const u8 *addr)
|
||||
{
|
||||
return (0x01 & addr[0]);
|
||||
}
|
||||
|
||||
/* checks the ethernet address @addr is a valid unicast */
|
||||
static inline int is_valid_ether_addr(const u8 *addr)
|
||||
{
|
||||
return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr);
|
||||
}
|
||||
|
||||
void vxge_vpath_intr_enable(struct vxgedev *vdev, int vp_id);
|
||||
|
||||
void vxge_vpath_intr_disable(struct vxgedev *vdev, int vp_id);
|
||||
|
|
|
@ -11,6 +11,72 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* Check if Ethernet address is all zeroes
|
||||
*
|
||||
* @v addr Ethernet address
|
||||
* @ret is_zero Address is all zeroes
|
||||
*/
|
||||
static inline int is_zero_ether_addr ( const void *addr ) {
|
||||
const uint8_t *addr_bytes = addr;
|
||||
|
||||
return ( ! ( addr_bytes[0] | addr_bytes[1] | addr_bytes[2] |
|
||||
addr_bytes[3] | addr_bytes[4] | addr_bytes[5] ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if Ethernet address is a multicast address
|
||||
*
|
||||
* @v addr Ethernet address
|
||||
* @ret is_mcast Address is a multicast address
|
||||
*
|
||||
* Note that the broadcast address is also a multicast address.
|
||||
*/
|
||||
static inline int is_multicast_ether_addr ( const void *addr ) {
|
||||
const uint8_t *addr_bytes = addr;
|
||||
|
||||
return ( addr_bytes[0] & 0x01 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if Ethernet address is locally assigned
|
||||
*
|
||||
* @v addr Ethernet address
|
||||
* @ret is_local Address is locally assigned
|
||||
*/
|
||||
static inline int is_local_ether_addr ( const void *addr ) {
|
||||
const uint8_t *addr_bytes = addr;
|
||||
|
||||
return ( addr_bytes[0] & 0x02 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if Ethernet address is the broadcast address
|
||||
*
|
||||
* @v addr Ethernet address
|
||||
* @ret is_bcast Address is the broadcast address
|
||||
*/
|
||||
static inline int is_broadcast_ether_addr ( const void *addr ) {
|
||||
const uint8_t *addr_bytes = addr;
|
||||
|
||||
return ( ( addr_bytes[0] & addr_bytes[1] & addr_bytes[2] &
|
||||
addr_bytes[3] & addr_bytes[4] & addr_bytes[5] ) == 0xff );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if Ethernet address is valid
|
||||
*
|
||||
* @v addr Ethernet address
|
||||
* @ret is_valid Address is valid
|
||||
*
|
||||
* Check that the Ethernet address (MAC) is not 00:00:00:00:00:00, is
|
||||
* not a multicast address, and is not ff:ff:ff:ff:ff:ff.
|
||||
*/
|
||||
static inline int is_valid_ether_addr ( const void *addr ) {
|
||||
return ( ( ! is_multicast_ether_addr ( addr ) ) &&
|
||||
( ! is_zero_ether_addr ( addr ) ) );
|
||||
}
|
||||
|
||||
extern void eth_init_addr ( const void *hw_addr, void *ll_addr );
|
||||
extern const char * eth_ntoa ( const void *ll_addr );
|
||||
extern int eth_mc_hash ( unsigned int af, const void *net_addr,
|
||||
|
|
Loading…
Reference in New Issue