Implementación del puente de la pila de protocolos de Linux (desde la configuración del puente (2))

  
 

Sobre el puente: El puente es un dispositivo de Capa 2 que puede considerarse un conmutador de Capa 2 antes de profundizar. Reenvía los datos en un protocolo de capa 2. Para enviar datos, el puente mantiene una tabla de correspondencia entre el puerto y el MAC, generalmente como una tabla CAM. De acuerdo con esta tabla, los datos pueden enviarse al puerto correspondiente para la transmisión. El proceso de reenvío del puente es: 1: Recibir un paquete. Determine si la tabla CAM contiene la dirección de origen del paquete. De lo contrario, actualice la dirección de origen y el puerto a la tabla CAM. 2: Determine si el paquete se envía a la máquina y, si es así, envíelo a la capa superior de la máquina. Procesamiento de pila de protocolo. Si no, busque la tabla CAM. Encuentra la salida apropiada. 3: Si se encuentra una salida, el paquete se envía a la salida. Si no existe, se enviará a cada puerto. 4: Si la entrada correspondiente en la tabla CAM no se actualiza dentro del tiempo especificado, elimine este elemento. Configuración de puentes: Brctl es una buena herramienta para configurar puentes. Su código fuente y método de configuración es extremadamente simple. Hablaremos sobre el proceso de configuración del puente y veremos cómo se gestiona el kernel de Linux paso a paso. Primero, cree un puente: brctl addbr br0 (cree un puente para br0) Luego, agregue la interfaz al puente: brctl addif br0 eth0 (agregue eth0 y eth1 al puente br0) brctl addif bro eth1OK, puente ahora Sólo configurado. Este host de Linux se puede utilizar como un conmutador y los paquetes de eth0 se pueden reenviar a eth1. Ahora, veamos cómo el código maneja el primer brctl addbr. En cuanto al código brctl, llama a: ioctl (br_socket_fd, SIOCBRADDBR, brname); luego se llama a brctl addif en el código brctl: ioctl (br_socket_fd, SIOCBRADDIF, &ifr); El código de Brctl es muy simple, solo llame a la herramienta de configuración del espacio de usuario ioctl.Linux bridge analysis: Bueno, ahora puede ingresar al modo de puente de análisis del kernel: static int __init br_init (void) (net /brige /br. c) {//la asignación del bloque de asignación br_fdb_init (); //el procesamiento de netfiter bridge, se analizará en los siguientes capítulos #ifdef CONFIG_BRIDGE_NETFILTERif (br_netfilter_init ()) return 1; (br_ioctl_deviceless_stub); //Recibo el procesamiento del paquete, es decir, vemos en la función netif_receive_skb anterior br_handle_frame_hookbr_handle_frame_hook = br_handle_frame; # si está definido (CONFIG_ATM_LANE)

Copyright © Conocimiento de Windows All Rights Reserved