⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sum.c

📁 pfil src. solaris, freebsd
💻 C
字号:
/* * Copyright (C) 2000 by Darren Reed. */#ifdef __hpux#define	ip_cksum	ip_csumastruct uio;#endif#include <sys/types.h>#include <sys/conf.h>#include <sys/stream.h>#include <sys/errno.h>#include <sys/socket.h>#include <sys/stat.h>#include <sys/cmn_err.h>#include <sys/dlpi.h>#ifdef __hpux# include <sys/io.h># include <sys/moddefs.h>#endif#include <net/if.h>#include <netinet/in_systm.h>#include <netinet/in.h>#include <netinet/ip.h>#include <netinet/tcp.h>#include "compat.h"#include "qif.h"#define   IP_SIMPLE_HDR_LENGTH_IN_WORDS   5u_shortpfil_tcpsum(m, ip, tcp)	mblk_t *m;	struct ip *ip;	struct tcphdr *tcp;{	u_short *sp, slen;	u_int sum, sum2;	int hlen;	/*	 * Add up IP Header portion	 */	hlen = ip->ip_hl << 2;	slen = ip->ip_len - hlen;	sum = htons(IPPROTO_TCP);	sum += htons(slen);	sp = (u_short *)&ip->ip_src;	sum += *sp++;	/* ip_src */	sum += *sp++;	sum += *sp++;	/* ip_dst */	sum += *sp++;	tcp->th_sum = 0;	sum2 = ip_cksum(m, hlen, sum);	sum2 = (sum2 & 0xffff) + (sum2 >> 16);	sum2 = ~sum2 & 0xffff;	return sum2;}/* Return the IP checksum for the IP header at "iph". */unsigned intpfil_ip_csum_hdr(iph)	u_char *iph;{	u_short *uph;	u_int sum;	u_int u1;	u1 = (*iph & 0xf) - IP_SIMPLE_HDR_LENGTH_IN_WORDS;	uph = (unsigned short *)iph;	sum = uph[0] + uph[1] + uph[2] + uph[3] + uph[4] +	      uph[5] + uph[6] + uph[7] + uph[8] + uph[9];	if (u1) {		do {			sum += uph[10];			sum += uph[11];			uph += 2;		} while (--u1);	}	sum = (sum & 0xffff) + (sum >> 16);	sum = ~(sum + (sum >> 16)) & 0xffff;	if (sum == 0xffff)		sum = 0;	return sum;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -