Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
W
White Rabbit Switch - Testing
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Projects
White Rabbit Switch - Testing
Commits
04dd60d2
Commit
04dd60d2
authored
May 03, 2014
by
Grzegorz Daniluk
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
smartbits-tester: configure multiple streams per port
parent
8e84ce99
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
283 additions
and
136 deletions
+283
-136
smartbits.c
sw/smartbits-tester/smartbits.c
+3
-2
smartbits.h
sw/smartbits-tester/smartbits.h
+2
-1
tests_body.c
sw/smartbits-tester/tests_body.c
+174
-55
tests_body.h
sw/smartbits-tester/tests_body.h
+19
-3
wrs_smb.c
sw/smartbits-tester/wrs_smb.c
+85
-75
No files found.
sw/smartbits-tester/smartbits.c
View file @
04dd60d2
...
...
@@ -345,11 +345,12 @@ int smb_learning(int mask, char mac[][6], int fnum)
char
broadcast
[
6
]
=
{
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
};
//char broadcast[6] = {0x90, 0xe2, 0xba, 0x17, 0xa7, 0xaf};
printf
(
"Learning on ports: 0x%X
\n
"
,
mask
);
//
printf("Learning on ports: 0x%X\n", mask);
wait_linkup
(
mask
);
for
(
i
=
0
;
i
<
SMB_PORTS
;
++
i
)
{
if
(
mask
&
(
1
<<
i
))
{
setup_stream
(
i
,
broadcast
,
mac
[
i
],
FRAME_SZ
,
fnum
,
0
.
001
,
0
,
-
1
);
setup_stream
(
i
,
broadcast
,
mac
[
i
],
FRAME_SZ
,
fnum
,
0
.
001
,
0
,
-
1
,
0
);
setup_stream
(
i
,
broadcast
,
mac
[
i
],
FRAME_SZ
,
fnum
,
0
.
001
,
0
,
-
1
,
-
1
);
}
}
run_traffic
(
mask
,
1
);
...
...
sw/smartbits-tester/smartbits.h
View file @
04dd60d2
...
...
@@ -24,6 +24,7 @@
#define PORT_TO_PMASK(i) (1<<(i))
#define MAX_STREAMS 4
#define FRAME_SZ 60
#define LINKUP_TIMEOUT 10
#define TRAFFIC_START 1
...
...
@@ -46,7 +47,7 @@ void show_card_info(int p);
void
show_cntrs
(
HTCountStructure
*
cs
,
int
p1
);
void
latency_meas
(
int
p_tx
,
int
p_rx
);
int
basic_traffic
(
int
fsize
,
int
p_tx
,
int
p_rx
);
int
setup_stream
(
int
port
,
char
*
dmac
,
char
*
smac
,
int
fsize
,
int
fnum
,
float
ratio
,
int
v_pri
,
int
vid
);
int
setup_stream
(
int
port
,
char
*
dmac
,
char
*
smac
,
int
fsize
,
int
fnum
,
float
ratio
,
int
v_pri
,
int
vid
,
int
idx
);
int
temp_run_test
(
int
p_tx
,
int
p_rx
);
int
detect_stop
(
void
);
...
...
sw/smartbits-tester/tests_body.c
View file @
04dd60d2
...
...
@@ -8,35 +8,88 @@
struct
smb_test
wrst
;
const
char
*
TLIST
[
7
]
=
{
"2.1.1"
,
"2.1.2"
,
"2.2.1"
,
"2.2.2"
,
"2.2.5"
,
"2.2.6"
,
"2.2.7"
};
void
init_wr_test
(
int
num
)
void
init_wr_test
(
int
test_no
,
int
variant
)
{
unsigned
int
vtag
;
wrst
.
ptx
[
0
].
fsize
=
64
;
wrst
.
ptx
[
0
].
fload
=
1
;
wrst
.
ptx
[
0
].
fnum
=
T_2XX_FNUM
;
//1000;
wrst
.
ptx
[
1
].
fsize
=
64
;
wrst
.
ptx
[
1
].
fload
=
1
;
wrst
.
ptx
[
1
].
fnum
=
T_2XX_FNUM
;
//1000;
wrst
.
ptx
[
2
].
fsize
=
64
;
wrst
.
ptx
[
2
].
fload
=
1
;
wrst
.
ptx
[
2
].
fnum
=
T_2XX_FNUM
;
//1000;
wrst
.
ptx
[
3
].
fsize
=
64
;
wrst
.
ptx
[
3
].
fload
=
1
;
wrst
.
ptx
[
3
].
fnum
=
T_2XX_FNUM
;
//1000;
switch
(
num
)
{
unsigned
int
vtag
,
i
;
/*default values for functional tests*/
for
(
i
=
0
;
i
<
SMB_PORTS
;
++
i
)
{
wrst
.
ptx
[
i
].
fsize
=
64
;
wrst
.
ptx
[
i
].
fsize_step
=
0
;
wrst
.
ptx
[
i
].
fsize_stop
=
64
;
wrst
.
ptx
[
i
].
fsize_n
=
0
;
wrst
.
ptx
[
i
].
fload
[
0
]
=
10
;
wrst
.
ptx
[
i
].
fload_n
=
1
;
wrst
.
ptx
[
i
].
fnum
=
T_2XX_FNUM
;
wrst
.
ptx
[
i
].
ftime
=
0
;
}
/*loads and sizes for performance tests*/
if
(
test_no
>=
TEST_3_1_1
)
{
for
(
i
=
0
;
i
<
SMB_PORTS
;
++
i
)
{
if
(
variant
==
VAR1
)
{
/* size: 64 - 1522 with step of 1
* loads: 10, 30, 50, 70, 80, 85, 90, 92, 95, 97, 99, 100
* number: 10^9 */
wrst
.
ptx
[
i
].
fsize
=
64
;
wrst
.
ptx
[
i
].
fsize_step
=
1
;
wrst
.
ptx
[
i
].
fsize_stop
=
1522
;
wrst
.
ptx
[
i
].
fsize_n
=
0
;
wrst
.
ptx
[
i
].
fload
[
0
]
=
10
;
wrst
.
ptx
[
i
].
fload
[
1
]
=
30
;
wrst
.
ptx
[
i
].
fload
[
2
]
=
50
;
wrst
.
ptx
[
i
].
fload
[
3
]
=
70
;
wrst
.
ptx
[
i
].
fload
[
4
]
=
80
;
wrst
.
ptx
[
i
].
fload
[
5
]
=
85
;
wrst
.
ptx
[
i
].
fload
[
6
]
=
90
;
wrst
.
ptx
[
i
].
fload
[
7
]
=
92
;
wrst
.
ptx
[
i
].
fload
[
8
]
=
95
;
wrst
.
ptx
[
i
].
fload
[
9
]
=
97
;
wrst
.
ptx
[
i
].
fload
[
10
]
=
99
;
wrst
.
ptx
[
i
].
fload
[
11
]
=
100
;
wrst
.
ptx
[
i
].
fload_n
=
12
;
wrst
.
ptx
[
i
].
fnum
=
1000000000
;
//10^9
wrst
.
ptx
[
i
].
ftime
=
0
;
}
else
if
(
variant
==
VAR2
)
{
/* size: 64, 65, 700, 701, 1521, 1522
* loads: 50, 80, 95, 100
* time of burst: 5 min */
wrst
.
ptx
[
i
].
fsize
=
0
;
wrst
.
ptx
[
i
].
fsize_step
=
0
;
wrst
.
ptx
[
i
].
fsize_stop
=
0
;
wrst
.
ptx
[
i
].
fsize_tab
[
0
]
=
64
;
wrst
.
ptx
[
i
].
fsize_tab
[
1
]
=
65
;
wrst
.
ptx
[
i
].
fsize_tab
[
2
]
=
700
;
wrst
.
ptx
[
i
].
fsize_tab
[
3
]
=
701
;
wrst
.
ptx
[
i
].
fsize_tab
[
4
]
=
1521
;
wrst
.
ptx
[
i
].
fsize_tab
[
5
]
=
1522
;
wrst
.
ptx
[
i
].
fsize_n
=
6
;
wrst
.
ptx
[
i
].
fload
[
0
]
=
50
;
wrst
.
ptx
[
i
].
fload
[
1
]
=
80
;
wrst
.
ptx
[
i
].
fload
[
2
]
=
95
;
wrst
.
ptx
[
i
].
fload
[
3
]
=
100
;
wrst
.
ptx
[
i
].
fload_n
=
4
;
wrst
.
ptx
[
i
].
fnum
=
0
;
wrst
.
ptx
[
i
].
ftime
=
5
*
60
;
//5 min
}
}
}
switch
(
test_no
)
{
case
TEST_2_1_1
:
/* 2.1.1 Unicast - one-to-one stream */
/* TX: p0->p2; p2 -> p0; 802.1d
* RX_TRIG: p0; p2 -> smac
* RX: p1; p3 */
wrst
.
ptx
[
0
].
d_port
=
2
;
wrst
.
ptx
[
2
].
d_port
=
0
;
wrst
.
ptx
[
0
].
d_port
s
[
0
]
=
2
;
wrst
.
ptx
[
2
].
d_port
s
[
0
]
=
0
;
wrst
.
ptx
[
0
].
q_vid
=
VID_NONE
;
wrst
.
ptx
[
2
].
q_vid
=
VID_NONE
;
wrst
.
ptx
[
1
].
d_port
=
DPORT_NONE
;
wrst
.
ptx
[
3
].
d_port
=
DPORT_NONE
;
wrst
.
ptx
[
0
].
d_ports_n
=
1
;
wrst
.
ptx
[
1
].
d_ports_n
=
0
;
wrst
.
ptx
[
2
].
d_ports_n
=
1
;
wrst
.
ptx
[
3
].
d_ports_n
=
0
;
wrst
.
prx
[
0
].
s_port
=
2
;
wrst
.
prx
[
2
].
s_port
=
0
;
...
...
@@ -52,19 +105,35 @@ void init_wr_test(int num)
/* 2.1.2 Unicast - many-to-many stream */
/* TX: p0->p1; p1->p0; p2->p3; p3->p2; 802.1d
* RX_TRIG: p0; p1; p2; p3 */
wrst
.
ptx
[
0
].
d_port
=
1
;
wrst
.
ptx
[
1
].
d_port
=
0
;
wrst
.
ptx
[
2
].
d_port
=
3
;
wrst
.
ptx
[
3
].
d_port
=
2
;
wrst
.
ptx
[
0
].
d_ports
[
0
]
=
1
;
wrst
.
ptx
[
0
].
d_ports
[
1
]
=
2
;
wrst
.
ptx
[
0
].
d_ports
[
2
]
=
3
;
wrst
.
ptx
[
1
].
d_ports
[
0
]
=
0
;
wrst
.
ptx
[
1
].
d_ports
[
1
]
=
2
;
wrst
.
ptx
[
1
].
d_ports
[
2
]
=
3
;
wrst
.
ptx
[
2
].
d_ports
[
0
]
=
0
;
wrst
.
ptx
[
2
].
d_ports
[
1
]
=
1
;
wrst
.
ptx
[
2
].
d_ports
[
2
]
=
3
;
wrst
.
ptx
[
3
].
d_ports
[
0
]
=
0
;
wrst
.
ptx
[
3
].
d_ports
[
1
]
=
1
;
wrst
.
ptx
[
3
].
d_ports
[
2
]
=
2
;
wrst
.
ptx
[
0
].
d_ports_n
=
3
;
wrst
.
ptx
[
1
].
d_ports_n
=
3
;
wrst
.
ptx
[
2
].
d_ports_n
=
3
;
wrst
.
ptx
[
3
].
d_ports_n
=
3
;
wrst
.
ptx
[
0
].
q_vid
=
VID_NONE
;
wrst
.
ptx
[
1
].
q_vid
=
VID_NONE
;
wrst
.
ptx
[
2
].
q_vid
=
VID_NONE
;
wrst
.
ptx
[
3
].
q_vid
=
VID_NONE
;
wrst
.
prx
[
0
].
s_port
=
1
;
wrst
.
prx
[
1
].
s_port
=
0
;
wrst
.
prx
[
2
].
s_port
=
3
;
wrst
.
prx
[
3
].
s_port
=
2
;
wrst
.
prx
[
0
].
s_port
=
RX_ALLUNI
;
wrst
.
prx
[
1
].
s_port
=
RX_ALLUNI
;
wrst
.
prx
[
2
].
s_port
=
RX_ALLUNI
;
wrst
.
prx
[
3
].
s_port
=
RX_ALLUNI
;
break
;
case
TEST_2_2_1
:
...
...
@@ -72,14 +141,16 @@ void init_wr_test(int num)
/* TX: p0->p2; p2->p0; 802.1q
* RX_TRIG: p0; p2 -> smac; vid; prio
* RX: p1; p3 */
wrst
.
ptx
[
0
].
d_port
=
2
;
wrst
.
ptx
[
0
].
d_ports
[
0
]
=
2
;
wrst
.
ptx
[
2
].
d_ports
[
0
]
=
0
;
wrst
.
ptx
[
0
].
q_vid
=
1
;
wrst
.
ptx
[
0
].
q_pri
=
1
;
wrst
.
ptx
[
2
].
d_port
=
0
;
wrst
.
ptx
[
2
].
q_vid
=
1
;
wrst
.
ptx
[
2
].
q_pri
=
1
;
wrst
.
ptx
[
1
].
d_port
=
DPORT_NONE
;
wrst
.
ptx
[
3
].
d_port
=
DPORT_NONE
;
wrst
.
ptx
[
0
].
d_ports_n
=
1
;
wrst
.
ptx
[
1
].
d_ports_n
=
0
;
wrst
.
ptx
[
2
].
d_ports_n
=
1
;
wrst
.
ptx
[
3
].
d_ports_n
=
0
;
wrst
.
prx
[
0
].
s_port
=
2
;
wrst
.
prx
[
2
].
s_port
=
0
;
...
...
@@ -99,14 +170,16 @@ void init_wr_test(int num)
/* TX: p0; p2; 802.1q; broadcast
* RX_TRIG: p0; p2 -> smac; vid; prio
* RX: p1; p3 */
wrst
.
ptx
[
0
].
d_port
=
TX_PALL
;
wrst
.
ptx
[
0
].
d_ports
[
0
]
=
TX_PALL
;
wrst
.
ptx
[
2
].
d_ports
[
0
]
=
TX_PALL
;
wrst
.
ptx
[
0
].
q_vid
=
1
;
wrst
.
ptx
[
0
].
q_pri
=
0
;
wrst
.
ptx
[
2
].
d_port
=
TX_PALL
;
wrst
.
ptx
[
2
].
q_vid
=
1
;
wrst
.
ptx
[
2
].
q_pri
=
0
;
wrst
.
ptx
[
1
].
d_port
=
DPORT_NONE
;
wrst
.
ptx
[
3
].
d_port
=
DPORT_NONE
;
wrst
.
ptx
[
0
].
d_ports_n
=
1
;
wrst
.
ptx
[
1
].
d_ports_n
=
0
;
wrst
.
ptx
[
2
].
d_ports_n
=
1
;
wrst
.
ptx
[
3
].
d_ports_n
=
0
;
wrst
.
prx
[
0
].
s_port
=
2
;
wrst
.
prx
[
2
].
s_port
=
0
;
...
...
@@ -126,12 +199,14 @@ void init_wr_test(int num)
/* TX: p0->p2; p2->p0; 802.1d
* RX_TRIG: p0; p2 -> smac; vid; prio
* RX: p1; p3 */
wrst
.
ptx
[
0
].
d_port
=
2
;
wrst
.
ptx
[
2
].
d_port
=
0
;
wrst
.
ptx
[
0
].
d_port
s
[
0
]
=
2
;
wrst
.
ptx
[
2
].
d_port
s
[
0
]
=
0
;
wrst
.
ptx
[
0
].
q_vid
=
VID_NONE
;
wrst
.
ptx
[
2
].
q_vid
=
VID_NONE
;
wrst
.
ptx
[
1
].
d_port
=
DPORT_NONE
;
wrst
.
ptx
[
3
].
d_port
=
DPORT_NONE
;
wrst
.
ptx
[
0
].
d_ports_n
=
1
;
wrst
.
ptx
[
1
].
d_ports_n
=
0
;
wrst
.
ptx
[
2
].
d_ports_n
=
1
;
wrst
.
ptx
[
3
].
d_ports_n
=
0
;
wrst
.
prx
[
0
].
s_port
=
2
;
wrst
.
prx
[
2
].
s_port
=
0
;
...
...
@@ -151,14 +226,16 @@ void init_wr_test(int num)
/* TX: p0->p2; p2->p0; 802.1q
* RX_TRIG: p0; p2 -> smac; ethtype
* RX: p1; p3 */
wrst
.
ptx
[
0
].
d_port
=
2
;
wrst
.
ptx
[
2
].
d_port
=
0
;
wrst
.
ptx
[
0
].
d_port
s
[
0
]
=
2
;
wrst
.
ptx
[
2
].
d_port
s
[
0
]
=
0
;
wrst
.
ptx
[
0
].
q_vid
=
1
;
wrst
.
ptx
[
0
].
q_pri
=
0
;
wrst
.
ptx
[
2
].
q_vid
=
1
;
wrst
.
ptx
[
2
].
q_pri
=
0
;
wrst
.
ptx
[
1
].
d_port
=
DPORT_NONE
;
wrst
.
ptx
[
3
].
d_port
=
DPORT_NONE
;
wrst
.
ptx
[
0
].
d_ports_n
=
1
;
wrst
.
ptx
[
1
].
d_ports_n
=
0
;
wrst
.
ptx
[
2
].
d_ports_n
=
1
;
wrst
.
ptx
[
3
].
d_ports_n
=
0
;
wrst
.
prx
[
0
].
s_port
=
2
;
wrst
.
prx
[
2
].
s_port
=
0
;
...
...
@@ -177,14 +254,18 @@ void init_wr_test(int num)
/* 2.2.7 Snake test */
/* TX: p0->p1; p1->p0; p2->p3; p3->p2
* RX_TRIG: p0; p1; p2; p3 -> smac; ethtype */
wrst
.
ptx
[
0
].
d_port
=
1
;
wrst
.
ptx
[
1
].
d_port
=
0
;
wrst
.
ptx
[
2
].
d_port
=
3
;
wrst
.
ptx
[
3
].
d_port
=
2
;
wrst
.
ptx
[
0
].
d_port
s
[
0
]
=
1
;
wrst
.
ptx
[
1
].
d_port
s
[
0
]
=
0
;
wrst
.
ptx
[
2
].
d_port
s
[
0
]
=
3
;
wrst
.
ptx
[
3
].
d_port
s
[
0
]
=
2
;
wrst
.
ptx
[
0
].
q_vid
=
VID_NONE
;
wrst
.
ptx
[
1
].
q_vid
=
VID_NONE
;
wrst
.
ptx
[
2
].
q_vid
=
VID_NONE
;
wrst
.
ptx
[
3
].
q_vid
=
VID_NONE
;
wrst
.
ptx
[
0
].
d_ports_n
=
1
;
wrst
.
ptx
[
1
].
d_ports_n
=
1
;
wrst
.
ptx
[
2
].
d_ports_n
=
1
;
wrst
.
ptx
[
3
].
d_ports_n
=
1
;
wrst
.
prx
[
0
].
s_port
=
1
;
wrst
.
prx
[
1
].
s_port
=
0
;
...
...
@@ -200,12 +281,18 @@ void init_wr_test(int num)
memcpy
(
wrst
.
prx
[
2
].
trig2_pat
,
&
vtag
,
2
);
memcpy
(
wrst
.
prx
[
3
].
trig2_pat
,
&
vtag
,
2
);
break
;
/***********************************************/
/* PERFORMANCE TESTS */
/***********************************************/
case
TEST_3_1_1
:
break
;
}
}
int
run_test
(
HTCountStructure
*
cntrs
)
{
int
i
,
rx_pmask
=
0
,
tx_pmask
=
0
;
int
i
,
j
,
rx_pmask
=
0
,
tx_pmask
=
0
;
struct
smb_port_tx
*
p_tx
=
NULL
;
struct
smb_port_rx
*
p_rx
=
NULL
;
char
mac
[
SMB_PORTS
+
1
][
6
]
=
{{
0x3c
,
0x47
,
0x0e
,
0x04
,
0x05
,
0x06
},
...
...
@@ -216,14 +303,26 @@ int run_test( HTCountStructure *cntrs )
reset_ports
(
SMB_P0
|
SMB_P1
|
SMB_P2
|
SMB_P3
);
/* optional learning */
//smb_learning(SMB_PALL, mac, 3);
/* setup required streams */
for
(
i
=
0
;
i
<
SMB_PORTS
;
++
i
)
{
p_tx
=
&
(
wrst
.
ptx
[
i
]);
if
(
p_tx
->
d_port
!=
DPORT_NONE
)
{
//if (p_tx->d_ports_n > 0) {
// tx_pmask |= PORT_TO_PMASK(i);
// setup_stream(i, mac[p_tx->d_ports[0]], mac[i], p_tx->fsize, p_tx->fnum,
// p_tx->fload[0]/100.0, p_tx->q_pri, p_tx->q_vid);
//}
for
(
j
=
0
;
j
<
p_tx
->
d_ports_n
;
++
j
)
{
setup_stream
(
i
,
mac
[
p_tx
->
d_ports
[
j
]],
mac
[
i
],
p_tx
->
fsize
,
p_tx
->
fnum
,
p_tx
->
fload
[
0
]
/
100
.
0
/
p_tx
->
d_ports_n
,
p_tx
->
q_pri
,
p_tx
->
q_vid
,
j
);
}
if
(
p_tx
->
d_ports_n
>
0
)
{
tx_pmask
|=
PORT_TO_PMASK
(
i
);
setup_stream
(
i
,
mac
[
p_tx
->
d_port
],
mac
[
i
],
p_tx
->
fsize
,
p_tx
->
fnum
,
p_tx
->
fload
/
100
.
0
,
p_tx
->
q_pri
,
p_tx
->
q_vid
);
setup_stream
(
i
,
mac
[
p_tx
->
d_port
s
[
j
]
],
mac
[
i
],
p_tx
->
fsize
,
p_tx
->
fnum
,
p_tx
->
fload
[
0
]
/
100
.
0
/
p_tx
->
d_ports_n
,
p_tx
->
q_pri
,
p_tx
->
q_vid
,
-
1
);
}
}
...
...
@@ -231,8 +330,10 @@ int run_test( HTCountStructure *cntrs )
for
(
i
=
0
;
i
<
SMB_PORTS
;
++
i
)
{
p_rx
=
&
(
wrst
.
prx
[
i
]);
/* TRIG1 - SMAC */
if
(
p_rx
->
s_port
!=
RX_PALL
)
/* TRIG1 - SMAC or DMAC */
if
(
p_rx
->
s_port
==
RX_ALLUNI
)
smb_set_trigger
(
mac
[
i
],
i
,
0
,
6
,
HTTRIGGER_1
);
else
if
(
p_rx
->
s_port
!=
RX_PALL
)
smb_set_trigger
(
mac
[
p_rx
->
s_port
],
i
,
6
,
6
,
HTTRIGGER_1
);
/* TRIG2 - Ethtype */
if
(
p_rx
->
trig2_len
>
0
)
...
...
@@ -263,6 +364,8 @@ int run_test( HTCountStructure *cntrs )
int
anl_result
(
HTCountStructure
*
cntrs
,
int
testno
)
{
int
req_num
;
switch
(
testno
)
{
case
TEST_2_1_1
:
/* All frames sent from p0 received on p2
...
...
@@ -280,6 +383,22 @@ int anl_result( HTCountStructure *cntrs, int testno)
break
;
case
TEST_2_1_2
:
req_num
=
(
SMB_PORTS
-
1
)
*
T_2XX_FNUM
;
/* Each of the ports got frames addressed to it from all other ports
* Limited number of frames addressed to other ports may be received due to learning */
if
(
(
cntrs
[
0
].
TmtPkt
==
req_num
&&
cntrs
[
0
].
RcvTrig
==
req_num
&&
cntrs
[
0
].
RcvPkt
<=
req_num
+
T_2XX_UNRECOG_THR
)
&&
(
cntrs
[
1
].
TmtPkt
==
req_num
&&
cntrs
[
1
].
RcvTrig
==
req_num
&&
cntrs
[
1
].
RcvPkt
<=
req_num
+
T_2XX_UNRECOG_THR
)
&&
(
cntrs
[
2
].
TmtPkt
==
req_num
&&
cntrs
[
2
].
RcvTrig
==
req_num
&&
cntrs
[
2
].
RcvPkt
<=
req_num
+
T_2XX_UNRECOG_THR
)
&&
(
cntrs
[
3
].
TmtPkt
==
req_num
&&
cntrs
[
3
].
RcvTrig
==
req_num
&&
cntrs
[
3
].
RcvPkt
<=
req_num
+
T_2XX_UNRECOG_THR
)
)
return
TEST_PASSED
;
if
(
(
cntrs
[
0
].
TmtPkt
==
req_num
&&
cntrs
[
0
].
RcvTrig
==
req_num
)
&&
(
cntrs
[
1
].
TmtPkt
==
req_num
&&
cntrs
[
1
].
RcvTrig
==
req_num
)
&&
(
cntrs
[
2
].
TmtPkt
==
req_num
&&
cntrs
[
2
].
RcvTrig
==
req_num
)
&&
(
cntrs
[
3
].
TmtPkt
==
req_num
&&
cntrs
[
3
].
RcvTrig
==
req_num
)
)
return
TEST_WARNING
;
break
;
case
TEST_2_2_7
:
/* All frames sent from p0 received on p1
* All frames sent from p1 received on p0
...
...
sw/smartbits-tester/tests_body.h
View file @
04dd60d2
...
...
@@ -4,6 +4,7 @@
#include "et1000.h"
#include "smartbits.h"
/* functional tests */
#define TEST_2_1_1 0
#define TEST_2_1_2 1
#define TEST_2_2_1 2
...
...
@@ -11,13 +12,18 @@
#define TEST_2_2_5 4
#define TEST_2_2_6 5
#define TEST_2_2_7 6
/* performance tests */
#define VAR1 0
#define VAR2 1
#define TEST_3_1_1 7
extern
const
char
*
TLIST
[
7
];
#define DPORT_NONE 0xFE
//
#define DPORT_NONE 0xFE
#define TX_PALL 0x4
#define VID_NONE -1
#define RX_PALL 0xFF
#define RX_ALLUNI 0xFE
#define VLAN_TAG(vid,prio) ((0x8100 << 16) | (prio<<13) | (vid))
#define NOVLAN_TAG 0x0800
...
...
@@ -30,13 +36,23 @@ extern const char* TLIST[7];
#define T_2XX_FNUM 1000
#define T_2XX_UNRECOG_THR 10
#define FLOAD_MAXTAB 12
#define FSIZE_MAXTAB 6
struct
smb_port_tx
{
int
d_port
;
//SMB destination port index [0..3]; 0xff for broadcast
int
d_ports
[
SMB_PORTS
];
//SMB destination port index [0..3]; 0xff for broadcast
int
d_ports_n
;
int
q_vid
;
//VLAN ID, if 802.1d, make it -1
int
q_pri
;
//priority, if 802.1d, make it -1
int
fsize
;
//size of transmitted frames
int
fload
;
//traffic load [1..100]%
int
fsize_step
;
int
fsize_stop
;
int
fsize_tab
[
FSIZE_MAXTAB
];
int
fsize_n
;
int
fload
[
FLOAD_MAXTAB
];
//traffic load [1..100]%
int
fload_n
;
int
fnum
;
//amount of frames sent in a single burst
int
ftime
;
//length of burst in seconds
};
struct
smb_port_rx
{
...
...
sw/smartbits-tester/wrs_smb.c
View file @
04dd60d2
...
...
@@ -57,6 +57,7 @@ int main()
}
for
(
test_no
=
0
;
test_no
<
6
;
++
test_no
)
{
//for(test_no=TEST_2_2_1; test_no<TEST_2_2_1+1; ++test_no) {
//test_no = TEST_2_2_2;
printf
(
"
\n\n
------ TEST %s ------
\n
"
,
TLIST
[
test_no
]);
fprintf
(
logfile
,
"
\n\n
------ TEST %s ------
\n
"
,
TLIST
[
test_no
]);
...
...
@@ -84,6 +85,7 @@ int main()
++
t_fail
;
show_allcntrs
(
logfile
,
SMB_PALL
,
cntrs
);
}
show_allcntrs
(
stdout
,
SMB_PALL
,
cntrs
);
NSDelay
(
5
);
}
...
...
@@ -318,95 +320,103 @@ int basic_traffic(int fsize, int p_tx, int p_rx)
}
int
setup_stream
(
int
port
,
char
*
dmac
,
char
*
smac
,
int
fsize
,
int
fnum
,
float
ratio
,
int
v_pri
,
int
vid
)
int
setup_stream
(
int
port
,
char
*
dmac
,
char
*
smac
,
int
fsize
,
int
fnum
,
float
ratio
,
int
v_pri
,
int
vid
,
int
idx
)
{
StreamIP
str
;
StreamIPVLAN
strv
;
static
StreamIP
str
[
MAX_STREAMS
];
static
int
n_streams
=
0
;
static
StreamIPVLAN
strv
[
MAX_STREAMS
];
NSPortTransmit
tx_mode
;
L3StreamExtension
l3_ext
;
static
L3StreamExtension
l3_ext
[
MAX_STREAMS
]
;
unsigned
long
eth_speed
;
char
dip
[
4
]
=
{
192
,
168
,
1
,
1
};
char
sip
[
4
]
=
{
192
,
168
,
1
,
3
};
/* procedure according to page 332 of SmartLibrary Overview */
//printf("stream: port %d, dmac %02x:%02x:%02x:%02x:%02x:%02x, smac %02x:%02x:%02x:%02x:%02x:%02x, size %d, fnum %d, ratio %f, pri %d, vid %d, idx %d\n",
// port, dmac[0]&0xff, dmac[1]&0xff, dmac[2]&0xff, dmac[3]&0xff, dmac[4]&0xff, dmac[5]&0xff,
// smac[0]&0xff, smac[1]&0xff, smac[2]&0xff, smac[3]&0xff, smac[4]&0xff, smac[5]&0xff, fsize, fnum, ratio, v_pri, vid, idx);
//6
if
(
vid
<
0
)
{
if
(
vid
<
0
&&
idx
>=
0
)
{
//////// no VLAN ///////////
bzero
(
&
str
,
sizeof
(
StreamIP
));
str
.
ucActive
=
1
;
str
.
ucProtocolType
=
STREAM_PROTOCOL_IP
;
str
.
uiFrameLength
=
fsize
;
str
.
ucTagField
=
1
;
memcpy
(
str
.
DestinationMAC
,
dmac
,
6
);
memcpy
(
str
.
SourceMAC
,
smac
,
6
);
str
.
TimeToLive
=
255
;
str
.
InitialSequenceNumber
=
0
;
bzero
(
str
.
DestinationIP
,
4
);
bzero
(
str
.
SourceIP
,
4
);
memcpy
(
str
.
DestinationIP
,
dip
,
4
);
memcpy
(
str
.
SourceIP
,
sip
,
4
);
str
.
Protocol
=
4
;
//IP Stream
bzero
(
&
str
[
idx
],
sizeof
(
StreamIP
));
str
[
idx
].
ucActive
=
1
;
str
[
idx
].
ucProtocolType
=
STREAM_PROTOCOL_IP
;
str
[
idx
].
uiFrameLength
=
fsize
;
str
[
idx
].
ucTagField
=
1
;
memcpy
(
str
[
idx
].
DestinationMAC
,
dmac
,
6
);
memcpy
(
str
[
idx
].
SourceMAC
,
smac
,
6
);
str
[
idx
].
TimeToLive
=
255
;
str
[
idx
].
InitialSequenceNumber
=
0
;
bzero
(
str
[
idx
].
DestinationIP
,
4
);
bzero
(
str
[
idx
].
SourceIP
,
4
);
memcpy
(
str
[
idx
].
DestinationIP
,
dip
,
4
);
memcpy
(
str
[
idx
].
SourceIP
,
sip
,
4
);
str
[
idx
].
Protocol
=
4
;
//str.uiActualSequenceNumber = 0xcafe;
CHECKERROR
(
HTSetStructure
(
L3_DEFINE_IP_STREAM
,
0
,
0
,
0
,
&
str
,
sizeof
(
StreamIP
),
HUB
,
SLOT
,
port
)
);
}
else
{
n_streams
++
;
}
else
if
(
vid
>=
0
&&
idx
>=
0
)
{
//////// VLANs ///////////
bzero
(
&
strv
,
sizeof
(
StreamIP
));
strv
.
ucActive
=
1
;
strv
.
ucProtocolType
=
STREAM_PROTOCOL_IP_VLAN
;
strv
.
uiFrameLength
=
fsize
;
strv
.
ucTagField
=
0
;
memcpy
(
strv
.
DestinationMAC
,
dmac
,
6
);
memcpy
(
strv
.
SourceMAC
,
smac
,
6
);
strv
.
TimeToLive
=
255
;
strv
.
InitialSequenceNumber
=
0
;
bzero
(
strv
.
DestinationIP
,
4
);
bzero
(
strv
.
SourceIP
,
4
);
bzero
(
strv
.
Netmask
,
4
);
memcpy
(
strv
.
DestinationIP
,
dip
,
4
);
memcpy
(
strv
.
SourceIP
,
sip
,
4
);
bzero
(
strv
.
Gateway
,
4
);
strv
.
Protocol
=
4
;
strv
.
VLAN_Pri
=
v_pri
;
strv
.
VLAN_Cfi
=
VLAN_CFI_RIF_ABSENT
;
strv
.
VLAN_Vid
=
vid
;
CHECKERROR
(
HTSetStructure
(
L3_DEFINE_IP_STREAM_VLAN
,
0
,
0
,
0
,
&
strv
,
sizeof
(
StreamIPVLAN
),
HUB
,
SLOT
,
port
)
);
bzero
(
&
strv
[
idx
],
sizeof
(
StreamIP
));
strv
[
idx
].
ucActive
=
1
;
strv
[
idx
].
ucProtocolType
=
STREAM_PROTOCOL_IP_VLAN
;
strv
[
idx
].
uiFrameLength
=
fsize
;
strv
[
idx
].
ucTagField
=
0
;
memcpy
(
strv
[
idx
].
DestinationMAC
,
dmac
,
6
);
memcpy
(
strv
[
idx
].
SourceMAC
,
smac
,
6
);
strv
[
idx
].
TimeToLive
=
255
;
strv
[
idx
].
InitialSequenceNumber
=
0
;
bzero
(
strv
[
idx
].
DestinationIP
,
4
);
bzero
(
strv
[
idx
].
SourceIP
,
4
);
bzero
(
strv
[
idx
].
Netmask
,
4
);
memcpy
(
strv
[
idx
].
DestinationIP
,
dip
,
4
);
memcpy
(
strv
[
idx
].
SourceIP
,
sip
,
4
);
bzero
(
strv
[
idx
].
Gateway
,
4
);
strv
[
idx
].
Protocol
=
4
;
strv
[
idx
].
VLAN_Pri
=
v_pri
;
strv
[
idx
].
VLAN_Cfi
=
VLAN_CFI_RIF_ABSENT
;
strv
[
idx
].
VLAN_Vid
=
vid
;
n_streams
++
;
}
else
if
(
vid
<
0
&&
idx
==
-
1
)
{
CHECKERROR
(
HTSetStructure
(
L3_DEFINE_IP_STREAM
,
0
,
0
,
0
,
str
,
n_streams
*
sizeof
(
StreamIP
),
HUB
,
SLOT
,
port
)
);
}
else
if
(
vid
>=
0
&&
idx
==
-
1
)
CHECKERROR
(
HTSetStructure
(
L3_DEFINE_IP_STREAM_VLAN
,
0
,
0
,
0
,
strv
,
n_streams
*
sizeof
(
StreamIPVLAN
),
HUB
,
SLOT
,
port
)
);
//7
//CHECKERROR( HTScheduleMode(SCHEDULE_MODE_FRAME_RATE, HUB, SLOT, p_tx) );
//CHECKERROR( HTTransmitMode(SINGLE_BURST_MODE, HUB, SLOT, p_tx) );
//CHECKERROR( HTBurstCount(1000, HUB, SLOT, p_tx) );
bzero
(
&
tx_mode
,
sizeof
(
NSPortTransmit
));
if
(
fnum
>
0
)
{
tx_mode
.
ulBurstCount
=
fnum
;
tx_mode
.
ucTransmitMode
=
SINGLE_BURST_MODE
;
}
else
{
tx_mode
.
ulBurstCount
=
0
;
tx_mode
.
ucTransmitMode
=
CONTINUOUS_PACKET_MODE
;
}
tx_mode
.
ucScheduleMode
=
SCHEDULE_MODE_FRAME_RATE
;
tx_mode
.
ucRandomGapEnable
=
0
;
CHECKERROR
(
HTSetStructure
(
NS_PORT_TRANSMIT
,
0
,
0
,
0
,
&
tx_mode
,
sizeof
(
NSPortTransmit
),
HUB
,
SLOT
,
port
)
);
// Stream EXT
//printf("Calculated %lu frames/sec for %f ratio\n", ratio_to_fps(fsize, ratio), ratio);
bzero
(
&
l3_ext
,
sizeof
(
L3StreamExtension
));
l3_ext
.
ulFrameRate
=
ratio_to_fps
(
fsize
,
ratio
);
if
(
fnum
>
0
)
{
l3_ext
.
ulBurstCount
=
1000
;
l3_ext
.
ulTxMode
=
L3_SINGLE_BURST_MODE
;
}
else
{
l3_ext
.
ulBurstCount
=
0
;
l3_ext
.
ulTxMode
=
L3_CONTINUOUS_MODE
;
if
(
idx
>=
0
)
{
bzero
(
&
l3_ext
[
idx
],
sizeof
(
L3StreamExtension
));
l3_ext
[
idx
].
ulFrameRate
=
ratio_to_fps
(
fsize
,
ratio
);
l3_ext
[
idx
].
ulBurstCount
=
fnum
;
l3_ext
[
idx
].
uiInitialSeqNumber
=
0
;
l3_ext
[
idx
].
ucIPHeaderChecksumError
=
0
;
if
(
fnum
>
0
)
l3_ext
[
idx
].
ulTxMode
=
L3_SINGLE_BURST_MODE
;
else
l3_ext
[
idx
].
ulTxMode
=
L3_CONTINUOUS_MODE
;
}
else
{
//printf("define L3 EXT for %d streams\n", n_streams);
CHECKERROR
(
HTSetStructure
(
L3_DEFINE_STREAM_EXTENSION
,
0
,
0
,
0
,
l3_ext
,
n_streams
*
sizeof
(
L3StreamExtension
),
HUB
,
SLOT
,
port
)
);
bzero
(
&
tx_mode
,
sizeof
(
NSPortTransmit
));
tx_mode
.
ulBurstCount
=
n_streams
*
fnum
;
tx_mode
.
ucScheduleMode
=
SCHEDULE_MODE_FRAME_RATE
;
tx_mode
.
ucRandomGapEnable
=
0
;
if
(
fnum
>
0
)
tx_mode
.
ucTransmitMode
=
SINGLE_BURST_MODE
;
else
tx_mode
.
ucTransmitMode
=
CONTINUOUS_PACKET_MODE
;
CHECKERROR
(
HTSetStructure
(
NS_PORT_TRANSMIT
,
0
,
0
,
0
,
&
tx_mode
,
sizeof
(
NSPortTransmit
),
HUB
,
SLOT
,
port
)
);
n_streams
=
0
;
}
l3_ext
.
uiInitialSeqNumber
=
0
;
l3_ext
.
ucIPHeaderChecksumError
=
0
;
CHECKERROR
(
HTSetStructure
(
L3_DEFINE_STREAM_EXTENSION
,
0
,
0
,
0
,
&
l3_ext
,
sizeof
(
L3StreamExtension
),
HUB
,
SLOT
,
port
)
);
//8
//eth_speed = SPEED_1GHZ;
//CHECKERROR( HTSetStructure(ETH_SET_SPEED, 0, 0, 0, ð_speed, sizeof(unsigned long), HUB, SLOT, p_tx) );
//CHECKERROR( HTSetStructure(ETH_SET_SPEED, 0, 0, 0, ð_speed, sizeof(unsigned long), HUB, SLOT, p_rx) ); //do I need that?
return
0
;
}
...
...
@@ -425,8 +435,8 @@ int temp_run_test(int p_tx, int p_rx)
//smb_learning(SMB_P0 | SMB_P1 | SMB_P2 | SMB_P3, mac, 3);
setup_stream
(
p_tx
,
mac
[
1
],
mac
[
0
],
FRAME_SZ
,
1000
,
0
.
1
,
5
,
-
1
);
setup_stream
(
p_rx
,
mac
[
0
],
mac
[
1
],
FRAME_SZ
,
1234
,
0
.
1
,
5
,
-
1
);
setup_stream
(
p_tx
,
mac
[
1
],
mac
[
0
],
FRAME_SZ
,
1000
,
0
.
1
,
5
,
-
1
,
0
);
setup_stream
(
p_rx
,
mac
[
0
],
mac
[
1
],
FRAME_SZ
,
1234
,
0
.
1
,
5
,
-
1
,
0
);
//wait_linkup(SMB_P0 | SMB_P1);
smb_set_trigger
(
mac
[
0
],
p_rx
,
6
,
6
,
HTTRIGGER_1
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment