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

📄 pgvlan.c

📁 vt6528芯片交换机API函数和文档运行程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    aSItemVlanGrp_P, 2,
    aSActionVlanGrpAdd, 3,
    PAVLAN_bLoadVlanGrpAdd
};
SPage g_SPageVlanGrpAdd_Q = {
    aSFixLabelVlanGrpAdd_Q, 8,
    aSVarLabelVlanGrp+2, 2,
    aSItemVlanGrp_Q, 2,
    aSActionVlanGrpAdd, 3,
    PAVLAN_bLoadVlanGrpAdd
};
SPage g_SPageVlanGrpAdd_PRV = {
    aSFixLabelVlanGrpAdd_PRV, 9,
    aSVarLabelVlanGrp+2, 2,
    aSItemVlanGrp_PRV, 3,
    aSActionVlanGrpAdd, 3,
    PAVLAN_bLoadVlanGrpAdd
};


////
//// 8021Q ingress filter
////
// assign fix label
char str8021QTitle[] = "Port    NonMember  Untagged";
SFixLabel aSFixLabel8021Q[] = {
    {{2,26}, g_strAdvVlanCfg, 0},
    {{3,26}, "=", 28},
    {{5, 9}, "802.1Q Ingress Filter :"},
    {{7, 9}, str8021QTitle, 0},
    {{7,45}, str8021QTitle, 0},
    {{8, 9}, "-", 27},
    {{8,45}, "-", 27},
    {{24,2}, g_strHelpMsg, 0}
};

// assign var label
SVarLabel aSVarLabel8021Q[] = {
    {{9,9}, &g_SIListboxLogPortName, "", ITEM_LISTBOX, REPEAT_TYPE_RECT_MULTI, LINK_TYPE_NONE, ROW_NUM_IN_2_FIELD, 36}
};

// assign var item
SItemListbox aSIListboxVlan8021QIF[] = {
    {(PUINT8)g_pSVlanIngrFlt, 0, 0, 2, g_aszTagDropFwd, 2},
    {(PUINT8)g_pSVlanIngrFlt, 1, 1, 2, g_aszTagDropFwd, 2},
};
//SItemListbox SIListboxVlan8021QIF2 = {
//    g_pSVlanIngrFlt,
//    1, 1, 2,
//    g_aszTagDropFwd, 2
//};
SItem aSItemVlan8021Q[] = {
    {{9,17}, aSIListboxVlan8021QIF,   "", ITEM_LISTBOX, REPEAT_TYPE_RECT_MULTI, LINK_TYPE_NONE, ROW_NUM_IN_2_FIELD, 36},
    {{9,28}, aSIListboxVlan8021QIF+1, "", ITEM_LISTBOX, REPEAT_TYPE_RECT_MULTI, LINK_TYPE_NONE, ROW_NUM_IN_2_FIELD, 36}
};


// action
SActItem aSActionVlan8021Q[] = {
    {{22, 12}, g_strActionQuit, PAACT_bQuit},
    {{22, 22}, g_strActionEdit, PAACT_bEdit},
    {{22, 32}, g_strActionSave, PAVLAN_bSaveVlan8021Q},
};


// assign page
SPage g_SPageVlan8021Q = {
    aSFixLabel8021Q, 8,
    aSVarLabel8021Q, 1,
    aSItemVlan8021Q, 2,
    aSActionVlan8021Q, 3,
    PAVLAN_bLoadVlan8021Q
};

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

#define g_pSPageVlan        (&g_UCfgBuf.SPageCfg_Vlan)
#define g_byVlanMode        (g_UCfgBuf.SPageCfg_Vlan.byVlanMode)
#define g_wValidEntryNum    (g_UCfgBuf.SPageCfg_Vlan.wValidEntryNum)
#define g_pSCurGrp          (&g_UCfgBuf.SPageCfg_Vlan.SCurGrp)
#define g_awValidGrpIdList  (g_UCfgBuf.SPageCfg_Vlan.awValidGrpIdList)

UINT8 s_abyVlanModePageId[] = {PAGE_VLAN_MODE_DIS, PAGE_VLAN_LIST_P, PAGE_VLAN_LIST_Q, PAGE_VLAN_LIST_PRV};


BOOL PAVLAN_bNextPage(void)
{
    g_byMultiPageNo ++;
    g_byMultiPageNo %= g_byVlanTotalPageNum;

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

static void s_vUpdateGrpNumPerPage(void)
{
    g_byVlanLineNumPerPage = ((80/VLAN_POS_COL_OFFSET + ((80%VLAN_POS_COL_OFFSET) ? 1 : 0))*ROW_NUM_IN_3_FIELD);
    if (g_wValidEntryNum) {
        if (g_wValidEntryNum % g_byVlanLineNumPerPage) {
            g_byVlanTotalPageNum = ((g_wValidEntryNum / g_byVlanLineNumPerPage) + 1);        
            g_wTotalLineNum = ((g_byMultiPageNo < (g_byVlanTotalPageNum-1)) ? g_byVlanLineNumPerPage : (g_wValidEntryNum % g_byVlanLineNumPerPage));
        }
        else {
            g_byVlanTotalPageNum = (g_wValidEntryNum / g_byVlanLineNumPerPage);            
            g_wTotalLineNum = g_byVlanLineNumPerPage;
        }
    }
    else {   //grp num = 0
        g_byVlanTotalPageNum = 1;    
        g_wTotalLineNum = 0;
    }
}

BOOL PAVLAN_bChangeModePage(void)
{
    if (g_byCurPageID != s_abyVlanModePageId[g_byVlanMode])
    {
        // confirm and set vlan mode
        char cKey;

        cKey = ENGcPrintMessage("Change mode will clear original VLAN setting and reboot! Continue? [y/N]", PRINT_THEN_PAUSE);
        if (cKey == 'y' || cKey == 'Y')
        {
            ENGcPrintMessage("Changing mode...", PRINT_THEN_RETURN);
            PIVLAN_vSetVlanMode(g_pSPageVlan);

            // PATCH A7: when change vlan mode, must reboot
            SWSYS_vBoardShutdown();
            SWSYS_vBoardReboot();
        }

        // restore to current vlan mode in HW
        PIVLAN_vGetVlanMode(&g_byVlanMode);

        return RELOAD_PAGE;
    }

    return DONT_RELOAD_PAGE;
}

BOOL PAVLAN_bLoadVlanMode(void)
{
    PIVLAN_vInitPage(g_pSPageVlan);

    if (g_byVlanMode != VLAN_MODE_DISABLE)
    {
        g_byCurPageID = s_abyVlanModePageId[g_byVlanMode];  // it may not be reloaded and reprinted
        s_vUpdateGrpNumPerPage();
    }

    return DONT_RELOAD_PAGE;
}

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

    // deal with dynamic page
    if (PAVLAN_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_VLAN_LIST_P)
            g_byCurPageID = PAGE_VLAN_EDIT_P;
        else if (g_byCurPageID == PAGE_VLAN_LIST_PRV)
        {
            if (!(g_wCurLineID+g_byMultiPageNo*g_byVlanLineNumPerPage))  //default grp
                g_byCurPageID = PAGE_VLAN_EDIT_PRVDFT;
            else
                g_byCurPageID = PAGE_VLAN_EDIT_PRV;
        }
        else    //802.1Q 
            g_byCurPageID = PAGE_VLAN_EDIT_Q;

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

    return DONT_RELOAD_PAGE;
}

BOOL PAVLAN_bAddVlanMode(void)
{
    if (g_byCurPageID == PAGE_VLAN_LIST_P)
        g_byCurPageID = PAGE_VLAN_ADD_P;
    else if (g_byCurPageID == PAGE_VLAN_LIST_PRV)
        g_byCurPageID = PAGE_VLAN_ADD_PRV;
    else
        g_byCurPageID = PAGE_VLAN_ADD_Q;

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

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

        if (PAVLAN_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;
                UINT16 wFailVid;

                ENGcPrintMessage("Deleting...", PRINT_THEN_RETURN);
                g_pSCurGrp->u16Vid = g_awValidGrpIdList[(g_wCurLineID+g_byMultiPageNo*g_byVlanLineNumPerPage)];
                byRes = PIVLAN_byDelGrp(g_pSPageVlan, &wFailVid);
                PIMSG_vPutExtMsgThenPause( byRes, wFailVid, PUT_MSG_WITH_PORT_NAME );

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

                ENGvPrintPage();    // just reprint
            }
        }
    }

    return DONT_RELOAD_PAGE;
}


// vlan group edit
// load config
BOOL PAVLAN_bLoadVlanGrpEdit(void)
{
    UINT8 byErrCode;

    g_pSCurGrp->u16Vid = g_awValidGrpIdList[(g_wCurLineID+g_byMultiPageNo*g_byVlanLineNumPerPage)];
    byErrCode = PIVLAN_byGetGrp(g_pSPageVlan);

    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_bySaveVlanGrpMsg(UINT8 byErrCode, UINT16 wFailVid)
{
    if (byErrCode == VLAN_OP_UNTAG_BELONG_OTHER_GRP)
        PIMSG_vPutExtMsgThenPause(byErrCode, wFailVid, PUT_MSG_WITH_NUM);
    else if (byErrCode == VLAN_OP_FOUND_ISO_PORT)
        PIMSG_vPutExtMsgThenPause(byErrCode, wFailVid, PUT_MSG_WITH_PORT_NAME);
    else
        PIMSG_vPutMsgThenPause(byErrCode);

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

BOOL PAVLAN_bSaveVlanGrpEdit(void)
{
    UINT8 byErrCode;
    UINT16 wFailVid;

    PIMSG_vPutSavingMsg();

    byErrCode = PIVLAN_byEditGrp(g_pSPageVlan, &wFailVid);

    return s_bySaveVlanGrpMsg(byErrCode, wFailVid);
}


// vlan group add
// load config
BOOL PAVLAN_bLoadVlanGrpAdd(void)
{
    STR_pvMemset(g_pSCurGrp, 0, sizeof(SVlanGrp));
    g_wTotalLineNum = g_byLogIdNum;
    return DONT_RELOAD_PAGE;
}


// save config
BOOL PAVLAN_bSaveVlanGrpAdd(void)
{
    UINT8 byErrCode;
    UINT16 wFailVid;

    PIMSG_vPutSavingMsg();

    byErrCode = PIVLAN_byInsGrp(g_pSPageVlan, &wFailVid);

    return s_bySaveVlanGrpMsg(byErrCode, wFailVid);
}


//// 802.1Q rule
BOOL PAVLAN_bLoadVlan8021Q(void)
{
    UINT8 byVlanMode;
    PIVLAN_vGetVlanMode(&byVlanMode);
    if (byVlanMode == VLAN_MODE_8021Q)
    {
        PIVLNFLT_vInitPage(g_pSVlanIngrFlt);
        g_wTotalLineNum = g_byLogIdNum;
        return DONT_RELOAD_PAGE;
    }
    else
    {
        PIMSG_vPutMsgThenPause(VLAN_OP_NOT_8021Q_MODE);
        g_byCurPageID = g_abyPreviousPageID[g_byCurPageID];   // jump to previous page
        return RELOAD_PAGE;
    }
}
BOOL PAVLAN_bSaveVlan8021Q(void)
{
    PIMSG_vPutSavingMsg();
    PIVLNFLT_vSavePage(g_pSVlanIngrFlt);
    PIMSG_vPutMsgThenPause(OP_OK);
    g_bDataDirty = 0;
    return DONT_RELOAD_PAGE;
}

⌨️ 快捷键说明

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