📄 vp_filter.c
字号:
}
}
loop_count++;
if (forever && KEYPRESS)
{
break;
}
}
while ((loop_count != loop) || forever);
if (loop == 0)
{
counter = loop_count;
}
else
{
counter = loop;
}
switch(test_param)
{
case 'l':
case 'p':
case '3':
expected_num_pkts = counter*6;
break;
case '2':
expected_num_pkts = counter*9;
break;
}
MSG("\nexpected_num_pkts = %d\n",expected_num_pkts,0,0);
switch(ports)
{
case 0:
case 1:
case 2:
case 3: if (!cflag)
{
if ((pass_port[ports] != expected_num_pkts) || (pass_port[ports] == 0))
{
eprintf("\nDid not Receive expected number of packets on port %d\n", ports);
eprintf("Packets Received = %d\n",pass_port[ports]);
flag = ERROR;
rxflag[ports] = ERROR;
}
else
{
eprintf("\nReceived on Port %d : %d\n",ports,pass_port[ports]);
flag = OK;
}
}
else
{
if ((pass_port[rxport[ports]] != expected_num_pkts) || (pass_port[rxport[ports]] == 0))
{
eprintf("\nDid not Receive expected number of packets on port %d\n", rxport[ports]);
eprintf("Packets Received on port %d = %d\n",rxport[ports],pass_port[rxport[ports]]);
flag = ERROR;
rxflag[ports] = ERROR;
}
else
{
eprintf("\nReceived on Port %d : %d\n",rxport[ports],pass_port[rxport[ports]]);
flag = OK;
}
}
break;
case 4: eprintf("\n");
if (!cflag)
{
for (ctr=0; ctr<4; ctr++)
{
if ((pass_port[ctr] != expected_num_pkts) || (pass_port[ports] == 0))
{
eprintf("\nDid not Receive expected number of packets on port %d\n", ctr);
eprintf("Packets Received = %d\n",pass_port[ctr]);
rxflag[ctr] = ERROR;
flag = ERROR;
}
if (pass_port[ctr] == expected_num_pkts)
{
eprintf("Received %d packets on Port %d\n",pass_port[ctr],ctr);
}
}
}
else
{
for (ctr=0; ctr<2; ctr++)
{
if ((pass_port[ctr*2+1] != expected_num_pkts) || (pass_port[ports] == 0))
{
eprintf("\nDid not Receive expected number of packets on port %d\n", ctr*2+1);
eprintf("Packets Received = %d\n",pass_port[ctr*2+1]);
rxflag[ctr*2+1] = ERROR;
flag = ERROR;
}
if (pass_port[ctr*2+1] == expected_num_pkts)
{
eprintf("Received %d packets on Port %d\n",pass_port[ctr*2+1],ctr*2+1);
}
}
}
break;
default: eprintf("This is bad value for port number \n");
break;
}
}
eprintf("\n");
if(dcache_status != 0) // if dcache was originally ON
{
dcache_on();
}
if (loop == 0)
loop = loop_count;
test_passed = verify_vpse_filter(cflag);
if (test_passed)
{
switch(test_param)
{
case 'l':
eprintf("\nVLAN filtering test...PASSED\n");
break;
case 'p':
eprintf("\nPAUSE filtering test...PASSED\n");
case '2':
eprintf("\nRMON test for the following Registers ...PASSED\n");
eprintf("Rx Tagged / Tx Tagged\n");
break;
case '3':
eprintf("\nRMON test for the following Registers ...PASSED\n");
eprintf("Rx PauseMacControlReceivedCounter / TxPauseFrames\n");
break;
default:
eprintf("Invalid parameters. \n");
return INVALID_PARAMETERS;
}
Set_LED("MAFP");
slowport_code[0] = SP_XSC;
slowport_code[1] = SP_PASS;
dump_slowport(slowport_code, 2, SP_NON_FATAL);
}
else
{
if (mailbox_value == INIT_ERROR)
{
eprintf("The slave NPU did not succeed in loading the microcode to its microengines\n");
}
else if (mailbox_value == NOT_RECEIVED)
{
eprintf("There was no sign that the expected packet was received\n");
}
else if (mailbox_value == ERROR_PATTERN)
{
eprintf("mailbox = 0x%x\n",mailbox_value);
eprintf("The packet received was not the same as the packet transmitted.\n");
}
else if (mailbox_value == INCORRECT_SIZE)
{
eprintf("mailbox = 0x%x\n",mailbox_value);
eprintf("The packet received was not the same size as the packet transmitted.\n");
}
else if (mailbox_value == VLAN_FILTER_FAILED)
{
eprintf("mailbox = 0x%x\n",mailbox_value);
eprintf("The Vlan packet was not filtered.\n");
}
else if (mailbox_value == PAUSE_FILTER_FAILED)
{
eprintf("mailbox = 0x%x\n",mailbox_value);
eprintf("The Pause packet was not filtered.\n");
}
switch(test_param)
{
case 'l':
strcpy(syslog.desc, "VLAN Filtering test FAILED!\n");
eprintf("VLAN Filtering test FAILED!");
break;
case 'p':
strcpy(syslog.desc, "PAUSE Filtering test FAILED!\n");
eprintf("PAUSE Filtering test FAILED!");
case '2':
strcpy(syslog.desc, "Rx Tagged/Tx Tagged test FAILED!\n");
eprintf("Rx Tagged/Tx Tagged statistics test FAILED!");
break;
case '3':
strcpy(syslog.desc, "Pause statistics test FAILED!\n");
eprintf("RMON: PAUSE statistics test FAILED!");
break;
}
// prepare structure for dumping
syslog.type = TYPE_ERROR;
syslog.source_comp = MASTER_DIAG; // Determine master/slave
// write to syslog
syslog_dump(&syslog, sizeof(SYSLOG_DATA));
Set_LED("LswF");
slowport_code[0] = SP_XSC;
slowport_code[1] = SP_FAIL;
dump_slowport(slowport_code, 2, SP_NON_FATAL);
acL->Err = ERROR;
}
Clear_All_ME();
}
else
{
eprintf("\nThis test cannot be run directly on the Slave console\n");
return DONE; // To indicate that the slave does not do this.
}
return DONE;
}
short verify_vpse_filter(UINT32 cflag)
{
UINT32 rxVlanpkts[4],rxPausepkts[4],dropped[4];
UINT32 txVlanpkts[4],txPausepkts[4];
short test_passed = 1,iteration,port,port_ctr,res=0;
if (ports == 4)
if (!cflag)
iteration = 4;
else
iteration = 2;
else
iteration = 1;
spConfig();
for(port=0; port<4;port++)
{
/* Reading the total packets received */
rxVlanpkts[port] = reg_read(((port*PORTSZ)+VLAN_TAG));
rxPausepkts[port] = reg_read(((port*PORTSZ)+RX_PAUSE_MAC_CTL));
txVlanpkts[port] = reg_read(((port*PORTSZ)+TX_VLAN_TAG));
txPausepkts[port] = reg_read(((port*PORTSZ)+TX_PAUSE_FRAME));
dropped[port] = reg_read(port+PORT0_RXFIFO_PKT_DROP);
}
spRestore();
for(port_ctr=0; port_ctr<iteration;port_ctr++)
{
if ((!cflag) && (ports == 4))
port = port_ctr;
if ((cflag) && (ports == 4))
{
port = port_ctr*2;
port = rxport[port];
}
if ((!cflag) && (ports != 4))
port = ports;
if ((cflag) && (ports != 4))
port = rxport[ports];
switch (test_param)
{
case 'l':
eprintf("RX VLAN Tagged pkts = %d on port %d\n",rxVlanpkts[port],port);
eprintf("Dropped VLAN pkts = %d on port %d\n",dropped[port],port);
if ((VCount[port] != 0) ||
(dropped[port] != (loop*EXP_DROPPED_PKTS)))
{
eprintf("VLAN filtering test ERROR , Port %d\n",port);
test_passed = 0;
}
else
res|= 1<<port_ctr;
break;
case 'p':
eprintf("\nRX Pause pkts = %d on port %d\n",rxPausepkts[port],port);
eprintf("Dropped Pause pkts = %d on port %d\n",dropped[port],port);
if ((PCount[port] != 0) ||
(dropped[port] != (loop*EXP_DROPPED_PKTS)))
{
eprintf("Pause packet filtering test ERROR , Port %d\n",port);
test_passed = 0;
}
else
res|= 1<<port_ctr;
break;
case '2':
eprintf("\nRX VLAN Tagged pkts = %d on port %d\n",rxVlanpkts[port],port);
if (rxVlanpkts[port] != (loop*VLAN_PKTS))
{
eprintf("%s port=%d\n ", ERR_STR(RX_TAGGED_ERR),port);
test_passed = 0;
}
if (cflag)
port=rxport[port];
eprintf("TX VLAN Tagged pkts = %d on port %d\n",txVlanpkts[port],port);
if (txVlanpkts[port] != (loop*VLAN_PKTS))
{
eprintf("%s port=%d\n ", ERR_STR(TX_TAGGED_ERR),port);
test_passed = 0;
}
else
res|= 1<<port_ctr;
break;
case '3':
eprintf("\nRX PAUSE pkts = %d on port %d\n",rxPausepkts[port],port);
if (rxPausepkts[port] != (loop*PAUSE_PKTS))
{
eprintf("Bad value in PauseMacControlReceivedCounter register, port=%d\n ",port);
test_passed = 0;
}
if (cflag)
port=rxport[port];
eprintf("TX PAUSE pkts = %d on port %d\n",txPausepkts[port],port);
if (txPausepkts[port] != (loop*PAUSE_PKTS))
{
eprintf("%s port=%d\n ", ERR_STR(TX_PAUSEMACCONTROL_ERR),port);
test_passed = 0;
}
else
res|= 1<<port_ctr;
break;
default:
eprintf("Illegal Test parameter\n");
test_passed = 0;
break;
}
}
if ((res == 0xF) && (ports == 0x4) && (!cflag))
test_passed = 1;
else
if ((res == 0x3) && (ports == 0x4) && cflag)
test_passed = 1;
else
if ((res == 0x1) && (ports != 0x4))
test_passed = 1;
else
test_passed = 0;
return test_passed;
}
void get_packets_for_vpse_filter_test()
{
if ((test_param == 'l') || (test_param == '2'))//vlan
{
pl_sys_lb_data64_0 = vlan64_0;
}
else if ((test_param == 'p') || (test_param == '3')) //pause
{
pl_sys_lb_data64_0 = pause64_0;
}
pl_sys_lb_data64_1 = pl_sys_lb_data64_0;
pl_sys_lb_data64_2 = pl_sys_lb_data64_0;
pl_sys_lb_data64_3 = pl_sys_lb_data64_0;
pl_sys_lb_data96_0 = data96_0;
pl_sys_lb_data96_1 = data96_1;
pl_sys_lb_data96_2 = data96_2;
pl_sys_lb_data96_3 = data96_3;
pl_sys_lb_data138_0 = data138_0;
pl_sys_lb_data138_1 = data138_1;
pl_sys_lb_data138_2 = data138_2;
pl_sys_lb_data138_3 = data138_3;
}
void get_vpse_error(UINT32 pkt_size, UINT32 exp_pkt_sz, UINT32 *mailbox_value)
{
switch (test_param)
{
case 'l':
if ((pkt_size == 0x3C) && (exp_pkt_sz == 0x84))
*mailbox_value = VLAN_FILTER_FAILED;
break;
case 'p':
if ((pkt_size == 0x3C) && (exp_pkt_sz == 0x84))
*mailbox_value = PAUSE_FILTER_FAILED;
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -