📄 pgacl.c
字号:
};
SItemString aSIStringIpCfg[] = {
{g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLIpv4GrpPgBuf.szSIp, IP_STRING_LEN},
{g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLIpv4GrpPgBuf.szSIpMsk, IP_STRING_LEN},
{g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLIpv4GrpPgBuf.szDIp, IP_STRING_LEN},
{g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLIpv4GrpPgBuf.szDIpMsk, IP_STRING_LEN}
};
SVarLabel aSVarLabelACLGrp_Ipv4[] = {
{{5,14}, &aSIDecNumACLGrp[0], "", ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//group id
{{5,21}, &aSIDecNumACLGrp[1], "", ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE}//max group id
};
SVarLabel aSVarLabelACLGrp_NIpv4[] = {
{{7,39}, &aSIDecNumACLGrp[0], "", ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//group id
{{7,46}, &aSIDecNumACLGrp[1], "", ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE}//max group id
};
//Assign items for Ipv4 based group with TCP protocol
SItem aSItemACLGrp_Ipv4TCP[] = {
{{ 5,14}, &aSIDecNumACLGrp[0], " ", ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//group id
{{7,13}, &aSItemListboxACLGrp[0], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//action
{{11,9}, &aSItemListboxACLGrp[1], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//vlan
{{12,10}, &aSIDecNumACLGrp[2], " ", ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE}, //vid
{{14,16}, &aSItemListboxACLGrp[4], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//fragement check
{{16,19}, &aSItemListboxACLGrp[2], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//Src Ip enable
{{17,19}, &aSIStringIpCfg[0], " ", ITEM_STRING, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//Src Ip
{{18,19}, &aSIStringIpCfg[1], " ", ITEM_STRING, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//Src Ip Msk
{{11,57}, &aSItemListboxACLGrp[3], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//Dst Ip enable
{{12,57}, &aSIStringIpCfg[2], " ", ITEM_STRING, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//Dsc Ip
{{13,57}, &aSIStringIpCfg[3], " ", ITEM_STRING, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//Dsc Ip Msk
{{16,54}, &aSItemListboxACLGrp[7], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//L4 protocol
{{16,71}, &aSIDecNumACLGrp[5], sg_strEditL4ProtoMsg, ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//Another L4 protocol
{{17,54}, &aSItemListboxACLGrp[5], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//TCP Dst port
{{17,71}, &aSIDecNumACLGrp[3], sg_strEditTCPDstPortMsg, ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//Another TCP Dst port
};
//Assign items for Ipv4 based group with UDP protocol
SItem aSItemACLGrp_Ipv4UDP[] = {
{{ 5,14}, &aSIDecNumACLGrp[0], " ", ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//group id
{{7,13}, &aSItemListboxACLGrp[0], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//action
{{11,9}, &aSItemListboxACLGrp[1], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//vlan
{{12,10}, &aSIDecNumACLGrp[2], " ", ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE}, //vid
{{14,16}, &aSItemListboxACLGrp[4], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//fragement check
{{16,19}, &aSItemListboxACLGrp[2], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//Src Ip enable
{{17,19}, &aSIStringIpCfg[0], " ", ITEM_STRING, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//Src Ip
{{18,19}, &aSIStringIpCfg[1], " ", ITEM_STRING, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//Src Ip Msk
{{11,57}, &aSItemListboxACLGrp[3], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//Dst Ip enable
{{12,57}, &aSIStringIpCfg[2], " ", ITEM_STRING, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//Dsc Ip
{{13,57}, &aSIStringIpCfg[3], " ", ITEM_STRING, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//Dsc Ip Msk
{{16,54}, &aSItemListboxACLGrp[7], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//L4 protocol
{{16,71}, &aSIDecNumACLGrp[5], sg_strEditL4ProtoMsg, ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//Another L4 protocol
{{17,54}, &aSItemListboxACLGrp[6], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//UDP Dst port
{{17,71}, &aSIDecNumACLGrp[4], sg_strEditUDPDstPortMsg, ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE}//Another UDP Dst port
};
////Assign items for Non-Ipv4 based group
SItem aSItemACLGrp_NIpv4[] = {
{{ 7,39}, &aSIDecNumACLGrp[0], " ", ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE},//group id
{{9,38}, &aSItemListboxACLGrp[0], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//action
{{13,40}, &aSItemListboxACLGrp[1], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//vlan
{{14,41}, &aSIDecNumACLGrp[2], " ", ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE}, //vid
{{16,40}, &aSItemListboxACLGrp[8], " ", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},//ether protocol
{{17,42}, &aSIHexNumACLGrp[0], sg_strEditEtherTypeMsg, ITEM_HEXNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE}//ether protocol
};
//Action
SActItem aSActionACLGrpEdit[] = {
{{22, 12}, g_strActionQuit, PAACT_bQuit},
#if ACL_OP_EDIT_EXIST
{{22, 22}, g_strActionEdit, PAACT_bACLEditGrpContent},
{{22, 32}, g_strActionSave, PAACL_bSaveACLGrpEdit},
#endif
};
SActItem aSActionACLGrpAdd[] = {
{{22, 12}, g_strActionQuit, PAACT_bQuit},
{{22, 22}, g_strActionEdit, PAACT_bACLEditGrpContent},
{{22, 32}, g_strActionSave, PAACL_bSaveACLGrpAdd},
};
//Page
//Ipv4 based edit page
SPage g_SPageACLEdit_Ipv4 = {
aSFixLabelACLGrpEdit_Ipv4, 21,
aSVarLabelACLGrp_Ipv4, 1,
aSItemACLGrp_Ipv4TCP+1, 12,
#if ACL_OP_EDIT_EXIST
aSActionACLGrpEdit, 3,
#else
aSActionACLGrpEdit, 1, //Only list the configuration of a group
#endif
PAACL_bLoadACLGrpEdit //Load group
};
//Ipv4 based ACL group with TCP protocol edit page
SPage g_SPageACLEdit_Ipv4TCP = {
aSFixLabelACLGrpEdit_Ipv4TCP, 23,
aSVarLabelACLGrp_Ipv4, 1,
aSItemACLGrp_Ipv4TCP+1, 14,
#if ACL_OP_EDIT_EXIST
aSActionACLGrpEdit, 3,
#else
aSActionACLGrpEdit, 1, //Only list the configuration of a group
#endif
PAACL_bLoadACLGrpEdit //Load group
};
//Ipv4 based ACL group with UDP protocol edit page
SPage g_SPageACLEdit_Ipv4UDP = {
aSFixLabelACLGrpEdit_Ipv4UDP, 23,
aSVarLabelACLGrp_Ipv4, 1,
aSItemACLGrp_Ipv4UDP+1, 14,
#if ACL_OP_EDIT_EXIST
aSActionACLGrpEdit, 3,
#else
aSActionACLGrpEdit, 1, //Only list the configuration of a group
#endif
PAACL_bLoadACLGrpEdit //the LOAD function
};
//Ipv4 based add page
SPage g_SPageACLAdd_Ipv4 = {
aSFixLabelACLGrpEdit_Ipv4+3, 22,
aSVarLabelACLGrp_Ipv4+1, 1,
aSItemACLGrp_Ipv4TCP, 13,
aSActionACLGrpAdd, 3,
PAACL_bLoadACLGrpAdd //Init group
};
//Ipv4 based ACL group with TCP protocol add page
SPage g_SPageACLAdd_Ipv4TCP = {
aSFixLabelACLGrpEdit_Ipv4TCP+3, 24,
aSVarLabelACLGrp_Ipv4+1, 1,
aSItemACLGrp_Ipv4TCP, 15,
aSActionACLGrpAdd, 3,
PAACL_bLoadACLGrpAdd //Init group
};
//Ipv4 based ACL group with UDP protocol add page
SPage g_SPageACLAdd_Ipv4UDP = {
aSFixLabelACLGrpEdit_Ipv4UDP+3, 24,
aSVarLabelACLGrp_Ipv4+1, 1,
aSItemACLGrp_Ipv4UDP, 15,
aSActionACLGrpAdd, 3,
PAACL_bLoadACLGrpAdd //the LOAD function
};
//Non-Ipv4 based edit page
SPage g_SPageACLEdit_NIpv4 = {
aSFixLabelACLGrpEdit_NIpv4, 13,
aSVarLabelACLGrp_NIpv4, 1,
aSItemACLGrp_NIpv4+1, 5,
#if ACL_OP_EDIT_EXIST
aSActionACLGrpEdit, 3,
#else
aSActionACLGrpEdit, 1, //Only list the configuration of a group
#endif
PAACL_bLoadACLGrpEdit //the LOAD function
};
//Non-Ipv4 based add page
SPage g_SPageACLAdd_NIpv4 = {
aSFixLabelACLGrpEdit_NIpv4+3, 14,
aSVarLabelACLGrp_NIpv4+1, 1,
aSItemACLGrp_NIpv4, 6,
aSActionACLGrpAdd, 3,
PAACL_bLoadACLGrpAdd //the LOAD function
};
/////////////////////////////////////////////////////////////////////////////////////
#define g_pSPageACL (&g_UCfgBuf.SPageCfg_ACL)
#define g_byACLMode (g_UCfgBuf.SPageCfg_ACL.byACLMode)
#define g_byACLSpace (g_UCfgBuf.SPageCfg_ACL.byACLSpace)
#define g_wValidEntryNum (g_UCfgBuf.SPageCfg_ACL.wValidEntryNum)
#define g_pSCurGrp (&g_UCfgBuf.SPageCfg_ACL.SCurGrp)
#define g_abyValidGrpIdList (g_UCfgBuf.SPageCfg_ACL.abyValidGrpIdList)
static UINT8 sg_abyACLIpv4EditPageID[] = {PAGE_ACL_EDIT_IPV4, PAGE_ACL_EDIT_IPV4_TCP, PAGE_ACL_EDIT_IPV4_UDP};
static UINT8 sg_abyACLIpv4AddPageID[] = {PAGE_ACL_ADD_IPV4, PAGE_ACL_ADD_IPV4_TCP, PAGE_ACL_ADD_IPV4_UDP};
//Functions
BOOL PAACL_bNextPage(void)
{
g_byMultiPageNo ++;
g_byMultiPageNo %= sg_byACLTotalPageNum;
return RELOAD_PAGE; // Reload cfg and print whole page
}
static void s_vUpdateGrpNumPerPage(void)
{
sg_byACLLineNumPerPage = ((80/ACL_POS_COL_OFFSET + ((80%ACL_POS_COL_OFFSET) ? 1 : 0))*ROW_NUM_IN_3_FIELD);
if (g_wValidEntryNum) {
if (g_wValidEntryNum % sg_byACLLineNumPerPage) {
sg_byACLTotalPageNum = ((g_wValidEntryNum / sg_byACLLineNumPerPage) + 1);
g_wTotalLineNum = ((g_byMultiPageNo < (sg_byACLTotalPageNum-1)) ? sg_byACLLineNumPerPage : (g_wValidEntryNum % sg_byACLLineNumPerPage));
}
else {
sg_byACLTotalPageNum = (g_wValidEntryNum / sg_byACLLineNumPerPage);
g_wTotalLineNum = sg_byACLLineNumPerPage;
}
}
else { //Group num = 0
sg_byACLTotalPageNum = 1;
g_wTotalLineNum = 0;
}
}
//Patch hardware
//Lode vlan mode to detect whether vlan is disabled
//If vlan is disabled, jump to previous page
//Because ACL can not work then VLAN is disabled in current version of hardware
BOOL PAACL_bLoadVlanMode(void)
{
UINT8 byVlanMode;
PIVLAN_vGetVlanMode(&byVlanMode);
if (byVlanMode == VLAN_MODE_DISABLE) {
PIMSG_vPutMsgThenPause(ACL_OP_VLAN_MODE_DISABLED);
g_byCurPageID = g_abyPreviousPageID[g_byCurPageID]; // jump to previous page
return RELOAD_PAGE;
}
return DONT_RELOAD_PAGE;
}
//load all Ipv4 based ACL group
BOOL PAACL_bLoadACLIpv4Grp(void)
{
PIACL_vInitPage(g_pSPageACL, FALSE, TRUE);//only load Ipv4 Group
s_vUpdateGrpNumPerPage();
return DONT_RELOAD_PAGE;
}
BOOL PAACL_bLoadACLNonIpv4Grp(void)
{
PIACL_vInitPage(g_pSPageACL, FALSE, FALSE);//only load non_Ipv4 Group
s_vUpdateGrpNumPerPage();
return DONT_RELOAD_PAGE;
}
BOOL PAACL_bEditACLGrp(void)
{
if (g_wTotalLineNum) { //continue if no group exist
if (PAACT_bEdit())
return RELOAD_PAGE;
// Deal with LINK_TYPE_EDITPAGE
else if (g_byCurKey == MK_ENTER && g_SCurItem.f2LinkType == LINK_TYPE_EDITPAGE) {
if (g_byCurPageID==PAGE_ACL_LIST_IPV4)
g_byCurPageID = PAGE_ACL_EDIT_IPV4; //The IPV4 edit page id
else
g_byCurPageID = PAGE_ACL_EDIT_NON_IPV4; //The NON_IPV4 edit page id
return RELOAD_PAGE; // reload cfg and print whole page
}
}
return DONT_RELOAD_PAGE;
}
BOOL PAACL_bAddACLGrp(void)
{
if (g_byCurPageID==PAGE_ACL_LIST_IPV4)
g_byCurPageID = PAGE_ACL_ADD_IPV4;//The IPV4 add page id
else
g_byCurPageID = PAGE_ACL_ADD_NON_IPV4;//The NON_IPV4 add page id
return RELOAD_PAGE; // reload cfg and print whole page
}
BOOL PAACL_bDelACLGrp(void)
{
UINT8 u8OldTmp;
// continue if nothing to del
if (g_wTotalLineNum) {
if (PAACT_bEdit())
return RELOAD_PAGE;
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);
g_pSCurGrp->u8GrpId = g_abyValidGrpIdList[(g_wCurLineID+g_byMultiPageNo*sg_byACLLineNumPerPage)];
byRes = PIACL_byDelGrp(g_pSPageACL);
PIMSG_vPutMsgThenPause(byRes);
//for deleting all grps in this page, so we must go back to previous page automatically
u8OldTmp = sg_byACLTotalPageNum;
s_vUpdateGrpNumPerPage();
if (u8OldTmp != sg_byACLTotalPageNum) {
g_byMultiPageNo --;
g_byMultiPageNo %= sg_byACLTotalPageNum;
}
ENGvPrintPage(); // Reprint page
}
}
}
return RELOAD_PAGE;
}
// ACL group edit
// load config
BOOL PAACL_bLoadACLGrpEdit(void)
{
UINT8 byErrCode;
g_pSCurGrp->u8GrpId = g_abyValidGrpIdList[(g_wCurLineID+g_byMultiPageNo*sg_byACLLineNumPerPage)];
byErrCode = PIACL_byGetCurPageGrp(g_pSPageACL);
if (byErrCode != OP_OK) {
PIMSG_vPutMsgThenPause(byErrCode);
g_byCurPageID = g_abyPreviousPageID[g_byCurPageID];
return RELOAD_PAGE;
}
PAACL_bChangePage();
return DONT_RELOAD_PAGE;
}
//ACL group add
BOOL PAACL_bLoadACLGrpAdd(void)
{
STR_pvMemset(g_pSCurGrp, 0, sizeof(SACLGrpPageCfg));
if (g_byCurPageID == PAGE_ACL_ADD_IPV4) { //Add a IPV4 based group
g_pSCurGrp->bIsIpv4=TRUE;
STR_pvMemcpy(g_pSCurGrp->UACLPageCfgBuf.SACLIpv4GrpPgBuf.szSIp,"0.0.0.0",IP_STRING_LEN+1);
STR_pvMemcpy(g_pSCurGrp->UACLPageCfgBuf.SACLIpv4GrpPgBuf.szSIpMsk,"255.255.255.255",IP_STRING_LEN+1);
STR_pvMemcpy(g_pSCurGrp->UACLPageCfgBuf.SACLIpv4GrpPgBuf.szDIp,"0.0.0.0",IP_STRING_LEN+1);
STR_pvMemcpy(g_pSCurGrp->UACLPageCfgBuf.SACLIpv4GrpPgBuf.szDIpMsk,"255.255.255.255",IP_STRING_LEN+1);
}
else { //Add a NON-IPV4 based group
g_pSCurGrp->bIsIpv4=FALSE;
STR_pvMemset(&g_pSCurGrp->UACLPageCfgBuf.SACLNonIpv4GrpPgBuf, 0, sizeof(struct SACLNonIpv4GrpPageCfg));
}
return DONT_RELOAD_PAGE;
}
BOOL PAACL_bChangePage(void)
{
UINT8 byPageIdIndex = 0;
PUINT8 pabyPageIDBuf = NULL;
//First make sure now adding a Ipv4 based ACL group,
//Or editing a Ipv4 based ACL group, Otherwise will not change page.
if (g_byCurPageID >= PAGE_ACL_EDIT_IPV4 && g_byCurPageID <= PAGE_ACL_EDIT_IPV4_UDP)
pabyPageIDBuf = sg_abyACLIpv4EditPageID;
else if (g_byCurPageID >= PAGE_ACL_ADD_IPV4 && g_byCurPageID <= PAGE_ACL_ADD_IPV4_UDP)
pabyPageIDBuf = sg_abyACLIpv4AddPageID;
byPageIdIndex = s_byGetACLIpv4PageIDIndex(g_pSCurGrp->UACLPageCfgBuf.SACLIpv4GrpPgBuf.byL4ProtoIndex);
if (pabyPageIDBuf != NULL)
if (g_byCurPageID != pabyPageIDBuf[byPageIdIndex]) {
g_byCurPageID = pabyPageIDBuf[byPageIdIndex];
return RELOAD_PAGE;
}
return DONT_RELOAD_PAGE;
}
BOOL PAACT_bACLEditGrpContent(void)
{
if (PAACT_bEdit())
return RELOAD_PAGE;
// deal with dynamic page
if (PAACL_bChangePage())
ENGvPrintPage(); //re-print page
return DONT_RELOAD_PAGE;
}
BOOL PAACL_bSaveACLGrpEdit(void)
{
UINT8 byErrCode;
PIMSG_vPutSavingMsg();//print saving message
byErrCode=PIACL_byEditGrp(g_pSPageACL);
//Operation OK
return s_bySaveACLGrpMsg(byErrCode);
}
BOOL PAACL_bSaveACLGrpAdd(void)
{
UINT8 byErrCode;
PIMSG_vPutSavingMsg();
byErrCode = PIACL_byInsGrp(g_pSPageACL);
return s_bySaveACLGrpMsg(byErrCode);
}
//Error message in saving a group
static UINT8 s_bySaveACLGrpMsg(UINT8 byErrCode)
{
PIMSG_vPutMsgThenPause(byErrCode);
if (byErrCode == OP_OK){
g_byCurPageID = g_abyPreviousPageID[g_byCurPageID];
return RELOAD_PAGE;
}
return DONT_RELOAD_PAGE;
}
//Trans L4 protocol to Page ID Index of array
//sg_abyACLIpv4EditPageID[] and sg_abyACLIpv4AddPageID[]
static UINT8 s_byGetACLIpv4PageIDIndex(UINT8 byL4ProtolIndex)
{
UINT8 byPageIdIndex = 0; //byPageIdIndex =0 Normal L4 Protolcol(exclude TCP and UDP) or None L4 Protolcol is set
//byPageIdIndex =1 L4 Protolcol is TCP
//byPageIdIndex =2 L4 Protolcol is UDP
if (g_abyL4ProtoVal[byL4ProtolIndex] == L4_PROTOCOL_TCP )
byPageIdIndex = 1; //TCP
else if (g_abyL4ProtoVal[byL4ProtolIndex] == L4_PROTOCOL_UDP )
byPageIdIndex = 2; //UDP
else
byPageIdIndex = 0; //Normal L4 Protolcol(exclude TCP and UDP) or None L4 Protolcol is set
return byPageIdIndex;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -