We have software that sits between the IP layer and the NIC
driver and processes incoming and outgoing packets.  It worked
fine until the new Nemo interface with mac_rx()  was implemented 
in Solaris 10.

Now we want to be able configure/register our driver's receive function to be 
the 
only receive callback function that mac_rx() calls back from 
the bge driver. 

To this end some experimental code was created in our driver 
to call mac_open("/dev/bge0",..) in order to get the mac handle 
for bge.  After which we could then do a mac_rx_remove() of 
what's there and then a mac_rx_add() of our receive callback 
function. 

mac_open("/dev/bge0"...) is returning EINVAL.  It was found that 
the call to ddi_name_to_major() from mac_open() is returning "-1". 
ddi_name_to_major() calls mod_name_to_major() which calls 
find_mbind().  find_mbind() goes thru mb_hashtab[] looking for the 
driver name of "/dev/bge" and doesn't find it. 

Is our above objective doable?  That is, using the mac_* API can 
we register our receive callback function as the only callback 
receive function for the bge driver? 

Are we using the mac_* API correctly?  Maybe we need to do more 
than just a mac_open("/dev/bge0") and then mac_rx_add()?  If we 
are not using it correctly, what other API functions do we need 
to call?
 
 
This message posted from opensolaris.org
_______________________________________________
networking-discuss mailing list
[email protected]

Reply via email to