Linux - статьи



              

Реализация сети в операционной - часть 12


skb->dev = dev; skb_reserve(skb,2); /* Align */

/* 'skb->data' указывет на начало буфера данных. */ buffer = skb_put(skb,size);

/* копируем пакет в буфер */ de600_setup_address(read_from, RW_ADDR); for (i = size; i > 0; --i, ++buffer) *buffer = de600_read_byte(READ_DATA, dev);

/* Определяем тип протоколa skb->protocol=eth_type_trans(skb,dev);

/*Передаем на верхний уровень см net/core/dev.c netif_rx(skb);

/* обновляем статистику */ dev->last_rx = jiffies; ((struct net_device_stats *)(dev->priv))->rx_packets++; /* количество получений */ ((struct net_device_stats *)(dev->priv))->rx_bytes += size; /* количество полученных байт */

/* * Если случится что-то плохое во время доставки, netif_rx() * сделало a mark_bh(INET_BH) для нас и будет работать * когда мы войдем в bottom-halv. */ }

  ip_finish_output() net/ipv4/ip_output определяет девайс для данного маршрута вызывает функцию девайса[=dev_queue_xmit] ip_forward -net/ipv4/ip_forward в этом файле хорошие комментарии проверяем роутер если пакет никому не предназначен то дропаем если плохой TTL аналогично если неможет пакет отфорвардится то отправляем icmp пакет ICMP_DEST_UNREACH если необходимо шлем пакет ICMP HOST REDIRECT копирум и уничтожаем старый пакет уменьшаем TTL если необходимо устанавливаем нужные опции ip_forward_options в ip_forward_finish

ip_rcv net/ipv4/ip_input.c главная функция плучения ip пакета проверяем ошибки плохая длина версия чексумма вызываем pskb_trim вызываем ip_route_input

Процесс маршрутизации

Как уже говорилось есть тоюлица соседей,FIB,routing cache Таблица соседей содержит адреса(mac) компьютеров которые фищически соединены с нами.Linux использует АRP для определения адресов ета таблица динамическая хотя администраторы могут задать статические записи. Стуктуры связанные с етой таблицей описаны в include/net/neighbour.h основные структуры. struct neigh_table -их целый связаный список struct neigh_parms -список содержит разнообразную статистику struct neighbour -hash таблица соседей ассоциированых с данной таблицей struct pneig_entry -hash всех девайсов




Содержание  Назад  Вперед