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

📄 skcsum.h

📁 Uboot源码,非常通用的bootloader.适用于各种平台的Linux系统引导.
💻 H
字号:
/****************************************************************************** * * Name:	skcsum.h * Project:	GEnesis - SysKonnect SK-NET Gigabit Ethernet (SK-98xx) * Version:	$Revision: 1.9 $ * Date:	$Date: 2001/02/06 11:21:39 $ * Purpose:	Store/verify Internet checksum in send/receive packets. * ******************************************************************************//****************************************************************************** * *	(C)Copyright 1998-2001 SysKonnect GmbH. * *	This program is free software; you can redistribute it and/or modify *	it under the terms of the GNU General Public License as published by *	the Free Software Foundation; either version 2 of the License, or *	(at your option) any later version. * *	The information in this file is provided "AS IS" without warranty. * ******************************************************************************//****************************************************************************** * * History: * *	$Log: skcsum.h,v $ *	Revision 1.9  2001/02/06 11:21:39  rassmann *	Editorial changes. * *	Revision 1.8  2001/02/06 11:15:36  rassmann *	Supporting two nets on dual-port adapters. * *	Revision 1.7  2000/06/29 13:17:05  rassmann *	Corrected reception of a packet with UDP checksum == 0 (which means there *	is no UDP checksum). * *	Revision 1.6  2000/02/28 12:33:44  cgoos *	Changed C++ style comments to C style. * *	Revision 1.5  2000/02/21 12:10:05  cgoos *	Fixed license comment. * *	Revision 1.4  2000/02/21 11:08:37  cgoos *	Merged changes back into common source. * *	Revision 1.1  1999/07/26 14:47:49  mkarl *	changed from common source to windows specific source *	added return SKCS_STATUS_IP_CSUM_ERROR_UDP and *	SKCS_STATUS_IP_CSUM_ERROR_TCP to pass the NidsTester *	changes for Tx csum offload * *	Revision 1.2  1998/09/04 12:16:34  mhaveman *	Checked in for Stephan to allow compilation. *	-Added definition SK_CSUM_EVENT_CLEAR_PROTO_STATS to clear statistic *	-Added prototype for SkCsEvent() * *	Revision 1.1  1998/09/01 15:36:53  swolf *	initial revision * *	01-Sep-1998 sw	Created. * ******************************************************************************//****************************************************************************** * * Description: * * Public header file for the "GEnesis" common module "CSUM". * * "GEnesis" is an abbreviation of "Gigabit Ethernet Network System in Silicon" * and is the code name of this SysKonnect project. * * Compilation Options: * *	SK_USE_CSUM - Define if CSUM is to be used. Otherwise, CSUM will be an *	empty module. * *	SKCS_OVERWRITE_PROTO - Define to overwrite the default protocol id *	definitions. In this case, all SKCS_PROTO_xxx definitions must be made *	external. * *	SKCS_OVERWRITE_STATUS - Define to overwrite the default return status *	definitions. In this case, all SKCS_STATUS_xxx definitions must be made *	external. * * Include File Hierarchy: * *	"h/skcsum.h" *	 "h/sktypes.h" *	 "h/skqueue.h" * ******************************************************************************/#ifndef __INC_SKCSUM_H#define __INC_SKCSUM_H#include "h/sktypes.h"#include "h/skqueue.h"/* defines ********************************************************************//* * Define the default bit flags for 'SKCS_PACKET_INFO.ProtocolFlags'  if no user * overwrite. */#ifndef SKCS_OVERWRITE_PROTO	/* User overwrite? */#define SKCS_PROTO_IP	0x1	/* IP (Internet Protocol version 4) */#define SKCS_PROTO_TCP	0x2	/* TCP (Transmission Control Protocol) */#define SKCS_PROTO_UDP	0x4	/* UDP (User Datagram Protocol) *//* Indices for protocol statistics. */#define SKCS_PROTO_STATS_IP	0#define SKCS_PROTO_STATS_UDP	1#define SKCS_PROTO_STATS_TCP	2#define SKCS_NUM_PROTOCOLS	3	/* Number of supported protocols. */#endif	/* !SKCS_OVERWRITE_PROTO *//* * Define the default SKCS_STATUS type and values if no user overwrite. * *	SKCS_STATUS_UNKNOWN_IP_VERSION - Not an IP v4 frame. *	SKCS_STATUS_IP_CSUM_ERROR - IP checksum error. *	SKCS_STATUS_IP_CSUM_ERROR_TCP - IP checksum error in TCP frame. *	SKCS_STATUS_IP_CSUM_ERROR_UDP - IP checksum error in UDP frame *	SKCS_STATUS_IP_FRAGMENT - IP fragment (IP checksum ok). *	SKCS_STATUS_IP_CSUM_OK - IP checksum ok (not a TCP or UDP frame). *	SKCS_STATUS_TCP_CSUM_ERROR - TCP checksum error (IP checksum ok). *	SKCS_STATUS_UDP_CSUM_ERROR - UDP checksum error (IP checksum ok). *	SKCS_STATUS_TCP_CSUM_OK - IP and TCP checksum ok. *	SKCS_STATUS_UDP_CSUM_OK - IP and UDP checksum ok. *	SKCS_STATUS_IP_CSUM_OK_NO_UDP - IP checksum OK and no UDP checksum. */#ifndef SKCS_OVERWRITE_STATUS	/* User overwrite? */#define SKCS_STATUS	int	/* Define status type. */#define SKCS_STATUS_UNKNOWN_IP_VERSION	1#define SKCS_STATUS_IP_CSUM_ERROR		2#define SKCS_STATUS_IP_FRAGMENT			3#define SKCS_STATUS_IP_CSUM_OK			4#define SKCS_STATUS_TCP_CSUM_ERROR		5#define SKCS_STATUS_UDP_CSUM_ERROR		6#define SKCS_STATUS_TCP_CSUM_OK			7#define SKCS_STATUS_UDP_CSUM_OK			8/* needed for Microsoft */#define SKCS_STATUS_IP_CSUM_ERROR_UDP	9#define SKCS_STATUS_IP_CSUM_ERROR_TCP	10/* UDP checksum may be omitted */#define SKCS_STATUS_IP_CSUM_OK_NO_UDP	11#endif	/* !SKCS_OVERWRITE_STATUS *//* Clear protocol statistics event. */#define SK_CSUM_EVENT_CLEAR_PROTO_STATS	1/* * Add two values in one's complement. * * Note: One of the two input values may be "longer" than 16-bit, but then the * resulting sum may be 17 bits long. In this case, add zero to the result using * SKCS_OC_ADD() again. * *	Result = Value1 + Value2 */#define SKCS_OC_ADD(Result, Value1, Value2) {				\	unsigned long Sum;						\									\	Sum = (unsigned long) (Value1) + (unsigned long) (Value2);	\	/* Add-in any carry. */						\	(Result) = (Sum & 0xffff) + (Sum >> 16);			\}/* * Subtract two values in one's complement. * *	Result = Value1 - Value2 */#define SKCS_OC_SUB(Result, Value1, Value2)	\	SKCS_OC_ADD((Result), (Value1), ~(Value2) & 0xffff)/* typedefs *******************************************************************//* * SKCS_PROTO_STATS - The CSUM protocol statistics structure. * * There is one instance of this structure for each protocol supported. */typedef struct s_CsProtocolStatistics {	SK_U64 RxOkCts;		/* Receive checksum ok. */	SK_U64 RxUnableCts;	/* Unable to verify receive checksum. */	SK_U64 RxErrCts;	/* Receive checksum error. */	SK_U64 TxOkCts;		/* Transmit checksum ok. */	SK_U64 TxUnableCts;	/* Unable to calculate checksum in hw. */} SKCS_PROTO_STATS;/* * s_Csum - The CSUM module context structure. */typedef struct s_Csum {	/* Enabled receive SK_PROTO_XXX bit flags. */	unsigned ReceiveFlags[SK_MAX_NETS];#ifdef TX_CSUM	unsigned TransmitFlags[SK_MAX_NETS];#endif /* TX_CSUM */	/* The protocol statistics structure; one per supported protocol. */	SKCS_PROTO_STATS ProtoStats[SK_MAX_NETS][SKCS_NUM_PROTOCOLS];} SK_CSUM;/* * SKCS_PACKET_INFO - The packet information structure. */typedef struct s_CsPacketInfo {	/* Bit field specifiying the desired/found protocols. */	unsigned ProtocolFlags;	/* Length of complete IP header, including any option fields. */	unsigned IpHeaderLength;	/* IP header checksum. */	unsigned IpHeaderChecksum;	/* TCP/UDP pseudo header checksum. */	unsigned PseudoHeaderChecksum;} SKCS_PACKET_INFO;/* function prototypes ********************************************************/#ifndef SkCsCalculateChecksumextern unsigned SkCsCalculateChecksum(	void		*pData,	unsigned	Length);#endifextern int SkCsEvent(	SK_AC		*pAc,	SK_IOC		Ioc,	SK_U32		Event,	SK_EVPARA	Param);extern SKCS_STATUS SkCsGetReceiveInfo(	SK_AC		*pAc,	void		*pIpHeader,	unsigned	Checksum1,	unsigned	Checksum2,	int			NetNumber);extern void SkCsGetSendInfo(	SK_AC				*pAc,	void				*pIpHeader,	SKCS_PACKET_INFO	*pPacketInfo,	int					NetNumber);extern void SkCsSetReceiveFlags(	SK_AC		*pAc,	unsigned	ReceiveFlags,	unsigned	*pChecksum1Offset,	unsigned	*pChecksum2Offset,	int			NetNumber);#endif	/* __INC_SKCSUM_H */

⌨️ 快捷键说明

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