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