电气工程论文网


  • 首页|
  • 自动化毕业论文|
  • 电子机电毕业论文|
  • 电子通信论文|
  • 电气工程论文|
  • 电子信息工程|
  • 电气工程原创论文|
  • 电气工程免费论文|
原创毕业论文 → 电气工程专业原创毕业论文   现成毕业论文范文 → 电气工程专业毕业论文范文

论文降重

当前位置:电气工程论文网 -> 电子通信免费论文 -> IP协议设计实现—重装模块(三)

IP协议设计实现—重装模块(三)

本文ID:LW6372
IP协议设计实现—重装模块(三)
_dst.s_addr&&ip->ip_p==fp->ipq_p) goto found;
found:             /*调整ip_len*/
ip->ip_len-=heln;   /*有更多分片就创建ip_mff,并将偏移量*/ ((struct ipasfrag *)ip)->ip_mff&=~1;/ *转换成字节*/
if(ip->ip_off&IP_MF) ((struct ipasfrag *) ip)->ipf_mff |=1;
ip->ip_off<<=3;
if(((struct ipasfrag *) ip)->ipf_mff&1||ip->ip_off)
ipstat.ips_fragments++;
/*如果此数据报有更多的分片或者这不是第一个分片,就试图重
*装,调用 ip_reass函数,如果成功,就继续*/
ip=ip_reass((struct ipasfrag *)ip,fp);
if(ip==0) goto next;
ipstat.ips_reassembled++;
m=dtom(ip);
}else if(fp) ip_freef(fp);
}else ip->ip_len-=hlen;
}
ip_reass函数实现:
struct ip *
struct ipasfrag *ip;
struct ipq *fp;
ip_reass(ip,fp)
{ struct  mbuf *m=dtom(ip);
struct ipasfrag *q;
struct mbuf *t;
int hlen=ip->ip_hl<<2;/*
int i,next;
m->m_data+=heln;
m->m_len-=hlen;
/*当第一个分片到来时,创建一个重装表*/
if(fp==0){
if(t=m_get(M_DONTWAIT,MT_FTABLE))==null)
goto dropfrag;
fp=mtod(t,struct ipq *);
insque(fp,&ipq);
fp->ipq_ttl=IPFRAGTTL;
fp->ipq_p=ip->ip_p;
fp->ipq_id=ip->ip_id;
fp->ipq_next=fp->ipq_prev=(struct ipasfrag *) fp;
fp->ipq_src=((struct ip *) ip)->ip_src;
p->ipq_dst=((struct ip *) ip)->ip_dst;
q=(struct ipasfrag *) fp;
goto insert;}
for(q=fp->ipq_next;q!=(struct ipasfrag *) fp;q=q->ipf_next)
 if(q->ip_off>ip->ip_off) break;
 /*搜索数据链表找到一个偏移
*大于ip_off的*分片*/
if(q->ipf_prev!=(struct ipasfrag *)fp){
i=q->ipf_prev->ip_off+q->ipf_prev->ip_len-ip->ip_off;
if(i>0){   
 /*把新片中与早到分片末尾重叠的字节丢弃,切断重复部分,或
*者新片在以前都已经出现,则丢弃所有新片*/
if(i>=ip->ip_len) goto dropfrag;
m_adj(dtom(ip),i);
ip->ip_off+=i;
ip->ip_len-=i;
}}
while(q!=(struct ipasfrag*)fp&&ip->ip_off+ip->ip_len>ip->
ip_off){
i=(ip->ip_off)+ip->ip_len-q->ip_off;
q->ip_len-=i;
q->ip_off+=i;
m_adj(dtom(q),i);
break;}
q=q->ipf_next;
m_freem(dtom(q->ipf_prev));
ip_deq(q->ipf_prev);
}/*截断或丢弃已有的分片*/
insert:
ip_enq(ip,q->ipf_prev);
next=0;
for(q=fp->ipq_next;q!=(struct ipasfrag *)fp;q=q->ipf_next){
if(q->ip_off!=next) return 0;
next +=q->ip_len;
}
if(q->ipf_prev->ipf_mff&1) return 0;/*将到达分片插入重装链*表       */
q=fp->ipq_next;
m=dtom(q);
t=m->m_next;
m->m_next=0;
m_cat(m,t);
q=q->ipf_next;
while(q!=(struct ipasfrag *)fp){
t=dtom(q);
q=q->ipf_next;
m_cat(m,t);
}/*如果所有分片都已接收,用m_cat把分片重装成数据报*/
ip=fp->ipq_next;
ip->ip_len=next;
ip->ipf_mff&=~1;
((struct ip *)ip)->ip_src=fp->ipq_src;
((struct ip *)ip)->ip_dst=fp->ipq_dst;
remque(fp);
(void) m_free(dtom(fp));
m=dtom(ip);
m->m_len+=(ip->ip_hl<<2);
m->m_data-=(ip->ip_hl<<2);
/*重建数据报首部*/
if(m->m_flags&M_PKTHDR){
int plen=0;
for( t=m; m;m=m->m_next)
plen+=m->m_len;
t->m_pkthdr.len=plen;
}
return( (struct ip *)ip);/*计算缓存链中数据的字节数,并保存在
*  m_pkthdr.len中*/
}

心得体会
 通过

首页 上一页 1 2 3 4 下一页 尾页 3/4/4

下载地址 WORD格式全文下载链接(充值:元)


IP协议设计实现—重装模块(三)......
论文人工降重
本论文《IP协议设计实现—重装模块(三)》在电子通信免费论文栏目,由电气工程论文网整理,转载请注明来源 www.dqlunwen.top 更多论文,请点电气工程论文查看
上一篇:DDS的杂散对比与级联方案的研究 下一篇:MATLAB正交振幅调制解调仿真分析

点击查看关于 协议 设计 实现 模块 的相关论文题目 2010-04-11 22:02:33【返回顶部】
联系方式

相关栏目

光机电应用技术
机电一体化
应用电子技术
电子信息工程技术
自动化免费论文
自动化专业毕业论文
电子专业免费论文
电子机电毕业论文
电气工程免费论文
测控技术与仪器
电气工程原创论文
电子通信论文
电气自动化开题
电子机电开题报告
电子通信免费论文
PLC相关外文翻译
电子机电信息外文翻译
电子通信外文翻译
联系方式
电子信息工程论文下载
电气工程论文下载


联系方式


电气工程论文网提供电气工程论文范文,电气工程毕业论文,网站永久域名www.dqlunwen.top 

本站部分文章来自网友投稿上传,如发现侵犯了您的版权,请联系指出,本站及时确认并删除  E-mail: 17304545@qq.com

Copyright@ 2009-2022 电气工程论文网 版权所有