%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                  %
%       CAPITULO 4: HARDWARE DE RED                                %
%                                                                  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                  %
% Traduccion realizada por:                                        %
%   David Escorial <descor@opera.dia.fi.upm.es>                    %
% Revisado en 21-Marzo-1997 por:                                   %
%   Juan Jose Amor <jjamor@ls.fi.upm.es>                           %
% Revisado en 13-Febrero-1999 por:                                 %
%   Juan Jose Amor <jjamor@ls.fi.upm.es>                           %
%                                                                  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\chapter{Configuraci\'on del Hardware de Red}                          
\label{hardware}
\index{configuraci\'on!hardware de red|(}
\index{hardware!interconexi\'on|(}

\section{Dispositivos, Controladores, y todo lo dem\'as}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{hardware.drivers}
\index{red!dispositivos}
\index{interface}

Hasta ahora, hemos estado hablando bastante sobre los interfaces de 
red pero sin explicar realmente qu\'e es lo que pasa cuando el ``c\'odigo de red''
en el n\'ucleo accede a una parte del hardware. Para ello, y antes que nada, 
tenemos que hablar un poco sobre los conceptos de interface y controladores.

Primero, evidentemente, est\'a el hardware por s\'{\i} mismo; por ejemplo, una 
tarjeta Ethernet es: una oblea de Silicio, atiborrada de montones de peque\~nos 
chips con est\'upidos n\'umeros en el lomo e insertada en una ranura de su PC. 
Esto es lo que por lo general denominamos un dispositivo.
	
Para poder utilizar la tarjeta Ethernet son necesarias una serie de funciones 
especiales definidas en el n\'ucleo de \linux{} que ser\'an capaces de entender 
la forma particular de acceso al dispositivo. Esta serie de funciones son 
los denominados controladores\footnote{N. del T.: Con frecuencia,
la bibliograf\'{\i}a especializada en espa\~nol tambi\'en los llama
{\it manejadores}} del dispositivo. Por ejemplo, \linux{} tiene 
controladores de dispositivos para varias marcas de tarjetas Ethernet que son 
muy parecidas en su funcionamiento. Son conocidos como los ``Controladores 
de la Serie Becker'', debido a su autor, Donald Becker. Otro ejemplo puede 
ser el del controlador D-Link, que gestiona un adaptador de bolsillo D-Link 
conectado a un puerto paralelo.
	
Pero ?`qu\'e es lo que queremos decir con que un controlador ``gestione''
un dispositivo? Volvamos a la tarjeta Ethernet que examinamos antes. El 
controlador tiene que ser capaz de comunicarse de alguna forma con la l\'ogica 
interna de la tarjeta: tiene que enviar \'ordenes y datos a la tarjeta, 
mientras que la tarjeta debe transmitir al controlador cualquier dato recibido.

%%%%%%%%%%%%%%%%%%%      Figura iface.* 
\iftex
 \begin{figure}[tbp]
  \ifps
   \begin{center}
    \mbox{ \epsfile{figures/iface.epsf} }
   \end{center}
  \else
   \begin{center}
    \input{iface.eepic}
   \end{center}
  \fi
  \caption{
   \label{hardware.fig.drivers}
   Relaci\'on entre controladores, interfaces, y hardware.
  }
 \end{figure}
\else
\fi
   
En un PC, esta comunicaci\'on tiene lugar a trav\'es de un \'area de memoria de E/S 
que se corresponde con los registros internos de la tarjeta y a la inversa. Todas 
las \'ordenes y datos que el n\'ucleo env\'{\i}a a la tarjeta tienen que ir a trav\'es de 
estos registros. El \'area de memoria de E/S de la tarjeta se describe por lo general mediante su 
\emph{direcci\'on base} o de comienzo. Direcciones habituales para tarjetas 
Ethernet son la \addr{0x300} o la \addr{0x360}.

Normalmente no hay que preocuparse por factores de hardware como las 
direcciones base, ya que en tiempo de arranque el n\'ucleo hace un
intento para detectar la localizaci\'on de la tarjeta. Esto se
denomina {\it autoverificaci\'on}\footnote{N. del T.: Del ingl\'es {\it
autoprobing}},
que implica que el n\'ucleo lea varias posiciones de memoria y 
compare los datos le\'{\i}dos con los que deber\'{\i}a haber si existiese una tarjeta 
Ethernet instalada all\'{\i}. De todas maneras, puede haber tarjetas Ethernet que 
no sean detectadas autom\'aticamente; esto ocurre a veces con tarjetas Ethernet 
baratas que no son r\'eplicas exactas de tarjetas est\'andar de otros 
fabricantes. Por otro lado, el n\'ucleo intentar\'a detectar un \'unico dispositivo 
Ethernet al arrancar. Si se utiliza m\'as de una tarjeta, hay que indic\'arselo
expl\'{\i}citamente al n\'ucleo.

\index{IRQ}
Otro de los par\'ametros que se pueden decir de forma expl\'{\i}cita al n\'ucleo es el 
canal de petici\'on de interrupci\'on. Los componentes hardware normalmente 
interrumpen al n\'ucleo cuando tienen necesidad de que \'este se ocupe
de ellos, por ejemplo cuando han llegado datos, o se presenta una
condici\'on especial. 
En un PC, las interrupciones pueden comunicarse mediante uno de los 15 canales de 
interrupci\'on numerados 0,1 y del 3 al 15. El n\'umero de interrupci\'on asignado 
a un componente hardware se denomina su \emph{n\'umero de petici\'on de 
interrupci\'on}, o IRQ\footnote{
  Los IRQs 2 y 9 son los mismos debido a que el PC tiene dos procesadores 
  de interrupciones en cascada con 8 IRQs cada uno; el procesador secundario 
  est\'a conectado al IRQ 2 del primario.
}\footnote{N. del T.: Del ingl\'es {\it Interrupt ReQuest}}.

\index{IP!interface}
\index{interface}
Como se explicaba en el cap\'{\i}tulo~\ref{tcpip}, el n\'ucleo accede a un 
dispositivo mediante lo que llam\'abamos una interfaz. Las interfaces 
ofrecen un conjunto abstracto de funciones que es el mismo para todo 
tipo de hardware. Por ejemplo, con funciones para enviar o recibir
datagramas.

Los interfaces se identifican mediante nombres. Estos nombres se definen 
internamente en el n\'ucleo, y no son ficheros de dispositivos del directorio 
\file{/dev}. Nombres t\'{\i}picos para los interfaces Ethernet son 
\file{eth0}, \file{eth1}, etc. La asignaci\'on de interfaces a los dispositivos 
depende normalmente del orden en el que los dispositivos son configurados; por 
ejemplo la primera tarjeta Ethernet instalada ser\'a \file{eth0}, la siguiente 
\file{eth1}, y as\'{\i} sucesivamente. Una excepci\'on a esta regla son las interfaces 
SLIP y algunas otras, que son asignadas de forma din\'amica; es decir, al
establecerse una 
conexi\'on SLIP, se asigna una interface al puerto serie.

El gr\'afico de la figura~\ref{hardware.fig.drivers} muestra la relaci\'on entre 
el hardware, los controladores de dispositivos e interfaces.

Al arrancar, el n\'ucleo muestra cada dispositivo que es detectado, y
qu\'e interfaces se est\'an instalando. Lo siguiente es un extracto de la
pantalla de arranque:

\begin{tscreen}
\begin{verbatim}
 .
 .
This processor honours the WP bit even  when in supervisor mode. Good.
Floppy drive(s): fd0 is 1.44M
Swansea University Computer Society NET3.010
IP Protocols: ICMP, UDP, TCP
PPP: version 0.2.1 (4 channels) OPTIMIZE FLAGS
TCP compresssion code copyright 1989 Regents of the University of California
PPP line discipline registered.
SLIP: version 0.7.5 (4 channels)
CSLIP: code copyright 1989 Regents of the University of California
dl0: D-Link DE-600 pocket adapter, Ethernet Address: 00:80:C8:71:76:95
Checking 386/387 coupling... Ok, fpu using exception 16 error reporting.
Linux version 1.1.11 (okir@monad) #3 Sat May 7 14:57:18 MET DST 1994
\end{verbatim}
\end{tscreen}


\'Esta indica que el n\'ucleo ha sido compilado para TCP/IP, y se incluyen los 
controladores para SLIP, CSLIP, y PPP. La tercera l\'{\i}nea antes del final indica 
que se ha detectado un adaptador de bolsillo D-Link e instalado como el 
interface \file{dl0}. Si usted tiene un tipo diferente de tarjeta Ethernet, 
el n\'ucleo mostrar\'a normalmente una l\'{\i}nea comenzando por \file{eth0}, seguida 
por el tipo de tarjeta detectado. Si usted tiene una tarjeta Ethernet 
instalada pero no se refleja en ning\'un mensaje, significa que el n\'ucleo es 
incapaz de detectar su tarjeta adecuadamente. Trataremos este problema 
posteriormente.

\section{Configuraci\'on del n\'ucleo}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

La mayor\'{\i}a de las versiones de \linux{} se distribuyen con discos de arranque 
que funcionan en casi cualquier PC. Esto significa que el n\'ucleo tiene en 
esos discos todo tipo de controladores configurados que rara vez utilizar\'a, pero 
que ocupan un espacio innecesario en el sistema de memoria ya que con el 
n\'ucleo no puede hacerse {\it swapping}. Por tanto ser\'{\i}a conveniente crear un n\'ucleo 
propio, incluyendo s\'olo los controladores que realmente necesite o desee.

Al trabajar con un sistema \linux{}, le deber\'a resultar familiar el proceso
de construcci\'on del n\'ucleo. Los conceptos b\'asicos de c\'omo 
realizarlo se explican en la Gu\'{\i}a de Matt Welsh: ``Instalaci\'on y primeros 
pasos'', que tambi\'en forma parte de la serie de Documentaci\'on del Proyecto 
Linux. Por tanto, en esta secci\'on solo trataremos las opciones de 
configuraci\'on que afectan a la red.

Al ejecutar \term{make config}, se le preguntar\'a por una serie de 
configuraci\'ones generales, por ejemplo si desea emulaci\'on matem\'atica del 
n\'ucleo o no, etc. Una de las preguntas ser\'a si desea o no soporte para red 
TCP/IP. Si desea un n\'ucleo capaz de trabajar con la red debe ser contestada 
con \term{y} (S\'{I}).

\subsection{Opciones del n\'ucleo de \linux{} 1.0 o Versiones Posteriores}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\index{configurando!n\'ucleo}
\index{red!opciones del n\'ucleo}
\index{configuraci\'on de red del n\'ucleo}
\index{configurando!Ethernet}
\index{configurando!SLIP}
\index{configurando!PLIP}
\index{configurando!PPP}

Tras completar la parte de opciones generales, se pasar\'a a configurar 
distintos componentes: controladores SCSI, etc. La siguiente lista contiene
las preguntas que son sobre el soporte de red. N\'otese que el conjunto de opciones de 
configuraci\'on est\'a en constante cambio debido al continuo desarrollo. Una 
lista t\'{\i}pica de opciones que ofrecen los n\'ucleos de versiones entre la 1.0 y 
la 1.1 se parece a \'esta (los comentarios est\'an en cursiva):

\def\y{\term{y}}

\begin{tscreen}
\begin{verbatim}
*
* Network device support
* 
Network device support? (CONFIG ETHERCARDS) [y]
\end{verbatim}
\end{tscreen}

	A pesar de que se muestre la contestaci\'on por defecto entre corchetes, 
	la pregunta debe ser contestada con \y{} si desea utilizar 
	\emph{cualquier} tipo de dispositivos de red, no importa si son Ethernet, 
	SLIP o PPP. Si contesta a la pregunta con \y{}, se activar\'a 
	autom\'aticamente el soporte para dispositivos tipo Ethernet. El soporte 
	para otros tipos de controladores de red debe ser activado por separado:

\begin{tscreen}
\begin{verbatim}
SLIP (serial line) support? (CONFIG SLIP) [y]
SLIP compressed headers (SL COMPRESSED) [y]
PPP (point-to-point protocol) support (CONFIG PPP) [y]
PLIP (parallel port) support (CONFIG PLIP) [n]
\end{verbatim}
\end{tscreen}

	Estas preguntas conciernen a los diversos protocolos de nivel de enlace 
	soportados por Linux. SLIP permite transportar datagramas IP a trav\'es 
	de l\'{\i}neas serie. La opci\'on de compresi\'on de cabecera proporciona 
	el soporte CSLIP, una t\'ecnica que reduce las cabeceras TCP/IP a 
	tres bytes. Tenga en cuenta que esta opci\'on del n\'ucleo no activa 
	autom\'aticamente el soporte para CSLIP, solamente proporciona las 
	funciones necesarias del n\'ucleo para ello.
	
	PPP es otro de los protocolos para enviar tr\'afico a la red a trav\'es de 
	lineas serie. Es mucho m\'as flexible que SLIP, y no se limita a IP, 
	sino que, una vez que se implemente, tambi\'en soportar\'a IPX. Ya que el 
	soporte para PPP ha sido incluido hace poco, esto opci\'on puede no 
	aparecer en su n\'ucleo.

	PLIP proporciona una forma de enviar datagramas IP a trav\'es de un 
	puerto paralelo. Se utiliza generalmente para comunicar dos PCs bajo 
	DOS. El resto de las preguntas son acerca de tarjetas Ethernet de 
	diversos fabricantes. A medida que se  desarrollan m\'as controladores, la 
	lista de preguntas se hace mayor. Si desea construir un n\'ucleo que 
	quiera utilizar en varias m\'aquinas, tiene la posibilidad de activar 
	m\'as de un controlador.

\begin{tscreen}
\begin{verbatim}
NE2000/NE1000 support (CONFIG EN2000) [y]
WD80*3 support (CONFIG WD80x3) [n]
SMC Ultra support (CONFIG ULTRA) [n]
3c501 support (CONFIG EL1) [n]
3c503 support (CONFIG EL3) [n]
HP PCLAN support (CONFIG HPLAN) [n]
AT1500 and EN2100 (LANCE and PCnet-ISA) support (CONFIG LANCE) [n]
AT1700 support (CONFIG AT1700) [n]
DEPCA support (CONFIG DEPCA) [n]
D-Link DE600 pocket adaptor support (CONFIG DE600) [y]
AT-LAN-TEC/RealTek pocket adaptor support (CONFIG ATP) [n]
*
* CD-ROM drivers
*
...
\end{verbatim}
\end{tscreen}
\index{configurando!NFS}
	Por \'ultimo, en la secci\'on del sistema de ficheros, el script 
	de configuraci\'on le preguntar\'a, entre otras cosas, si desea soporte para 
	NFS (networking filesystem), el sistema de ficheros en red. NFS le 
	permitir\'a exportar sistemas de ficheros a diversos nodos, de forma que 
	parezcan como si estuviesen en un disco duro normal conectado a la
	m\'aquina local.

\begin{tscreen}
\begin{verbatim}
NFS filesystem support (CONFIG NFS FS) [y]
\end{verbatim}
\end{tscreen}

\subsection{Opciones del n\'ucleo de \linux{} 1.1.14 y Versiones Posteriores}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Comenzando con \linux{} 1.1.14, que inclu\'{\i}a una versi\'on {\it alpha} de IPX, el 
proceso de configuraci\'on vari\'o muy poco. Ahora las opciones de car\'acter 
general preguntan si se desea soporte de red en general. A continuaci\'on 
aparecen un par de preguntas adicionales.

\begin{tscreen}
\begin{verbatim}
*
* Networking options
*
TCP/IP networking (CONFIG INET) [y]
\end{verbatim}        
\end{tscreen}

	Para utilizar protocolos TCP/IP, se debe contestar con \term{y}. Pero 
	aunque conteste de forma negativa todav\'{\i}a ser\'a capaz de poder compilar 
	el n\'ucleo para que soporte IPX.

\begin{tscreen}
\begin{verbatim}
IP fordwarding/gatewaying (CONFIG IP FORWARD) [n]
\end{verbatim}
\end{tscreen}
\index{encaminamiento!IP}
\index{IP!encaminamiento}
	Tendr\'a que activar esta opci\'on si su sistema act\'ua como un puente 
	entre dos redes Ethernet, o entre una red Ethernet y un enlace SLIP, 
	etc. Aunque no cuesta nada activar esta opci\'on por defecto, podr\'{\i}a 
	querer desactivarla para configurar la m\'aquina como un
	{\it cortafuegos}\footnote{N.  del T.: Del ingl\'es {\it firewall}}.
	Los cortafuegos son nodos que se conectan a una o m\'as 
	redes, pero no encaminan tr\'afico entre ellos. Se utilizan normalmente 
	para proporcionar a los usuarios en una empresa acceso a Internet con 
	un riesgo m\'{\i}nimo para la red interna. A los usuarios se les permitir\'a 
	acceder al cortafuegos y utilizar servicios Internet, pero las 
	m\'aquinas de la empresa estar\'an protegidas de ataques externos ya 
	que cualquier conexi\'on entrante no puede cruzar el cortafuegos.

\begin{tscreen}
\begin{verbatim}
*
* (it is safe to leave these untouched)
PC/TCP compatibility mode (CONFIG INET PCTCP) [n]
\end{verbatim}
\end{tscreen}
\index{compatibilidad PC/TCP}
	Esta opci\'on evita incompatibilidades con algunas versiones de PC/TCP, 
	una implementaci\'on comercial de TCP/IP basada en DOS para PCs. Si 
	activa esta opci\'on, todav\'{\i}a ser\'a capaz de comunicarse con m\'aquinas 
	\unix{} normales, pero bajar\'a el rendimiento cuando el enlace sea 
	lento.

\begin{tscreen}
\begin{verbatim}
Reverse ARP (CONFIG INET RARP) [n]
\end{verbatim}
\end{tscreen}

\index{RARP}
	Esta funci\'on activa RARP, Protocolo de Resoluci\'on de Direcciones 
	Inverso. RARP se utiliza en clientes sin disco y terminales X para 
	pedir su direcci\'on IP al arrancar. Deber\'a activar RARP s\'olo cuando 
	planee que su m\'aquina sea un servidor para este tipo de clientes. El 
	\'ultimo paquete de utilidades de red (\file{net-0.32d}) contiene una 
	peque\~na utilidad llamada \prog{rarp} que permite a\~nadir direcciones 
	de nodos a una cache RARP.

\begin{tscreen}
\begin{verbatim}
Assume subnets are local (CONFIG INET SNARL) [y]
\end{verbatim}
\end{tscreen}

\index{IP!encaminamiento}
\index{IP!subred}
\index{subred (IP)}
\index{Toda Subrede es Local@Pol\'{\i}tica `Toda Subrede es Local'}
\index{SNARL|see {Pol\'{\i}tica `Toda Subred es Local'}}
	Al mandar datos TCP, el n\'ucleo tiene que dividir los env\'{\i}os en 
	diversos paquetes antes de pas\'arselo al nivel IP. Para m\'aquinas
	accesibles en redes locales como Ethernet , se utilizar\'an
	paquetes m\'as grandes que para m\'aquinas cuyos datos son enviados a 
	trav\'es de enlaces de larga distancia.\footnote{
	  Esto evita la fragmentaci\'on por enlaces que tienen un tama\~no de 
	  paquete m\'aximo muy peque\~no.
	} Si no se activa la opci\'on \keyword{SNARL}, el n\'ucleo asumir\'a
	como locales s\'olo a aquellas redes con las que
	en ese momento tenga una 
	interface. Si revisa la red de clase B en la Universidad Groucho Marx, 
	toda la red de clase B es local pero la mayor\'{\i}a de los hosts mantienen 
	una interface con s\'olo una o dos subredes. Si se activa la opci\'on 
	\keyword{SNARL}, el n\'ucleo asumir\'a \emph{todas} las subredes como 
	locales y utilizar\'a paquetes grandes cuando se comunique con todos los 
	nodos del campus.

	Si no desea utilizar tama\~nos de paquete peque\~nos para enviar datos a 
	m\'aquinas espec\'{\i}ficas (si, por ejemplo, utiliza un
	enlace SLIP para 
	la transmisi\'on de datos), tendr\'a que hacerlo mediante la opci\'on 
	\prog{mtu} del \prog{encaminamiento} (\prog{route}), que se describe 
	brevemente al final de este cap\'{\i}tulo.

\begin{tscreen}
\begin{verbatim}
Disable NAGLE algorithm (normally  enabled) (CONFIG TCP NAGLE OFF) [n]
\end{verbatim}
\end{tscreen}

\index{algoritmo de Nagle}
\index{evitar tinygrams}
\index{IP!tinygrams}
\index{tinygrams}
\index{pequegramas}
	La f\'ormula de Nagle es un m\'etodo heur\'{\i}stico para evitar enviar 
	paquetes IP particularmente peque\~nos, tambi\'en denominados
	{\it pequegramas}\footnote{N. del T.: Del ing\'es {\it tinygrams}}.
	Los pequegramas son utilizados normalmente por 
	herramientas de red interactivas que transmiten pulsaciones \'unicas de 
	teclas, como \prog{telnet} o \prog{rsh} (remote shell). Los pequegramas 
	pueden llegar a ser particularmente ineficientes bajo enlaces de banda
	estrecha como SLIP. El algoritmo de Nagle intenta evitarlos 
	reteniendo por poco tiempo la transmisi\'on de datos TCP en algunas 
	circustancias. Es recomendable desactivar el algoritmo de Nagle si tiene 
	graves problemas por paquetes perdidos.

\begin{tscreen}
\begin{verbatim}
The IPX protocol (CONFIG IPX) [n]
\end{verbatim}
\end{tscreen}
	
\index{configurando!IPX}
\index{protocolo!IPX}
\index{IPX}
	Activa la capacidad de soportar el protocolo IPX, el protocolo de 
	transporte utilizado por Novell Networking; que sigue todav\'{\i}a bajo 
	desarrollo, y a\'un no es realmente \'util. Una ventaja de esto ser\'a cuando 
	alg\'un d\'{\i}a se intercambien datos con utilidades IPX basadas en DOS, y 
	encaminen tr\'afico entre redes Novell mediante un enlace PPP. El soporte 
	para protocolos de alto nivel de redes Novell no esta todav\'{\i}a a la 
	vista, ya que las especificaciones de estos protocolos tienen un coste 
	econ\'omico muy elevado.

	A partir de la versi\'on 1.1.16 del n\'ucleo, \linux{} soporta otro tipo de 
	controlador: el controlador vac\'{\i}o (dummy). La siguiente pregunta aparece 
	hacia el comienzo de la secci\'on de controladores de dispositivos:

\begin{tscreen}
\begin{verbatim}
Dummy net driver support (CONFIG DUMMY) [y]
\end{verbatim}
\end{tscreen}
	
	El controlador vac\'{\i}o no hace realmente gran cosa, pero es bastante \'util 
	en m\'aquinas aisladas o conectadas mediante SLIP. Es b\'asicamente un 
	interface en bucle cerrado. La raz\'on de tener este tipo de 
	interface es que en las m\'aquinas que se conectan con SLIP que no disponen 
	de Ethernet, es necesario tener un interface que continuamente maneje 
	las direcciones IP. Esto se discute m\'as profundamente en las 
	secci\'on~\ref{iface.interface.dummy} del cap\'{\i}tulo~\ref{iface}.


\section{Una Visita a los Dispositivos de Red de \linux{}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
El n\'ucleo de \linux{} soporta controladores de hardware de diversas 
clases. En esta secci\'on se introducen brevemente las familias de controladores 
disponibles, y los nombres de interfaces que utilizan.

\index{interface}
Hay un conjunto de nombres est\'andares para los interfaces en \linux{}, que se 
enumeran a continuaci\'on. La mayor\'{\i}a de los controladores soportan m\'as de 
un interface, en cuyo caso las interfaces se numeran de la forma: \file{eth0}, 
\file{eth1}, etc.

\begin{dispitems}
\ditem[\file{lo}]
\index{interface!loopback}
	Interface de {\it bucle local} o {\it de lazo}. Se utiliza para realizar 
	pruebas, y para un par de aplicaciones de red. Funciona como un 
	circuito cerrado en el que cualquier datagrama que se le pase como 
	par\'ametro ser\'a inmediatamente devuelto a la capa de red del sistema. 
	En el n\'ucleo siempre hay un dispositivo de bucle local, no tiene 
	sentido tener m\'as de uno.

\ditem[\file{eth\var{n}}]
\index{interface!Ethernet}
	Tarjeta Ethernet \var{n}-sima. Este es el nombre de interface 
	gen\'erico para la mayor\'{\i}a de las tarjetas Ethernet.

\ditem[\file{dl\var{n}}]
\index{interface!D-Link DE-600}
	Esta interface accede a un adaptador de bolsillo D-Link DE-600, otro 
	dispositivo Ethernet. Tiene un car\'acter un poco especial ya que esta 
	conectado a un puerto paralelo. 

\ditem[\file{sl\var{n}}]
\index{interface!SLIP}
	Interface SLIP \var{n}-sima. Las interfaces SLIP se asocian a l\'{\i}neas 
	serie en el orden en el que son instalados; por ejemplo, \file{sl0}, 
	ser\'a la primera l\'{\i}nea serie en ser configurada para SLIP, etc. El 
	n\'ucleo soporta hasta cuatro interfaces SLIP.

\ditem[\file{ppp\var{n}}]
\index{interface!PPP}
	Interface PPP \var{n}-sima. Como ocurre con las interfaces SLIP, una interface 
	PPP se asocia a una l\'{\i}nea serie una vez que se ha convertido a modo 
	PPP. De momento, se pueden soportar hasta cuatro interfaces de este
	tipo.
\ditem[\file{plip\var{n}}]
\index{interface!PLIP}
	Interface PLIP \var{n}-sima. PLIP transporta datagramas IP en l\'{\i}neas 
	paralelas. Se soportan hasta tres interfaces PLIP. El controlador PLIP 
	asigna las interfaces en tiempo de arranque, y se mapean a los puertos 
	paralelos.
\end{dispitems}


\index{protocolo!AX.25}
\index{protocolo!IPX}
\index{controlador!RDSI}
\index{AX.25}
\index{RDSI}
Para otros controladores de interfaces que puedan ser a\~nadidos en el 
futuro como RDSI (Red Digital de Servicios Integrados) o AX.25, se utilizar\'an 
otros nombres. Controladores como el de IPX (protocolo Novell de red) o AX.25 
(utilizado por radio aficionados) est\'an ya en desarrollo, aunque todav\'{\i}a en versiones preliminares ({\it alpha}).

En las secciones siguientes se discutir\'an los detalles de uso de los 
controladores anteriores.

\section{Instalaci\'on Ethernet}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{hardware.drivers.ethernet}
\index{configurando!Ethernet|(}
\index{Ethernet!controladores Becker}
\index{Ethernet!instalaci\'on}
\index{Becker, Donald}
\index{controlador!Ethernet}
\index{Ekwall, Bjorn@Ekwall, Bj\o{}rn}
\index{Davies, David C.}
\index{Ethernet!mediante un puerto paralelo}
\index{puerto paralelo!Ethernet}
\index{Adaptador de bolsillo D-Link}
\index{controlador!Ethernet}
\index{controlador!D-Link}

El c\'odigo de red actual de \linux{} soporta diversas marcas de tarjetas 
Ethernet. Donald Becker (\email{becker@cesdis.gsfc.nasa.gov}) desarroll\'o
la mayor\'{\i}a de los controladores, una familia para tarjetas basadas 
en el chip 8390 de National Semiconductor; y se la conoce como los la Serie 
de Controladores Becker. Tambi\'en hay un par de productos de D-Link, entre ellos 
el adaptador de bolsillo D-Link que permite acceder a una red Ethernet a trav\'es 
de un puerto paralelo. Un controlador para este dispositivo fu\'e programado por
Bj\o{}rn Ekwall (\email{bjorn@blox.se}), mientras que el controlador DEPCA lo 
program\'o David C. Davies (\email{davies@wanton.lkg.dec.com}).

\subsection{Cableado de Ethernet}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\index{Ethernet!cableado}
\index{Ethernet!fino}
\index{Conector BNC}
\index{thinnet}

Si usted est\'a instalando una red Ethernet por primera vez en su vida, 
son necesarios algunos comentarios respecto al cableado. Ethernet tiene una 
caracter\'{\i}sticas muy especiales de cableado. El cable debe terminar en ambos 
extremos con una resistencia de 50 Ohm, y no debe tener ninguna 
ramificaci\'on (p.e. tres cables conectados en estrella). Si est\'a utilizando 
cable coaxial fino con conectores BNC en forma de T, estos conectores deben estar 
directamente conectados al de la tarjeta; no debe insertarse el cable
directamente.

Si se conecta a una instalaci\'on con cable grueso, debe conectar el
ordenador utilizando un transceptor (a veces denominado Unidad de Conexi\'on 
Ethernet). Puede conectarse el transceptor a un puerto AUI de 25 pines de la 
tarjeta mediante un cable protegido.

\subsection{Tarjetas Compatibles}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
\index{HOWTO!Ethernet}
\index{Gortmaker, Paul}

Una lista completa de las tarjetas compatibles est\'a disponible en los 
Ethernet HOWTOs, publicada mensualmente en \ngrp{comp.os.linux.announce} por 
Paul Gortmaker.\footnote{
  Paul puede ser localizado en \email{gpg109@rsphysse.anu.edu.au}.
}

Inclu\'{\i}mos una lista de las tarjetas m\'as conocidas y utilizadas que 
soporta \linux{}. La lista actual del HOWTO es casi tres veces mayor. 
Aunque encuentre su tarjeta en esta lista, b\'usquela tambi\'en en el 
HOWTO; a veces hay detalles importantes sobre el modo de operaci\'on de 
estas tarjetas. Por ejemplo, algunas tarjetas  Ethernet basadas en DMA que 
utilizan los mismos canales DMA que los que el controlador de SCSI Adaptec 1542 
usa por defecto. Si no se cambia el canal de DMA en alguno de las dos, la 
tarjeta Ethernet podr\'{\i}a escribir paquetes de datos en posiciones arbitrarias 
del disco duro. 
\begin{dispitems}
\ditem[3Com EtherLink]
	Se soporta 3Com EtherLink tanto 3c503 como 3c503/16, adem\'as de las 
	versiones 3c507 y 3c509. La 3c501 tambi\'en se soporta aunque es 
	demasiado lenta como para merecer la pena. 

\ditem[Novell Eagle]
	Se soportan Novell Eagle NE1000 y NE2000, as\'{\i} como diversas
	cl\'onicas. Tambi\'en soporta las NE1500 y NE2100. 
	
\ditem[Western Digital/SMC]
	Hay que incluir entre las compatibles a la Western Digital/SMC WD8003 
	y WD8013 (igualmente la SMC Elite y la SMC Elite Plus), y tambi\'en 
	la nueva SMC Elite 16~Ultra. 

\ditem[Hewlett Packard]
	Las HP 27252, HP 27247B, y la HP J2405A. 
	
\ditem[D-Link]
	El adaptador de bolsillo D-Link DE-600, DE-100, DE-200 y DE-220-T.  
	Tambi\'en hay un kit de ampliaci\'on para la DE-650-T, denominado tarjeta 
	PCMCIA\footnote{ 
	  Puede conseguirse~-- junto con otro material relacionado con 
	  Laptop~-- en \host{tsx-11.mit.edu}, en \file{packages/laptops}.
	}.
	
\ditem[DEC]        
	DEC DE200 (32K/64K), DE202, DE100, y DEPCA rev E. 

\ditem[Allied Teliesis]
	AT1500 y AT1700.

\end{dispitems}

Para utilizar cualquiera de estas tarjetas con \linux{}, debe utilizar 
un n\'ucleo precompilado de una de las distribuciones de \linux{}. 
Estas versiones incluyen normalmente controladores para todas las tarjetas. 
Aunque a la larga ser\'a mejor confeccionarse su propio 
n\'ucleo y compilarlo s\'olo con los controladores que se necesiten en ese 
momento.

\subsection{Autoverificaci\'on de red Ethernet}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\index{Ethernet!autoverificaci\'on|(}
\index{autoverificaci\'on, Ethernet}

En tiempo de arranque, el c\'odigo para Ethernet intentar\'a localizar la tarjeta y 
determinar su tipo. Se comprueban por orden las siguientes direcciones:

\medskip
\begin{center}
\begin{tabular}{|l|l|}
\hline
Tarjeta                 & Verificaci\'on de las direcciones                       \\
\hline
WD/SMC          & \addr{0x300}, \addr{0x280}, \addr{0x380},
			   \addr{0x240}                                 \\
SMC 16 Ultra            & \addr{0x300}, \addr{0x280}                    \\
3c501                   & \addr{0x280}                                  \\
3c503                   & \addr{0x300}, \addr{0x310}, \addr{0x330},
			   \addr{0x350}, \addr{0x250},                  \\
			& \addr{0x280}, \addr{0x2a0}, \addr{0x2e0}      
	\\
NEx000          & \addr{0x300}, \addr{0x280}, \addr{0x320},
			   \addr{0x340}, \addr{0x360}                   \\
HP                      & \addr{0x300}, \addr{0x320}, \addr{0x340},
			   \addr{0x280}, \addr{0x2C0}                   \\
			& \addr{0x200}, \addr{0x240}                    \\
DEPCA           & \addr{0x300}, \addr{0x320}, \addr{0x340},
			   \addr{0x360}                                 \\
\hline
\end{tabular}
\end{center}
\medskip

El c\'odigo de autoverificaci\'on tiene dos limitaciones. Una de ellas es que no reconoce todas las tarjetas correctamente. Esto ocurre 
frecuentemente con algunas de las tarjetas cl\'onicas m\'as baratas, pero 
tambi\'en con algunas tarjetas WD80x3. La otra limitaci\'on  es que el n\'ucleo no 
verificar\'a m\'as de una tarjeta por defecto. Esto se hace as\'{\i} porque se 
asume que se desea tener control sobre qu\'e tarjeta es asignada a qu\'e 
interface.

Si est\'a utilizando m\'as de una tarjeta, o si el proceso de autoverificaci\'on no 
consigue detectar su tarjeta, debe indicar explic\'{\i}tamente al n\'ucleo el nombre y 
direcci\'on base de la tarjeta.

\index{configurando!Ethernet}
\index{configuraci\'on manual (Ethernet)}
\index{Space.c@\file{Space.c}}
\index{fallo en la autoverificaci\'on}
\index{lilo@\prog{lilo}}
Con Net-3, se tienen dos posibilidades diferentes ante un caso de fallo en la 
autoverificaci\'on. Una de ellas es cambiar o a\~nadir informaci\'on en el fichero 
del c\'odigo fuente del n\'ucleo \file{drivers/net/Space.c}, que contiene toda la 
informaci\'on sobre controladores. S\'olo es recomendable en el caso de que el 
codigo de red le sea familiar. Una forma mucho mejor es proporcionar al 
n\'ucleo esta informaci\'on en tiempo de arranque. Si utiliza \prog{lilo} al 
arrancar el sistema, puede pasarle par\'ametros al n\'ucleo, especific\'andolos 
mediante la opci\'on \keyword{append} en el fichero \file{lilo.conf}. Por 
ejemplo, para informar al n\'ucleo sobre la existencia de un dispositivo 
Ethernet, puede pasarse el siguiente par\'ametro:

\begin{tscreen}
 ether=\var{irq}, \var{dir\_base}, \var{param1},\var{param2},\var{nombre}
\end{tscreen}

Los cuatro primeros argumentos son num\'ericos, mientras que el \'ultimo es el 
nombre de un dispositivo. Todos los valores num\'ericos son opcionales: si se 
omiten o se dejan a cero, el n\'ucleo intentar\'a averiguar su valor mediante 
autoverificaci\'on, o utilizando un valor por defecto.

\index{auto-IRQ}
\index{IRQ}
El primer par\'ametro indica el IRQ asignado al dispositivo. Por defecto, el 
n\'ucleo intentar\'a autodetectar el canal IRQ del dispositivo. El controlador 3c503 
tiene un funcionamiento especial seleccionando un canal libre IRQ de la lista 
5, 9, 3, 4, y configura la tarjeta para utilizar esta l\'{\i}nea.

El par\'ametro \var{dir\_base} define la direcci\'on base de E/S de la tarjeta; si 
vale cero, el n\'ucleo probar\'a con las direcciones de la lista anterior.

Los dos par\'ametros restantes pueden ser utilizados de forma diferente por 
controladores diferentes. Para tarjetas de memoria compartida como la 
WD80x3, especifican la direcci\'on de comienzo y de fin del \'area de memoria 
compartida. Otras tarjetas utilizan normalmente el \var{param1} para 
seleccionar el nivel de informaci\'on de depuraci\'on para el usuario. Los valores 
del 1 al 7 denotan niveles de detalle en la informaci\'on, mientras que el valor 
8 desactiva todos; por defecto se toma el valor cero. El controlador 3c503 
utiliza el \var{param2} para seleccionar el transceptor interno (por defecto) 
o un transceptor externo (valor 1). El primero utiliza un conector de tarjeta 
tipo BNC; el \'ultimo utiliza su puerto AUI.

Si se tienen dos tarjetas Ethernet, puede hacerse que \linux{} autodetecte 
una de ellas, y pasar los par\'ametros de la segunda mediante \prog{lilo}.
Sin embargo, hay que estar seguros de que el controlador accidentalmente no 
encuentra la segunda tarjeta primero, en cuyo caso la otra no se detectar\'a. 
Esto se consigue pasando la opci\'on \option{reserve} a \prog{lilo}, que indica 
expl\'{\i}citamente al n\'ucleo que no verifique el espacio de E/S reservado para la 
segunda tarjeta.

Por ejemplo, para hacer que \linux{} instale una segunda tarjeta Ethernet en 
la direcci\'on \addr(0x300) como \file{eth1}, hay que pasarle los siguientes 
par\'ametros al n\'ucleo:

\begin{tscreen}
  reserve=\addr{0x300},32 ether=0,\addr{0x300},eth1
\end{tscreen}

La opci\'on \keyword{reserve} asegura que ning\'un controlador accede al 
espacio de E/S del n\'ucleo cuando verifica alg\'un dispositivo. Tambi\'en pueden 
utilizarse los par\'ametros del n\'ucleo para evitar realizar la verificaci\'on para 
\file{eth0}:

\begin{tscreen}
  reserve=\addr{0x340},32 ether=0,\addr{340},eth0
\end{tscreen}

Para evitar completamente la fase de autoverificaci\'on, se especifica el 
argumento \var{dir\_base}  a -1:

\begin{tscreen}
  ether=0,-1,eth0
\end{tscreen}

\index{Ethernet!autoverificaci\'on|)}
\index{configurando!Ethernet|)}

\section{El controlador PLIP}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{hardware.drivers.plip}
\index{configurando!PLIP}
\index{IP!l\'{\i}nea paralela|see {PLIP}}
\index{puerto paralelo!IP}
\index{controlador!PLIP}
\index{PLIP}

PLIP permite trabajar con una \emph{L\'{\i}nea Paralela IP}, y es una forma barata 
de interconexi\'on cuando se desea conectar solamente dos m\'aquinas. Utiliza un 
puerto paralelo y un cable especial, alcanzando velocidades entre 10kBps 
a 20 kBps.

PLIP fue desarrollado en principio por Crynwr, Inc. Su dise\~no es m\'as que 
ingenioso (o, si se prefiere, m\'as propio de un hacker): durante muchos a\~nos, 
los puertos paralelos del PC se utilizaban como puertos para impresora 
unidireccionales; es decir las ocho l\'{\i}neas de datos podr\'{\i}an ser utilizados 
solamente para env\'{\i}os desde el PC al dispositivo perif\'erico, pero no en sentido
inverso. El PLIP saca un mejor provecho utilizando la l\'{\i}nea de estado n\'umero
cinco del puerto, que se limita a transferir todos los datos simplemente como 
{\it nibbles} (es decir medio byte). Hoy en d\'{\i}a, estos puertos unidireccionales no 
son muy utilizados. Por tanto tambi\'en hay una extensi\'on denominada modo 1 que 
utiliza la interface completa de 8 bits.

Actualmente \linux{} s\'olo soporta el modo 0. A diferencia de versiones m\'as 
antiguas del c\'odigo que maneja el PLIP, ahora se intenta hacerlo compatible 
con las implementaciones PLIP de Cynwr, y para el controlador PLIP en el 
NCSA \prog{telnet}\footnote{
  El NCSA \prog{telnet} es un programa bastante conocido para DOS que trabaja 
  con TCP/IP en redes Ethernet o PLIP, y soporta \prog{telnet}, FTP y algunas
  otras aplicaciones sencillas.
}. Para conectar dos m\'aquinas utilizando PLIP, se necesita un cable especial 
que se vende en algunas tiendas como cable de ``Impresora Nula'' (``Null Printer'') 
o ``Turbo Laplink''. Es posible fabricarlo de forma casera, en el 
Ap\'endice~\ref{appendix.plip} se indica c\'omo.

\index{Yutaka, Niibe}
El controlador PLIP para \linux{} es el trabajo de un n\'umero casi incontable de 
personas. Actualmente esta mantenido por Niibe Yutaka. Si se compila en el 
n\'ucleo, configura una interface de red para cada posible puerto de impresora, 
con \file{plip0} correspondiendo al puerto paralelo \file{lp0}, \file{plip1} 
correspondiendo a \file{lp1}, etc. El mapeado del interface a los puertos es 
ahora mismo el siguiente:

\medskip
\begin{center}
\begin{tabular}{|l|l|l|}
\hline
Interface               & Puerto E/S                    & IRQ           \\
\hline
\file{plip0}            & \addr{0x3BC}          &7              \\
\file{plip1}            & \addr{0x378}          &7              \\
\file{plip2}            & \addr{0x278}          & 5             \\
\hline
\end{tabular}
\end{center}
\medskip

\index{configurando!PLIP}
\index{configuraci\'on manual (PLIP)}
\index{Space.c@\file{Space.c}}
Si se tiene configurado el puerto de la impresora de forma diferente, hay que 
cambiar estos valores en el fichero \file{drivers/net/Space.c} del c\'odigo 
fuente de \linux{}, y construir un nuevo n\'ucleo.

Este mapeado no implica que no se puedan utilizar los puertos paralelos de 
forma normal. S\'olo son accedidos por el controlador de PLIP cuando el
interface correspondiente ha sido configurado como \keyword{activo}.

\section{Los controladores SLIP y PPP}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%
\label{hardware.drivers.slip}
\index{controlador!SLIP}
\index{controlador!PPP}
\index{SLIP}
\index{IP!l\'{\i}nea serie!see {SLIP}}

SLIP (Serial Line IP, Protocolo Internet en L\'{\i}nea Serie), y PPP (Point-to-Point 
Protocol, Protocolo Punto-a-Punto) son protocolos muy utilizados para enviar 
paquetes IP a trav\'es de enlaces serie. Varias instituciones ofrecen acceso 
telef\'onico SLIP y PPP a m\'aquinas conectadas a Internet: esto proporciona 
conectividad IP a los particulares (algo que de otra forma ser\'{\i}a
dif\'{\i}cil de conseguir debido al elevado coste de otros tipos de conexiones).

Para trabajar con SLIP o PPP, no son necesarias modificaciones en el 
hardware; puede utilizarse cualquier puerto serie. Ya que es espec\'{\i}fica la 
configuraci\'on del puerto serie para interconexi\'on TCP/IP, se le dedicar\'a un 
cap\'{\i}tulo aparte. Para m\'as informaci\'on consultar el cap\'{\i}tulo \ref{serial}.

\index{configuraci\'on!hardware de red!)}
\index{hardware!interconexi\'on!)}

