como antes de la inicialización del subsistema barrio, versión del código fuente de Linux 2.6.21void __init arp_init (void) (net /ipv4 /arp.c) {//vecino neigh_table_init mesa de inicialización (&arp_tbl); //Registrar protocolo ARP dev_add_pack (& arp_packet_type); //establecen objetos proc arp_proc_init (); #ifdef CONFIG_SYSCTLneigh_sysctl_register (NULL, &arp_tbl.parms, NET_IPV4, NET_IPV4_NEIGH, " IPv4 " , NULL); #endif //lista de notificación de eventos register_netdevice_notifier (&arp_netdev_notifier);} en neigh_table_init (&arp_tbl);, la tabla de vecinos para la inicialización correspondiente, en particular, para inicializar un temporizador de recolección de basura. discutirá más adelante viene dada RESUMEN arp_packet_type: static arp_packet_type struct packet_type = {.type = __constant_htons (ETH_P_ARP), (correspondiente a enlace del número de protocolo de capa) .FUNC = arp_rcv, "manipulador de paquetes"} se puede ver de lo anterior fuera, al recibir el paquete ARP de datos, () tratados con cinco arp_rcv: vecino análisis de la estructura de datos del sistema estructura neigh_table: struct neigh_table {//un vecino de struct neigh_table * siguiente; //pila de protocolos de la familia int; //entrada longitud, es decir, el tamaño de una estructura de vecino se inicializa a sizeof (vecino) 4 (4 para la longitud de una dirección IP) int entry_size; //valor hash de clave de una longitud que es la longitud de una dirección IP para 4int key_len; //Ha función de valor de cómputo Xi (valor hash se calcula por el objeto correspondiente dispositivo y net_device Ip) __ U32 (* hash) (const void * p, y const struct net_device *); //función de inicialización vecino int (* constructor) (struct vecino *); int (* pconstructor) (struct pneigh_entry *); void (* pdestructor) (struct pneigh_entry *); void (* proxy_redo) (struct sk_buff * SKB); //tabla de vecinos nombre char * Identificación; struct neigh_parms parms; /* * HACK gc_ shoul sigue parms sin una brecha * ///recolección de basura regular cuando int gc_interval;.! int gc_thresh1; //segundo umbral, si el vecino es superior a este valor cuando se crea un nuevo vecino //si hay más de cinco segundos cuando no hay actualización, debe actualizar de inmediato, la recolección de basura obligatoria int gc_thresh2; //permitir int techo gc_thresh3 del vecino; //reciente tiempo de refresco last_flush largo sin signo; //regular de recolección de basura temporizador estructura timer_list gc_timer; struct timer_list proxy_timer; struct sk_buff_head proxy_queue; //número de vecinos de mesa enteros int entradas; cerradura rwlock_t; last_rand largo sin signo; struct neigh_parms * parms_list; kmem_cache_t * kmem_cachep; struct neigh_statistics * estadísticas; //gama de hash, que almacena vecinos struct vecino ** hash_buckets; //tamaño de la matriz de la máscara de hash unsigned int hash_mask; __ u32 hash_rnd; unsigned int hash_chain_gc; //asociados con el proxy ARP pneigh_entry estructura ** phash_buckets; #ifdef CONFIG_PROC_FSstruct proc_dir_entry * PDE; #endif} vecino estructura: struct {//vecino de un vecino de sus barrios struct r * siguiente; //donde el vecino de mesa estructura neigh_table * TBL; //parámetros de transmisión arp neigh_parms struct * parms; //elemento correspondiente a la red vecino dispositivo estructura net_device * dev; //La última vez sin signo utilizado durante mucho tiempo; sin firmar larga confirmó; __ banderas U8;; siempre actualizados sin firmar ////tiempo de actualización vecino de la correspondiente __u8 estado nud_state; __ tipo U8; //bandera de sobrevivir es 1 si muerto, entonces la función de recolección de basura se eliminará este __u8 muertos; //el número de solicitud de sondas de prueba atomic_t arp re-transmisión; cerradura rwlock_t; //cabeza correspondiente a la caché de vecino unsigned char ha [(MAX_ADDR_LEN + sizeof (unsigned long) -1) &~ (sizeof (unsigned long) -1) ]; struct hh_cache * hh; //referencia recuento atomic_t refcnt; //entrada vecino correspondiente a la int función de transmisión (* salida) (struct sk_buff * SKB); //skb transmisión cola struct sk_buff_head arp_queue correspondiente; //temporizador struct timer_list temporizador; struct neigh_ops * ops; //clave hash U8 primary_key [0];};
¿Se bloqueará el servidor Linux? Por supuesto, he estado expuesto a cierto tipo de servidor. Después
El uso original de Tomcat en Linux no utiliza al usuario creado recientemente creado por el permiso
xenserver XenCenter puede vincular tarjetas de red, admite el modo activo-activo y activo-en espera,
Noticias de Computer Store Microsoft lanzó Windows 8 RTM Edition para fabricantes de equipos origi
Estudio en profundidad de la estrategia de programación de Lvs
Linux de gama alta: el software de recuperación de datos del sistema de archivos ReiserFS
Restablecer la contraseña de root de MySQL en Linux
Kdump y métodos de configuración de fallas y métodos de análisis de fallas
Cómo agregar /eliminar usuarios y grupos de usuarios en Linux
Esos comandos poderosos que mejoran la eficiencia del desarrollo del entorno Linux
Mira un comando del sistema operativo Linux para entender una civilización humana
controlador I2C Análisis Linux
Resumen de la práctica de configuración de NIC dual bajo el sistema Linux
Linux shell implementación cuatro aritmética (entero y punto flotante) método simple
¿Cómo cambia Win7 el color de la ventana translúcida?
Para el disco de instalación de XP para perder peso, el CD de instalación de
Win7 no puede habilitar el uso compartido. ¿Qué debo hacer con el código de error Ox80004005?
La cámara Win10 no puede abrir cómo hacerlo
Rompiendo hábilmente la contraseña de inicio de sesión de Windows XP
Los permisos del directorio de configuración de Iis 7 deben prestar atención al problema
Cómo gestionar las cuentas de CentOS
¿Cómo volver a conectar el enrutador después de win10 modificar la contraseña de wifi?
Versión WP8 de la actualización de la versión de prueba de Instagram