ки на протокольно залежні частини
Зберігаємо дані про тип і параметри сокета
Встановлюємо сокет в положення закрито
Ініціалізіруем черзі пакетів
Connect
Перевіряємо помилки
Визначаємо Маршрут
Перевіряємо кеш
Дивимося в FIB
Створюємо новий запис у таблиці маршрутизації
Заповнюємо її і повертаємо
Зберігаємо покажчик на запис маршрутизації в сокеті
Викликаємо протокольно залежну функцію connect
Встановлюємо сокет в з'єднаний
Також треба не забути закрити сокет
Close викликає sock_close in socket.c
void sock_release (struct socket * Sock)
{
if (sock-> ops)
sock-> ops-> release (sock);
...........................
}
а та через ланцюжок викликів протокольнозавісімую функцію
Додаткові функції
void inet_sock_release (struct sock * Sk) -net/ipv4/af_inet.c
назвніе говорить за себе + хороший коментар Алана Коха
fib_lookup () - include/net/ip_fib.h
повертає маршрут. Написана російською-Кузнецов!
fn_hach_lookup net/fib_hash.c
повертає маршрут за адресою
inet_create net/ipv4/af_inet.c
створює сокет
inet_release
ip_route_connect
викликає ip_route_output для визначенні адреси призначення
ip_route_output
ip_route_output_slow
rt_intern_hash корисні для маршрутизації функції
sock_close ()
sock_create ()
sock_init_data net/core/sock.c ініціалізує основні поля сокета
sock_release net/socket.c
sys_socket
tcp_close net/ipv4/tcp.c
встановлює прапор FYN
tpc_connect net/ipv4/tpc_output.c
сохдает пакети для з'єднання з встановленим розміром вікна
і відповідними бітами, покладає пакет в чергу і виpивает
tcp_transmit_skb щоб послати пакет
tcp_transmit_skb -Заповнює заголовок пакета і передає його
на уроветь IP
tcp_v4_connect ()
викликає ip_route_connect
створює з'єднувальний пакет і викликає tcp_connect
udp_close
udp_connect
Обмін даними
Ця частина описує процес обміну даними між різними рівнями ядра та мережі Коли додаток відправляє дані то воно пише в сокет той у своб чергу визначає свій тип і викликає відповідну функцію, та передає дані протоколом транспортного рівня (tcp, udp) функції етого рівня створюють структуру sk_buff, копіюють в неї дані заповнюють заголовок свого рівня, вважають контрольну суму і шлють на рівень IP.Там дописується заголовок ip, checksum, можливо пакет фраг ментора і шле на xmit чергу мережевого девайса, той посилає пакет у мережу. p> dev_queue_xmit () - net/core/dev.c
spin_lock_bh () -Блокуємо девайс
якщо у нього є черга
calls enqueue () додаємо пакет
calls qdis () пробуджуємо девайс
else ...