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

📄 cgi_set.c

📁 vt6528芯片交换机API函数和文档运行程序
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
 * 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:    cgi_set.c
 *
 * Purpose:
 *
 * Author:  Jenda Jao
 *
 * Date:    Jan 08, 2002
 *
 * Functions:
 *
 * Revision History:
 *
 */


#if !defined(__STR_H__)
#include "str.h"
#endif
#if !defined(__SOC_H__)
#include "soc.h"
#endif
#if !defined(__TIMER_H__)
#include "timer.h"
#endif
#if !defined(__SWSRAM_H__)
#include "swsram.h"
#endif
#if !defined(__SWSYS_H__)
#include "swsys.h"
#endif
#if !defined(__SWPKT_H__)
#include "swpkt.h"
#endif
#if !defined(__NETIF_H__)
#include "netif.h"
#endif
#include "cfgstr.h"
#include "weblib.h"
#include "pigencfg.h"
#include "pimsg.h"
#include "piportmp.h"
#include "pisystem.h"

#include "piipmmod.h"
#include "piipmgrp.h"
#include "pismacgp.h"
#include "pimib.h"
#include "pigmrpgp.h"
#include "pigmrpmd.h"

#include "pitrunk.h"
#include "piacl.h"
#include "piaclgrp.h"
#include "pimacfltmd.h"
#include "pimacfltgp.h"
#include "cgi_show.h"




/*---------------------  Static Definitions  ------------------------*/

/*---------------------  Static Types  ------------------------------*/

/*---------------------  Static Macros  -----------------------------*/

/*---------------------  Static Classes  ----------------------------*/

/*---------------------  Static Variables  --------------------------*/
static char s_szParaNumErr[] = "CGI ERROR: wrong parameters";

/*---------------------  Static Functions  --------------------------*/

static void s_vParseMacFromParaVal (char* pstrParaBuff, char* pstrMacBuff);

/*---------------------  Export Variables  --------------------------*/



UINT16 CGI_wLogin (void)
{
    if (WEBg_SCgiInfo.u16ParaNum != 2)
        goto LoginFail;

    PIADM_vInitPage(g_pSAdmPageCfg);
    if ((0 == STR_iStrcmp(WEBg_SCgiInfo.apszParaVal[0], g_pSAdmPageCfg->strEepromUsername)) 
            && (0 == STR_iStrcmp(WEBg_SCgiInfo.apszParaVal[1], g_pSAdmPageCfg->strEepromPasswd))) {
        WEB_vGenUniqueLoginID();
        return WEB_wGenRedirectPkt(g_aszWebLoginID);
    }

LoginFail:
    return WEB_wGenResultMsgPkt("Login incorrect");
}


UINT16 CGI_wLogout (void)
{
    g_aszWebLoginID[0] = '\0';
    return WEB_wGenResultMsgPkt("Logout OK");
}


UINT16 CGI_wSetRateCfg (void)
{
    UINT8    byPortId, byRtnCode;


    if (WEBg_SCgiInfo.u16ParaNum != g_byLogIdNum*2)
        return WEB_wGenResultMsgPkt(s_szParaNumErr);

    for (byPortId=0; byPortId<g_byLogIdNum; byPortId++) {
        WEBg_pSRatePage->au16Rate[byPortId*2] = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[byPortId*2]);
        WEBg_pSRatePage->au16Rate[byPortId*2+1] = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[byPortId*2+1]);
    }

    byRtnCode = PIRATE_bySavePage(WEBg_pSRatePage);

    // return successive message
    return WEB_wGenResultMsgPkt(g_aszErrMsg[byRtnCode]);
}


UINT16 CGI_wSetPortCfg (void)
{
    UINT8   byPortId, byGigaPortId;
    UINT8   u8ErrCode;


    if (WEBg_SCgiInfo.u16ParaNum != g_byModTrkLogIdNum * 4)
        return WEB_wGenResultMsgPkt(s_szParaNumErr);

    // Get config from EEPROM
    PIPORT_vInitPage(WEBg_pSPortPage);

    for (byPortId = 0; byPortId < g_byModTrkLogIdNum; byPortId++) {
        // if mega or giga port
        byGigaPortId = (PIPORTMP_dwLogIdToPhyMsk(g_abyModTrkLogIdList[byPortId]) & 0x3000000) >> 24;
        // giga ports
        if (byGigaPortId) {
            byGigaPortId--; // one-based to zero-based
            // Recognize port enable
            WEBg_pSPortPage->aSGigaPortCfg[byGigaPortId].f2Enable = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[byPortId*4]);
            // Recognize port auto
            WEBg_pSPortPage->aSGigaPortCfg[byGigaPortId].f2Auto = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[byPortId*4+1]);
            // Recognize port spd/dpx
            WEBg_pSPortPage->aSGigaPortCfg[byGigaPortId].f4SpdDpx = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[byPortId*4+2]);
            // Recognize port FC
            WEBg_pSPortPage->aSGigaPortCfg[byGigaPortId].f2FC = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[byPortId*4+3]);
        }
        // mega ports
        else {
            // Recognize port enable
            WEBg_pSPortPage->aSMegaPortCfg[byPortId].f1Enable = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[byPortId*4]);
            // Recognize port auto
            WEBg_pSPortPage->aSMegaPortCfg[byPortId].f1Auto = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[byPortId*4+1]);
            // Recognize port spd/dpx
            WEBg_pSPortPage->aSMegaPortCfg[byPortId].f3SpdDpx = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[byPortId*4+2]);
            // Recognize port FC
            WEBg_pSPortPage->aSMegaPortCfg[byPortId].f1FC = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[byPortId*4+3]);
        }
    }

    // Set config into HW & EEPROM
    u8ErrCode = PIPORT_bySavePage(WEBg_pSPortPage, &byPortId);

    // Wait for PHY Reauto finished
    SOC_vDelayPoll(5000);

    if (u8ErrCode != OP_OK) {

        STR_iStrcpy((PSTR)&WEBg_SCgiInfo, g_aszErrMsg[u8ErrCode]);
        if (u8ErrCode == PORT_OP_WRONG_AUTO_ABY)
            STR_iStrcat((PSTR)&WEBg_SCgiInfo, g_aszPortNameTable[byPortId]);
        return WEB_wGenResultMsgPkt((PSTR)&WEBg_SCgiInfo);
    }
    else
        return WEB_wGenResultMsgPkt(g_aszErrMsg[OP_OK]);
}


UINT16 CGI_wWriteDefault (void)
{
    PISYS_vBoardWriteDefault(&WEBg_UCfgBuf);
    
    // reboot, after 1 sec
    TMR_iSetTimer(100, (PFN_CALLBACK_TIMER)WEB_vReboot, NULL);
    // return successive message
    g_aszWebLoginID[0] = '\0';
    return WEB_wGenResultMsgPkt(g_aszErrMsg[OP_OK]);
}


UINT16 CGI_wReboot (void)
{
    // reboot, after 1 sec
    TMR_iSetTimer(100, (PFN_CALLBACK_TIMER)WEB_vReboot, NULL);
    g_aszWebLoginID[0] = '\0';
    return WEB_wGenResultMsgPkt(g_aszErrMsg[OP_OK]);
}


UINT16 CGI_wSetTrkCfg (void)
{
    UINT8   byPortId, byTmp;
    UINT16  wFailGrpId, u16GrpValid = 0;

    if (WEBg_SCgiInfo.u16ParaNum != SWITCH_TRUNKABLE_PORT_NUM)
        return WEB_wGenResultMsgPkt(s_szParaNumErr);

    STR_pvMemset(WEBg_pSTrkPage, 0, sizeof(STrkPageCfg));
    for (byPortId=0; byPortId<SWITCH_TRUNKABLE_PORT_NUM; byPortId++)
    {
        byTmp = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[byPortId]) & TRUNK_GRP_ID_MSK;
        
        if (byTmp)
        {
            SWSRAM_vModifyBitsByByte(WEBg_pSTrkPage->abyCfgBuf, byPortId*TRUNK_GRP_ID_BIT_NUM, (byPortId+1)*TRUNK_GRP_ID_BIT_NUM-1, &byTmp);
            u16GrpValid |= 0x01 << (byTmp-1);
        }
    }

    // write group valid to cfg buf
    //STR_pvMemset(WEBg_pSTrkPage, byGrpValid, 1);
    *(PUINT16)WEBg_pSTrkPage = u16GrpValid;

    byTmp = PITRK_bySavePage(WEBg_pSTrkPage, &wFailGrpId);

    // return message
    if (byTmp != OP_OK) {
        STR_iStrcpy((PSTR)&WEBg_SCgiInfo, g_aszErrMsg[byTmp]);
        STR_iStrcat((PSTR)&WEBg_SCgiInfo, g_aszPortNameTable[wFailGrpId]);
        return WEB_wGenResultMsgPkt((PSTR)&WEBg_SCgiInfo);
    }
    else
        return WEB_wGenResultMsgPkt(g_aszErrMsg[byTmp]);
}


UINT16 CGI_wSetMiscCfg (void)
{
    if (WEBg_SCgiInfo.u16ParaNum != 6)
        return WEB_wGenResultMsgPkt(s_szParaNumErr);


    WEBg_pSMiscPage->f3BSFMode          = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[0]);
    WEBg_pSMiscPage->f1CollisionForever = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[1]);
    WEBg_pSMiscPage->f2AutoAging        = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[2]);
    WEBg_pSMiscPage->f1MacHashMode      = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[3]);
    WEBg_pSMiscPage->f2AutoLogout       = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[4]);
    WEBg_pSMiscPage->f2WebAutoLogout    = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[5]);

    PIMISC_vSavePage(WEBg_pSMiscPage);

    // return successive message
    return WEB_wGenResultMsgPkt(g_aszErrMsg[OP_OK]);
}


UINT16 CGI_wSetAdmCfg (void)
{
    UINT8 byRtn;
    
    
    if (WEBg_SCgiInfo.u16ParaNum != 4)
        return WEB_wGenResultMsgPkt(s_szParaNumErr);

    PIADM_vInitPage(WEBg_pSAdmPage);
    WEBg_pSAdmPage->byLoginEn = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[0]);

    if (WEBg_pSAdmPage->byLoginEn) {
        // if any parameter is empty string, return error message
        if (WEBg_SCgiInfo.apszParaVal[1][0] == 0 ||
            WEBg_SCgiInfo.apszParaVal[2][0] == 0 ||
            WEBg_SCgiInfo.apszParaVal[3][0] == 0) {
            return WEB_wGenResultMsgPkt("CGI ERROR: Empty input");
        }

        STR_pszStrcpy(WEBg_pSAdmPage->strNewUsername, WEBg_SCgiInfo.apszParaVal[1]);
        STR_pszStrcpy(WEBg_pSAdmPage->strNewPasswd,   WEBg_SCgiInfo.apszParaVal[2]);
        STR_pszStrcpy(WEBg_pSAdmPage->strAgainPasswd, WEBg_SCgiInfo.apszParaVal[3]);

        byRtn = PIbyADM_SavePage(WEBg_pSAdmPage);
        if (byRtn == ADMIN_OP_DIFF_AGAIN_PASSWORD)
            return WEB_wGenResultMsgPkt(g_aszErrMsg[byRtn]);
    }
    else {
        PIbyADM_SavePage(WEBg_pSAdmPage);
        g_aszWebLoginID[0] = '\0';
    }

    return WEB_wPopupMsgBoxThenRedirect("Password changed. Please click OK to re-login", "/");
}


UINT16 CGI_wSetIpCfg (void)
{
    if (WEBg_SCgiInfo.u16ParaNum != 3)
        return WEB_wGenResultMsgPkt(s_szParaNumErr);

    // ip config
    STR_pszStrcpy(WEBg_pSIpConfPage->szIp,      WEBg_SCgiInfo.apszParaVal[0]);
    STR_pszStrcpy(WEBg_pSIpConfPage->szSubnet,  WEBg_SCgiInfo.apszParaVal[1]);
    STR_pszStrcpy(WEBg_pSIpConfPage->szGateway, WEBg_SCgiInfo.apszParaVal[2]);

    return WEB_wGenResultMsgPkt(g_aszErrMsg[PIIPCONF_bySavePage(WEBg_pSIpConfPage)]);
}


UINT16 CGI_wSetFwUpdt (void)
{
    UINT8   u8RetVal;
    
    
    if (WEBg_SCgiInfo.u16ParaNum != 2)
        return WEB_wGenResultMsgPkt(s_szParaNumErr);

    // firmware update
    STR_pszStrcpy(WEBg_pSFwUpdtPage->aszTftpServeIp,  WEBg_SCgiInfo.apszParaVal[0]);
    STR_pszStrcpy(WEBg_pSFwUpdtPage->aszTftpFilename, WEBg_SCgiInfo.apszParaVal[1]);

    // due to set g_u32TftpServeIpAddr,
    // must call PIFWUPDT_bySavePage() before PIFWUPDT_bFirmwareUpdate()
    u8RetVal = PIFWUPDT_bySavePage(WEBg_pSFwUpdtPage);
    if (u8RetVal != OP_OK)
        return WEB_wGenResultMsgPkt(g_aszErrMsg[u8RetVal]);

    if (PIFWUPDT_bFirmwareUpdate(g_u32TftpServeIpAddr, g_aszTftpFilename, TFTP_STA_END)) {
        // firmware update ok, logout, reboot
        g_aszWebLoginID[0] = '\0';
        return WEB_wPopupMsgBoxThenRedirect("Updating firmware...\\nAfter that system will reboot!\\nPlease re-login if necessary.", "/");

⌨️ 快捷键说明

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