skb-6
2016-01-26 15:09
429 查看
struct rtable *rt = inet->cork.rt; struct iphdr *iph; skb->nh.raw = skb_push(skb, sizeof(struct iphdr)); iph = skb->nh.iph; iph->version = 4; iph->ihl = 5; iph->tos = inet->tos; iph->tot_len = htons(skb->len); iph->frag_off = 0; iph->id = htons(inet->id++); iph->ttl = ip_select_ttl(inet, &rt->u.dst); iph->protocol = sk->sk_protocol; /* IPPROTO_UDP in this case */ iph->saddr = rt->rt_src; iph->daddr = rt->rt_dst; ip_send_check(iph); skb->priority = sk->sk_priority; skb->dst = dst_clone(&rt->u.dst);
This is what a new SKB looks like after we push the IPv4 header tothe front of the SKB.
Just as above for UDP, skb_push() decrements 'skb->data' andincrements 'skb->len'. We update the 'skb->nh.raw' pointer to thebeginning of the new space, and build the IPv4 header.
This packet is basically ready to be pushed out to the device oncewe have the necessary information to build the ethernet header(from the generic neighbour layer and ARP).
相关文章推荐
- Linux上编译opencv程序
- XSS攻击简介
- oracle表空间不足扩容的方法
- 使用xib方式创建UITableViewCell,设置Label自动换行注意事项
- java面向对象学习笔记
- Node.js 学习(五)Node.js 事件循环
- UIStatusBarStyle PreferredStatusBarStyle does not work
- Linux 最常用的操作命令
- Linux 最常用的操作命令
- Linux 最常用的操作命令
- Linux 最常用的操作命令
- Linux 最常用的操作命令
- Linux 最常用的操作命令
- Linux 最常用的操作命令
- Linux 最常用的操作命令
- Linux 最常用的操作命令
- Linux 最常用的操作命令
- Linux 最常用的操作命令
- Linux 最常用的操作命令
- Linux 最常用的操作命令