📄 pgvlan.c
字号:
//// 8021Q ingress filter
////
// assign fix label
DIRECT_MEMTYPE_CODE char str8021QTitle[] = "Port NonMember Untagged";
DIRECT_MEMTYPE_CODE SFixLabel aSFixLabel8021Q[] = {
{{2,26}, g_strAdvVlanCfg, 0},
{{3,26}, "=", 28},
{{5, 9}, "802.1Q Ingress Filter :"},
{{7, 9}, str8021QTitle, 0},
{{7,45}, str8021QTitle, 0},
{{8, 9}, "-", 27},
{{8,45}, "-", 27},
{{24,2}, g_strHelpMsg, 0}
};
// assign var label
DIRECT_MEMTYPE_CODE SVarLabel aSVarLabel8021Q[] = {
{{9,9}, &g_SIListboxLogPortName, "", ITEM_LISTBOX, REPEAT_TYPE_RECT_MULTI, LINK_TYPE_NONE, ROW_NUM_IN_2_FIELD, 36}
};
// assign var item
DIRECT_MEMTYPE_CODE SItemListbox aSIListboxVlan8021QIF[] = {
{g_pSVlanIngrFlt, 0, 0, 2, g_aszTagDropFwd, 2},
{g_pSVlanIngrFlt, 1, 1, 2, g_aszTagDropFwd, 2},
};
//DIRECT_MEMTYPE_CODE SItemListbox SIListboxVlan8021QIF2 = {
// g_pSVlanIngrFlt,
// 1, 1, 2,
// g_aszTagDropFwd, 2
//};
DIRECT_MEMTYPE_CODE SItem aSItemVlan8021Q[] = {
{{9,17}, aSIListboxVlan8021QIF, "", ITEM_LISTBOX, REPEAT_TYPE_RECT_MULTI, LINK_TYPE_NONE, ROW_NUM_IN_2_FIELD, 36},
{{9,28}, aSIListboxVlan8021QIF+1, "", ITEM_LISTBOX, REPEAT_TYPE_RECT_MULTI, LINK_TYPE_NONE, ROW_NUM_IN_2_FIELD, 36}
};
// action
DIRECT_MEMTYPE_CODE SActItem aSActionVlan8021Q[] = {
{{22, 12}, g_strActionQuit, PAACT_bQuit},
{{22, 22}, g_strActionEdit, PAACT_bEdit},
{{22, 32}, g_strActionSave, PAVLAN_bSaveVlan8021Q},
};
// assign page
DIRECT_MEMTYPE_CODE SPage g_SPageVlan8021Q = {
aSFixLabel8021Q, 8,
aSVarLabel8021Q, 1,
aSItemVlan8021Q, 2,
aSActionVlan8021Q, 3,
PAVLAN_bLoadVlan8021Q
};
/////////////////////////////////////////////////////////////////////////////////////
#define g_pSPageVlan (&g_UCfgBuf.SPageCfg_Vlan)
#define g_byVlanMode (g_UCfgBuf.SPageCfg_Vlan.byVlanMode)
#define g_byValidEntryNum (g_UCfgBuf.SPageCfg_Vlan.byValidEntryNum)
#define g_pSCurGrp (&g_UCfgBuf.SPageCfg_Vlan.SCurGrp)
#define g_awValidGrpIdList (g_UCfgBuf.SPageCfg_Vlan.awValidGrpIdList)
DIRECT_MEMTYPE_CODE BYTE s_abyVlanModePageId[] = {PAGE_VLAN_MODE_DIS, PAGE_VLAN_LIST_P, PAGE_VLAN_LIST_Q};
BOOL PAVLAN_bChangeModePage(void) DIRECT_FUNTYPE_REENT
{
if (g_byCurPageID != s_abyVlanModePageId[g_byVlanMode])
{
// confirm and set vlan mode
char cKey = ENGcPrintMessage("Change mode will clear original VLAN setting! Continue? [y/N]", PRINT_THEN_PAUSE);
if (cKey == 'y' || cKey == 'Y')
{
ENGcPrintMessage("Changing mode...", PRINT_THEN_RETURN);
PIVLAN_vSetVlanMode(g_pSPageVlan);
PIMSG_vPutMsgThenPause(OP_OK);
g_byCurPageID = s_abyVlanModePageId[g_byVlanMode];
g_bDataDirty = 0;
if (g_byVlanMode != VLAN_MODE_DISABLE)
g_byTotalLineNum = g_byValidEntryNum;
}
// restore to current vlan mode in HW
PIVLAN_vGetVlanMode(&g_byVlanMode);
return RELOAD_PAGE;
}
return DONT_RELOAD_PAGE;
}
BOOL PAVLAN_bLoadVlanMode(void) DIRECT_FUNTYPE_REENT
{
PIVLAN_vInitPage(g_pSPageVlan);
if (g_byVlanMode != VLAN_MODE_DISABLE)
{
g_byCurPageID = s_abyVlanModePageId[g_byVlanMode]; // it may not be reloaded and reprinted
g_byTotalLineNum = g_byValidEntryNum;
}
return DONT_RELOAD_PAGE;
}
BOOL PAVLAN_bEditVlanMode(void) DIRECT_FUNTYPE_REENT
{
if (PAACT_bEdit())
return RELOAD_PAGE;
// deal with dynamic page
if (PAVLAN_bChangeModePage())
ENGvPrintPage(); // in this page, changing page may not reload config, just re-print page only
// deal with LINK_TYPE_EDITPAGE
else if (g_byCurKey == KEY_ENTER && g_SCurItem.f2LinkType == LINK_TYPE_EDITPAGE)
{
if (g_byCurPageID == PAGE_VLAN_LIST_P)
g_byCurPageID = PAGE_VLAN_EDIT_P;
else
g_byCurPageID = PAGE_VLAN_EDIT_Q;
return RELOAD_PAGE; // reload cfg and print whole page
}
return DONT_RELOAD_PAGE;
}
BOOL PAVLAN_bAddVlanMode(void) DIRECT_FUNTYPE_REENT
{
if (g_byCurPageID == PAGE_VLAN_LIST_P)
g_byCurPageID = PAGE_VLAN_ADD_P;
else
g_byCurPageID = PAGE_VLAN_ADD_Q;
return RELOAD_PAGE; // reload cfg and print whole page
}
BOOL PAVLAN_bDelVlanMode(void) DIRECT_FUNTYPE_REENT
{
// continue if nothing to del
if (g_byTotalLineNum)
{
if (PAACT_bEdit())
return RELOAD_PAGE;
if (PAVLAN_bChangeModePage())
ENGvPrintPage(); // in this page, changing page may not reload config, just re-print page only
else if (g_byCurKey == KEY_ENTER && g_SCurItem.f2LinkType == LINK_TYPE_EDITPAGE)
{
char cKey = ENGcPrintMessage("Continue deleting? [y/N]", PRINT_THEN_PAUSE);
if (cKey == 'y' || cKey == 'Y')
{
UINT8 byRes;
UINT16 wFailVid;
ENGcPrintMessage("Deleting...", PRINT_THEN_RETURN);
g_pSCurGrp->wVid = g_awValidGrpIdList[g_byCurLineID];
byRes = PIVLAN_byDelGrp(g_pSPageVlan, &wFailVid);
PIMSG_vPutExtMsgThenPause( byRes, wFailVid, PUT_MSG_WITH_PORT_NAME );
g_byTotalLineNum = g_byValidEntryNum;
ENGvPrintPage(); // just reprint
}
}
}
return DONT_RELOAD_PAGE;
}
// vlan group edit
// load config
BOOL PAVLAN_bLoadVlanGrpEdit(void) DIRECT_FUNTYPE_REENT
{
BYTE byErrCode;
g_pSCurGrp->wVid = g_awValidGrpIdList[g_byCurLineID];
byErrCode = PIVLAN_byGetGrp(g_pSPageVlan);
if (byErrCode != OP_OK)
{
PIMSG_vPutMsgThenPause(byErrCode);
g_byCurPageID = g_abyPreviousPageID[g_byCurPageID]; // jump to previous page
return RELOAD_PAGE;
}
g_byTotalLineNum = g_byLogIdNum;
return DONT_RELOAD_PAGE;
}
// save config
static BYTE s_bySaveVlanGrpMsg(BYTE byErrCode, UINT16 wFailVid) DIRECT_FUNTYPE_REENT
{
if (byErrCode == VLAN_OP_UNTAG_BELONG_OTHER_GRP)
PIMSG_vPutExtMsgThenPause(byErrCode, wFailVid, PUT_MSG_WITH_NUM);
else if (byErrCode == VLAN_OP_FOUND_ISO_PORT)
PIMSG_vPutExtMsgThenPause(byErrCode, wFailVid, PUT_MSG_WITH_PORT_NAME);
else
PIMSG_vPutMsgThenPause(byErrCode);
if (byErrCode == OP_OK || byErrCode == VLAN_OP_FOUND_ISO_PORT)
{
g_byCurPageID = g_abyPreviousPageID[g_byCurPageID]; // jump to previous page
return RELOAD_PAGE;
}
return DONT_RELOAD_PAGE;
}
BOOL PAVLAN_bSaveVlanGrpEdit(void) DIRECT_FUNTYPE_REENT
{
BYTE byErrCode;
UINT16 wFailVid;
PIMSG_vPutSavingMsg();
byErrCode = PIVLAN_byEditGrp(g_pSPageVlan, &wFailVid);
return s_bySaveVlanGrpMsg(byErrCode, wFailVid);
}
// vlan group add
// load config
BOOL PAVLAN_bLoadVlanGrpAdd(void) DIRECT_FUNTYPE_REENT
{
STRvMemset(g_pSCurGrp, 0, sizeof(SVlanGrp));
g_byTotalLineNum = g_byLogIdNum;
return DONT_RELOAD_PAGE;
}
// save config
BOOL PAVLAN_bSaveVlanGrpAdd(void) DIRECT_FUNTYPE_REENT
{
BYTE byErrCode;
UINT16 wFailVid;
PIMSG_vPutSavingMsg();
byErrCode = PIVLAN_byInsGrp(g_pSPageVlan, &wFailVid);
return s_bySaveVlanGrpMsg(byErrCode, wFailVid);
}
//// 802.1Q rule
BOOL PAVLAN_bLoadVlan8021Q(void) DIRECT_FUNTYPE_REENT
{
BYTE byVlanMode;
PIVLAN_vGetVlanMode(&byVlanMode);
if (byVlanMode == VLAN_MODE_8021Q)
{
PIVLNFLT_vInitPage(g_pSVlanIngrFlt);
g_byTotalLineNum = g_byLogIdNum;
return DONT_RELOAD_PAGE;
}
else
{
PIMSG_vPutMsgThenPause(VLAN_OP_NOT_8021Q_MODE);
g_byCurPageID = g_abyPreviousPageID[g_byCurPageID]; // jump to previous page
return RELOAD_PAGE;
}
}
BOOL PAVLAN_bSaveVlan8021Q(void) DIRECT_FUNTYPE_REENT
{
PIMSG_vPutSavingMsg();
PIVLNFLT_vSavePage(g_pSVlanIngrFlt);
PIMSG_vPutMsgThenPause(OP_OK);
g_bDataDirty = 0;
return DONT_RELOAD_PAGE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -