frag->nh.raw = __skb_push(frag, hlen);//留出网络头空间 memcpy(frag->nh.raw, iph, hlen);//copy skb中的ip头到这个碎片中当作网络头 iph = frag->nh.iph; iph->tot_len = htons(frag->len);//更新长度 ip_copy_metadata(frag, skb);//copy skb中的一些其他字段的值到碎片 if(offset ==...
if (atomic_read(&ip_frag_mem) > sysctl_ipfrag_high_thresh)/*缓存的报文超过系统分片阈值时释放一部分缓存*/ ip_evictor(); dev = skb->dev; /* Lookup (or create) queue header */ if ((qp = ip_find(iph, user)) != NULL) {/*查找分片节点,只有出错时才可能为null*/ struct sk_buff *...
*/ /* 分片重组 */ static int ip_frag_reasm(struct ipq *qp, struct sk_buff *prev, struct net_device *dev) { struct net *net = container_of(qp->q.net, struct net, ipv4.frags); struct iphdr *iph; struct sk_buff *fp, *head = qp->q.fragments; int len; int ihlen; int err...
3 创建一个表示单个ip分片的结构体ipfrag 。他表示其中一个分片。 // 创建一个表示ip分片的结构体 static struct ipfrag *ip_frag_create(int offset, int end, struct sk_buff *skb, unsigned char *ptr) { struct ipfrag *fp; fp = (struct ipfrag *) kmalloc(sizeof(struct ipfrag), GFP_ATOMIC)...
ip_frag_queue 1/*Add new segment to existing queue.*/2staticintip_frag_queue(structipq *qp,structsk_buff *skb)3{4structsk_buff *prev, *next;5structnet_device *dev;6unsignedintfragsize;7intflags, offset;8intihl, end;9interr = -ENOENT;10u8 ecn;1112/*分片接收完毕*/13if(qp->q.fla...
// 重组成功后构造完整的ip报文static struct sk_buff *ip_glue(struct ipq *qp){ struct sk_buff *skb; struct iphdr *iph; struct ipfrag *fp; unsigned char *ptr; int count, len; // 重组后整个包的长度等于mac头长度+ip头长度+数据长度 len = qp->maclen + qp->ihlen + qp->len; // ...
IP_FRAG_TIME;qp->timer.data=(unsigned long)qp;qp->timer.function=ip_expire;// 开始计时,如果超时没有收到新的ip分片,则重组失败,如果收到一个新的,重置计时器add_timer(&qp->timer);qp->prev=NULL;cli();// 头插法插入分片重组的队列qp->next=ipqueue;/*...
传递包到虚拟queue(为了宽带限制的使用WF2Q)。 rejec 被拒绝,跟无法找到主机一样。 reset 被丢弃的包若是一个tcp包,就试图发送一个tcp重组信息。搜索结束。 skipto number 跳读所有后来的规则号,继续搜索第一个号码和更高的那个。 tee port 发送一个匹配这个规则的拷贝到divert socket邦定的端口。搜索结束,最...
ip-frag: Number of IP fragments currently in use. tcp-tw: Number of TCP sockets in TIME_WAIT state. 9.5 使用 ifconfig 命令查看网络 活动,错误,负载: [root@localhost ~]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 08:00:27:07:21:AA ...
2. is_frag =1;说明该分片后面还有更多分片。 表示被分片的数据本身就是一个ip分片,即再分片。 所以该报文下的所有分片MF都是1。 */if(left>0||(is_frag&1))iph->frag_off|=htons(IP_MF);// 更新数据指针和偏移ptr+=len;offset+=len;// 发送分片ip_queue_xmit(sk,dev,skb2,2);} ...