📄 pgsmac.c
字号:
/*
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
* All rights reserved.
*
* This software is copyrighted by and is the sole property of
* VIA Networking Technologies, Inc. This software may only be used
* in accordance with the corresponding license agreement. Any unauthorized
* use, duplication, transmission, distribution, or disclosure of this
* software is expressly forbidden.
*
* This software is provided by VIA Networking Technologies, Inc. "as is"
* and any express or implied warranties, including, but not limited to, the
* implied warranties of merchantability and fitness for a particular purpose
* are disclaimed. In no event shall VIA Networking Technologies, Inc.
* be liable for any direct, indirect, incidental, special, exemplary, or
* consequential damages.
*
*
* File: pgsmac.c
*
* Purpose: Static mac table module UI definitions
*
* Author: Freeya Lin
*
* Date: Feb 24, 2004
*
* Functions:
*
* Revision History:
*
*/
#include "eng_act.h"
#include "allpages.h"
#include "pigencfg.h"
#include "cfgstr.h"
#include "gen_act.h"
#include "pimsg.h"
#include "key.h"
#include "str.h"
#include "tty.h"
#include "eng_io.h"
#include "piportmp.h"
#include "pgsmac.h"
#include "pismacgp.h"
#include "pismac.h"
#define SMAC_DUMMY_STR_NUM 10
#define SMAC_POS_COL_OFFSET 27
UINT8 g_bySMacTotalPageNum;
UINT8 g_bySMacLineNumPerPage;
static UINT16 s_u16Fid;
static void s_vUpdateGrpNumPerPage(void);
// assign fix label
SFixLabel aSFixLabelSMacCfg[] = {
{{2,31}, g_strProvSMac, 0},
{{3,31}, "=", 23},
{{24,2}, g_strHelpMsg, 0},
{{6,2}, "SMAC Entry List :", 0},
{{7,2}, "MAC ----- Fid MAC ----- Fid MAC ----- Fid", 0},
{{8,2}, "-", 76},
};
// assign var item
SItemString SIStrGrpSMacMacAddr = {
(char*)g_UCfgBuf.SPageCfg_SMAC.astrGrpMacList,
MAC_STRING_LEN
};
SItemNum SIDecGrpSMacFid = {
(PUINT8)&g_UCfgBuf.SPageCfg_SMAC.awValidGrpFidList[0],
2, 5, 2
};
// all items
SVarLabel aSVarLabelSMacGrpFidList[] = {
{{9,21}, &SIDecGrpSMacFid, "", ITEM_DECNUM, REPEAT_TYPE_RECT_SINGLE, LINK_TYPE_EDITPAGE, ROW_NUM_IN_3_FIELD, SMAC_POS_COL_OFFSET}
};
SItem aSItemSMacGrpList[] = {
{{9,2}, &SIStrGrpSMacMacAddr, g_strEditGrpMsg, ITEM_STRING, REPEAT_TYPE_RECT_SINGLE, LINK_TYPE_EDITPAGE, ROW_NUM_IN_3_FIELD, SMAC_POS_COL_OFFSET}
};
// action
SActItem aSActionSMacGrpList[] = {
{{22, 12}, g_strActionQuit, PAACT_bQuit},
{{22, 22}, g_strActionEdit, PASMAC_bEditSMacGrp},
{{22, 32}, g_strActionAdd, PASMAC_bAddSMacGrp},
{{22, 42}, g_strActionDel, PASMAC_bDelSMacGrp},
{{22, 55}, "<NextPage>", PASMAC_bNextPage}
};
// assign page
SPage g_SPageSMacGrpList = {
aSFixLabelSMacCfg, 6,
aSVarLabelSMacGrpFidList, 1,
aSItemSMacGrpList, 1,
aSActionSMacGrpList, 5,
PASMAC_bLoadSMacGrp
};
// assign fix label
char strTitleSMacAdd[] = "Add ";
char strTitleSMacEdit[] = "Edit";
char strTitleSMac[] = "a Static MAC Entry";
SFixLabel aSFixLabelSMacGrpAdd[] = {
{{2,27}, strTitleSMacAdd, 0},
{{2,31}, strTitleSMac, 0},
{{3,27}, "=", 22},
{{6,13}, "FID :", 0},
{{8,13}, "MAC Address :", 0},
{{10,13}, "Source PortId :", 0},
{{12,13}, "HiPriDmac :", 0},
{{14,13}, "HiPriSmac :", 0},
{{24,2}, g_strHelpMsg, 0}
};
SFixLabel aSFixLabelSMacGrpEdit[] = {
{{2,27}, strTitleSMacEdit, 0},
{{2,32}, strTitleSMac, 0},
{{3,27}, "=", 23},
{{6,13}, "FID :", 0},
{{8,13}, "MAC Address :", 0},
{{10,13}, "Source PortId :", 0},
{{12,13}, "HiPriDmac :", 0},
{{14,13}, "HiPriSmac :", 0},
{{24,2}, g_strHelpMsg, 0}
};
char astrSMACInputMacStrBuff[SMAC_DUMMY_STR_NUM*(MAC_STRING_LEN+1)];
// assign var label
SItemString SIStrSMacMacConf = {
(char*)astrSMACInputMacStrBuff,
MAC_STRING_LEN
};
SItemNum SIDecNumSMacFid = {
(PUINT8)&g_UCfgBuf.SPageCfg_SMAC.SCurGrp.u16Fid,
2, 4, 0
};
SItemVarListbox SIListboxSMacPort = {
(PUINT8)&g_UCfgBuf.SPageCfg_SMAC.SCurGrp.bySrcId,
0, 7, 0,
g_aszPortNameTable, &(g_UCfgBuf.SPageCfg_SMAC.SCurGrp.SStrTblMap)
};
SItemListbox aSIListboxSMacGrp[] = {
{(PUINT8)&g_UCfgBuf.SPageCfg_SMAC.SCurGrp.bHiPriDmac, 0, 0, 0, g_aszEnDisCfg, 2},
{(PUINT8)&g_UCfgBuf.SPageCfg_SMAC.SCurGrp.bHiPriSmac, 0, 0, 0, g_aszEnDisCfg, 2}
};
SVarLabel aSVarLabelSMacGrp[] = {
{{ 6,29}, &SIDecNumSMacFid, "", ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE},
{{ 8,29}, &SIStrSMacMacConf, "", ITEM_STRING, REPEAT_TYPE_NONE, LINK_TYPE_NONE}
};
SItem aSItemSMacGrp[] = {
{{ 6,29}, &SIDecNumSMacFid, "", ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE},
{{ 8,29}, &SIStrSMacMacConf, "", ITEM_STRING, REPEAT_TYPE_NONE, LINK_TYPE_NONE},
{{ 10,29}, &SIListboxSMacPort, "", ITEM_VAR_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_NONE},
{{ 12,29}, aSIListboxSMacGrp, "", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},
{{ 14,29}, aSIListboxSMacGrp+1, "", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX}
};
// action
SActItem aSActionSMacGrpEdit[] = {
{{22, 12}, g_strActionQuit, PAACT_bQuit},
{{22, 22}, g_strActionEdit, PAACT_bEdit},
{{22, 32}, g_strActionSave, PASMAC_bSaveSMacGrpEdit}
};
// assign page
SPage g_SPageSMacGrpEdit = {
aSFixLabelSMacGrpEdit, 9,
aSVarLabelSMacGrp, 2,
aSItemSMacGrp+2, 3,
aSActionSMacGrpEdit, 3,
PASMAC_bLoadSMacGrpEdit
};
//// add a smac entry
SActItem aSActionSMacGrpAdd[] = {
{{22, 12}, g_strActionQuit, PAACT_bQuit},
{{22, 22}, g_strActionEdit, PAACT_bEdit},
{{22, 32}, g_strActionSave, PASMAC_bSaveSMacGrpAdd},
};
SPage g_SPageSMacGrpAdd = {
aSFixLabelSMacGrpAdd, 9,
NULL, 0,
aSItemSMacGrp, 5,
aSActionSMacGrpAdd, 3,
PASMAC_bLoadSMacGrpAdd
};
SPage g_SPageSMacGrpAddNoFid = {
aSFixLabelSMacGrpAdd, 9,
aSVarLabelSMacGrp, 1,
aSItemSMacGrp+1, 4,
aSActionSMacGrpAdd, 3,
PASMAC_bLoadSMacGrpAdd
};
/////////////////////////////////////////////////////////////////////////////////////
#define g_pSPageSMac (&g_UCfgBuf.SPageCfg_SMAC)
#define g_bySMacMode (g_UCfgBuf.SPageCfg_SMAC.byMode)
#define g_wSMacValidEntryNum (g_UCfgBuf.SPageCfg_SMAC.wValidEntryNum)
#define g_pSSMacCurGrp (&g_UCfgBuf.SPageCfg_SMAC.SCurGrp)
BOOL PASMAC_bNextPage(void)
{
g_byMultiPageNo ++;
g_byMultiPageNo %= g_bySMacTotalPageNum;
return RELOAD_PAGE; // reload cfg and print whole page
}
BOOL PASMAC_bLoadSMacGrp(void)
{
PISMAC_vInitPage(g_pSPageSMac);
g_byCurPageID = PAGE_PROV_SMAC_LIST;
s_vUpdateGrpNumPerPage();
return DONT_RELOAD_PAGE;
}
static void s_vUpdateGrpNumPerPage(void)
{
g_bySMacLineNumPerPage = ((80/SMAC_POS_COL_OFFSET + ((80%SMAC_POS_COL_OFFSET) ? 1 : 0))*ROW_NUM_IN_3_FIELD);
if (g_wSMacValidEntryNum) {
if (g_wSMacValidEntryNum % g_bySMacLineNumPerPage) {
g_bySMacTotalPageNum = ((g_wSMacValidEntryNum / g_bySMacLineNumPerPage) + 1);
g_wTotalLineNum = ((g_byMultiPageNo < (g_bySMacTotalPageNum-1)) ? g_bySMacLineNumPerPage : (g_wSMacValidEntryNum % g_bySMacLineNumPerPage));
}
else {
g_bySMacTotalPageNum = (g_wSMacValidEntryNum / g_bySMacLineNumPerPage);
g_wTotalLineNum = g_bySMacLineNumPerPage;
}
}
else { //grp num = 0
g_bySMacTotalPageNum = 1;
g_wTotalLineNum = 0;
}
}
BOOL PASMAC_bEditSMacGrp(void)
{
if (g_wTotalLineNum > 0) //not empty entries
{
PAACT_bEdit();
// deal with LINK_TYPE_EDITPAGE
if (g_byCurKey == MK_ENTER && g_SCurItem.f2LinkType == LINK_TYPE_EDITPAGE)
{
if (g_byCurPageID == PAGE_PROV_SMAC_LIST)
g_byCurPageID = PAGE_PROV_SMAC_EDIT;
return RELOAD_PAGE; // reload cfg and print whole page
}
}
return DONT_RELOAD_PAGE;
}
BOOL PASMAC_bAddSMacGrp(void)
{
UINT8 byVlanMode;
if (g_byCurPageID == PAGE_PROV_SMAC_LIST) {
PIVLAN_vGetVlanMode(&byVlanMode);
s_u16Fid = 0;
if ((byVlanMode == VLAN_MODE_8021Q) || (byVlanMode == VLAN_MODE_PROTOBASE) )
g_byCurPageID = PAGE_PROV_SMAC_ADD;
else { //disable or portbased vlan
if (byVlanMode == VLAN_MODE_PORTBASE)
s_u16Fid = PORTBASE_VLAN_FID;
g_byCurPageID = PAGE_PROV_SMAC_ADD_NOFID;
}
}
return RELOAD_PAGE; // reload cfg and print whole page
}
BOOL PASMAC_bDelSMacGrp(void)
{
UINT8 u8OldTmp;
// continue if nothing to del
if (g_wTotalLineNum)
{
if (PAACT_bEdit())
return RELOAD_PAGE;
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_pSSMacCurGrp->azMacAddr, g_pSPageSMac->astrGrpMacList+(g_wCurLineID+g_byMultiPageNo*g_bySMacLineNumPerPage)*(MAC_STRING_LEN+1));
g_pSSMacCurGrp->u16Fid = g_pSPageSMac->awValidGrpFidList[(g_wCurLineID+g_byMultiPageNo*g_bySMacLineNumPerPage)];
byRes = PISMACGP_byDelGrp(g_pSPageSMac);
PIMSG_vPutExtMsgThenPause( byRes, UINT16_MAX, PUT_MSG_WITH_PORT_NAME );
//for deleting all grps in this page, so we must go back to previous page automatically
u8OldTmp = g_bySMacTotalPageNum;
s_vUpdateGrpNumPerPage();
if (u8OldTmp != g_bySMacTotalPageNum) {
g_byMultiPageNo --;
g_byMultiPageNo %= g_bySMacTotalPageNum;
}
ENGvPrintPage(); // just reprint
}
}
}
return DONT_RELOAD_PAGE;
}
// static mac entry edit
// load config
BOOL PASMAC_bLoadSMacGrpEdit(void)
{
UINT8 byErrCode;
//load ui mac string to current grp mac string
STR_iStrcpy(g_pSSMacCurGrp->azMacAddr, g_pSPageSMac->astrGrpMacList+(g_wCurLineID+g_byMultiPageNo*g_bySMacLineNumPerPage)*(MAC_STRING_LEN+1));
g_pSSMacCurGrp->u16Fid = g_pSPageSMac->awValidGrpFidList[(g_wCurLineID+g_byMultiPageNo*g_bySMacLineNumPerPage)];
byErrCode = PISMACGP_byGetGrp(g_pSPageSMac);
//load current grp mac string to ui string array[0]
STR_iStrcpy(astrSMACInputMacStrBuff, g_pSSMacCurGrp->azMacAddr);
if (byErrCode != OP_OK)
{
PIMSG_vPutMsgThenPause(byErrCode);
g_byCurPageID = g_abyPreviousPageID[g_byCurPageID]; // jump to previous page
return RELOAD_PAGE;
}
PISMACGP_vInitAddOrEditGrpPage(g_pSPageSMac);
g_wTotalLineNum = g_byLogIdNum;
return DONT_RELOAD_PAGE;
}
// save config
static UINT8 s_bySaveSMacGrpMsg(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;
}
BOOL PASMAC_bSaveSMacGrpEdit(void)
{
UINT8 byErrCode;
PIMSG_vPutSavingMsg();
byErrCode = PISMACGP_byEditGrp(g_pSPageSMac);
return s_bySaveSMacGrpMsg(byErrCode);
}
// static mac entry add
// load config
BOOL PASMAC_bLoadSMacGrpAdd(void)
{
STR_pvMemset(g_pSSMacCurGrp, 0, sizeof(SSMacEntryPage));
STR_iStrcpy(g_pSSMacCurGrp->azMacAddr, "0:0:0:0:0:0");
//load current grp mac string to ui string array[0]
STR_iStrcpy(astrSMACInputMacStrBuff, g_pSSMacCurGrp->azMacAddr);
g_pSSMacCurGrp->u16Fid = s_u16Fid;
PISMACGP_vInitAddOrEditGrpPage(g_pSPageSMac);
g_wTotalLineNum = g_byLogIdNum;
return DONT_RELOAD_PAGE;
}
// save config
BOOL PASMAC_bSaveSMacGrpAdd(void)
{
UINT8 byErrCode;
PIMSG_vPutSavingMsg();
//load ui string array[0] to current grp mac string
STR_iStrcpy(g_pSSMacCurGrp->azMacAddr, astrSMACInputMacStrBuff);
byErrCode = PISMACGP_byInsGrp(g_pSPageSMac);
return s_bySaveSMacGrpMsg(byErrCode);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -