Bueno, varias razones.
Primero, diferentes tarjetas de red hacen cosas muy diferentes. No solo estoy hablando de tarjetas de red para diferentes tipos de red. Si está utilizando Linux y ethtool está instalado, le sugiero que mire todas las cosas diferentes que admite su tarjeta ethernet. Si tiene a mano una marca diferente de tarjeta ethernet, cámbiela y use la herramienta nuevamente. Algunos de los parámetros han cambiado.
Pero va más allá de eso.
Algunas tarjetas ethernet admiten la descarga de algunas / todas las funciones TCP / IP en la tarjeta. La mayoría no lo hace.
Algunas tarjetas ethernet admiten multidifusión en hardware, algunas utilizan el modo promiscuo para admitirlo. Varía.
Algunas tarjetas ethernet admiten múltiples conexiones. Los que lo hacen, algunos lo admiten solo para la conmutación por error de red y otros lo admiten para múltiples rutas. Unos pocos pueden hacer ambas cosas.
Algunas tarjetas ethernet admiten RDMA, la mayoría no.
Y ahora en las redes no ethernet.
Estos incluyen, pero no se limitan a, Infiniband, SCI, T1 / T3, Fieldbus, SCADA, O8, bueno, entiendes la idea, creo.
Un controlador que pueda manejar cada uno de estos casos sería extremadamente complejo. La complejidad es el enemigo. Mantenlo simple. Un controlador que maneja bien un caso es mucho, mucho mejor que un controlador que puede manejar mil casos extremadamente mal.
Lo que suele suceder es que tienes capas de abstracción. Es posible que tenga una capa de abstracción de bus, ya que no es obvio por qué un controlador debería preocuparse si está utilizando PCI Express, HyperTransport o VXI como transporte. Necesita una API que pueda usar para hablar con la tarjeta, la implementación de esa API no le preocupa.
Su controlador de red generalmente se ubicará en algún lugar, lo que proporciona una API independiente del dispositivo para algún tipo de adaptador de red virtual. En algunos casos, puede haber múltiples controladores, ya que algunas suposiciones por el diseño de la interfaz de red pueden ser falsas.
Hay otro punto a considerar. La mayoría de los conductores no son difíciles en tiempo real. A veces, se requiere un controlador duro en tiempo real. El controlador debe ser capaz de garantizar que llevará una cantidad de tiempo predecible realizar cualquier función, independientemente de los parámetros que se le suministren y de las condiciones de la red. La función debe completarse a tiempo, siempre. Eso no es realmente posible en algunas interfaces de red y es muy difícil de obtener en otras. Tales restricciones aumentan los costos y costarán en funcionalidad, por lo que es una compensación.
Del mismo modo, el mercado de alta confiabilidad requiere controladores que nunca pueden salir mal, bajo ninguna circunstancia. Demostrar que es increíblemente lento.
Luego, está el mercado informático de alto rendimiento. Urk Recuerde, SCI e Infiniband tienen latencias menores de 10ns. Un controlador genérico no debe tener una ruta que altere significativamente esto, o es inútil en el mercado de HPC.
Tener un controlador donde pueda cambiar entre normal, difícil en tiempo real, alta confiabilidad y alto rendimiento significaría tener un controlador que será demasiado grande para muchos sistemas embebidos y demasiado caro para la mayoría de los consumidores. Para los sistemas donde se requiere la calificación EAL7 o A1 (y por lo tanto el software debe ser demostrablemente correcto y seguro), puede agregar a la etiqueta de precio cuantos ceros desee.
De hecho, si pudiera imaginar un controlador monolítico (si es modular, también podría tener varios controladores) que podría cumplir con todos los requisitos y admitir todos los protocolos en línea, estaría muy impresionado.
Ahora, debo señalar que no le diré que no se puede hacer. Obviamente, podría construir un ASIC gigante y tener todas las complejidades anteriores en hardware. Luego tiene un controlador de software perfectamente genérico como interfaz para el ASIC.
Pero si se va a tomar la molestia de hacer que algo sea tan caro, ¿por qué no tenerlo en su propia tarjeta de red, donde puede conectar y usar diferentes puertos de interfaz?
Por supuesto, volvemos a que cada tarjeta de red tiene su propio controlador. 🙂
Si esto es algo que querrías hacer, admiro la ambición y no tengo absolutamente ningún problema en proporcionar toda la ayuda y el tiempo que pueda para un proyecto de este tipo. No hay nada mejor que demostrar que está equivocado en el buen sentido y respaldaré cualquier cosa que se proponga hacer eso.
(Soy un científico de corazón. La falsificación de una teoría es todo el punto del campo).