Linux - статьи



              

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


>>> sock_write() - net/socket.c (399) calls socki_lookup() accоциируем сокет с inode заполняем заголовок сообщения returns sock_sendmsg()

tcp_sendmsg() - net/ipv4/tcp.c (755) ждемс соединения skb = tcp_alloc_pskb память calls csum_and_copy_from_user() делаем checksum & копируем calls tcp_send_skb()

tcp_send_skb() - net/ipv4/tcp_output.c (160) это главная routine посылки буфера мы ставим буфер в очередь и решаем оставить его там или послать calls __skb_queue_tail() добавляем в очередь calls tcp_transmit_skb() если может

tcp_transmit_skb() - net/ipv4/tcp_output.c (77) строим заголовок tcp и чексумму calls tcp_build_and_update_options() проверяем ACKs,SYN calls tp->af_specific[ip]->queue_xmit()

  udp_getfrag() - net/ipv4/udp.c копируем из адресного пространства пользователя и добавляем checksum

udp_sendmsg() - net/ipv4/udp.c проверяем флаги и тд заполняем заголовок проверяем мультикаст заполняем маршутную информацию calls ip_build_xmit() обновляем статистику udp returns err

Получение данных

Получение данных начинается с прерывания от сетевой карты.Драйвер девайса выделяет память и пересылает данные в то пространство.Потом передает пакет в связующий уровень который вызывает bottom-halv,которое обрабатывает событие вне прерывания пересылая данные на уровень выше -ip.Тот проверяет ошибки фрагменты,маршрутизирует пакет или отсылает на уровень выше(tcp udp) Этот уровень снова проверяет ошибки определяет сокет которому предназначен пакет и ложит его в очередь сокета.Тот в свою очередь будит пользовательский процесс и копирует данные в его буфер.

Чтение из сокета(1)

Пытаемся чтото прочитать(и засыпаем) Заполняем заголовок собщения указателем на буфер(сокет) проверяем простые ошибки передаем сообшение inet сокету

Получение пакета

Пробуждение устройства(прерывание) проверка девайса Получение заголовка выделение памяти ложим пакет в то место судя по всему используя DMA ставим пакет в очередь выставляем флаг запуска bottom-halv BottomHalv

Запуск сетевого боттом-халва Пересылка пакетов из девайса чтоб не было прерываний пересылка пакетов на уровень ip очистка очереди отсылки возврат




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