📄 cgi_set.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: 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 + -