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

📄 cgi_set.c

📁 vt6528芯片交换机API函数和文档运行程序
💻 C
📖 第 1 页 / 共 3 页
字号:
    }

    return WEB_wGenResultMsgPkt(g_aszErrMsg[FWUPDT_OP_FAILURE]);
}


UINT16 CGI_wSetSnfCfg (void)
{
    UINT8    byTmp;
    UINT16  si;
    
    if (WEBg_SCgiInfo.u16ParaNum < 3)
        return WEB_wGenResultMsgPkt(s_szParaNumErr);

    STR_pvMemset(WEBg_pSSniffPage, 0, sizeof(SSniffPageCfg));

    WEBg_pSSniffPage->f2Mode = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[0]);
    WEBg_pSSniffPage->f6DestPort = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[1]);
    for (si = 2; si < WEBg_SCgiInfo.u16ParaNum; si++)
    {
        byTmp = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[si]);
        WEBg_pSSniffPage->abySrcPortMsk[byTmp/8] |= (0x01<<(byTmp%8));  // Beware of endian
    }

    byTmp = PISNF_bySavePage(WEBg_pSSniffPage);

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


UINT16 CGI_wSetQosCfg (void)
{
    UINT8 si;
    if (WEBg_SCgiInfo.u16ParaNum != g_byLogIdNum+9)
        return WEB_wGenResultMsgPkt(s_szParaNumErr);

    WEBg_pSQosPage->byQosMode = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[0]);

    for (si = 0; si < g_byLogIdNum; si++)
        WEBg_pSQosPage->abyStaticPrior[si] = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[si+1]);


    WEBg_pSQosPage->w8021pMap = 0;
    for (si=0; si<8; si++)
        WEBg_pSQosPage->w8021pMap |= (((UINT8)STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[si+g_byLogIdNum+1])) << ((7-si) * BIT_NUM_QUEUE_ID)); //*BIT_NUM_QUEUE_ID means 2bits indicate queue0~3


    PIQOS_vSavePage(WEBg_pSQosPage);

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


// to set vlan mode and delete vlan groups
UINT16 CGI_wSetVlanCfg (void)
{
    UINT8    byTmp, byRes;
    UINT16  wFailVid, si;

    if (WEBg_SCgiInfo.u16ParaNum == 0)
        return WEB_wGenResultMsgPkt(s_szParaNumErr);

    PIVLAN_vInitPage(WEBg_pSVlanPage);

    // change vlan mode
    byTmp = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[0]);
    if (WEBg_pSVlanPage->byVlanMode != byTmp)
    {
        WEBg_pSVlanPage->byVlanMode = byTmp;
        PIVLAN_vSetVlanMode(WEBg_pSVlanPage);

        // reboot, after 1 sec
        TMR_iSetTimer(100, (PFN_CALLBACK_TIMER)WEB_vReboot, NULL);
        return WEB_wGenResultMsgPkt("Reboot...");
    }

    // delete selected vlan groups
    if (WEBg_SCgiInfo.u16ParaNum == 1)
        return WEB_wGenResultMsgPkt("Nothing to delete");

    for (si=1; si<WEBg_SCgiInfo.u16ParaNum; si++)
    {
        WEBg_pSCurGrp->u16Vid = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[si]);
        byRes = PIVLAN_byDelGrp(WEBg_pSVlanPage, &wFailVid);
        if (byRes != OP_OK)
        {
            if (wFailVid != UINT16_MAX) {
                STR_iStrcpy((PSTR)&WEBg_SCgiInfo, g_aszErrMsg[byRes]);
                STR_iStrcat((PSTR)&WEBg_SCgiInfo, g_aszPortNameTable[wFailVid]);
                return WEB_wGenResultMsgPkt((PSTR)&WEBg_SCgiInfo);
            }
            else
                return WEB_wGenResultMsgPkt(g_aszErrMsg[byRes]);
        }
    }

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


UINT16 CGI_wSetVlanGrp (void)
{
    UINT8    si, byTmp;
    UINT16  wFailVid=0;

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

    PIVLAN_vInitPage(WEBg_pSVlanPage);

    // get vid
    STR_pvMemset(WEBg_pSCurGrp, 0, sizeof(SVlanGrp));
    WEBg_pSCurGrp->u16Vid = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[1]);

    // get member
    for (si=0; si<g_byLogIdNum; si++)
    {
        byTmp = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[si+2]) & 0x03;
        WEBg_pSCurGrp->abyMbrMsk[si/4] |= (byTmp << (si%4)*2);  // Beware of endian
    }

    // save config
    if (WEBg_SCgiInfo.apszParaVal[0][0] == 'A')
        byTmp = PIVLAN_byInsGrp(WEBg_pSVlanPage, &wFailVid);
    else
        byTmp = PIVLAN_byEditGrp(WEBg_pSVlanPage, &wFailVid);

    // return message
    if (byTmp == VLAN_OP_UNTAG_BELONG_OTHER_GRP) {
        STR_iStrcpy((PSTR)&WEBg_SCgiInfo, g_aszErrMsg[byTmp]);
        STR_iU32ToStrDec((PSTR)&WEBg_SCgiInfo + STR_iStrlen((PSTR)&WEBg_SCgiInfo), wFailVid);
        return WEB_wGenResultMsgPkt((PSTR)&WEBg_SCgiInfo);
    }
    else if (byTmp == VLAN_OP_FOUND_ISO_PORT) {
        STR_iStrcpy((PSTR)&WEBg_SCgiInfo, g_aszErrMsg[byTmp]);
        STR_iStrcat((PSTR)&WEBg_SCgiInfo, g_aszPortNameTable[wFailVid]);
        return WEB_wGenResultMsgPkt((PSTR)&WEBg_SCgiInfo);
    }
    else
        return WEB_wGenResultMsgPkt(g_aszErrMsg[byTmp]);
}


UINT16 CGI_wSetV1qifCfg (void)
{
    UINT8 si, byTmp;

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

    STR_pvMemset(WEBg_pSVlanIngrFlt, 0, sizeof(SVlanIngrFilterPageCfg));

    // prepare cfgbuf
    for (si=0; si<g_byLogIdNum; si++)
    {
        byTmp = (STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[si*2]) | (STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[si*2+1])<<1)) & 0x03;
        WEBg_pSVlanIngrFlt->abyCfg[si/4] |= (byTmp << (si%4)*2);
    }

    PIVLNFLT_vSavePage(WEBg_pSVlanIngrFlt);

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


UINT16 CGI_wSetSTPCfg (void)
{
    UINT8 si, u8Tmp;
    
    if (WEBg_SCgiInfo.u16ParaNum < 2)
        return WEB_wGenResultMsgPkt(s_szParaNumErr);

    STR_pvMemset(WEBg_pSSTPPage, 0, sizeof(SSTPPageCfg));

    WEBg_pSSTPPage->byMode = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[0]);
    for (si = 0; si < g_byLogIdNum; si++)
    {
        u8Tmp = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[si+1]);
        SWSRAM_vModifyBitsByByte( WEBg_pSSTPPage->abySTPPortState, (UINT8)(si*3), (UINT8)((si+1)*3-1), &u8Tmp);
    }

    u8Tmp = PISTP_bySavePage(WEBg_pSSTPPage);

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


// to set igmp mode and delete igmp groups
UINT16 CGI_wSetIGMPCfg (void)
{
    UINT8    u8Tmp, byRes;
    UINT16  si, u16Tmp;
    char    astrDelGrpIpList[SWITCH_IGMP_GRP_NUM*(IP_STRING_LEN+1)];        
    UINT16  awDelGrpIdList[SWITCH_IGMP_GRP_NUM];                      

    if (WEBg_SCgiInfo.u16ParaNum == 0)
        return WEB_wGenResultMsgPkt(s_szParaNumErr);

    STR_pvMemset(astrDelGrpIpList, 0, SWITCH_IGMP_GRP_NUM*(IP_STRING_LEN+1)*sizeof(char));
    STR_pvMemset(awDelGrpIdList, 0, SWITCH_IGMP_GRP_NUM*sizeof(UINT16));

    PIIGMP_vInitPage(WEBg_pSIGMPPage);

    // change igmp mode
    u8Tmp = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[0]);
    if (WEBg_pSIGMPPage->byMode != u8Tmp)
    {
        WEBg_pSIGMPPage->byMode = u8Tmp;
        PIIGMP_vSetIGMPMode(WEBg_pSIGMPPage);
        // reload igmp.htm
        return WEB_wGenRedirectPkt("ShowIGMPCfg");
    }
    else {
        if (!u8Tmp)     //disable
            // reload igmp.htm
            return WEB_wGenRedirectPkt("ShowIGMPCfg");
    }
    
    // delete selected igmp groups
    if (WEBg_SCgiInfo.u16ParaNum == 1)
        return WEB_wGenResultMsgPkt("Nothing to delete");

    //firstly save orig del grp value in buffer 
    for (si=1; si<WEBg_SCgiInfo.u16ParaNum; si++) {
        u16Tmp = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[si]);
        STR_iStrcpy(astrDelGrpIpList+(si-1)*(IP_STRING_LEN+1), WEBg_pSIGMPPage->astrGrpIpList+u16Tmp*(IP_STRING_LEN+1));
        awDelGrpIdList[si-1] = WEBg_pSIGMPPage->awValidGrpIdList[u16Tmp];                
    }

    for (si=1; si<WEBg_SCgiInfo.u16ParaNum; si++) {
        STR_pszStrcpy(WEBg_pSIGMPPage->SCurGrp.szIp, astrDelGrpIpList+(si-1)*(IP_STRING_LEN+1));
        WEBg_pSIGMPPage->SCurGrp.u16Vid = awDelGrpIdList[si-1];        

        byRes = PIIGMP_byDelGrp(WEBg_pSIGMPPage);
        if (byRes != OP_OK)
            return WEB_wGenResultMsgPkt(g_aszErrMsg[byRes]);
    }
    
    // return successive message
    return WEB_wGenResultMsgPkt(g_aszErrMsg[OP_OK]);
}


UINT16 CGI_wSetIGMPGrp (void)
{
    UINT8    si, u8Tmp;

    if (WEBg_SCgiInfo.u16ParaNum != g_byLogIdNum+6)
        return WEB_wGenResultMsgPkt(s_szParaNumErr);

    PIIGMP_vInitPage(WEBg_pSIGMPPage);
    STR_pvMemset(&WEBg_pSIGMPPage->SCurGrp, 0, sizeof(SIpmEntryPage));

    STR_pszStrcpy(WEBg_pSIGMPPage->SCurGrp.szIp, WEBg_SCgiInfo.apszParaVal[1]);
    WEBg_pSIGMPPage->SCurGrp.u16Vid = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[2]);
    //for console ui, bool value must be 0x00000000 or 0x01000000 for Big-Endian
    (*((PUINT8)&WEBg_pSIGMPPage->SCurGrp.bStatic)) = (UINT8)STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[3]);
    (*((PUINT8)&WEBg_pSIGMPPage->SCurGrp.bCpu)) = (UINT8)STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[4]);
    (*((PUINT8)&WEBg_pSIGMPPage->SCurGrp.bDp)) = (UINT8)STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[5]);

    // get member
    for (si=0; si<g_byLogIdNum; si++)
    {
        u8Tmp = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[si+6]) & 0x01;
        WEBg_pSIGMPPage->SCurGrp.abyMbrMsk[si/8] |= (u8Tmp << (si%8));  // Beware of endian
    }

    // save config
    if (WEBg_SCgiInfo.apszParaVal[0][0] == 'A')
        u8Tmp = PIIGMP_byInsGrp(WEBg_pSIGMPPage);
    else
        u8Tmp = PIIGMP_byEditGrp(WEBg_pSIGMPPage);

    // return message
    return WEB_wGenResultMsgPkt(g_aszErrMsg[u8Tmp]);
}


UINT16 CGI_wSetMibCntCfg (void)
{    
    PIMIB_vClearAllCntr();

    //after clearing all counters, then refresh the page
    return CGI_wShowMibCnt();
}


// delete smac groups
UINT16 CGI_wSetSMacCfg (void)
{
    UINT8        byRes;
    UINT16      si, u16Tmp;
    char        astrDelGrpMacList[SWITCH_SMAC_GRP_NUM*(MAC_STRING_LEN+1)];        
    UINT16      awDelGrpFidList[SWITCH_SMAC_GRP_NUM];                      
        
    STR_pvMemset(astrDelGrpMacList, 0, SWITCH_SMAC_GRP_NUM*(MAC_STRING_LEN+1)*sizeof(char));
    STR_pvMemset(awDelGrpFidList, 0, SWITCH_SMAC_GRP_NUM*sizeof(UINT16));

    PISMAC_vInitPage(WEBg_pSSMacPage);

    // delete selected smac groups
    if (WEBg_SCgiInfo.u16ParaNum == 0)
        return WEB_wGenResultMsgPkt("Nothing to delete");

    //firstly save orig del grp value in buffer 
    for (si=0; si<WEBg_SCgiInfo.u16ParaNum; si++) {
        u16Tmp = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[si]);
        STR_iStrcpy(astrDelGrpMacList+si*(MAC_STRING_LEN+1), WEBg_pSSMacPage->astrGrpMacList+u16Tmp*(MAC_STRING_LEN+1));
        awDelGrpFidList[si] = WEBg_pSSMacPage->awValidGrpFidList[u16Tmp];                
    }

    for (si=0; si<WEBg_SCgiInfo.u16ParaNum; si++) {
        STR_iStrcpy(WEBg_pSSMacPage->SCurGrp.azMacAddr, astrDelGrpMacList+si*(MAC_STRING_LEN+1));
        WEBg_pSSMacPage->SCurGrp.u16Fid = awDelGrpFidList[si];        

        byRes = PISMACGP_byDelGrp(WEBg_pSSMacPage);
        if (byRes != OP_OK) 
            return WEB_wGenResultMsgPkt(g_aszErrMsg[byRes]);
    }

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


UINT16 CGI_wSetSMacGrp (void)
{
    UINT8    u8Tmp;
    char    astrBuff[28];

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

    PISMAC_vInitPage(WEBg_pSSMacPage);
    STR_pvMemset(&WEBg_pSSMacPage->SCurGrp, 0, sizeof(SSMacEntryPage));

    STR_pszStrcpy(astrBuff, WEBg_SCgiInfo.apszParaVal[1]);    
    s_vParseMacFromParaVal(astrBuff, WEBg_pSSMacPage->SCurGrp.azMacAddr);
    WEBg_pSSMacPage->SCurGrp.u16Fid = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[2]);
    WEBg_pSSMacPage->SCurGrp.bySrcId = STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[3]);
    //for console ui, bool value must be 0x00000000 or 0x01000000 for Big-Endian
    (*((PUINT8)&WEBg_pSSMacPage->SCurGrp.bHiPriDmac)) = (UINT8)STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[4]);
    (*((PUINT8)&WEBg_pSSMacPage->SCurGrp.bHiPriSmac)) = (UINT8)STR_u32StrDecToU32(WEBg_SCgiInfo.apszParaVal[5]);

⌨️ 快捷键说明

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