Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / env / common / vera / niu_ippktgen / C / wrapper / pgUtils.c
CommitLineData
86530b38
AT
1#include <stdio.h>
2#include "vera_directc.h"
3#include "include/pg.h"
4// CRC GEN Function
5//
6//
7//
8
9extern void setpgSeed( unsigned int seed );
10extern unsigned int pgrand();
11
12
13#if 0
14// global name crc32 collides with one in the denali library
15unsigned int crc32(unsigned char *pktbuf,unsigned int pktlen )
16{
17
18 unsigned int crc;
19 unsigned int c;
20 unsigned int byte;
21 int bit;
22
23 crc = (unsigned int) 0xffffffff;
24 for (byte = 0; byte < pktlen; byte++) {
25 c = (unsigned int) pktbuf[byte];
26 printf("index - %d CRC Byte - %x CRC So far - %x \n",byte,c,crc);
27 for (bit = 0; bit < 8; bit++) {
28 if ((c & 0x1) ^ (crc & 0x1))
29 crc = (crc >> 1)^0xedb88320;
30 else
31 crc = (crc >> 1);
32 c >>= 1;
33 }
34 }
35 printf("CRC - %x \n",~crc);
36 return ((~crc) );
37
38}
39#endif
40
41unsigned char getNextByte(unsigned char in, int data_type) {
42
43 // data_type = DATA_SEQ;
44 if(data_type== DATA_SEQ) {
45 return(in +1);
46 } else if(data_type == DATA_FIXED) {
47 return(in);
48 } else if(data_type== DATA_RAND) {
49 return(pgrand()&0xff);
50 } else if(data_type == DATA_ALL0) {
51 return(0);
52 } else if(data_type == DATA_ALL1) {
53 return(0xff);
54 } else {
55 // default to DATA_SEQ
56 return(in +1);
57 }
58
59}
60
61unsigned char * genPayload ( int data_type, unsigned int seed, int data_length) {
62/* defined data types are
63* DATA_RANDOM - Random data
64* DATA_SEQ - In Sequence
65* More to be defined later
66*/
67
68 unsigned char *payload;
69 int index,i;
70 if(data_length==0) {
71 return(NULL);
72 }
73 payload = (unsigned char *) malloc(data_length* sizeof(unsigned char));
74 index =0;
75
76 if(data_type== DATA_RAND) {
77 setpgSeed(seed ) ;
78 } else if(data_type == DATA_ALL0) {
79 seed =0;
80 } else if(data_type== DATA_ALL1) {
81 seed =0xffffffff;
82 } else if(data_type == DATA_FC_PAUSE) {
83 // maintain seed for first 4 bytes and then all0s
84 data_type = DATA_ALL0;
85 }
86
87 for(i=0;i<data_length;i++) {
88 if(i<4) {
89 // Start with Seed
90 payload[index]= ((seed & (0xff << (8*i)))>>(8*i));
91 } else {
92 payload[index] = getNextByte(payload[index-1],data_type);
93 // printf(" Index - %d data -0 %x \n",index, payload[index] );
94 }
95 index++;
96 }
97 return(payload);
98
99}
100unsigned char * addL2Pad(unsigned char * pktbuf,int pktlen,int l2_pad_length) {
101 unsigned char *payload;
102 int i;
103 if(l2_pad_length==0) {
104 return(pktbuf);
105 } else {
106 payload = (unsigned char *) malloc((pktlen + l2_pad_length)* sizeof(unsigned char));
107 for(i=0;i<pktlen;i++){
108 payload[i] = pktbuf[i];
109 }
110 for(i=pktlen;i<pktlen + l2_pad_length ;i++){
111 payload[i] = (i%2) ? 0xa5:0x5a ;
112 }
113 return(payload);
114 }
115}
116
117unsigned char * addCrc ( unsigned char * p1, int l1, unsigned int crc) {
118 unsigned char *payload;
119 int i;
120 payload = (unsigned char *) malloc((l1+4)* sizeof(unsigned char));
121 for(i=0;i<l1;i++){
122 payload[i] = p1[i];
123 }
124 for(i=0;i<4;i++) {
125 payload[l1+ i]= ((crc & (0xff << (8*i)))>>(8*i));
126 }
127 return(payload);
128}
129unsigned char * addPayload ( unsigned char * p1, int l1, unsigned char * p2, int l2) {
130 unsigned char *payload;
131 int i;
132 if( (l1+l2) == 0) return(NULL);
133 payload = (unsigned char *) malloc((l1+l2)* sizeof(unsigned char));
134 for(i=0;i<l1;i++) {
135 payload[i] = p1[i];
136 }
137 for(i=l1;i<l1 + l2;i++) {
138 payload[i] = p2[i];
139 }
140 return(payload);
141}
142