summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2009-08-12 01:40:26 +0200
committerMichael Brown2009-08-12 01:54:29 +0200
commita7290a970c0d4e28600c29c12d8fa486c5a82b97 (patch)
tree5ebe248492a8f52802cb90b3d74727bf232a74c4
parent[802.11] Properly initialize autoassociation process (diff)
downloadipxe-a7290a970c0d4e28600c29c12d8fa486c5a82b97.tar.gz
ipxe-a7290a970c0d4e28600c29c12d8fa486c5a82b97.tar.xz
ipxe-a7290a970c0d4e28600c29c12d8fa486c5a82b97.zip
[802.11] Support multicast hashing
802.11 multicast hashing is the same as standard Ethernet hashing, so just expose and use eth_mc_hash(). Signed-off-by: Joshua Oreman <oremanj@rwcr.net>
-rw-r--r--src/include/gpxe/ethernet.h2
-rw-r--r--src/net/80211/net80211.c21
-rw-r--r--src/net/ethernet.c3
3 files changed, 4 insertions, 22 deletions
diff --git a/src/include/gpxe/ethernet.h b/src/include/gpxe/ethernet.h
index bb82e0a4..8cf6b1be 100644
--- a/src/include/gpxe/ethernet.h
+++ b/src/include/gpxe/ethernet.h
@@ -13,6 +13,8 @@ FILE_LICENCE ( GPL2_OR_LATER );
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,
+ void *ll_addr );
extern struct net_device * alloc_etherdev ( size_t priv_size );
#endif /* _GPXE_ETHERNET_H */
diff --git a/src/net/80211/net80211.c b/src/net/80211/net80211.c
index 91609d90..1fc983a0 100644
--- a/src/net/80211/net80211.c
+++ b/src/net/80211/net80211.c
@@ -160,8 +160,6 @@ static int net80211_ll_push ( struct net_device *netdev,
static int net80211_ll_pull ( struct net_device *netdev,
struct io_buffer *iobuf, const void **ll_dest,
const void **ll_source, uint16_t * net_proto );
-static int net80211_ll_mc_hash ( unsigned int af, const void *net_addr,
- void *ll_addr );
/** @} */
/**
@@ -580,23 +578,6 @@ static int net80211_ll_pull ( struct net_device *netdev __unused,
return 0;
}
-/**
- * Hash 802.11 multicast address
- *
- * @v af Address family
- * @v net_addr Network-layer address
- * @ret ll_addr Filled link-layer address
- * @ret rc Return status code
- *
- * Currently unimplemented.
- */
-static int net80211_ll_mc_hash ( unsigned int af __unused,
- const void *net_addr __unused,
- void *ll_addr __unused )
-{
- return -ENOTSUP;
-}
-
/** 802.11 link-layer protocol */
static struct ll_protocol net80211_ll_protocol __ll_protocol = {
.name = "802.11",
@@ -604,7 +585,7 @@ static struct ll_protocol net80211_ll_protocol __ll_protocol = {
.pull = net80211_ll_pull,
.init_addr = eth_init_addr,
.ntoa = eth_ntoa,
- .mc_hash = net80211_ll_mc_hash,
+ .mc_hash = eth_mc_hash,
.ll_proto = htons ( ARPHRD_ETHER ), /* "encapsulated Ethernet" */
.hw_addr_len = ETH_ALEN,
.ll_addr_len = ETH_ALEN,
diff --git a/src/net/ethernet.c b/src/net/ethernet.c
index dfeba7cd..e8daf9f9 100644
--- a/src/net/ethernet.c
+++ b/src/net/ethernet.c
@@ -130,8 +130,7 @@ const char * eth_ntoa ( const void *ll_addr ) {
* @v ll_addr Link-layer address to fill in
* @ret rc Return status code
*/
-static int eth_mc_hash ( unsigned int af, const void *net_addr,
- void *ll_addr ) {
+int eth_mc_hash ( unsigned int af, const void *net_addr, void *ll_addr ) {
const uint8_t *net_addr_bytes = net_addr;
uint8_t *ll_addr_bytes = ll_addr;