blob: cd5f1c35ae4b87c5b6d5cbdaeb4620867e9fc396 [file] [log] [blame]
Stephen Hemmingerf8942e02010-09-08 14:46:36 -07001#include "headers.h"
2
Stephen Hemminger9dd47ee2010-11-01 12:24:00 -04003static BOOLEAN MatchSrcIpv6Address(S_CLASSIFIER_RULE *pstClassifierRule,IPV6Header *pstIpv6Header);
4static BOOLEAN MatchDestIpv6Address(S_CLASSIFIER_RULE *pstClassifierRule,IPV6Header *pstIpv6Header);
5static VOID DumpIpv6Header(IPV6Header *pstIpv6Header);
6
Arnd Bergmann44a17eff2010-09-30 10:24:12 +02007static UCHAR * GetNextIPV6ChainedHeader(UCHAR **ppucPayload,UCHAR *pucNextHeader,BOOLEAN *bParseDone,USHORT *pusPayloadLength)
Stephen Hemmingerf8942e02010-09-08 14:46:36 -07008{
9 UCHAR *pucRetHeaderPtr = NULL;
10 UCHAR *pucPayloadPtr = NULL;
11 USHORT usNextHeaderOffset = 0 ;
Max Tottenham26908c92012-04-03 12:35:24 +010012 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(gblpnetdev);
Stephen Hemmingerf8942e02010-09-08 14:46:36 -070013
Max Tottenham26908c92012-04-03 12:35:24 +010014 if ((NULL == ppucPayload) || (*pusPayloadLength == 0) ||
15 (*bParseDone)) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -070016 *bParseDone = TRUE;
17 return NULL;
Stephen Hemmingerf8942e02010-09-08 14:46:36 -070018 }
19
20 pucRetHeaderPtr = *ppucPayload;
21 pucPayloadPtr = *ppucPayload;
22
Max Tottenham26908c92012-04-03 12:35:24 +010023 if (!pucRetHeaderPtr || !pucPayloadPtr) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -070024 *bParseDone = TRUE;
25 return NULL;
26 }
27
28 //Get the Nextt Header Type
29 *bParseDone = FALSE;
30
31
Max Tottenham26908c92012-04-03 12:35:24 +010032 switch (*pucNextHeader) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -070033 case IPV6HDR_TYPE_HOPBYHOP:
34 {
35
36 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 HopByHop Header");
37 usNextHeaderOffset+=sizeof(IPV6HopByHopOptionsHeader);
38 }
39 break;
40
41 case IPV6HDR_TYPE_ROUTING:
42 {
43 IPV6RoutingHeader *pstIpv6RoutingHeader;
44 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 Routing Header");
45 pstIpv6RoutingHeader = (IPV6RoutingHeader *)pucPayloadPtr;
46 usNextHeaderOffset += sizeof(IPV6RoutingHeader);
47 usNextHeaderOffset += pstIpv6RoutingHeader->ucNumAddresses * IPV6_ADDRESS_SIZEINBYTES;
48
49 }
50 break;
51 case IPV6HDR_TYPE_FRAGMENTATION:
52 {
53 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 Fragmentation Header");
54 usNextHeaderOffset+= sizeof(IPV6FragmentHeader);
55
56 }
57 break;
58 case IPV6HDR_TYPE_DESTOPTS:
59 {
60 IPV6DestOptionsHeader *pstIpv6DestOptsHdr = (IPV6DestOptionsHeader *)pucPayloadPtr;
61 int nTotalOptions = pstIpv6DestOptsHdr->ucHdrExtLen;
62 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 DestOpts Header Header");
63 usNextHeaderOffset+= sizeof(IPV6DestOptionsHeader);
64 usNextHeaderOffset+= nTotalOptions * IPV6_DESTOPTS_HDR_OPTIONSIZE ;
65
66 }
67 break;
68 case IPV6HDR_TYPE_AUTHENTICATION:
69 {
70 IPV6AuthenticationHeader *pstIpv6AuthHdr = (IPV6AuthenticationHeader *)pucPayloadPtr;
71 int nHdrLen = pstIpv6AuthHdr->ucLength;
72 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 Authentication Header");
73 usNextHeaderOffset+= nHdrLen * 4;
74 }
75 break;
76 case IPV6HDR_TYPE_ENCRYPTEDSECURITYPAYLOAD:
77 {
78 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 Encrypted Security Payload Header");
79 *bParseDone = TRUE;
80
81 }
82 break;
83 case IPV6_ICMP_HDR_TYPE:
84 {
85 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, " ICMP Header");
86 *bParseDone = TRUE;
87 }
88 break;
89 case TCP_HEADER_TYPE:
90 {
91 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, " \nTCP Header");
92 *bParseDone = TRUE;
93 }
94 break;
95 case UDP_HEADER_TYPE:
96 {
97 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, " \nUDP Header");
98 *bParseDone = TRUE;
99 }
100 break;
Max Tottenham26908c92012-04-03 12:35:24 +0100101 default:
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700102 {
103 *bParseDone = TRUE;
104
105 }
106 break;
107
108
109 }
110
Max Tottenham26908c92012-04-03 12:35:24 +0100111 if (*bParseDone == FALSE) {
112 if(*pusPayloadLength <= usNextHeaderOffset) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700113 *bParseDone = TRUE;
Max Tottenham26908c92012-04-03 12:35:24 +0100114 } else {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700115 *pucNextHeader = *pucPayloadPtr;
Max Tottenham26908c92012-04-03 12:35:24 +0100116 pucPayloadPtr += usNextHeaderOffset;
117 (*pusPayloadLength) -= usNextHeaderOffset;
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700118 }
119
120 }
121
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700122 *ppucPayload = pucPayloadPtr;
123 return pucRetHeaderPtr;
124}
125
126
Arnd Bergmann44a17eff2010-09-30 10:24:12 +0200127static UCHAR GetIpv6ProtocolPorts(UCHAR *pucPayload,USHORT *pusSrcPort,USHORT *pusDestPort,USHORT usPayloadLength,UCHAR ucNextHeader)
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700128{
129 UCHAR *pIpv6HdrScanContext = pucPayload;
130 BOOLEAN bDone = FALSE;
131 UCHAR ucHeaderType =0;
132 UCHAR *pucNextHeader = NULL;
Max Tottenham26908c92012-04-03 12:35:24 +0100133 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(gblpnetdev);
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700134
Max Tottenham26908c92012-04-03 12:35:24 +0100135 if ( !pucPayload || (usPayloadLength == 0)) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700136 return 0;
137 }
138
139 *pusSrcPort = *pusDestPort = 0;
140 ucHeaderType = ucNextHeader;
Max Tottenham26908c92012-04-03 12:35:24 +0100141 while (!bDone) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700142 pucNextHeader = GetNextIPV6ChainedHeader(&pIpv6HdrScanContext,&ucHeaderType,&bDone,&usPayloadLength);
Max Tottenham26908c92012-04-03 12:35:24 +0100143 if(bDone) {
144 if((ucHeaderType==TCP_HEADER_TYPE) || (ucHeaderType == UDP_HEADER_TYPE)) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700145 *pusSrcPort=*((PUSHORT)(pucNextHeader));
146 *pusDestPort=*((PUSHORT)(pucNextHeader+2));
147 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, " \nProtocol Ports - Src Port :0x%x Dest Port : 0x%x",ntohs(*pusSrcPort),ntohs(*pusDestPort));
148 }
149 break;
150
151 }
152 }
153 return ucHeaderType;
154}
155
156
157
158USHORT IpVersion6(PMINI_ADAPTER Adapter, /**< Pointer to the driver control structure */
159 PVOID pcIpHeader, /**<Pointer to the IP Hdr of the packet*/
160 S_CLASSIFIER_RULE *pstClassifierRule )
161{
162 USHORT ushDestPort = 0;
163 USHORT ushSrcPort = 0;
164 UCHAR ucNextProtocolAboveIP =0;
165 IPV6Header *pstIpv6Header = NULL;
166 BOOLEAN bClassificationSucceed = FALSE;
167
168 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "IpVersion6 ==========>\n");
169
170 pstIpv6Header = (IPV6Header *)pcIpHeader;
171
172 DumpIpv6Header(pstIpv6Header);
173
174 //Try to get the next higher layer protocol and the Ports Nos if TCP or UDP
175 ucNextProtocolAboveIP = GetIpv6ProtocolPorts((UCHAR *)(pcIpHeader + sizeof(IPV6Header)),
176 &ushSrcPort,
177 &ushDestPort,
178 pstIpv6Header->usPayloadLength,
179 pstIpv6Header->ucNextHeader);
180
Max Tottenham26908c92012-04-03 12:35:24 +0100181 do {
182 if (0 == pstClassifierRule->ucDirection) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700183 //cannot be processed for classification.
184 // it is a down link connection
185 break;
186 }
187
Max Tottenham26908c92012-04-03 12:35:24 +0100188 if (!pstClassifierRule->bIpv6Protocol) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700189 //We are looking for Ipv6 Classifiers . Lets ignore this classifier and try the next one.
190 break;
191 }
192
193 bClassificationSucceed=MatchSrcIpv6Address(pstClassifierRule,pstIpv6Header);
Max Tottenham26908c92012-04-03 12:35:24 +0100194 if (!bClassificationSucceed)
195 break;
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700196
Max Tottenham26908c92012-04-03 12:35:24 +0100197 bClassificationSucceed=MatchDestIpv6Address(pstClassifierRule,pstIpv6Header);
198 if (!bClassificationSucceed)
199 break;
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700200
201 //Match the protocol type.For IPv6 the next protocol at end of Chain of IPv6 prot headers
202 bClassificationSucceed=MatchProtocol(pstClassifierRule,ucNextProtocolAboveIP);
Max Tottenham26908c92012-04-03 12:35:24 +0100203 if (!bClassificationSucceed)
204 break;
205 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 Protocol Matched");
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700206
Max Tottenham26908c92012-04-03 12:35:24 +0100207 if ((ucNextProtocolAboveIP == TCP_HEADER_TYPE) || (ucNextProtocolAboveIP == UDP_HEADER_TYPE)) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700208 //Match Src Port
209 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 Source Port:%x\n",ntohs(ushSrcPort));
210 bClassificationSucceed=MatchSrcPort(pstClassifierRule,ntohs(ushSrcPort));
Max Tottenham26908c92012-04-03 12:35:24 +0100211 if (!bClassificationSucceed)
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700212 break;
213
214 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 Src Port Matched");
215
216 //Match Dest Port
217 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 Destination Port:%x\n",ntohs(ushDestPort));
218 bClassificationSucceed=MatchDestPort(pstClassifierRule,ntohs(ushDestPort));
Max Tottenham26908c92012-04-03 12:35:24 +0100219 if (!bClassificationSucceed)
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700220 break;
221 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\nIPv6 Dest Port Matched");
222 }
Max Tottenham26908c92012-04-03 12:35:24 +0100223 } while (0);
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700224
Max Tottenham26908c92012-04-03 12:35:24 +0100225 if (TRUE == bClassificationSucceed) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700226 INT iMatchedSFQueueIndex = 0;
227 iMatchedSFQueueIndex = SearchSfid(Adapter,pstClassifierRule->ulSFID);
Max Tottenham26908c92012-04-03 12:35:24 +0100228 if(iMatchedSFQueueIndex >= NO_OF_QUEUES) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700229 bClassificationSucceed = FALSE;
Max Tottenham26908c92012-04-03 12:35:24 +0100230 } else {
231 if (FALSE == Adapter->PackInfo[iMatchedSFQueueIndex].bActive) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700232 bClassificationSucceed = FALSE;
233 }
234 }
235 }
236
237 return bClassificationSucceed;
238}
239
240
Stephen Hemminger9dd47ee2010-11-01 12:24:00 -0400241static BOOLEAN MatchSrcIpv6Address(S_CLASSIFIER_RULE *pstClassifierRule,IPV6Header *pstIpv6Header)
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700242{
Max Tottenham26908c92012-04-03 12:35:24 +0100243 UINT uiLoopIndex = 0;
244 UINT uiIpv6AddIndex = 0;
245 UINT uiIpv6AddrNoLongWords = 4;
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700246 ULONG aulSrcIP[4];
Max Tottenham26908c92012-04-03 12:35:24 +0100247 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(gblpnetdev);
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700248 /*
249 //This is the no. of Src Addresses ie Range of IP Addresses contained
250 //in the classifier rule for which we need to match
251 */
252 UINT uiCountIPSrcAddresses = (UINT)pstClassifierRule->ucIPSourceAddressLength;
253
254
Max Tottenham26908c92012-04-03 12:35:24 +0100255 if (0 == uiCountIPSrcAddresses)
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700256 return TRUE;
257
258
259 //First Convert the Ip Address in the packet to Host Endian order
Max Tottenham26908c92012-04-03 12:35:24 +0100260 for (uiIpv6AddIndex = 0; uiIpv6AddIndex<uiIpv6AddrNoLongWords; uiIpv6AddIndex++) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700261 aulSrcIP[uiIpv6AddIndex]=ntohl(pstIpv6Header->ulSrcIpAddress[uiIpv6AddIndex]);
262 }
263
Max Tottenham26908c92012-04-03 12:35:24 +0100264 for (uiLoopIndex = 0; uiLoopIndex<uiCountIPSrcAddresses; uiLoopIndex += uiIpv6AddrNoLongWords) {
Lucas De Marchi25985ed2011-03-30 22:57:33 -0300265 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\n Src Ipv6 Address In Received Packet : \n ");
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700266 DumpIpv6Address(aulSrcIP);
267 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\n Src Ipv6 Mask In Classifier Rule: \n");
268 DumpIpv6Address(&pstClassifierRule->stSrcIpAddress.ulIpv6Mask[uiLoopIndex]);
269 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\n Src Ipv6 Address In Classifier Rule : \n");
270 DumpIpv6Address(&pstClassifierRule->stSrcIpAddress.ulIpv6Addr[uiLoopIndex]);
271
Max Tottenham26908c92012-04-03 12:35:24 +0100272 for (uiIpv6AddIndex = 0; uiIpv6AddIndex < uiIpv6AddrNoLongWords; uiIpv6AddIndex++) {
273 if ((pstClassifierRule->stSrcIpAddress.ulIpv6Mask[uiLoopIndex+uiIpv6AddIndex] & aulSrcIP[uiIpv6AddIndex])
274 != pstClassifierRule->stSrcIpAddress.ulIpv6Addr[uiLoopIndex+uiIpv6AddIndex]) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700275 //Match failed for current Ipv6 Address.Try next Ipv6 Address
276 break;
277 }
278
Max Tottenham26908c92012-04-03 12:35:24 +0100279 if (uiIpv6AddIndex == uiIpv6AddrNoLongWords-1) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700280 //Match Found
281 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "Ipv6 Src Ip Address Matched\n");
282 return TRUE;
283 }
284 }
285 }
286 return FALSE;
287}
288
Stephen Hemminger9dd47ee2010-11-01 12:24:00 -0400289static BOOLEAN MatchDestIpv6Address(S_CLASSIFIER_RULE *pstClassifierRule,IPV6Header *pstIpv6Header)
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700290{
Max Tottenham26908c92012-04-03 12:35:24 +0100291 UINT uiLoopIndex = 0;
292 UINT uiIpv6AddIndex = 0;
293 UINT uiIpv6AddrNoLongWords = 4;
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700294 ULONG aulDestIP[4];
Max Tottenham26908c92012-04-03 12:35:24 +0100295 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(gblpnetdev);
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700296 /*
297 //This is the no. of Destination Addresses ie Range of IP Addresses contained
298 //in the classifier rule for which we need to match
299 */
300 UINT uiCountIPDestinationAddresses = (UINT)pstClassifierRule->ucIPDestinationAddressLength;
301
302
Max Tottenham26908c92012-04-03 12:35:24 +0100303 if (0 == uiCountIPDestinationAddresses)
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700304 return TRUE;
305
306
307 //First Convert the Ip Address in the packet to Host Endian order
Max Tottenham26908c92012-04-03 12:35:24 +0100308 for (uiIpv6AddIndex = 0;uiIpv6AddIndex < uiIpv6AddrNoLongWords; uiIpv6AddIndex++) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700309 aulDestIP[uiIpv6AddIndex]=ntohl(pstIpv6Header->ulDestIpAddress[uiIpv6AddIndex]);
310 }
311
Max Tottenham26908c92012-04-03 12:35:24 +0100312 for (uiLoopIndex = 0;uiLoopIndex < uiCountIPDestinationAddresses; uiLoopIndex += uiIpv6AddrNoLongWords) {
Lucas De Marchi25985ed2011-03-30 22:57:33 -0300313 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\n Destination Ipv6 Address In Received Packet : \n ");
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700314 DumpIpv6Address(aulDestIP);
315 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\n Destination Ipv6 Mask In Classifier Rule: \n");
316 DumpIpv6Address(&pstClassifierRule->stDestIpAddress.ulIpv6Mask[uiLoopIndex]);
317 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "\n Destination Ipv6 Address In Classifier Rule : \n");
318 DumpIpv6Address(&pstClassifierRule->stDestIpAddress.ulIpv6Addr[uiLoopIndex]);
319
Max Tottenham26908c92012-04-03 12:35:24 +0100320 for (uiIpv6AddIndex = 0; uiIpv6AddIndex < uiIpv6AddrNoLongWords; uiIpv6AddIndex++) {
321 if ((pstClassifierRule->stDestIpAddress.ulIpv6Mask[uiLoopIndex+uiIpv6AddIndex] & aulDestIP[uiIpv6AddIndex])
322 != pstClassifierRule->stDestIpAddress.ulIpv6Addr[uiLoopIndex+uiIpv6AddIndex]) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700323 //Match failed for current Ipv6 Address.Try next Ipv6 Address
324 break;
325 }
326
Max Tottenham26908c92012-04-03 12:35:24 +0100327 if (uiIpv6AddIndex == uiIpv6AddrNoLongWords-1) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700328 //Match Found
329 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "Ipv6 Destination Ip Address Matched\n");
330 return TRUE;
331 }
332 }
333 }
334 return FALSE;
335
336}
337
338VOID DumpIpv6Address(ULONG *puIpv6Address)
339{
340 UINT uiIpv6AddrNoLongWords = 4;
Max Tottenham26908c92012-04-03 12:35:24 +0100341 UINT uiIpv6AddIndex = 0;
342 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(gblpnetdev);
343 for (uiIpv6AddIndex = 0; uiIpv6AddIndex < uiIpv6AddrNoLongWords; uiIpv6AddIndex++) {
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700344 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, ":%lx",puIpv6Address[uiIpv6AddIndex]);
345 }
346
347}
348
Stephen Hemminger9dd47ee2010-11-01 12:24:00 -0400349static VOID DumpIpv6Header(IPV6Header *pstIpv6Header)
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700350{
351 UCHAR ucVersion;
Max Tottenham26908c92012-04-03 12:35:24 +0100352 UCHAR ucPrio;
353 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(gblpnetdev);
Stephen Hemmingerf8942e02010-09-08 14:46:36 -0700354 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "----Ipv6 Header---");
355 ucVersion = pstIpv6Header->ucVersionPrio & 0xf0;
356 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "Version : %x \n",ucVersion);
357 ucPrio = pstIpv6Header->ucVersionPrio & 0x0f;
358 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "Priority : %x \n",ucPrio);
359 //BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "Flow Label : %x \n",(pstIpv6Header->ucVersionPrio &0xf0);
360 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "Payload Length : %x \n",ntohs(pstIpv6Header->usPayloadLength));
361 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "Next Header : %x \n",pstIpv6Header->ucNextHeader);
362 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "Hop Limit : %x \n",pstIpv6Header->ucHopLimit);
363 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "Src Address :\n");
364 DumpIpv6Address(pstIpv6Header->ulSrcIpAddress);
365 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "Dest Address :\n");
366 DumpIpv6Address(pstIpv6Header->ulDestIpAddress);
367 BCM_DEBUG_PRINT( Adapter,DBG_TYPE_TX, IPV6_DBG, DBG_LVL_ALL, "----Ipv6 Header End---");
368
369
370}