Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / env / common / vera / niu_ippktgen / pcg_debug.vr
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: pcg_debug.vr
4// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
5// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
6//
7// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8//
9// This program is free software; you can redistribute it and/or modify
10// it under the terms of the GNU General Public License as published by
11// the Free Software Foundation; version 2 of the License.
12//
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software
20// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21//
22// For the avoidance of doubt, and except that if any non-GPL license
23// choice is available it will apply instead, Sun elects to use only
24// the General Public License version 2 (GPLv2) at this time for any
25// software where a choice of GPL license versions is made
26// available with the language indicating that GPLv2 or any later version
27// may be used, or where a choice of which version of the GPL is applied is
28// otherwise unspecified.
29//
30// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
31// CA 95054 USA or visit www.sun.com if you need additional information or
32// have any questions.
33//
34// ========== Copyright Header End ============================================
35task display_buf( byte_array buf, integer hwlen, (integer ifedx=0)) {
36 integer ptr=0;
37 integer tunneling_ipv4 =0;
38 integer tunneling_ipv6 =0;
39 integer buf_shift;
40 integer n;
41 bit [15:0] len;
42 bit [7:0] flag_bit;
43 bit [79:0] id;
44 integer token;
45
46 printf("\n\n______________________________________________________________\n");
47 printf("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n\n");
48
49 if(ifedx==1) printf("This is an INTER FEDX packet\n\n");
50
51 printf("____________ Hex Dump ____________\n");
52 for(n=0;n<hwlen;n++) {
53 if( !(n % 16) ) printf("\n%d: ",n);
54 printf("%h ", buf.val[ptr++]);
55 }
56 printf("\n__________________________________\n\n");
57
58 ptr=0;
59
60 if(ifedx==1) {
61 printf("Interfedx Control Word: %h\n\n", {buf.val[ptr+1], buf.val[ptr]} );
62 ptr=ptr+2;
63 }
64
65
66 // L2 Header Info
67
68 printf(" L2 Header\n");
69 printf("+---------------\n");
70
71 printf("| Destination Address: %h.%h.%h.%h.%h.%h\n", buf.val[ptr++], buf.val[ptr++],
72 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] );
73 printf("| Source Address: %h.%h.%h.%h.%h.%h\n", buf.val[ptr++], buf.val[ptr++],
74 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] );
75
76 len = {buf.val[ptr++], buf.val[ptr++]};
77
78
79 // check if it is an Ethernet Tagged (802.Q) Frame
80 if( len == TPID_8021Q ) {
81
82 // check to see if it is an LLC-SNAP packet
83 if( {buf.val[ptr+4], buf.val[ptr+5], buf.val[ptr+6]} == LLC_SNAP ) {
84 printf("| L2 Header Type: 802.1Q Tagged LLC-SNAP Ethernet Header\n");
85 printf("| TPID: %0h\n", len );
86 printf("| TCI: %h\n", {buf.val[ptr++], buf.val[ptr++]} );
87
88 len = {buf.val[ptr++], buf.val[ptr++]};
89
90 printf("| LEN/TYPE: 0x%h(%0d)\n", len, len );
91 printf("| LLC: %h\n", {buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] });
92 printf("| SNAP: %h\n", {buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
93 buf.val[ptr++], buf.val[ptr++] } );
94 // Store L2 pkt type
95 len = {buf.val[ptr - 2], buf.val[ptr - 1]};
96 }
97 else {
98 // it is not an LLC-SNAP packet
99
100 printf("| L2 Header Type: 802.1Q Tagged Ethernet Header\n");
101 printf("| TPID: %0h\n", len );
102 printf("| TCI: %h\n", {buf.val[ptr++], buf.val[ptr++]} );
103
104 len = {buf.val[ptr++], buf.val[ptr++]};
105
106 printf("| TYPE/LEN: 0x%h(%d)\n", len, len);
107 }
108 }
109 else if ( len == CNTL_FRAME ) {
110 // Check to see if it is a MAC control Frame
111
112 printf("| L2 Header Type: MAC Control Frame Header\n");
113 printf("| Type: %h\n", len );
114 }
115 else {
116 // packet is a regular 802.3 Ethernet packet
117 printf("| L2 Header Type: 802.3 Ethernet Header\n");
118 printf("| Data Length/Type: 0x%h(%0d)\n", len, len);
119 }
120
121 token = { buf.val[ptr], buf.val[ptr+1] };
122
123
124 // Check to see if it has an L3 Header
125 if(len>16'h0600 & len != CNTL_FRAME) {
126 len = -1;
127
128 // check version field to see whether it is an IPv4 or IPv6 packet
129 if( buf.val[ptr - 2 ] == 8'h08 ) {
130
131 // it is an IPv4 packet
132
133 // Check protocol field to see if it is an IPSec packet
134 if( buf.val[ptr + 9] == AH_PROTO) {
135 // Authetication Header (AH) option present
136 printf("+-------------------------------------\n");
137 printf(" L3 Header-- Type: IPv4, IPSec: AH\n");
138 printf("+--------------------------------------\n");
139 }
140 else if( buf.val[ptr + 9] == ESP_PROTO) {
141 // Encapsulating Security Payload (ESP) option present
142 printf("+-------------------------------------\n");
143 printf(" L3 Header-- Type: IPv4, IPSec: ESP\n");
144 printf("+--------------------------------------\n");
145 }
146 else if( buf.val[ptr + 9] == IP_V4_PROTO) {
147 // Tunneled IP packet
148 printf("+-------------------------------------\n");
149 printf(" L3 Header-- Type: Tunnel (IPv4/IPv4)\n");
150 printf("+--------------------------------------\n");
151 printf("| IP Header Tunnel Layer 1: IPv4\n| \n");
152
153 tunneling_ipv4 = 1;
154 }
155 else if( buf.val[ptr + 9] == IP_V6_PROTO) {
156 // Tunneled IP packet
157 printf("+-------------------------------------\n");
158 printf(" L3 Header-- Type: Tunnel (IPv4/IPv6)\n");
159 printf("+--------------------------------------\n");
160 printf("| IP Header Tunnel Layer 1: IPv4\n| \n");
161
162 tunneling_ipv6 = 1;
163 }
164 else {
165 // Regular IP packet
166 printf("+-------------------------------------\n");
167 printf(" L3 Header-- Type: IPv4\n");
168 printf("+--------------------------------------\n");
169 }
170 ptr--;
171 ptr--;
172
173 display_class(buf, ptr);
174
175 //
176 // L3 Header parsing
177 //
178 printf("| IPV4 Checksum: %h%h\n", buf.val[ptr-2], buf.val[ptr-1] );
179
180 printf("| IP SRC Address: %h.%h.%h.%h\n",
181 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] );
182 printf("| IP DST Address: %h.%h.%h.%h\n",
183 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] );
184
185 // Check if tunneling present
186 if( tunneling_ipv4 ) {
187 // IPv4/IPv4 Tunneling
188
189 printf("| ----------- \n|\n");
190 printf("| IP Header Tunnel Layer 2: IPv4:\n");
191 printf("| \n");
192
193 ptr--;
194 ptr--;
195
196 display_class(buf, ptr);
197
198 printf("| IP SRC Address: %h.%h.%h.%h\n",
199 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] );
200 printf("| IP DST Address: %h.%h.%h.%h\n",
201 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] );
202
203 }
204 else if( tunneling_ipv6) {
205 // IPv4/IPv6 Tunneling
206
207 printf("| ----------- \n|\n");
208 printf("| IP Header Tunnel Layer 2: IPv6:\n");
209 printf("| \n");
210
211 ptr--;
212 ptr--;
213
214 display_class_ipv6(buf, ptr);
215
216 printf("| Payload Len: 0x%h(%d)\n", buf.val[ptr++], buf.val[ptr++]);
217 printf("| Next Header: 0x%h\n", buf.val[ptr++]);
218 printf("| Hop Limit : 0x%h\n", buf.val[ptr++]);
219 printf("| IP SRC Address: %h%h:%h%h:%h%h:%h%h:%h%h:%h%h:%h%h:%h%h\n",
220 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
221 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
222 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
223 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] );
224 printf("| IP DST Address: %h%h:%h%h:%h%h:%h%h:%h%h:%h%h:%h%h:%h%h\n",
225 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
226 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
227 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
228 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] );
229 }
230
231
232 //
233 // L4 Header Parsing
234 //
235
236 // Determine location of protocol/next header field in buffer
237 if( tunneling_ipv6 )
238 // Tunnel layer 2 of hdr was IPv6
239 buf_shift = 34;
240 else
241 buf_shift = 11;
242
243 // Check Protocol field to see if it has a L4 Header
244 if( buf.val[ptr - buf_shift ] == UDP_PROTO) {
245 // UDP L4 pkt present
246 printf("+-------------------------------------\n");
247 printf(" L4 Header-- Type: UDP \n");
248 printf("+--------------------------------------\n");
249 printf("| UDP SRC Port: %h\n", {buf.val[ptr++], buf.val[ptr++]} );
250 printf("| UDP DST Port: %h\n", {buf.val[ptr++], buf.val[ptr++]} );
251
252 token = { buf.val[ptr + 4], buf.val[ptr + 5] };
253 }
254 else if( buf.val[ptr - buf_shift ] == TCP_PROTO) {
255 // TCP L4 pkt present
256 printf("+-------------------------------------\n");
257 printf(" L4 Header-- Type: TCP\n");
258 printf("+--------------------------------------\n");
259
260 printf("| TCP SRC Port: %h\n", {buf.val[ptr++], buf.val[ptr++]} );
261 printf("| TCP DST Port: %h\n", {buf.val[ptr++], buf.val[ptr++]} );
262 printf("| TCP Sequence #: %h\n", {buf.val[ptr++], buf.val[ptr++],
263 buf.val[ptr++], buf.val[ptr++]} );
264 printf("| TCP ACK #: %h\n", {buf.val[ptr++], buf.val[ptr++],
265 buf.val[ptr++], buf.val[ptr++]} );
266
267 // increment ptr to pass viewing of uncessary bits
268 ptr += 1;
269
270 flag_bit = buf.val[ptr++];
271
272 printf("| TCP Flag bits: URG:%b ACK:%b PSH:%b RST:%b SYN:%b FIN:%b\n",
273 flag_bit[5], flag_bit[4], flag_bit[3], flag_bit[2], flag_bit[1], flag_bit[0]);
274 printf("| Window Size: %h\n", {buf.val[ptr++], buf.val[ptr++]});
275 printf("| TCP Checksum: %h\n", {buf.val[ptr++], buf.val[ptr++]});
276 printf("+---------------\n");
277
278 token = { buf.val[ptr + 2], buf.val[ptr+3] };
279 //token = { buf.val[ptr + 4], buf.val[ptr+5] };
280 } // end else if
281 else {
282 // No L4 pkt present
283 token = { buf.val[ptr], buf.val[ptr+1] };
284 }
285 } // end if (IPv4 pkt)
286 else {
287
288 // it is an IPv6 packet
289
290 // Check Next Header field to see if it is an IPSec packet
291 if( buf.val[ptr + 6] == AH_PROTO) {
292 // Authetication Header (AH) option present
293 printf("+-------------------------------------\n");
294 printf(" L3 Header-- Type: IPv6, IPSec: AH\n");
295 printf("+--------------------------------------\n");
296 }
297 else if( buf.val[ptr + 6] == ESP_PROTO) {
298 // Encapsulating Security Payload (ESP) option present
299 printf("+-------------------------------------\n");
300 printf(" L3 Header-- Type: IPv6, IPSec: ESP\n");
301 printf("+--------------------------------------\n");
302 }
303 else if( buf.val[ptr + 6] == IP_V4_PROTO) {
304 // Tunneled IP packet
305 printf("+-------------------------------------\n");
306 printf(" L3 Header-- Type: Tunnel (IPv6/IPv4)\n");
307 printf("+--------------------------------------\n");
308 printf("| IP Header Tunnel Layer 1: IPv6\n");
309 printf("| \n");
310
311 tunneling_ipv4 = 1;
312 }
313 else if( buf.val[ptr + 6] == IP_V6_PROTO) {
314 // Tunneld IP packet
315 printf("+-------------------------------------\n");
316 printf(" L3 Header-- Type: Tunnel (IPv6/IPv6)\n");
317 printf("+--------------------------------------\n");
318 printf("| IP Header Tunnel Layer 1: IPv6\n");
319 printf("| \n");
320
321 tunneling_ipv6 = 1;
322 }
323 else {
324 // Regular IP packet
325 printf("+-------------------------------------\n");
326 printf(" L3 Header-- Type: IPv6\n");
327 printf("+--------------------------------------\n");
328 }
329 ptr--;
330 ptr--;
331
332 display_class_ipv6(buf, ptr);
333
334 printf("| Payload Len: 0x%h(%d)\n", buf.val[ptr++], buf.val[ptr++]);
335 printf("| Next Header: 0x%h\n", buf.val[ptr++]);
336 printf("| Hop Limit : 0x%h\n", buf.val[ptr++]);
337 printf("| IP SRC Address: %h%h:%h%h:%h%h:%h%h:%h%h:%h%h:%h%h:%h%h\n",
338 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
339 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
340 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
341 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] );
342 printf("| IP DST Address: %h%h:%h%h:%h%h:%h%h:%h%h:%h%h:%h%h:%h%h\n",
343 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
344 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
345 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
346 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] );
347
348 // Check if tunneling present
349 if( tunneling_ipv4 ) {
350 // IPv6/IPv4 Tunneling
351
352 printf("| ----------- \n|\n");
353 printf("| IP Header Tunnel Layer 2: IPv4:\n");
354 printf("| \n");
355
356 ptr--;
357 ptr--;
358
359 display_class(buf, ptr);
360
361 printf("| IP SRC Address: %h.%h.%h.%h\n",
362 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] );
363 printf("| IP DST Address: %h.%h.%h.%h\n",
364 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] );
365
366 }
367 else if( tunneling_ipv6) {
368 // IPv6/IPv6 Tunneling
369
370 printf("| ----------- \n|\n");
371 printf("| IP Header Tunnel Layer 2: IPv6:\n");
372 printf("| \n");
373
374 ptr--;
375 ptr--;
376
377 display_class_ipv6(buf, ptr);
378
379 printf("| Payload Len: 0x%h(%d)\n", buf.val[ptr++], buf.val[ptr++]);
380 printf("| Next Header: 0x%h\n", buf.val[ptr++]);
381 printf("| Hop Limit : 0x%h\n", buf.val[ptr++]);
382 printf("| IP SRC Address: %h%h:%h%h:%h%h:%h%h:%h%h:%h%h:%h%h:%h%h\n",
383 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
384 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
385 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
386 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] );
387 printf("| IP DST Address: %h%h:%h%h:%h%h:%h%h:%h%h:%h%h:%h%h:%h%h\n",
388 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
389 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
390 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++],
391 buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] );
392 }
393
394 //
395 // L4 Header Parsing
396 //
397
398 // Determine location of protocol/next header field in buffer
399 if( tunneling_ipv4 )
400 // Tunnel layer 2 of hdr was IPv4
401 buf_shift = 11;
402 else
403 buf_shift = 34;
404
405 if( buf.val[ptr - buf_shift ] == UDP_PROTO) {
406 // UDP L4 pkt present
407
408 printf("+-------------------------------------\n");
409 printf(" L4 Header-- Type: UDP \n");
410 printf("+--------------------------------------\n");
411 printf("| UDP SRC Port: %h\n", {buf.val[ptr++], buf.val[ptr++]} );
412 printf("| UDP DST Port: %h\n", {buf.val[ptr++], buf.val[ptr++]} );
413
414 token = { buf.val[ptr + 4], buf.val[ptr+5] };
415 }
416 else if( buf.val[ptr - buf_shift ] == TCP_PROTO) {
417 // TCP L4 pkt present
418 printf("+-------------------------------------\n");
419 printf(" L4 Header-- Type: TCP\n");
420 printf("+--------------------------------------\n");
421
422 printf("| TCP SRC Port: %h\n", {buf.val[ptr++], buf.val[ptr++]} );
423 printf("| TCP DST Port: %h\n", {buf.val[ptr++], buf.val[ptr++]} );
424 printf("| TCP Sequence #: %h\n", {buf.val[ptr++], buf.val[ptr++],
425 buf.val[ptr++], buf.val[ptr++]} );
426 printf("| TCP ACK #: %h\n", {buf.val[ptr++], buf.val[ptr++],
427 buf.val[ptr++], buf.val[ptr++]} );
428
429 // increment ptr to pass viewing of uncessary bits
430 ptr += 1;
431
432 flag_bit = buf.val[ptr++];
433
434 printf("| TCP Flag bits: URG:%b ACK:%b PSH:%b RST:%b SYN:%b FIN:%b\n",
435 flag_bit[5], flag_bit[4], flag_bit[3], flag_bit[2], flag_bit[1], flag_bit[0]);
436 printf("| Window Size: %h\n", {buf.val[ptr++], buf.val[ptr++]});
437 printf("+---------------\n");
438
439 token = { buf.val[ptr + 4], buf.val[ptr+5] };
440
441 } // end else if TCP pkt
442 else {
443 // No L4 pkt present
444 token = { buf.val[ptr], buf.val[ptr+1] };
445 }
446 } // end else (IPv6 Pkt)
447 } // end if L3 Header Present
448
449
450 if(len<0) len = hwlen;
451
452 printf("\nTime: %0d\n",{get_time(HI),get_time(LO)});
453 printf("Token: %0d\n", token);
454
455 // See if packet (Token) exists in DB
456 if( assoc_index(CHECK, pack_db, token) == 0 ) {
457 printf("Warning: Could Not find Packet in Packet Database\n");
458 } else {
459 printf("Packet originated on Port: %0d\n", pack_db[token].org_port );
460 }
461
462 // Display Data payload portion of packet
463 printf("\n");
464 if(ifedx==1) display_data(buf, ptr, hwlen-ptr-4-4 );
465 else display_data(buf, ptr, hwlen-ptr-4 );
466
467 printf("\n");
468 printf("CRC: %h\n", { buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] } );
469
470 if(ifedx==1)
471 printf("\n INTER FEDX CRC: %h\n",
472 { buf.val[ptr++], buf.val[ptr++], buf.val[ptr++], buf.val[ptr++] } );
473
474 printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
475 printf("--------------------------------------------------------------\n\n");
476
477} // end task
478
479
480task display_class(byte_array buf, var integer ptr) {
481 integer n,last;
482
483 last = ptr+14;
484
485 printf("| Class: ");
486
487 // Hex Dump
488 for(n=0;n<14;n++) printf("%h ", buf.val[ptr+n] );
489 printf("\n");
490
491 if( {buf.val[ptr], buf.val[ptr+1]} < 16'h0600)
492 printf("| Length: %0d\n|\n", {buf.val[ptr++], buf.val[ptr++]} );
493 else
494 printf("| Type: %0h\n|\n", {buf.val[ptr++], buf.val[ptr++]} );
495
496 ptr=last;
497}
498
499
500task display_class_ipv6(byte_array buf, var integer ptr) {
501 integer n,last;
502
503 last = ptr+6;
504
505 printf("| Class: ");
506
507 // Hex Dump
508 for(n=0;n<10;n++) printf("%h ", buf.val[ptr+n] );
509 printf("\n");
510
511 if( {buf.val[ptr], buf.val[ptr+1]} < 16'h0600)
512 printf("| Length: %0d\n|\n", {buf.val[ptr++], buf.val[ptr++]} );
513 else
514 printf("| Type: %0h\n|\n", {buf.val[ptr++], buf.val[ptr++]} );
515
516 ptr=last;
517}
518
519
520
521task display_data(byte_array buf, var integer ptr, integer len) {
522 integer n;
523
524 printf(" Data:\n");
525 printf("+---------------");
526
527 if(len<1)
528 printf("\n| No Payload ...");
529 else
530
531 for(n=0;n< len ;n++) {
532 if( !(n % 16) ) printf("\n| %d: ",n);
533 printf("%h ", buf.val[ptr++]);
534 }
535 printf("\n+---------------\n");
536}
537
538
539task display_id(bit [79:0] id) {
540
541 printf(" ID Tags:\n");
542 printf("+---------------\n");
543 printf("| Src port: %0d\n", id[79:75] );
544 printf("| Dst port: %0h\n", id[74:35] );
545 printf("| Order Type: %0h\n", id[34:33] );
546 printf("| Order Sequnce: %0d\n", id[32:27] );
547 printf("| Packet number: %0d\n", id[26:11] );
548 printf("| Data Type: %0d\n", id[10:8] );
549 printf("| Data Seed: %0d\n", id[7:0] );
550 printf("+---------------\n");
551}
552
553
554task display_db(integer token) {
555
556 printf("\n========== Display DB Entry %0d ========== \n",token);
557 if(pack_db[token] == null) {
558 printf("This entry is not allocated ...\n");
559 } else {
560 printf("\tframe.frame_type: %h\n",pack_db[token].frame.frame_type);
561 printf("\tframe.frame_class: %h\n",pack_db[token].frame.frame_class);
562 printf("\tframe.class_mask: %h\n",pack_db[token].frame.class_mask);
563 printf("\tframe.class_funct: %h\n",pack_db[token].frame.class_funct);
564 printf("\tframe.data_type: %h\n",pack_db[token].frame.data_type);
565 printf("\tframe.data_seed: %h\n",pack_db[token].frame.data_seed);
566 printf("\tframe.data_length: %h\n",pack_db[token].data_length);
567 printf("\n");
568 printf("\tsrc_node.l2_addr: %h\n",pack_db[token].src_node.l2_addr);
569 printf("\tsrc_node.tci: %h\n",pack_db[token].src_node.tci);
570 printf("\tsrc_node.ip_addr: %h\n",pack_db[token].src_node.ip_addr);
571 printf("\tsrc_node.ipv6_addr: %h\n",pack_db[token].src_node.ipv6_addr);
572 printf("\n");
573 printf("\tdst_node.l2_addr: %h\n",pack_db[token].dst_node.l2_addr);
574 printf("\tdst_node.tci: %h\n",pack_db[token].dst_node.tci);
575 printf("\tdst_node.ip_addr: %h\n",pack_db[token].dst_node.ip_addr);
576 printf("\tdst_node.ipv6_addr: %h\n",pack_db[token].dst_node.ipv6_addr);
577 printf("\n");
578 printf("\ttup.src_tcp_udp_port: %h\n",pack_db[token].tup.src_tcp_udp_port);
579 printf("\ttup.dst_tcp_udp_port: %h\n",pack_db[token].tup.dst_tcp_udp_port);
580 printf("\n");
581 printf("\trcv_isn: %0h\n",pack_db[token].rx_param.rcv_isn);
582 printf("\tlast_ackno: %0h\n",pack_db[token].rx_param.last_ackno);
583 printf("\tadv_isn: %0h\n",pack_db[token].tx_param.adv_isn);
584 printf("\tlast_seqno: %0h\n",pack_db[token].tx_param.last_seqno);
585 printf("\n");
586 printf("\torg_port: %0d\n",pack_db[token].org_port);
587 printf("\torder_seq: %0d\n",pack_db[token].order_seq);
588 printf("\tpckt_num: %0d\n",pack_db[token].pckt_num);
589 printf("\toptions: %h\n",pack_db[token].options);
590 }
591 printf("========================================== \n\n");
592}
593
594task display_flow(integer flow_id) {
595
596 printf("\n========== Display FLOW DB Entry %0d ========== \n",flow_id);
597 if(flow_db[flow_id] == null) {
598 printf("This entry is not allocated ...\n");
599 } else {
600 printf("\tframe.data_length: %h\n",flow_db[flow_id].data_length);
601 printf("\n");
602 printf("\ttup.src_tcp_udp_port: %h\n",flow_db[flow_id].tup.src_tcp_udp_port);
603 printf("\ttup.dst_tcp_udp_port: %h\n",flow_db[flow_id].tup.dst_tcp_udp_port);
604 printf("\n");
605 printf("\torg_port: %0d\n",flow_db[flow_id].org_port);
606 printf("\trcv_isn: %0h\n",flow_db[flow_id].rx_param.rcv_isn);
607 printf("\tlast_ackno: %0h\n",flow_db[flow_id].rx_param.last_ackno);
608 printf("\tadv_isn: %0h\n",flow_db[flow_id].tx_param.adv_isn);
609 printf("\tlast_seqno: %0h\n",flow_db[flow_id].tx_param.last_seqno);
610 //printf("\tpckt_num: %0d\n",pack_db[token].pckt_num);
611 //printf("\toptions: %h\n",pack_db[token].options);
612 }
613 printf("========================================== \n\n");
614}