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

📄 pgmacflt.c

📁 vt6528芯片交换机API函数和文档运行程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    PAMACFLT_bLoadMacFltAdd
};
SPage g_SPageMacFltDenyGrpAddNoFid = {
    aSFixLabelMacFltGrpAdd, 6,
    aSVarLabelMacFltGrp, 1,
    aSItemMacFltGrp+1, 1,
    aSActionMacFltGrpAdd, 3,
    PAMACFLT_bLoadMacFltAdd
};
/////////////////////////////////////////////////////////////////////////////////////

#define g_pSPageMacFlt            (&g_UCfgBuf.SPageCfg_MACFlt)
#define g_byMacFltMode            (g_UCfgBuf.SPageCfg_MACFlt.bySMACFltMode)
#define g_wMacFltValidEntryNum    (g_UCfgBuf.SPageCfg_MACFlt.wValidEntryNum)
#define g_pSMacFltCurGrp          (&g_UCfgBuf.SPageCfg_MACFlt.SCurGrp)

//source mac filter  mode page Id array
UINT8 s_abyMacFltModePageId[] = {PAGE_MACFLT_MODE_DIS, PAGE_MACFLT_MODE_DIS, PAGE_MACFLT_PERMIT_LIST, PAGE_MACFLT_PERMIT_LIST_NOFID, PAGE_MACFLT_DENY_LIST, PAGE_MACFLT_DENY_LIST_NOFID};


BOOL PAMACFLT_bNextPage(void)
{
    g_byMultiPageNo ++;
    g_byMultiPageNo %= g_byMacFltTotalPageNum;

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

static void s_vUpdateGrpNumPerPage(void)
{
    if (g_byMacFltMode == MACFLT_MODE_SMAC_PERMIT)
        g_byMacFltLineNumPerPage = ((80/MACFLT_MOD_PERMIT_POS_COL_OFFSET + ((80%MACFLT_MOD_PERMIT_POS_COL_OFFSET) ? 1 : 0))*ROW_NUM_IN_2_FIELD);
    else
        g_byMacFltLineNumPerPage = ((80/MACFLT_MOD_DENY_POS_COL_OFFSET + ((80%MACFLT_MOD_DENY_POS_COL_OFFSET) ? 1 : 0))*ROW_NUM_IN_3_FIELD);
    
    if ( g_wMacFltValidEntryNum) {
        if (g_wMacFltValidEntryNum % g_byMacFltLineNumPerPage) {
            g_byMacFltTotalPageNum = ((g_wMacFltValidEntryNum / g_byMacFltLineNumPerPage) + 1);        
            g_wTotalLineNum = ((g_byMultiPageNo < (g_byMacFltTotalPageNum-1)) ? g_byMacFltLineNumPerPage : (g_wMacFltValidEntryNum % g_byMacFltLineNumPerPage));
        }
        else {
            g_byMacFltTotalPageNum = (g_wMacFltValidEntryNum / g_byMacFltLineNumPerPage);            
            g_wTotalLineNum = g_byMacFltLineNumPerPage;
        }
    }
    else {   //grp num = 0
        g_byMacFltTotalPageNum = 1;    
        g_wTotalLineNum = 0;
    }
}

BOOL PAMACFLT_bChangeModePage(void)
{
    //check mode be changed or not
    if (g_byCurPageID != s_abyMacFltModePageId[g_byMacFltMode*2] && g_byCurPageID != s_abyMacFltModePageId[g_byMacFltMode*2 + 1])
    {
        // confirm and set source mac filter mode
        char cKey = ENGcPrintMessage("Change mode will clear original Source mac Filter setting! Continue? [y/N]", PRINT_THEN_PAUSE);
        if (cKey == 'y' || cKey == 'Y')
        {
            UINT8 byVlanMode;

            ENGcPrintMessage("Changing mode...", PRINT_THEN_RETURN);
            PIMACFLT_vSetSMACFltMode(g_pSPageMacFlt);
            PIMSG_vPutMsgThenPause(OP_OK);

            //check vlan mode, If vlan mode is disable or portbased, turn to group list page which with no Fid, else turn to normal group list page
            PIVLAN_vGetVlanMode(&byVlanMode);
            if ((byVlanMode == VLAN_MODE_DISABLE) || (byVlanMode == VLAN_MODE_PORTBASE))
                g_byCurPageID = s_abyMacFltModePageId[g_byMacFltMode*2 + 1];
            else
                g_byCurPageID = s_abyMacFltModePageId[g_byMacFltMode*2];
            
            g_bDataDirty = 0;

            //update page
            if (g_byMacFltMode)  
            {
                PIMACFLT_vInitPage(g_pSPageMacFlt);
                s_vUpdateGrpNumPerPage();
            }

            return RELOAD_PAGE;
        }

        // restore to current  mode in HW
        PIMACFLT_vGetSMacFltMode(&g_byMacFltMode);
        return RELOAD_PAGE;
    }

    return DONT_RELOAD_PAGE;
}

BOOL PAMACFLT_bLoadMacFltMode(void)
{
    UINT8 byVlanMode;

    PIMACFLT_vInitPage(g_pSPageMacFlt);
    PIVLAN_vGetVlanMode(&byVlanMode);
    
    if (g_byMacFltMode)   //enable
    {
        //check vlan mode
        //If vlan mode is disable or portbased, turn to group list page which with no Fid, else turn to normal group list page
        if ((byVlanMode == VLAN_MODE_DISABLE) || (byVlanMode == VLAN_MODE_PORTBASE))
        {
            UINT16 si;

            STR_pvMemset(&astrNoFidList, 0, SWITCH_MAC_FLT_GRP_NUM * (FID_NA_LENGTH + 1));
            for (si = 0; si < g_pSPageMacFlt->wValidEntryNum; si ++)
                STR_pvMemcpy(astrNoFidList + si*(FID_NA_LENGTH+1), strNoFid, FID_NA_LENGTH + 1);

            g_byCurPageID = s_abyMacFltModePageId[g_byMacFltMode*2 + 1];  
        }
        else
            g_byCurPageID = s_abyMacFltModePageId[g_byMacFltMode*2];  
        
        //If in permit mode, print port Id field of group    
        if (g_byMacFltMode == MACFLT_MODE_SMAC_PERMIT) {
            UINT16 si;

            PIMACFltGP_vInitAddOrEditGrpPage(g_pSPageMacFlt);

            STR_pvMemset(&astrSecuPortList, 0, SWITCH_MAC_FLT_GRP_NUM * (PORT_NAME_LENGTH + 1));            
            for (si = 0; si < g_pSPageMacFlt->wValidEntryNum; si ++) {
                STR_iStrcpy(g_pSPageMacFlt->SCurGrp.azMacAddr, g_pSPageMacFlt->astrGrpMacList + si*(MAC_STRING_LEN + 1));
                g_pSPageMacFlt->SCurGrp.u16Fid = g_pSPageMacFlt->awValidGrpFidList[si];
                
                PIMACFLTGP_byGetGrp(g_pSPageMacFlt);

                STR_pvMemcpy(astrSecuPortList + si*(PORT_NAME_LENGTH+1), g_aszPortNameTable[g_pSPageMacFlt->SCurGrp.abyDestPortList[g_pSPageMacFlt->SCurGrp.bySrcId]], PORT_NAME_LENGTH+1);
            }
        }

        s_vUpdateGrpNumPerPage();       
    }
    
    return DONT_RELOAD_PAGE;
}

                
BOOL PAMACFLT_bEditMacFltMode(void)
{
    //Backup total line
    UINT16 wTotalLineNumTmp = g_wTotalLineNum;

    //make group can't be edit
    g_wTotalLineNum = 0;

    if (PAACT_bEdit())
        return RELOAD_PAGE;

    //restore true g_wTotalLineNum value
    g_wTotalLineNum = wTotalLineNumTmp;

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

    return DONT_RELOAD_PAGE;
}

BOOL PAMACFLT_bAddMacFltMode(void)
{   
    switch (g_byCurPageID)
    {
        case PAGE_MACFLT_PERMIT_LIST : 
            g_byCurPageID = PAGE_MACFLT_PERMIT_ADD; 
            break;

        case PAGE_MACFLT_PERMIT_LIST_NOFID : 
            g_byCurPageID = PAGE_MACFLT_PERMIT_ADD_NOFID; 
            break;
        
        case PAGE_MACFLT_DENY_LIST : 
            g_byCurPageID = PAGE_MACFLT_DENY_ADD; 
            break;
        
        case PAGE_MACFLT_DENY_LIST_NOFID: 
            g_byCurPageID = PAGE_MACFLT_DENY_ADD_NOFID; 
            break;

        default : 
            break;
    }    
    
    return RELOAD_PAGE;  // reload cfg and print whole page
}

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

        if (PAMACFLT_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_pSMacFltCurGrp->azMacAddr, g_pSPageMacFlt->astrGrpMacList+(g_wCurLineID+g_byMultiPageNo*g_byMacFltLineNumPerPage)*(MAC_STRING_LEN+1));
                g_pSMacFltCurGrp->u16Fid = g_pSPageMacFlt->awValidGrpFidList[(g_wCurLineID+g_byMultiPageNo*g_byMacFltLineNumPerPage)];        

                byRes = PIMACFLTGP_byDelGrp(g_pSPageMacFlt);
                PIMSG_vPutExtMsgThenPause( byRes, UINT16_MAX, PUT_MSG_WITH_PORT_NAME);

                if (byRes == OP_OK)
                    PIMACFLTEP_vStatisTblInfo(g_pSPageMacFlt);
                
                //for deleting all grps in this page, so we must go back to previous page automatically
                u8OldTmp = g_byMacFltTotalPageNum;
                s_vUpdateGrpNumPerPage();
                if (u8OldTmp != g_byMacFltTotalPageNum) { 
                    g_byMultiPageNo --;
                    g_byMultiPageNo %= g_byMacFltTotalPageNum;
                }

                ENGvPrintPage();    // just reprint
            }
        }
    }

    return DONT_RELOAD_PAGE;
}

// mac filter entry add
// load config
BOOL PAMACFLT_bLoadMacFltAdd(void)
{
    UINT8    byVlanMode;

    PIMACFLT_vInitPage(g_pSPageMacFlt);
    PIMACFltGP_vInitAddOrEditGrpPage(g_pSPageMacFlt);

    //Init buffer
    STR_iStrcpy(g_pSMacFltCurGrp->azMacAddr, "00:00:00:00:00:00");

    PIVLAN_vGetVlanMode(&byVlanMode);
    if (byVlanMode == VLAN_MODE_DISABLE)
        g_pSMacFltCurGrp->u16Fid = 0;
    else if (byVlanMode == VLAN_MODE_PORTBASE)
        g_pSMacFltCurGrp->u16Fid = PORTBASE_VLAN_FID;
    else
        g_pSMacFltCurGrp->u16Fid = 1;
    
    g_wTotalLineNum = g_byLogIdNum;

    return DONT_RELOAD_PAGE;
}

// save of add operation
BOOL PAMACFLT_bSaveMacFltAdd(void)
{
    UINT8 byErrCode;

    PIMSG_vPutSavingMsg();

    byErrCode = PIMACFLTGP_byInsGrp(g_pSPageMacFlt);
    return s_bySaveMacFltGrpMsg(byErrCode);
}

// save message
static UINT8 s_bySaveMacFltGrpMsg(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;
}

⌨️ 快捷键说明

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