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

📄 pppmib.c

📁 PPPoE协议在Psos中的实现源代码
💻 C
字号:
/************************************************************************/
/*                                                                      */
/*   MODULE:  pppmib.c                                                  */
/*   PRODUCT: pNA+,  OpEN TCP/IP PPP driver                             */
/*   PURPOSE: PPPMIB  module                                            */
/*   DATE:    28 February, 1996                                         */
/*                                                                      */
/*----------------------------------------------------------------------*/
/*                                                                      */
/*              Copyright 1996, Integrated Systems, Inc.                */
/*                      ALL RIGHTS RESERVED                             */
/*                                                                      */
/*   Permission is hereby granted to licensees of Integrated Systems,   */
/*   Inc. products to use or abstract this computer program for the     */
/*   sole purpose of implementing a product based on Integrated         */
/*   Systems, Inc. products.   No other rights to reproduce, use,       */
/*   or disseminate this computer program, whether in part or in        */
/*   whole, are granted.                                                */
/*                                                                      */
/*   Integrated Systems, Inc. makes no representation or warranties     */
/*   with respect to the performance of this computer program, and      */
/*   specifically disclaims any responsibility for any damages,         */
/*   special or consequential, connected with the use of this program.  */
/*                                                                      */
/************************************************************************/
#include "ni_ppp.h"
#include "fsm.h"
#include "ipcp.h"
#include "pppmib.h"

static int get_pppIfEntry(int unit, struct mib_pppifentry *arg);
static int get_pppLinkStatusEntry(int unit, struct mib_pppLinkStatusEntry *arg);
static int get_pppIPEntry(int unit, struct mib_pppIPEntry *arg);

extern PCI pcis[];
extern struct ppp_pccb PPPpccb[];
extern ipcp_options ipcp_hisoptions[];
extern ipcp_options ipcp_gotoptions[];

int
ppp_ioctl(int unit, int command, void *arg)
{
    int rc;

    switch (command) {
    case PIOCGIFENTRY:
        rc = get_pppIfEntry(unit, arg);
        break;
    case PIOCGLINKSTATUS:
        rc = get_pppLinkStatusEntry(unit, arg);
        break;
    case PIOCGIPENTRY:
        rc = get_pppIPEntry(unit, arg);
        break;
    default:
        rc = -1;
        break;
    }

    return (rc);
}

static int
get_pppIfEntry(int unit, struct mib_pppifentry *arg)
{
    int rc = 0;
    struct ppp_pccb *ccb = &PPPpccb[unit];

    if ((unit < NUM_PPP) && ccb->pppstatus == PSUP )
    {
        arg->ie_descr = ccb->mibstat.ifDescr;
        arg->ie_type  = 23; /* PPP */

        arg->ie_mtu   = ccb->mibstat.mtu;
        arg->ie_speed = ccb->mibstat.speed;
        arg->ie_physaddress = "";
        arg->ie_adminstatus = ccb->mibstat.ifadminstatus;
        arg->ieu_operstatus = ccb->mibstat.ifoperstatus;
        arg->ie_lastchange  = 0;
        arg->ie_inoctets    = ccb->mibstat.inoctets;
        arg->ie_inucastpkts = ccb->mibstat.inucastpkts;
        arg->ie_innucastpkts= ccb->mibstat.innucastpkts;
        arg->ie_indiscards  = ccb->mibstat.indiscards;
        arg->ie_inerrors    = ccb->mibstat.inerrors;
        arg->ie_inunknownprotos = ccb->mibstat.inunknownprotos;
        arg->ie_outoctets   = ccb->mibstat.outoctets;
        arg->ie_outdiscards = ccb->mibstat.outdiscards;
        arg->ie_outucastpkts= ccb->mibstat.outucastpkts;
        arg->ie_outnucastpkts = ccb->mibstat.outnucastpkts;
        arg->ie_outerrors = ccb->mibstat.outerrors;
        arg->ie_outqlen  = ccb->mibstat.ifoutqlen;
        arg->ie_specific = 0;
    }
    else rc = -1;

    return (rc);
}

static int
get_pppLinkStatusEntry(int unit, struct mib_pppLinkStatusEntry *arg)
{
    int rc = 0;
    struct ppp_pccb *ccb = &PPPpccb[unit];

    if ((unit < NUM_PPP) && ccb->pppstatus == PSUP )
    {
        arg->ie_PhysicalIndex = 0;
        arg->ie_BadAddresses  = ccb->mibstat.badaddress;
        arg->ie_BadControls   = ccb->mibstat.badcontrols;
        arg->ie_PacketTooLongs= ccb->mibstat.packettoolongs;
        arg->ie_BadFCSs   = ccb->mibstat.badfcs;
        arg->ie_LocalMru  = ccb->mibstat.localmru;
        arg->ie_RemoteMRU = ccb->mibstat.remotemru;
        arg->ie_LocalToPeerACCMap = ccb->mibstat.sendaccmap;
        arg->ie_PeerToLocalACCMap = ccb->mibstat.recvaccmap;
        arg->ie_LToRProtComp = ccb->mibstat.sendpcomp;
        arg->ie_RToLProtComp = ccb->mibstat.recvpcomp;
        arg->ie_LToRACCompression = ccb->mibstat.sendaccomp;
        arg->ie_RToLACCompression = ccb->mibstat.recvaccomp;
        arg->ie_TransmitFcsSize = 16;
        arg->ie_ReceiveFcsSize = 16;
    }
    else rc = -1;

    return (rc);
}

static int
get_pppIPEntry(int unit, struct mib_pppIPEntry *arg)
{
    int rc = 0;

    if ((unit < NUM_PPP) && PPPpccb[unit].pppstatus == PSUP )
    {
        arg->ie_OperStatus = 1;
        arg->ie_LToRCompProt = pcis[unit].pci_flags & PCI_FLAGS_VJCOMP;
        arg->ie_RToLCompProt = pcis[unit].pci_flags & PCI_FLAGS_VJCOMP;
        arg->ie_RemoteMaxSlotId = ipcp_hisoptions[unit].maxslotindex;
        arg->ie_LocalMaxSlotId  = ipcp_gotoptions[unit].maxslotindex;
    }
    else rc = -1;

    return (rc);
}

⌨️ 快捷键说明

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