[802.11] Support multicast hashing
authorMichael Brown <mcb30@etherboot.org>
Tue, 11 Aug 2009 23:40:26 +0000 (00:40 +0100)
committerMichael Brown <mcb30@etherboot.org>
Tue, 11 Aug 2009 23:54:29 +0000 (00:54 +0100)
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>
src/include/gpxe/ethernet.h
src/net/80211/net80211.c
src/net/ethernet.c

index bb82e0a..8cf6b1b 100644 (file)
@@ -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 */
index 91609d9..1fc983a 100644 (file)
@@ -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,
index dfeba7c..e8daf9f 100644 (file)
@@ -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;