📄 pgacl.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: pgacl.c
*
* Purpose: Acl UI definitions
*
* Author: Tim Feng
*
* Date: Nov 30, 2005
*
* Functions:
*
* Revision History:
*
*/
#include "engine.h"
#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 "pimsg.h"
#include "swsys.h"
#include "pivlnmod.h"
#include "pgacl.h"
#include "piaclgrp.h"
/*--------------------- Static Definitions -------------------------*/
#define ACL_OP_EDIT_EXIST FALSE
#define ACL_POS_COL_OFFSET 12
/*--------------------- Static Classes ----------------------------*/
/*--------------------- Static Variables --------------------------*/
static UINT8 sg_byACLTotalPageNum;
static UINT8 sg_byACLLineNumPerPage;
char sg_strListGrpMsg[] = "Press ENTER to list/delete a group";
char sg_strEditL4ProtoMsg[] = "Set value of L4 protocol between 0~255";
char sg_strEditTCPDstPortMsg[] = "Set value of TCP port between 0~65535";
char sg_strEditUDPDstPortMsg[] = "Set value of UDP port between 0~65535";
char sg_strEditEtherTypeMsg[] = "Set value of Ether Type between 0~0xFFFF";
/*--------------------- Static Functions --------------------------*/
static UINT8 s_bySaveACLGrpMsg(UINT8 byErrCode);
static UINT8 s_byGetACLIpv4PageIDIndex(UINT8 byL4ProtolIndex);
/*--------------------- Static Macros -----------------------------*/
#if defined(__LITTLE_ENDIAN)
#define SBIT_OF_LSB_IN_BOOL 0 //start bit of the least significant byte in BOOL
#define EBIT_OF_LSB_IN_BOOL 7 //end bit of the least significant byte in BOOL
#else
#define SBIT_OF_LSB_IN_BOOL ((sizeof(BOOL)-1)*8) //start bit of the least significant byte in BOOL
#define EBIT_OF_LSB_IN_BOOL (sizeof(BOOL)*8-1) //end bit of the least significant byte in BOOL
#endif
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
//ACL main menu
//fix label
SFixLabel aSFixLabelACLCfg[] = {
{{2,29}, g_strACLCfg, 0},
{{3,29}, "=", 19},
{{24,2}, g_strHelpMsg, 0}
};
SFixLabel aSFixLabelACLList_Ipv4[] = {
{{2,26}, g_strACLIpv4Cfg, 0},
{{3,26}, "=", 22},
{{24,2}, g_strHelpMsg, 0},
{{5,2},"ACL Group List :",0},
{{6,2}, "-", 76},
{{7,2},"Group ID:",0},
{{7,14},"Group Name:",0}
};
SFixLabel aSFixLabelACLList_NIpv4[] = {
{{2,25}, g_strACLNonIpv4Cfg, 0},
{{3,25}, "=", 26},
{{24,2}, g_strHelpMsg, 0},
{{5,2},"ACL Group List :",0},
{{6,2}, "-", 76},
{{7,2},"Group ID:",0},
{{7,14},"Group Name:",0}
};
// Items
SItemNum SIDecACLEntryID = {
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.abyValidGrpIdList[0],
1, 4, 1
};
SItem aSItemACLList[] = {
#if ACL_OP_EDIT_EXIST
{{7,2}, &SIDecACLEntryID, g_strEditGrpMsg, ITEM_DECNUM, REPEAT_TYPE_RECT_SINGLE, LINK_TYPE_EDITPAGE, ROW_NUM_IN_3_FIELD, ACL_POS_COL_OFFSET}
#else
{{7,2}, &SIDecACLEntryID,sg_strListGrpMsg, ITEM_DECNUM, REPEAT_TYPE_RECT_SINGLE, LINK_TYPE_EDITPAGE, ROW_NUM_IN_3_FIELD, ACL_POS_COL_OFFSET}
#endif
};
//Action
SActItem aSActionACLList[] = {
{{22, 12}, g_strActionQuit, PAACT_bQuit},
#if ACL_OP_EDIT_EXIST
{{22, 22}, g_strActionEdit, PAACL_bEditACLGrp},
{{22, 32}, g_strActionAdd, PAACL_bAddACLGrp},
{{22, 42}, g_strActionDel, PAACL_bDelACLGrp},
{{22, 55}, "<NextPage>", PAACL_bNextPage}
#else
{{22, 22}, "<List>", PAACL_bEditACLGrp},
{{22, 32}, g_strActionAdd, PAACL_bAddACLGrp},
{{22, 42}, g_strActionDel, PAACL_bDelACLGrp},
{{22, 55}, "<NextPage>", PAACL_bNextPage}
#endif
};
SItemPageSel aSIPageSelACLMain[] = {
{g_strACLIpv4Cfg, PAGE_ACL_LIST_IPV4},
{g_strACLNonIpv4Cfg, PAGE_ACL_LIST_NON_IPV4},
{g_strRtnToMain, PAGE_MAIN_MENU}
};
SItem aSItemACLMain[] = {
{{5,26}, aSIPageSelACLMain, "", ITEM_MENU_PAGESEL, REPEAT_TYPE_NONE, LINK_TYPE_EDITPAGE},
{{5+(1*ITEM_INTERVAL),26}, aSIPageSelACLMain+1, "", ITEM_MENU_PAGESEL, REPEAT_TYPE_NONE, LINK_TYPE_EDITPAGE},
{{5+(2*ITEM_INTERVAL),26}, aSIPageSelACLMain+2, "", ITEM_MENU_PAGESEL, REPEAT_TYPE_NONE, LINK_TYPE_EDITPAGE},
};
SPage g_SPageACLMainMenu =
{
aSFixLabelACLCfg, 3,
NULL, 0,
aSItemACLMain, 3,
NULL, 0,
PAACL_bLoadVlanMode
};
SPage g_SPageACLList_Ipv4 = {
aSFixLabelACLList_Ipv4, 5,
NULL, 0,
aSItemACLList, 1,
aSActionACLList,5,
PAACL_bLoadACLIpv4Grp //load list function
};
SPage g_SPageACLList_NIpv4 = {
aSFixLabelACLList_NIpv4, 5,
NULL, 0,
aSItemACLList, 1,
aSActionACLList,5,
PAACL_bLoadACLNonIpv4Grp //load list function
};
///////////////////////////////////////////////////////////////////////
//ACL add page & edit page
//FIX LABEL
// Assign fix label
char strACLTitleAdd[] = "Add";
char strACLTitleEdit[] = "Edit";
char strACLTitleList[] = "List";
char strACLTitle_Ipv4[] = " a IPv4 Group";
char strACLTitle_NIpv4[] = " a Non-IPv4 Group";
char strACLGroupID[] = "Group ID : [ ]";
char strACLIDRange[] = "(1~ )";
char strACLVlnType[] = "Vlan :";
char strACLVid[]="VID : [ ](1~4094)";
char strACLSIpType[]="Src IP :";
char strACLSIpAddr[]="Src IP Address :";
char strACLSIpMsk[]= "Src IP NetMask :";
char strACLDIpType[]="Dst IP :";
char strACLDIpAddr[]="Dst IP Address :";
char strACLDIpMsk[]= "Dst IP NetMask :";
char strACLIpfrg[] ="IP Fragment :";
char strACLL4Proto[]="L4 Protocol :";
char strACLTCPProto[]="TCP :";//TCP
char strACLUDPProto[]="UDP :";//UDP
char strACLPort[]="Port :";
char strACLProtocol[]="Proto :";
char strACLAction[]="Action :";
char strACLRule[] ="Rules :";
/*Only for Non-Ipv4 based page*/
char strACLEthType[]="Ether Type :";
char strACLHexVal[] ="0x";
char strACLOtherEthType[]="Other Type :";
char strACLNIpv4VlnType[]="Vlan :";
char strACLNIpv4Vid[]="Vid : [ ](1~4094)";
SFixLabel aSFixLabelACLGrpEdit_Ipv4[] = {
#if ACL_OP_EDIT_EXIST
{{2,29}, strACLTitleEdit, 0},
#else
{{2,29}, strACLTitleList, 0},
#endif
{{2,33}, strACLTitle_Ipv4, 0},
{{3,29}, "=", 17},
{{5,2}, strACLGroupID, 0},
{{7,2}, strACLAction, 0},
{{9,2}, strACLRule, 0},
{{10,2}, "-", 32},
{{11,2},strACLVlnType,0},
{{12,2},strACLVid,0},
{{14,2}, strACLIpfrg, 0},
{{16,2}, strACLSIpType, 0},
{{17,2}, strACLSIpAddr, 0},
{{18,2}, strACLSIpMsk,0},
{{9,40}, strACLRule, 0},
{{10,40}, "-", 33},
{{11,40}, strACLDIpType, 0},
{{12,40}, strACLDIpAddr, 0},
{{13,40}, strACLDIpMsk,0},
{{16,40},strACLL4Proto,0},
{{16,63}, strACLProtocol, 0},
{{24,2}, g_strHelpMsg, 0},
//Only for Ipv4 based add page. for saving memory
{{2,29}, strACLTitleAdd, 0},
{{2,32}, strACLTitle_Ipv4, 0},
{{5,18},strACLIDRange,0},
{{3,29}, "=", 16}
};
//Ipv4 based ACL group with TCP protocol fix label
SFixLabel aSFixLabelACLGrpEdit_Ipv4TCP[] = {
#if ACL_OP_EDIT_EXIST
{{2,29}, strACLTitleEdit, 0},
#else
{{2,29}, strACLTitleList, 0},
#endif
{{2,33}, strACLTitle_Ipv4, 0},
{{3,29}, "=", 17},
{{5,2}, strACLGroupID, 0},
{{7,2}, strACLAction, 0},
{{9,2}, strACLRule, 0},
{{10,2}, "-", 32},
{{11,2},strACLVlnType,0},
{{12,2},strACLVid,0},
{{14,2}, strACLIpfrg, 0},
{{16,2}, strACLSIpType, 0},
{{17,2}, strACLSIpAddr, 0},
{{18,2}, strACLSIpMsk,0},
{{9,40}, strACLRule, 0},
{{10,40}, "-", 33},
{{11,40}, strACLDIpType, 0},
{{12,40}, strACLDIpAddr, 0},
{{13,40}, strACLDIpMsk,0},
{{16,40},strACLL4Proto,0},
{{16,63}, strACLProtocol, 0},
{{17,40},strACLTCPProto,0},
{{17,63},strACLPort,0},
{{24,2}, g_strHelpMsg, 0},
//Only for Ipv4 based add page. To save memory
{{2,29}, strACLTitleAdd, 0},
{{2,32}, strACLTitle_Ipv4, 0},
{{5,18},strACLIDRange,0},
{{3,29}, "=", 16}
};
//Ipv4 based ACL group with UDP protocol fix label
SFixLabel aSFixLabelACLGrpEdit_Ipv4UDP[] = {
#if ACL_OP_EDIT_EXIST
{{2,29}, strACLTitleEdit, 0},
#else
{{2,29}, strACLTitleList, 0},
#endif
{{2,33}, strACLTitle_Ipv4, 0},
{{3,29}, "=", 17},
{{5,2}, strACLGroupID, 0},
{{7,2}, strACLAction, 0},
{{9,2}, strACLRule, 0},
{{10,2}, "-", 32},
{{11,2},strACLVlnType,0},
{{12,2},strACLVid,0},
{{14,2}, strACLIpfrg, 0},
{{16,2}, strACLSIpType, 0},
{{17,2}, strACLSIpAddr, 0},
{{18,2}, strACLSIpMsk,0},
{{9,40}, strACLRule, 0},
{{10,40}, "-", 33},
{{11,40}, strACLDIpType, 0},
{{12,40}, strACLDIpAddr, 0},
{{13,40}, strACLDIpMsk,0},
{{16,40},strACLL4Proto,0},
{{16,63}, strACLProtocol, 0},
{{17,40}, strACLUDPProto, 0},
{{17,63},strACLPort,0},
{{24,2}, g_strHelpMsg, 0},
//Only for Ipv4 based add page. To save memory
{{2,29}, strACLTitleAdd, 0},
{{2,32}, strACLTitle_Ipv4, 0},
{{5,18},strACLIDRange,0},
{{3,29}, "=", 16}
};
SFixLabel aSFixLabelACLGrpEdit_NIpv4[] = {
#if ACL_OP_EDIT_EXIST
{{2,28}, strACLTitleEdit, 0},
#else
{{2,28}, strACLTitleList, 0},
#endif
{{2,32}, strACLTitle_NIpv4, 0},
{{3,28}, "=", 21},
{{7,27}, strACLGroupID, 0},
{{9,27}, strACLAction, 0},
{{11,27}, strACLRule, 0},
{{12,27}, "-", 27},
{{13,27},strACLNIpv4VlnType,0},
{{14,27},strACLNIpv4Vid,0},
{{16,27}, strACLEthType, 0},
{{17,27}, strACLOtherEthType, 0},
{{17,40},strACLHexVal},
{{24,2}, g_strHelpMsg, 0},
//Only for Non-Ipv4 based add page. To save memory
{{2,28}, strACLTitleAdd, 0},
{{2,31}, strACLTitle_NIpv4, 0},
{{3,28}, "=", 20},
{{7,43},strACLIDRange,0}
};
// Assign items
SItemNum aSIDecNumACLGrp[] = {
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.u8GrpId,
1, 3, 0
},
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.u8MaxValidGrpId,
1, 3, 0
},
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.u16Vid,
2, 4, 0
},
//Only for Ipv4 based group
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLIpv4GrpPgBuf.u32TcpPort,
4, 5, 0
},
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLIpv4GrpPgBuf.u32UdpPort,
4, 5, 0
},
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLIpv4GrpPgBuf.u16L4Proto,
2, 3, 0
},
};
//Only for Non-Ipv4 based group
SItemNum aSIHexNumACLGrp[] = {
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLNonIpv4GrpPgBuf.wEthType,
2, 4, 0
}
};
SItemListbox aSItemListboxACLGrp[]={
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.bFilter,
SBIT_OF_LSB_IN_BOOL, EBIT_OF_LSB_IN_BOOL, 0,
g_aszACLEntryAction, 2
} ,
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.bVidEn,
SBIT_OF_LSB_IN_BOOL, EBIT_OF_LSB_IN_BOOL, 0,
g_aszACLIfAnySel, 2
},
//Only for ipv4 based group
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLIpv4GrpPgBuf.bSIpEn,
SBIT_OF_LSB_IN_BOOL, EBIT_OF_LSB_IN_BOOL, 0,
g_aszACLIfAnySel, 2
},
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLIpv4GrpPgBuf.bDIpEn,
SBIT_OF_LSB_IN_BOOL, EBIT_OF_LSB_IN_BOOL, 0,
g_aszACLIfAnySel, 2
},
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLIpv4GrpPgBuf.bFragCheck,
SBIT_OF_LSB_IN_BOOL, EBIT_OF_LSB_IN_BOOL, 0,
g_aszACLEntryFrag, 2
},
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLIpv4GrpPgBuf.byTcpPortIndex,
0, 7, 0,
g_aszTCPPort, 3
},
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLIpv4GrpPgBuf.byUdpPortIndex,
0, 7, 0,
g_aszUDPPort, 2
},
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLIpv4GrpPgBuf.byL4ProtoIndex,
0, 7, 0,
g_aszL4Proto, 5
},
//Only for non-ipv4 based group
{
(PUINT8)&g_UCfgBuf.SPageCfg_ACL.SCurGrp.UACLPageCfgBuf.SACLNonIpv4GrpPgBuf.byEthProtoIndex,
0, 7, 0,
g_aszEthType, 3
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -