Курсовая работа: Реализация сети в операционной системе Linux
iph->saddr=rt->rt_src;
iph->daddr=rt->rt_dst;
iph->check=0;
iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl);
err = getfrag(frag, ((char *)iph)+iph->ihl*4,0, length-iph->ihl*4);
}
calls getfrag() копируем данные у юзера
returns rt->u.dst.output() [= dev_queue_xmit()]
ip_queue_xmit() - net/ipv4/ip_output.c (234)
cмотри маршрут
достраиваем ip заголовок
фрагментирум если надо
adds IP checksum
calls skb->dst->output() [= dev_queue_xmit()]
qdisc_restart() - net/sched/sch_generic.c (50)
вырываем пакет из очереди
calls dev->hard_start_xmit()
обновляем статистику
if если ошибка опять стввим пакет в очередь
sock_sendmsg() - net/socket.c (325)
проверяемправаивсётакое
calls scm_sendmsg() [socket control message]
шлёмсданные
calls sock->ops[inet]->sendmsg() and destroys scm
>>> sock_write() - net/socket.c (399)
calls socki_lookup() accоциируемсокетс inode
заполняем заголовок сообщения
returns sock_sendmsg()
tcp_sendmsg() - net/ipv4/tcp.c (755)