Linux Network Protocol Stack Network Device Management

  

Linux es conocido por sus excelentes capacidades de administración de red. ¿Por qué es Linux tan eficiente? Vamos a empezar con la gestión de los dispositivos de red. ¿Por qué debería administrarse Linux por separado para dispositivos de red? Esto es porque Los dispositivos de red están involucrados en muchos lugares en la pila de protocolos. Tan pequeño como la configuración de la dirección IP. Hasta la actualización de enrutamiento IP. La gestión eficiente de dispositivos de red es indispensable. ¡La gestión separada de los dispositivos de red puede aumentar la eficiencia! Cada dispositivo de red, en Linux, corresponderá a una estructura de datos, net_device. Hablando en Linux 2.6.21 de esta estructura, net_device define como sigue: struct net_device {//el nombre del dispositivo, tal como un común y " eth0 y " et char nombre [IFNAMSIZ]; //inicio de memoria compartida, dirección final sin firmar mem_end larga; /* mem compartido termina * /mem_start largo sin signo; /* mem compartido empezar * ///O dirección de E /base del dispositivo de red sin firmar base_addr larga; dirección /* dispositivo de E /S * ///se interrumpir número asignado unsigned int IRQ; /* número de dispositivo IRQ * ///if_port unsigned char que un puerto que se utiliza en el dispositivo multipuerto; /* seleccionable AUI, TP, .. * ///canales DMA asignado al dispositivo sin signo Char dma; /* canal DMA * ///estado del dispositivo estado largo sin signo; //un próximo net_devicestruct net_device * siguiente; //función de inicialización. //obtener el puntero de función de un estado de la interfaz; int (* init) (struct net_device * dev); struct net_device * next_sched;. /* índice de interfaz identificador de dispositivo único * ///dispositivo correspondiente al número de secuencia en el ifindex kernel int; int iflink net_device_stats struct * (* get_stats) (struct net_device * dev); struct iw_statistics * (* get_wireless_stats) (struct net_device * dev); struct iw_handler_def * wireless_handlers; struct ethtool_ops * ethtool_ops; //estado de transmisión. Compruebe si se bloquea la transmisión trans_start largo sin signo; /* Tiempo (en unidades de tiempo) de la última Tx * ///aprovechar al máximo el uso del tiempo largo sin signo last_rx; /* Hora de la última Banderas * ///de interfaz Rx banderas cortos sin signo; /* banderas de interfaz (al estilo de BSD) * /gflags cortos sin signo; priv_flags cortos sin signo; /* 'banderas' como pero invisible para el espacio de usuario * /unsigned short unused_alignment_fixer;. /* Porque necesitamos priv_flags, * y que queremos ser 32- . bits alineados * /MTU sin firmar; /* interfaz de valor MTU * tipo de corta /sin signo; /* tipo de interfaz de hardware * /unsigned short hard_header_len; longitud /* HDR de hardware * /void * priv; /* puntero a los datos * /struct privada net_device * maestro; /* HW bcast añadir * /unsigned char dev_addr [; .. /* Puntero al dispositivo de un grupo, * la cual este dispositivo es miembro del //* * * dirección de interfaz de información /difusión unsigned char [MAX_ADDR_LEN] dominar ,null,null,0],MAX_ADDR_LEN]; /* addr_len unsigned char * dirección de HW /; * /dirección hardware longitud * /struct dev_mc_list * mc_list; /* Las direcciones MAC de multidifusión * /int mc_count; /* Número de instalado mcasts * /int promiscuidad; int allmulti; int watchdog_timeo; struct timer_list watchdog_timer; /* Protocolo específico punteros * /

void * atalk_ptr; /* enlace AppleTalk * /void * ip_ptr; /* IPv4 datos específicos * /

void * dn_ptr; /* DECnet de datos * /void * ip6_ptr específicos; /* IPv6 datos específicos * /void * ec_ptr; /* Econet datos específicos * /void * ax25_ptr; /* AX.25 datos específicos * /struct list_head poll_list; /* Enlace para sondear la cuota lista * /int; int peso; struct qdisc * qdisc; struct qdisc * qdisc_sleeping; struct qdisc * qdisc_ingress; struct list_head qdisc_list; unsigned long tx_queue_len; /* Max fotogramas por cola de mascotas * //* camino de ingreso sincronizador * /spinlock_t ingress_lock; /* hard_start_xmit sincronizador * /xmit_lock spinlock_t; /* cpu id del procesador ingresó a hard_start_xmit o -1, si nadie entró allí * /int xmit_lock_owner;. /* dispositivo de bloqueo de cola * /spinlock_t queue_lock; /* número de referencias a este dispositivo * /refcnt atomic_t; /* retraso registro /anular el registro * /struct list_head todo_list; /* nombre del dispositivo Cadena de hash * /struct hlist_node name_hlist; /* cadena de hash de índice de dispositivo * /struct hlist_node index_hlist;

Copyright © Conocimiento de Windows All Rights Reserved