📄 pgmacflt.c
字号:
PAMACFLT_bLoadMacFltAdd
};
SPage g_SPageMacFltDenyGrpAddNoFid = {
aSFixLabelMacFltGrpAdd, 6,
aSVarLabelMacFltGrp, 1,
aSItemMacFltGrp+1, 1,
aSActionMacFltGrpAdd, 3,
PAMACFLT_bLoadMacFltAdd
};
/////////////////////////////////////////////////////////////////////////////////////
#define g_pSPageMacFlt (&g_UCfgBuf.SPageCfg_MACFlt)
#define g_byMacFltMode (g_UCfgBuf.SPageCfg_MACFlt.bySMACFltMode)
#define g_wMacFltValidEntryNum (g_UCfgBuf.SPageCfg_MACFlt.wValidEntryNum)
#define g_pSMacFltCurGrp (&g_UCfgBuf.SPageCfg_MACFlt.SCurGrp)
//source mac filter mode page Id array
UINT8 s_abyMacFltModePageId[] = {PAGE_MACFLT_MODE_DIS, PAGE_MACFLT_MODE_DIS, PAGE_MACFLT_PERMIT_LIST, PAGE_MACFLT_PERMIT_LIST_NOFID, PAGE_MACFLT_DENY_LIST, PAGE_MACFLT_DENY_LIST_NOFID};
BOOL PAMACFLT_bNextPage(void)
{
g_byMultiPageNo ++;
g_byMultiPageNo %= g_byMacFltTotalPageNum;
return RELOAD_PAGE; // reload cfg and print whole page
}
static void s_vUpdateGrpNumPerPage(void)
{
if (g_byMacFltMode == MACFLT_MODE_SMAC_PERMIT)
g_byMacFltLineNumPerPage = ((80/MACFLT_MOD_PERMIT_POS_COL_OFFSET + ((80%MACFLT_MOD_PERMIT_POS_COL_OFFSET) ? 1 : 0))*ROW_NUM_IN_2_FIELD);
else
g_byMacFltLineNumPerPage = ((80/MACFLT_MOD_DENY_POS_COL_OFFSET + ((80%MACFLT_MOD_DENY_POS_COL_OFFSET) ? 1 : 0))*ROW_NUM_IN_3_FIELD);
if ( g_wMacFltValidEntryNum) {
if (g_wMacFltValidEntryNum % g_byMacFltLineNumPerPage) {
g_byMacFltTotalPageNum = ((g_wMacFltValidEntryNum / g_byMacFltLineNumPerPage) + 1);
g_wTotalLineNum = ((g_byMultiPageNo < (g_byMacFltTotalPageNum-1)) ? g_byMacFltLineNumPerPage : (g_wMacFltValidEntryNum % g_byMacFltLineNumPerPage));
}
else {
g_byMacFltTotalPageNum = (g_wMacFltValidEntryNum / g_byMacFltLineNumPerPage);
g_wTotalLineNum = g_byMacFltLineNumPerPage;
}
}
else { //grp num = 0
g_byMacFltTotalPageNum = 1;
g_wTotalLineNum = 0;
}
}
BOOL PAMACFLT_bChangeModePage(void)
{
//check mode be changed or not
if (g_byCurPageID != s_abyMacFltModePageId[g_byMacFltMode*2] && g_byCurPageID != s_abyMacFltModePageId[g_byMacFltMode*2 + 1])
{
// confirm and set source mac filter mode
char cKey = ENGcPrintMessage("Change mode will clear original Source mac Filter setting! Continue? [y/N]", PRINT_THEN_PAUSE);
if (cKey == 'y' || cKey == 'Y')
{
UINT8 byVlanMode;
ENGcPrintMessage("Changing mode...", PRINT_THEN_RETURN);
PIMACFLT_vSetSMACFltMode(g_pSPageMacFlt);
PIMSG_vPutMsgThenPause(OP_OK);
//check vlan mode, If vlan mode is disable or portbased, turn to group list page which with no Fid, else turn to normal group list page
PIVLAN_vGetVlanMode(&byVlanMode);
if ((byVlanMode == VLAN_MODE_DISABLE) || (byVlanMode == VLAN_MODE_PORTBASE))
g_byCurPageID = s_abyMacFltModePageId[g_byMacFltMode*2 + 1];
else
g_byCurPageID = s_abyMacFltModePageId[g_byMacFltMode*2];
g_bDataDirty = 0;
//update page
if (g_byMacFltMode)
{
PIMACFLT_vInitPage(g_pSPageMacFlt);
s_vUpdateGrpNumPerPage();
}
return RELOAD_PAGE;
}
// restore to current mode in HW
PIMACFLT_vGetSMacFltMode(&g_byMacFltMode);
return RELOAD_PAGE;
}
return DONT_RELOAD_PAGE;
}
BOOL PAMACFLT_bLoadMacFltMode(void)
{
UINT8 byVlanMode;
PIMACFLT_vInitPage(g_pSPageMacFlt);
PIVLAN_vGetVlanMode(&byVlanMode);
if (g_byMacFltMode) //enable
{
//check vlan mode
//If vlan mode is disable or portbased, turn to group list page which with no Fid, else turn to normal group list page
if ((byVlanMode == VLAN_MODE_DISABLE) || (byVlanMode == VLAN_MODE_PORTBASE))
{
UINT16 si;
STR_pvMemset(&astrNoFidList, 0, SWITCH_MAC_FLT_GRP_NUM * (FID_NA_LENGTH + 1));
for (si = 0; si < g_pSPageMacFlt->wValidEntryNum; si ++)
STR_pvMemcpy(astrNoFidList + si*(FID_NA_LENGTH+1), strNoFid, FID_NA_LENGTH + 1);
g_byCurPageID = s_abyMacFltModePageId[g_byMacFltMode*2 + 1];
}
else
g_byCurPageID = s_abyMacFltModePageId[g_byMacFltMode*2];
//If in permit mode, print port Id field of group
if (g_byMacFltMode == MACFLT_MODE_SMAC_PERMIT) {
UINT16 si;
PIMACFltGP_vInitAddOrEditGrpPage(g_pSPageMacFlt);
STR_pvMemset(&astrSecuPortList, 0, SWITCH_MAC_FLT_GRP_NUM * (PORT_NAME_LENGTH + 1));
for (si = 0; si < g_pSPageMacFlt->wValidEntryNum; si ++) {
STR_iStrcpy(g_pSPageMacFlt->SCurGrp.azMacAddr, g_pSPageMacFlt->astrGrpMacList + si*(MAC_STRING_LEN + 1));
g_pSPageMacFlt->SCurGrp.u16Fid = g_pSPageMacFlt->awValidGrpFidList[si];
PIMACFLTGP_byGetGrp(g_pSPageMacFlt);
STR_pvMemcpy(astrSecuPortList + si*(PORT_NAME_LENGTH+1), g_aszPortNameTable[g_pSPageMacFlt->SCurGrp.abyDestPortList[g_pSPageMacFlt->SCurGrp.bySrcId]], PORT_NAME_LENGTH+1);
}
}
s_vUpdateGrpNumPerPage();
}
return DONT_RELOAD_PAGE;
}
BOOL PAMACFLT_bEditMacFltMode(void)
{
//Backup total line
UINT16 wTotalLineNumTmp = g_wTotalLineNum;
//make group can't be edit
g_wTotalLineNum = 0;
if (PAACT_bEdit())
return RELOAD_PAGE;
//restore true g_wTotalLineNum value
g_wTotalLineNum = wTotalLineNumTmp;
// deal with dynamic page
if (PAMACFLT_bChangeModePage())
ENGvPrintPage(); // in this page, changing page may not reload config, just re-print page only
return DONT_RELOAD_PAGE;
}
BOOL PAMACFLT_bAddMacFltMode(void)
{
switch (g_byCurPageID)
{
case PAGE_MACFLT_PERMIT_LIST :
g_byCurPageID = PAGE_MACFLT_PERMIT_ADD;
break;
case PAGE_MACFLT_PERMIT_LIST_NOFID :
g_byCurPageID = PAGE_MACFLT_PERMIT_ADD_NOFID;
break;
case PAGE_MACFLT_DENY_LIST :
g_byCurPageID = PAGE_MACFLT_DENY_ADD;
break;
case PAGE_MACFLT_DENY_LIST_NOFID:
g_byCurPageID = PAGE_MACFLT_DENY_ADD_NOFID;
break;
default :
break;
}
return RELOAD_PAGE; // reload cfg and print whole page
}
BOOL PAMACFLT_bDelMacFltMode(void)
{
UINT8 u8OldTmp;
// continue if nothing to del
if (g_wTotalLineNum)
{
if (PAACT_bEdit())
return RELOAD_PAGE;
if (PAMACFLT_bChangeModePage())
ENGvPrintPage(); // in this page, changing page may not reload config, just re-print page only
else if (g_byCurKey == MK_ENTER && g_SCurItem.f2LinkType == LINK_TYPE_EDITPAGE)
{
char cKey = ENGcPrintMessage("Continue deleting? [y/N]", PRINT_THEN_PAUSE);
if (cKey == 'y' || cKey == 'Y')
{
UINT8 byRes;
ENGcPrintMessage("Deleting...", PRINT_THEN_RETURN);
STR_iStrcpy(g_pSMacFltCurGrp->azMacAddr, g_pSPageMacFlt->astrGrpMacList+(g_wCurLineID+g_byMultiPageNo*g_byMacFltLineNumPerPage)*(MAC_STRING_LEN+1));
g_pSMacFltCurGrp->u16Fid = g_pSPageMacFlt->awValidGrpFidList[(g_wCurLineID+g_byMultiPageNo*g_byMacFltLineNumPerPage)];
byRes = PIMACFLTGP_byDelGrp(g_pSPageMacFlt);
PIMSG_vPutExtMsgThenPause( byRes, UINT16_MAX, PUT_MSG_WITH_PORT_NAME);
if (byRes == OP_OK)
PIMACFLTEP_vStatisTblInfo(g_pSPageMacFlt);
//for deleting all grps in this page, so we must go back to previous page automatically
u8OldTmp = g_byMacFltTotalPageNum;
s_vUpdateGrpNumPerPage();
if (u8OldTmp != g_byMacFltTotalPageNum) {
g_byMultiPageNo --;
g_byMultiPageNo %= g_byMacFltTotalPageNum;
}
ENGvPrintPage(); // just reprint
}
}
}
return DONT_RELOAD_PAGE;
}
// mac filter entry add
// load config
BOOL PAMACFLT_bLoadMacFltAdd(void)
{
UINT8 byVlanMode;
PIMACFLT_vInitPage(g_pSPageMacFlt);
PIMACFltGP_vInitAddOrEditGrpPage(g_pSPageMacFlt);
//Init buffer
STR_iStrcpy(g_pSMacFltCurGrp->azMacAddr, "00:00:00:00:00:00");
PIVLAN_vGetVlanMode(&byVlanMode);
if (byVlanMode == VLAN_MODE_DISABLE)
g_pSMacFltCurGrp->u16Fid = 0;
else if (byVlanMode == VLAN_MODE_PORTBASE)
g_pSMacFltCurGrp->u16Fid = PORTBASE_VLAN_FID;
else
g_pSMacFltCurGrp->u16Fid = 1;
g_wTotalLineNum = g_byLogIdNum;
return DONT_RELOAD_PAGE;
}
// save of add operation
BOOL PAMACFLT_bSaveMacFltAdd(void)
{
UINT8 byErrCode;
PIMSG_vPutSavingMsg();
byErrCode = PIMACFLTGP_byInsGrp(g_pSPageMacFlt);
return s_bySaveMacFltGrpMsg(byErrCode);
}
// save message
static UINT8 s_bySaveMacFltGrpMsg(UINT8 byErrCode)
{
PIMSG_vPutMsgThenPause(byErrCode);
if (byErrCode == OP_OK)
{
g_byCurPageID = g_abyPreviousPageID[g_byCurPageID]; // jump to previous page
return RELOAD_PAGE;
}
return DONT_RELOAD_PAGE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -