1/* 2* IPv6ProtocolHdr.h 3* 4*Copyright (C) 2010 Beceem Communications, Inc. 5* 6*This program is free software: you can redistribute it and/or modify 7*it under the terms of the GNU General Public License version 2 as 8*published by the Free Software Foundation. 9* 10*This program is distributed in the hope that it will be useful,but 11*WITHOUT ANY WARRANTY; without even the implied warranty of 12*MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 13*See the GNU General Public License for more details. 14* 15*You should have received a copy of the GNU General Public License 16*along with this program. If not, write to the Free Software Foundation, Inc., 17*51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18* 19*/ 20 21 22#ifndef _IPV6_PROTOCOL_DEFINES_ 23#define _IPV6_PROTOCOL_DEFINES_ 24 25 26#define IPV6HDR_TYPE_HOPBYHOP 0x0 27#define IPV6HDR_TYPE_ROUTING 0x2B 28#define IPV6HDR_TYPE_FRAGMENTATION 0x2C 29#define IPV6HDR_TYPE_DESTOPTS 0x3c 30#define IPV6HDR_TYPE_AUTHENTICATION 0x33 31#define IPV6HDR_TYPE_ENCRYPTEDSECURITYPAYLOAD 0x34 32#define MASK_IPV6_CS_SPEC 0x2 33 34 35#define TCP_HEADER_TYPE 0x6 36#define UDP_HEADER_TYPE 0x11 37#define IPV6_ICMP_HDR_TYPE 0x2 38#define IPV6_FLOWLABEL_BITOFFSET 9 39 40#define IPV6_MAX_CHAINEDHDR_BUFFBYTES 0x64 41/* 42// Size of Dest Options field of Destinations Options Header 43// in bytes. 44*/ 45#define IPV6_DESTOPTS_HDR_OPTIONSIZE 0x8 46 47//typedef unsigned char UCHAR; 48//typedef unsigned short USHORT; 49//typedef unsigned long int ULONG; 50 51typedef struct IPV6HeaderFormatTag 52{ 53 UCHAR ucVersionPrio; 54 UCHAR aucFlowLabel[3]; 55 USHORT usPayloadLength; 56 UCHAR ucNextHeader; 57 UCHAR ucHopLimit; 58 ULONG ulSrcIpAddress[4]; 59 ULONG ulDestIpAddress[4]; 60}IPV6Header; 61 62typedef struct IPV6RoutingHeaderFormatTag 63{ 64 UCHAR ucNextHeader; 65 UCHAR ucRoutingType; 66 UCHAR ucNumAddresses; 67 UCHAR ucNextAddress; 68 ULONG ulReserved; 69 //UCHAR aucAddressList[0]; 70 71}IPV6RoutingHeader; 72 73typedef struct IPV6FragmentHeaderFormatTag 74{ 75 UCHAR ucNextHeader; 76 UCHAR ucReserved; 77 USHORT usFragmentOffset; 78 ULONG ulIdentification; 79}IPV6FragmentHeader; 80 81typedef struct IPV6DestOptionsHeaderFormatTag 82{ 83 UCHAR ucNextHeader; 84 UCHAR ucHdrExtLen; 85 UCHAR ucDestOptions[6]; 86 //UCHAR udExtDestOptions[0]; 87}IPV6DestOptionsHeader; 88 89typedef struct IPV6HopByHopOptionsHeaderFormatTag 90{ 91 UCHAR ucNextHeader; 92 UCHAR ucMisc[3]; 93 ULONG ulJumboPayloadLen; 94}IPV6HopByHopOptionsHeader; 95 96typedef struct IPV6AuthenticationHeaderFormatTag 97{ 98 UCHAR ucNextHeader; 99 UCHAR ucLength; 100 USHORT usReserved; 101 ULONG ulSecurityParametersIndex; 102 //UCHAR ucAuthenticationData[0]; 103 104}IPV6AuthenticationHeader; 105 106typedef struct IPV6IcmpHeaderFormatTag 107{ 108 UCHAR ucType; 109 UCHAR ucCode; 110 USHORT usChecksum; 111 //UCHAR ucIcmpMsg[0]; 112 113}IPV6IcmpHeader; 114 115typedef enum _E_IPADDR_CONTEXT 116{ 117 eSrcIpAddress, 118 eDestIpAddress 119 120}E_IPADDR_CONTEXT; 121 122 123 124//Function Prototypes 125BOOLEAN MatchSrcIpv6Address(S_CLASSIFIER_RULE *pstClassifierRule,IPV6Header *pstIpv6Header); 126BOOLEAN MatchDestIpv6Address(S_CLASSIFIER_RULE *pstClassifierRule,IPV6Header *pstIpv6Header); 127 128USHORT IpVersion6(PMINI_ADAPTER Adapter, /**< Pointer to the driver control structure */ 129 PVOID pcIpHeader, /**<Pointer to the IP Hdr of the packet*/ 130 S_CLASSIFIER_RULE *pstClassifierRule ); 131 132VOID DumpIpv6Address(ULONG *puIpv6Address); 133VOID DumpIpv6Header(IPV6Header *pstIpv6Header); 134 135extern BOOLEAN MatchSrcPort(S_CLASSIFIER_RULE *pstClassifierRule,USHORT ushSrcPort); 136extern BOOLEAN MatchDestPort(S_CLASSIFIER_RULE *pstClassifierRule,USHORT ushSrcPort); 137extern BOOLEAN MatchProtocol(S_CLASSIFIER_RULE *pstClassifierRule,UCHAR ucProtocol); 138 139 140#endif 141