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

📄 pggmrp.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:    pggmrp.c
 *
 * Purpose: GMRP 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 "pggmrp.h"
#include "pigmrpmd.h"
#include "pigmrpgp.h"

#define GMRP_DUMMY_STR_NUM  10
#define GMRP_POS_COL_OFFSET 27

UINT8 g_byGMRPTotalPageNum;
UINT8 g_byGMRPLineNumPerPage;

static UINT16 s_u16Fid;

static void s_vUpdateGrpNumPerPage(void);

// assign fix label
SFixLabel aSFixLabelGMRPCfg[] = {
    {{2,31}, g_strProvGMRP, 0},
    {{3,31}, "=", 26},
    {{4,2}, "GMRP Mode :", 0},
    {{24,2}, g_strHelpMsg, 0},
    {{6,2}, "GMRP Entry List :", 0},
    {{7,2}, "MAC     -----      Fid     MAC     -----      Fid     MAC     -----      Fid", 0},
    {{8,2}, "-", 76},
};

// assign var item
SItemListbox SIListboxGMRPMode = {
    &g_UCfgBuf.SPageCfg_GMRP.byMode,
    0, 7, 0,
    g_aszEnDisCfg, 2
};

SItemString SIStrGrpGMRPMacAddr = {
    (char*)g_UCfgBuf.SPageCfg_GMRP.astrGrpMacList,
    MAC_STRING_LEN
};

SItemNum SIDecGrpGMRPFid = {
    (PUINT8)&g_UCfgBuf.SPageCfg_GMRP.awValidGrpFidList[0],
    2, 5, 2
};

// all items
SVarLabel aSVarLabelGMRPGrpFidList[] = {
    {{9,21}, &SIDecGrpGMRPFid,    "", ITEM_DECNUM, REPEAT_TYPE_RECT_SINGLE, LINK_TYPE_EDITPAGE, ROW_NUM_IN_3_FIELD, GMRP_POS_COL_OFFSET}
};

SItem aSItemGMRPGrpList[] = {
    {{4,14}, &SIListboxGMRPMode, g_strChgModeMsg, ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},
    {{9,2}, &SIStrGrpGMRPMacAddr,    g_strEditGrpMsg, ITEM_STRING, REPEAT_TYPE_RECT_SINGLE, LINK_TYPE_EDITPAGE, ROW_NUM_IN_3_FIELD, GMRP_POS_COL_OFFSET}
};

// action
SActItem aSActionGMRPMode[] = {
    {{22, 12}, g_strActionQuit, PAACT_bQuit},
    {{22, 22}, g_strActionEdit, PAGMRP_bEditGMRPMode},
};
SActItem aSActionGMRPGrpList[] = {
    {{22, 12}, g_strActionQuit, PAACT_bQuit},
    {{22, 22}, g_strActionEdit, PAGMRP_bEditGMRPMode},
    {{22, 32}, g_strActionAdd,  PAGMRP_bAddGMRPMode},
    {{22, 42}, g_strActionDel,  PAGMRP_bDelGMRPMode},
    {{22, 55}, "<NextPage>",    PAGMRP_bNextPage}
};

// assign page
SPage g_SPageGMRPMode = {
    aSFixLabelGMRPCfg, 4,
    NULL, 0,
    aSItemGMRPGrpList, 1,
    aSActionGMRPMode, 2,
    PAGMRP_bLoadGMRPMode
};
SPage g_SPageGMRPGrpList = {
    aSFixLabelGMRPCfg, 7,
    aSVarLabelGMRPGrpFidList, 1,
    aSItemGMRPGrpList, 2,
    aSActionGMRPGrpList, 5,
    PAGMRP_bLoadGMRPMode
};


// assign fix label
char strTitleGMRPAdd[] = "Add ";
char strTitleGMRPEdit[] = "Edit";
char strTitleGMRP[] = "a Multicast Entry";

SFixLabel aSFixLabelGMRPGrpAdd[] = {
    {{2,27}, strTitleGMRPAdd, 0},
    {{2,31}, strTitleGMRP, 0},
    {{3,27}, "=", 21},
    {{4,13}, "FID         :", 0},
    {{5,13}, "MAC Address :", 0},
    {{6,13}, "HiPriDmac   :", 0},
    {{7,13}, "HiPriSmac   :", 0},
    {{9,13}, "Entry Member :", 0},
    {{10,13}, "-", 53},
    {{24,2}, g_strHelpMsg, 0}
};
SFixLabel aSFixLabelGMRPGrpEdit[] = {
    {{2,27}, strTitleGMRPEdit, 0},
    {{2,32}, strTitleGMRP, 0},
    {{3,27}, "=", 22},
    {{4,13}, "FID         :", 0},
    {{5,13}, "MAC Address :", 0},
    {{6,13}, "HiPriDmac   :", 0},
    {{7,13}, "HiPriSmac   :", 0},
    {{9,13}, "Entry Member :", 0},
    {{10,13}, "-", 53},
    {{24,2}, g_strHelpMsg, 0}
};

char astrInputMacStrBuff[GMRP_DUMMY_STR_NUM*(MAC_STRING_LEN+1)];

// assign var label
SItemString SIStrGMRPMacConf = {
    (char*)astrInputMacStrBuff,
    MAC_STRING_LEN
};

SItemNum SIDecNumGMRPFid = {
    (PUINT8)&g_UCfgBuf.SPageCfg_GMRP.SCurGrp.u16Fid,
    2, 4, 0
};

SItemListbox aSIListboxGMRPGrp[] = {
    {(PUINT8)&g_UCfgBuf.SPageCfg_GMRP.SCurGrp.bHiPriDmac, 0, 0, 0, g_aszEnDisCfg, 2},
    {(PUINT8)&g_UCfgBuf.SPageCfg_GMRP.SCurGrp.bHiPriSmac, 0, 0, 0, g_aszEnDisCfg, 2},
    {(PUINT8)&g_UCfgBuf.SPageCfg_GMRP.SCurGrp.abyMbrMsk, 0, 0, 1, g_aszMbrNotCfg, 2}
};

SVarLabel aSVarLabelGMRPGrp[] = {
    {{ 5,27}, &SIStrGMRPMacConf,    "", ITEM_STRING, REPEAT_TYPE_NONE, LINK_TYPE_NONE},
    {{ 4,27}, &SIDecNumGMRPFid,    "", ITEM_DECNUM,  REPEAT_TYPE_NONE, LINK_TYPE_NONE},
    {{11,13}, &g_SIListboxLogPortName, "", ITEM_LISTBOX, REPEAT_TYPE_RECT_SINGLE, LINK_TYPE_NONE, ROW_NUM_IN_3_FIELD, 20}
};

SItem aSItemGMRPGrp[] = {
    {{ 4,27}, &SIDecNumGMRPFid,     "", ITEM_DECNUM,  REPEAT_TYPE_NONE, LINK_TYPE_NONE},
    {{ 5,27}, &SIStrGMRPMacConf,  "", ITEM_STRING, REPEAT_TYPE_NONE, LINK_TYPE_NONE},
    {{ 6,27}, aSIListboxGMRPGrp,    "", ITEM_LISTBOX,  REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},
    {{ 7,27}, aSIListboxGMRPGrp+1,  "", ITEM_LISTBOX,  REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},
    {{11,20}, aSIListboxGMRPGrp+2,  "", ITEM_LISTBOX, REPEAT_TYPE_RECT_SINGLE, LINK_TYPE_NONE, ROW_NUM_IN_3_FIELD, 20}
};

// action
SActItem aSActionGMRPGrpEdit[] = {
    {{22, 12}, g_strActionQuit, PAACT_bQuit},
    {{22, 22}, g_strActionEdit, PAACT_bEdit},
    {{22, 32}, g_strActionSave, PAGMRP_bSaveGMRPGrpEdit}
};
// assign page
SPage g_SPageGMRPGrpEdit = {
    aSFixLabelGMRPGrpEdit, 10,
    aSVarLabelGMRPGrp, 3,
    aSItemGMRPGrp+2, 3,
    aSActionGMRPGrpEdit, 3,
    PAGMRP_bLoadGMRPGrpEdit
};


//// add a gmrp entry
SActItem aSActionGMRPGrpAdd[] = {
    {{22, 12}, g_strActionQuit, PAACT_bQuit},
    {{22, 22}, g_strActionEdit, PAACT_bEdit},
    {{22, 32}, g_strActionSave, PAGMRP_bSaveGMRPGrpAdd},
};

SPage g_SPageGMRPGrpAdd = {
    aSFixLabelGMRPGrpAdd, 10,
    aSVarLabelGMRPGrp+2, 1, 
    aSItemGMRPGrp, 5,
    aSActionGMRPGrpAdd, 3,
    PAGMRP_bLoadGMRPGrpAdd
};

SPage g_SPageGMRPGrpAddNoFid = {
    aSFixLabelGMRPGrpAdd, 10,
    aSVarLabelGMRPGrp+1, 2, 
    aSItemGMRPGrp+1, 4,
    aSActionGMRPGrpAdd, 3,
    PAGMRP_bLoadGMRPGrpAdd
};

/////////////////////////////////////////////////////////////////////////////////////

#define g_pSPageGMRP            (&g_UCfgBuf.SPageCfg_GMRP)
#define g_byGMRPMode            (g_UCfgBuf.SPageCfg_GMRP.byMode)
#define g_wGMRPValidEntryNum    (g_UCfgBuf.SPageCfg_GMRP.wValidEntryNum)
#define g_pSGMRPCurGrp          (&g_UCfgBuf.SPageCfg_GMRP.SCurGrp)

UINT8 s_abyGMRPModePageId[] = {PAGE_PROV_GMRP_MODE_DIS, PAGE_PROV_GMRP_LIST};


BOOL PAGMRP_bNextPage(void)
{
    g_byMultiPageNo ++;
    g_byMultiPageNo %= g_byGMRPTotalPageNum;

    return RELOAD_PAGE;  // reload cfg and print whole page
}

static void s_vUpdateGrpNumPerPage(void)
{
    g_byGMRPLineNumPerPage = ((80/GMRP_POS_COL_OFFSET + ((80%GMRP_POS_COL_OFFSET) ? 1 : 0))*ROW_NUM_IN_3_FIELD);
    if (g_wGMRPValidEntryNum) {
        if (g_wGMRPValidEntryNum % g_byGMRPLineNumPerPage) {
            g_byGMRPTotalPageNum = ((g_wGMRPValidEntryNum / g_byGMRPLineNumPerPage) + 1);        
            g_wTotalLineNum = ((g_byMultiPageNo < (g_byGMRPTotalPageNum-1)) ? g_byGMRPLineNumPerPage : (g_wGMRPValidEntryNum % g_byGMRPLineNumPerPage));
        }
        else {
            g_byGMRPTotalPageNum = (g_wGMRPValidEntryNum / g_byGMRPLineNumPerPage);            
            g_wTotalLineNum = g_byGMRPLineNumPerPage;
        }
    }
    else {   //grp num = 0
        g_byGMRPTotalPageNum = 1;    
        g_wTotalLineNum = 0;
    }
}

BOOL PAGMRP_bChangeModePage(void)
{
    if (g_byCurPageID != s_abyGMRPModePageId[g_byGMRPMode])
    {
        // confirm and set gmrp mode
        char cKey = ENGcPrintMessage("Change mode will clear original GMRP setting! Continue? [y/N]", PRINT_THEN_PAUSE);
        if (cKey == 'y' || cKey == 'Y')
        {
            ENGcPrintMessage("Changing mode...", PRINT_THEN_RETURN);
            PIGMRP_vSetGMRPMode(g_pSPageGMRP);
            PIMSG_vPutMsgThenPause(OP_OK);

            g_byCurPageID = s_abyGMRPModePageId[g_byGMRPMode];
            g_bDataDirty = 0;

            if (g_byGMRPMode)   //gmrp enable
                s_vUpdateGrpNumPerPage();
        }

        // restore to current gmrp mode in HW
        PIGMRP_vGetGMRPMode(&g_byGMRPMode);

        return RELOAD_PAGE;
    }

    return DONT_RELOAD_PAGE;
}

BOOL PAGMRP_bLoadGMRPMode(void)
{
    PIGMRP_vInitPage(g_pSPageGMRP);
    if (g_byGMRPMode)   //enable
    {
        g_byCurPageID = s_abyGMRPModePageId[g_byGMRPMode];  // it may not be reloaded and reprinted
        s_vUpdateGrpNumPerPage();
    }
    
    return DONT_RELOAD_PAGE;
}

BOOL PAGMRP_bEditGMRPMode(void)
{
    if (PAACT_bEdit())
        return RELOAD_PAGE;

    // deal with dynamic page
    if (PAGMRP_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 == MK_ENTER && g_SCurItem.f2LinkType == LINK_TYPE_EDITPAGE)
    {
        if (g_byCurPageID == PAGE_PROV_GMRP_LIST)
            g_byCurPageID = PAGE_PROV_GMRP_EDIT;

        return RELOAD_PAGE;  // reload cfg and print whole page
    }

    return DONT_RELOAD_PAGE;
}

BOOL PAGMRP_bAddGMRPMode(void)
{
    UINT8    byVlanMode;
    
    if (g_byCurPageID == PAGE_PROV_GMRP_LIST) {
        PIVLAN_vGetVlanMode(&byVlanMode);
        s_u16Fid = 0;
        if ((byVlanMode == VLAN_MODE_8021Q) || (byVlanMode == VLAN_MODE_PROTOBASE) )
            g_byCurPageID = PAGE_PROV_GMRP_ADD;
        else {   //disable or portbased vlan
            if (byVlanMode == VLAN_MODE_PORTBASE)
                s_u16Fid = PORTBASE_VLAN_FID;

            g_byCurPageID = PAGE_PROV_GMRP_ADD_NOFID;
        }
    }
    
    return RELOAD_PAGE;  // reload cfg and print whole page
}

BOOL PAGMRP_bDelGMRPMode(void)
{
    UINT8    u8OldTmp;
    
    // continue if nothing to del
    if (g_wTotalLineNum)
    {
        if (PAACT_bEdit())
            return RELOAD_PAGE;

        if (PAGMRP_bChangeModePage())
            ENGvPrintPage();        // in this page, changing page may not reload config, just re-print page only

        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_pSGMRPCurGrp->azMacAddr, g_pSPageGMRP->astrGrpMacList+(g_wCurLineID+g_byMultiPageNo*g_byGMRPLineNumPerPage)*(MAC_STRING_LEN+1));
                g_pSGMRPCurGrp->u16Fid = g_pSPageGMRP->awValidGrpFidList[(g_wCurLineID+g_byMultiPageNo*g_byGMRPLineNumPerPage)];        

                byRes = PIGMRP_byDelGrp(g_pSPageGMRP);
                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_byGMRPTotalPageNum;
                s_vUpdateGrpNumPerPage();
                if (u8OldTmp != g_byGMRPTotalPageNum) { 
                    g_byMultiPageNo --;
                    g_byMultiPageNo %= g_byGMRPTotalPageNum;
                }

                ENGvPrintPage();    // just reprint
            }
        }
    }

    return DONT_RELOAD_PAGE;
}


// gmrp entry edit
// load config
BOOL PAGMRP_bLoadGMRPGrpEdit(void)
{
    UINT8 byErrCode;
    
    //load ui mac string to current grp mac string
    STR_iStrcpy(g_pSGMRPCurGrp->azMacAddr, g_pSPageGMRP->astrGrpMacList+(g_wCurLineID+g_byMultiPageNo*g_byGMRPLineNumPerPage)*(MAC_STRING_LEN+1));   
    g_pSGMRPCurGrp->u16Fid = g_pSPageGMRP->awValidGrpFidList[(g_wCurLineID+g_byMultiPageNo*g_byGMRPLineNumPerPage)];
    
    byErrCode = PIGMRP_byGetGrp(g_pSPageGMRP);

    //load current grp mac string to ui string array[0]
    STR_iStrcpy(astrInputMacStrBuff, g_pSGMRPCurGrp->azMacAddr);

    if (byErrCode != OP_OK)
    {
        PIMSG_vPutMsgThenPause(byErrCode);
        g_byCurPageID = g_abyPreviousPageID[g_byCurPageID];   // jump to previous page
        return RELOAD_PAGE;
    }

    g_wTotalLineNum = g_byLogIdNum;
    return DONT_RELOAD_PAGE;
}

// save config
static UINT8 s_bySaveGMRPGrpMsg(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 PAGMRP_bSaveGMRPGrpEdit(void)
{
    UINT8 byErrCode;

    PIMSG_vPutSavingMsg();

    byErrCode = PIGMRP_byEditGrp(g_pSPageGMRP);

    return s_bySaveGMRPGrpMsg(byErrCode);
}


// gmrp entry add
// load config
BOOL PAGMRP_bLoadGMRPGrpAdd(void)
{
    STR_pvMemset(g_pSGMRPCurGrp, 0, sizeof(SGmrpEntryPage));

    STR_iStrcpy(g_pSGMRPCurGrp->azMacAddr, "0:0:0:0:0:0");

    //load current grp mac string to ui string array[0]
    STR_iStrcpy(astrInputMacStrBuff, g_pSGMRPCurGrp->azMacAddr);

    g_pSGMRPCurGrp->u16Fid = s_u16Fid;
    
    g_wTotalLineNum = g_byLogIdNum;

    return DONT_RELOAD_PAGE;
}


// save config
BOOL PAGMRP_bSaveGMRPGrpAdd(void)
{
    UINT8 byErrCode;

    PIMSG_vPutSavingMsg();

    //load ui string array[0] to current grp mac string
    STR_iStrcpy(g_pSGMRPCurGrp->azMacAddr, astrInputMacStrBuff);

    byErrCode = PIGMRP_byInsGrp(g_pSPageGMRP);
    return s_bySaveGMRPGrpMsg(byErrCode);

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -