⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pgsmac.c

📁 vt6528芯片交换机API函数和文档运行程序
💻 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 + -