The differences between legacy io-net drivers and other drivers include the following:
- The io-net drivers export a name space entry,
/dev/io-net/enx.
Native drivers don't.
Note:
Because of this, a
waitfor
command for such an entry won't work properly in buildfiles or scripts.
Use
if_up -p
instead; for example, instead of
waitfor /dev/io-net/en0, use
if_up -p en0.
- You can unmount an io-net driver
(umount /dev/io-net/enx).
With a native driver, you have to destroy it
(ifconfig tsec0 destroy).
- The io-net drivers are all prefixed with en.
Native drivers have different prefixes for different hardware (e.g.
tsec for Freescale TSEC devices), although you can override
this with the name= driver option (processed by
io-pkt).
- The io-net drivers support the io-net
devctl() commands.
Native drivers don't.
- The io-net drivers are slower than native drivers,
since they use the same threading model as that used in io-net.
- The io-net driver DLLs are prefixed by devn-.
Core Networking drivers are prefixed by devnp-.
- The io-net drivers used the speed and
duplex command-line options to override the auto-negotiated
link defaults once.
Often the use of these options caused more problems than they fixed.
Native (and most ported NetBSD drivers) allow their speed
and duplex setting to be determined at runtime via a device
ioctl(), which ifconfig uses.
See ifconfig -m and
ifconfig mediaopt.