patch-1.3.10 linux/include/net/head_explode.h
Next file: linux/include/net/ip.h
Previous file: linux/include/net/eth.h
Back to the patch index
Back to the overall index
- Lines: 141
- Date:
Thu Jan 1 02:00:00 1970
- Orig file:
v1.3.9/linux/include/net/head_explode.h
- Orig date:
Tue Jun 6 11:22:17 1995
diff -u --recursive --new-file v1.3.9/linux/include/net/head_explode.h linux/include/net/head_explode.h
@@ -1,140 +0,0 @@
-/*
- * Header exploders. We inline those only appearing once.
- *
- * We assume 8 bit bytes.
- *
- * This is oriented to getting good code out of GCC. It may need
- * tuning for other processors.
- *
- * Note only IGMP uses this so far. Just as an experiment.
- */
-
-
-extern __inline__ unsigned char *exp_getu16(unsigned char *bp, unsigned short *u)
-{
- *u=(*bp<<8)|bp[1];
- return bp+2;
-}
-
-extern __inline__ unsigned char *exp_getn16(unsigned char *bp, unsigned short *u)
-{
- unsigned char *tp=(unsigned char *)u;
- *tp++=*bp++;
- *tp++=*bp++;
- return bp;
-}
-
-extern __inline__ unsigned char *imp_putu16(unsigned char *bp, unsigned short n)
-{
- *bp=(n>>8);
- bp[1]=n&0xFF;
- return bp+2;
-}
-
-extern __inline__ unsigned char *imp_putn16(unsigned char *bp, unsigned short n)
-{
- unsigned char *sp=(unsigned char *)&n;
- *bp++=*sp++;
- *bp++=*sp++;
- return bp;
-}
-
-extern __inline__ unsigned char *exp_getu32(unsigned char *bp, unsigned long *u)
-{
- *u=(bp[0]<<24)|(bp[1]<<16)|(bp[2]<<8)|bp[3];
- return bp+4;
-}
-
-extern __inline__ unsigned char *exp_getn32(unsigned char *bp, unsigned long *u)
-{
- unsigned char *tp=(unsigned char *)u;
- *tp++=*bp++;
- *tp++=*bp++;
- *tp++=*bp++;
- *tp++=*bp++;
- return bp;
-}
-
-extern __inline__ unsigned char *imp_putu32(unsigned char *bp, unsigned long n)
-{
- bp[0]=n>>24;
- bp[1]=(n>>16)&0xFF;
- bp[2]=(n>>8)&0xFF;
- bp[3]=n&0xFF;
- return bp+4;
-}
-
-extern __inline__ unsigned char *imp_putn32(unsigned char *bp, unsigned long n)
-{
- unsigned char *sp=(unsigned char *)&n;
- *bp++=*sp++;
- *bp++=*sp++;
- *bp++=*sp++;
- *bp++=*sp++;
- return bp;
-}
-
-#if 0
-
-extern __inline__ unsigned char *ip_explode(unsigned char *iph, struct ip_header *ip)
-{
- ip->version=*iph>>4; /* Avoid the shift. We do our equality checks shifted too */
- ip->ihl=(*iph++)&0xF; /* Length in long words */
- ip->tos=*iph++; /* Service type */
- iph=exp_getu16(iph,&ip->tot_len); /* Length of packet */
- iph=exp_getu16(iph,&ip->id); /* Packet identity */
- iph=exp_getu16(iph,&ip->frag_off); /* Fragment offset */
- ip->ttl=*iph++;
- ip->protocol=*iph++;
- iph=exp_getn16(iph,&ip->check);
- iph=exp_getn32(iph,&ip->saddr);
- iph=exp_getn32(iph,&ip->daddr);
- return iph;
-}
-
-extern __inline__ unsigned char *icmp_explode(unsigned char *icmph, struct icmp_header *icmp)
-{
- icmp->type=*icmp++;
- icmp->code=*icmp++;
- icmph=exp_getn16(icmph,&icmp->checksum);
- /* These two pairs are a union... expand both */
- exp_getu32(icmph,&icmp->gateway);
- icmph=exp_getu16(icmph,&icmp->id);
- icmph=exp_getu16(icmph,&icmp->sequence);
- return icmph;
-}
-
-#endif
-
-extern __inline__ unsigned char *igmp_explode(unsigned char *igmph, struct igmp_header *igmp)
-{
- igmp->type=*igmph++;
- igmph++; /* unused */
- igmph=exp_getn16(igmph,&igmp->csum);
- igmph=exp_getn32(igmph,&igmp->group);
- return igmph;
-}
-
-#if 0
-extern __inline__ unsigned char *tcp_explode(unsigned char *tcph, struct tcp_header *tcp)
-{
- tcph=exp_getu16(tcph,&tcp->source);
- tcph=exp_getu16(tcph,&tcp->dest);
- tcph=exp_getu32(tcph,&tcp->seq);
- tcph=exp_getu32(tcph,&tcp->ack_seq);
- tcph=exp_getu16(tcph,&tcp->u.bitmask);
- tcph=exp_getu16(tcph,&tcp->window);
- tcph=exp_getn16(tcph,&tcp->check);
- tcph=exp_getu16(tcph,&tcp->urg_ptr);
- return tcph;
-}
-
-extern __inline__ unsigned char *udp_explode(unsigned char *udph, struct udp_header *udp)
-{
- udph=exp_getu16(tcph,&udp->source);
- udph=exp_getu16(udph,&udp->dest);
- udph=exp_getu16(udph,&udp->len);
- udph=exp_getn16(udph,&udp->check);
- return udph;
-}
-#endif
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov
with Sam's (original) version of this