Hasta este punto en la capa de enlace de la Linux pila de protocolos, configuración de puente se ha hecho sobre. Observamos es cómo salvar el proceso de paquetes puente del procesamiento de datos recibidos: de nuevo al principio de esta función handle_bridge capítulo, las llamadas br_handle_frame_hook para procesar los datos recibidos en el código de inicialización del puente, la asignación br_handle_frame_hook Para que br_handle_frame sea correcto, esta es la función de procesamiento del puente. funciones de seguimiento nt br_handle_frame (struct net_bridge_port * p, struct sk_buff ** pskb) {struct sk_buff * skb = * pskb; //objeto mac dirección const unsigned char * dest = eth_hdr (SKB) - > h_dest; //puerto desactivada si (p- > estado == BR_STATE_DISABLED) Goto err; //fuente mac multidifusión o forma //FF.XX.XX.XX.XX.XX desechado de emisión si (eth_hdr (SKB) - > h_source [0] &1) Goto err; //si el estado de aprendizaje o hacia adelante, la tabla CAM aprende la actualización MAC de origen si (p > estado == BR_STATE_LEARNING |
|
p- > estado == BR_STATE_FORWARDING) //función br_fdb_insert ya hemos analizado la br_fdb_insert (p- > br, p, eth_hdr (SKB) - > h_source, 0); //stp de tratamiento, STP- permitido está habilitado el protocolo STP //dirección MAC de multidifusión si (p- > bridge_ula stp utiliza; BR > stp_enabled &&! memcmp (dest, bridge_ula, 5) & y;! (dest [5] &0xF0)) {if (dest [5]) {NF_HOOK (PF_BRIDGE, NF_BR_LOCAL_IN, SKB, skb- >! dev,
NULL, br_stp_handle_bpdu); return 1;}} else if (p- > , el estado == BR_STATE_FORWARDING) {//en la inicialización, y el final de la br_should_route_hook asignación de modo br_should_route_hook //false si (br_should_route_hook) {if (br_should_route_hook (pskb))
return 0; skb = * pskb; dest = eth_hdr (SKB) - > h_dest;} //misma dirección de destino y la dirección de puente. //pasar el procesamiento de la capa superior establecido skb- > pkt_type = PACKET_HOSTif (memcmp (p- >! Br- > dev- > dev_addr, dest, ETH_ALEN)) skb- > pkt_type = PACKET_HOST; //puente NF_HOOK proceso netfiter en punto NF_BR_PRE_ROUTING (PF_BRIDGE, NF_BR_PRE_ROUTING, SKB, skb- > dev, NULL, br_handle_frame_finish); return 1;} err: kfree_skb (SKB); return 1;} en esta función, la entrada relacionada después de la sentencia, la fuente de corriente será de paquetes MAC correspondiente a la interfaz a las actualizaciones de la tabla CAM, la función de actualización br_fdb_insert () en el analizado anteriormente, no puede entender el mirar hacia abajo en el pasado, pero la atención, esto no se hace Insertado para elementos estáticos. Luego determina el paquete no se pasa a la máquina, si es así, establecer el paquete es PACKET_HOST pkt_type en NF_HOOK () macro, hemos analizado el tema de la futura netfiter. Esto es tan larga como la conocemos, el paquete de datos normal fluirá en br_handle_frame_finish () para el procesamiento /* Nota: ya se llama con rcu_read_lock (preempt_disabled) * /int br_handle_frame_finish (struct sk_buff * SKB) {//obtener la dirección MAC de destino unsigned char const * dest = eth_hdr (SKB) - > h_dest; struct net_bridge_port * p = skb- > dev- > br_port; struct net_bridge * br = p- > br; struct net_bridge_fdb_entry * dst; int passedup = 0; //híbrido modo /* Si el NIC virtual puente en modo promiscuo, cada uno de los paquete de datos recibido a la necesidad de clonar un (función ptype_all suave red de procesamiento de interrupción de net_rx_action cadena) de procesamiento de protocolo AF_PACKET de los mismos. * /If (BR > dev- > banderas &IFF_PROMISC) {struct sk_buff * skb2; skb2 = skb_clone (SKB, GFP_ATOMIC), si (skb2! = Null) {Passedup = 1; br_pass_frame_up (ancho, skb2);}} //objeto MAC de multidifusión o de difusión, el proceso necesita ser transmitida a la capa superior //passedup para transmitir una bandera que indica ya cargado si (dest [0] &1) es 1 {br_flood_forward (br, ! SKB, passedup), si (passedup) br_pass_frame_up (ancho, SKB);! Goto cabo;} //consulta de tabla CAM dst = __br_fdb_get (ancho, dest); //para esta máquina? Transmitida al procesamiento de protocolo de capa superior si (dst = NULL &! &Amp; DST- > is_local) {if br_pass_frame_up (br, SKB) (passedup!); Elsekfree_skb (SKB); goto fuera;}
//datos no se presente máquina se reenvía si (dst = NULL) {br_forward (DST- > dst, SKB); Goto fuera;} //Si no la consulta, envía esta br_flood_forward paquete (br otros puertos en , skb, 0);
Entre los muchos miembros de la familia de MCU, los MCU de la serie MCS-51 ocupan la medida y el con
Primero instale CentOS6 e instale el software rp-pppoe. La versión anterior de centos se instala med
Descripción del problema Solución Analice el motivo, tal vez porque la migració
. vmstat es una herramienta para ver el uso de la memoria virtual. Formato general: vmstat [-V] [
Acerca de la puerta de enlace predeterminada de Linux
Linux awk incorporó la introducción de variables
Novice Academy: instalación de módulos Perl y Perl en Linux
Parámetros de configuración Cómo instalar dos sistemas Linux
Tutorial de Buscar y Reemplazar del Editor VIM de Linux
Implementación de Ubuntu del montaje permanente de la partición
Linux Análisis de apagado reinicio de procesos
Cómo disfrazar el sistema Linux Establecer la ilusión del sistema para piratas informáticos
Los expertos configuran las sugerencias de archivos de página del sistema Windows
¿Cómo graba un programa Litchi FM? Programa gráfico de grabación fitch Litchi Introducción
Configuración de Alipay y certificados digitales en Windows 7
El sistema de Windows 7 habilita o deshabilita el método de cuenta de invitado (tutorial gráfico)
A partir del 2 de junio: RMB 95, actualización de Win7 a Win8
El informe interno de Microsoft muestra que las ventas de Windows 8 son sombrías