Курсовая работа: Реализация сети в операционной системе Linux
DEVICE->hard_start_xmit() - зависитотдевайса, drivers/net/DEVICE.c
в общем проверяет открыто ли устройство
посылает заголовок
говорит системной шине послать пакет
обновляетстатус
inet_sendmsg() - net/ipv4/af_inet.c
int inet_sendmsg(struct socket *sock, struct msghdr *msg, int size,
struct scm_cookie *scm)
{
struct sock *sk = sock->sk;
/*биндимсокет. */
if (sk->num==0 && inet_autobind(sk) != 0)
return -EAGAIN;
вызываем функцию протокола чтоб послать данные
return sk->prot->sendmsg(sk, msg, size);
}
ip_build_xmit - net/ipv4/ip_output.c (604)
calls sock_alloc_send_skb() выделяемпамять
=заголовочек=
if(!sk->protinfo.af_inet.hdrincl) {
iph->version=4;
iph->ihl=5;
iph->tos=sk->protinfo.af_inet.tos;
iph->tot_len = htons(length);
iph->frag_off = df;
iph->ttl=sk->protinfo.af_inet.mc_ttl;
ip_select_ident(iph, &rt->u.dst, sk);
if (rt->rt_type != RTN_MULTICAST)
iph->ttl=sk->protinfo.af_inet.ttl;