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

📄 pgvlan.c

📁 VIA VT6524 8口网管交换机源码
💻 C
📖 第 1 页 / 共 2 页
字号:
//// 8021Q ingress filter
////
// assign fix label
DIRECT_MEMTYPE_CODE char str8021QTitle[] = "Port    NonMember  Untagged";
DIRECT_MEMTYPE_CODE 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
DIRECT_MEMTYPE_CODE SVarLabel aSVarLabel8021Q[] = {
    {{9,9}, &g_SIListboxLogPortName, "", ITEM_LISTBOX, REPEAT_TYPE_RECT_MULTI, LINK_TYPE_NONE, ROW_NUM_IN_2_FIELD, 36}
};

// assign var item
DIRECT_MEMTYPE_CODE SItemListbox aSIListboxVlan8021QIF[] = {
    {g_pSVlanIngrFlt, 0, 0, 2, g_aszTagDropFwd, 2},
    {g_pSVlanIngrFlt, 1, 1, 2, g_aszTagDropFwd, 2},
};
//DIRECT_MEMTYPE_CODE SItemListbox SIListboxVlan8021QIF2 = {
//    g_pSVlanIngrFlt,
//    1, 1, 2,
//    g_aszTagDropFwd, 2
//};
DIRECT_MEMTYPE_CODE 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
DIRECT_MEMTYPE_CODE SActItem aSActionVlan8021Q[] = {
    {{22, 12}, g_strActionQuit, PAACT_bQuit},
    {{22, 22}, g_strActionEdit, PAACT_bEdit},
    {{22, 32}, g_strActionSave, PAVLAN_bSaveVlan8021Q},
};


// assign page
DIRECT_MEMTYPE_CODE 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_byValidEntryNum   (g_UCfgBuf.SPageCfg_Vlan.byValidEntryNum)
#define g_pSCurGrp          (&g_UCfgBuf.SPageCfg_Vlan.SCurGrp)
#define g_awValidGrpIdList  (g_UCfgBuf.SPageCfg_Vlan.awValidGrpIdList)

DIRECT_MEMTYPE_CODE BYTE s_abyVlanModePageId[] = {PAGE_VLAN_MODE_DIS, PAGE_VLAN_LIST_P, PAGE_VLAN_LIST_Q};

BOOL PAVLAN_bChangeModePage(void) DIRECT_FUNTYPE_REENT
{
    if (g_byCurPageID != s_abyVlanModePageId[g_byVlanMode])
    {
        // confirm and set vlan mode
        char cKey = ENGcPrintMessage("Change mode will clear original VLAN setting! Continue? [y/N]", PRINT_THEN_PAUSE);
        if (cKey == 'y' || cKey == 'Y')
        {
            ENGcPrintMessage("Changing mode...", PRINT_THEN_RETURN);
            PIVLAN_vSetVlanMode(g_pSPageVlan);
            PIMSG_vPutMsgThenPause(OP_OK);

            g_byCurPageID = s_abyVlanModePageId[g_byVlanMode];
            g_bDataDirty = 0;

            if (g_byVlanMode != VLAN_MODE_DISABLE)
                g_byTotalLineNum = g_byValidEntryNum;
        }

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

        return RELOAD_PAGE;
    }

    return DONT_RELOAD_PAGE;
}

BOOL PAVLAN_bLoadVlanMode(void) DIRECT_FUNTYPE_REENT
{
    PIVLAN_vInitPage(g_pSPageVlan);

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

    return DONT_RELOAD_PAGE;
}

BOOL PAVLAN_bEditVlanMode(void) DIRECT_FUNTYPE_REENT
{
    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 == KEY_ENTER && g_SCurItem.f2LinkType == LINK_TYPE_EDITPAGE)
    {
        if (g_byCurPageID == PAGE_VLAN_LIST_P)
            g_byCurPageID = PAGE_VLAN_EDIT_P;
        else
            g_byCurPageID = PAGE_VLAN_EDIT_Q;

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

    return DONT_RELOAD_PAGE;
}

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

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

BOOL PAVLAN_bDelVlanMode(void) DIRECT_FUNTYPE_REENT
{
    // continue if nothing to del
    if (g_byTotalLineNum)
    {
        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 == KEY_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->wVid = g_awValidGrpIdList[g_byCurLineID];
                byRes = PIVLAN_byDelGrp(g_pSPageVlan, &wFailVid);
                PIMSG_vPutExtMsgThenPause( byRes, wFailVid, PUT_MSG_WITH_PORT_NAME );

                g_byTotalLineNum = g_byValidEntryNum;
                ENGvPrintPage();    // just reprint
            }
        }
    }

    return DONT_RELOAD_PAGE;
}


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

    g_pSCurGrp->wVid = g_awValidGrpIdList[g_byCurLineID];
    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_byTotalLineNum = g_byLogIdNum;
    return DONT_RELOAD_PAGE;
}

// save config
static BYTE s_bySaveVlanGrpMsg(BYTE byErrCode, UINT16 wFailVid) DIRECT_FUNTYPE_REENT
{
    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) DIRECT_FUNTYPE_REENT
{
    BYTE 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) DIRECT_FUNTYPE_REENT
{
    STRvMemset(g_pSCurGrp, 0, sizeof(SVlanGrp));
    g_byTotalLineNum = g_byLogIdNum;
    return DONT_RELOAD_PAGE;
}


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

    PIMSG_vPutSavingMsg();

    byErrCode = PIVLAN_byInsGrp(g_pSPageVlan, &wFailVid);

    return s_bySaveVlanGrpMsg(byErrCode, wFailVid);
}


//// 802.1Q rule
BOOL PAVLAN_bLoadVlan8021Q(void) DIRECT_FUNTYPE_REENT
{
    BYTE byVlanMode;
    PIVLAN_vGetVlanMode(&byVlanMode);
    if (byVlanMode == VLAN_MODE_8021Q)
    {
        PIVLNFLT_vInitPage(g_pSVlanIngrFlt);
        g_byTotalLineNum = 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) DIRECT_FUNTYPE_REENT
{
    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 + -