📄 endlib.c
字号:
/* endLib.c - support library for END-based drivers *//* Copyright 1984 - 2000 Wind River Systems, Inc. *//*modification history--------------------01t,16oct00,spm merged version 01u from tor3_0_x branch (base version 01r): adds support for link-level broadcasts and multiple snarf protocols, and code cleanup; removes etherLib.h dependency01s,29apr99,pul Upgraded NPT phase3 code to tor2.0.001r,16mar99,spm recovered orphaned code from tor2_0_x branch (SPR #25770)01q,09dec98,n_s fixed endEtherPacketDataGet to handle M_BLK chains. spr 2389501p,18nov98,n_s fixed end8023AddressForm. spr 22976.01o,10dec97,gnn made minor man page fixes01n,08dec97,gnn END code review fixes.01m,17oct97,vin changed prototypes, fixed endEtherPacketDataGet.01k,25sep97,gnn SENS beta feedback fixes01j,27aug97,gnn doc fixes and clean up.01i,25aug97,vin added netMblkDup in endEtherPacketDataGet().01h,22aug97,gnn cleaned up and improved endEtherAddrGet.01g,19aug97,gnn changes due to new buffering scheme. added routine to get addresses from a packet.01f,12aug97,gnn changes necessitated by MUX/END update.01e,jul3197,kbw fixed man page problems found in beta review01d,26feb97,gnn Set the type of a returned M_BLK_ID correctly.01c,05feb97,gnn Added a check for NULL on allocation.01b,03feb97,gnn Added default memory management routines.01a,26dec96,gnn written.*/ /*DESCRIPTIONThis library contains support routines for Enhanced Network Drivers.These routines are common to ALL ENDs. Specialized routines should onlyappear in the drivers themselves.INCLUDE FILES:*//* includes */#include "vxWorks.h"#include "memLib.h"#include "netBufLib.h"#include "endLib.h"#include "end.h"#include "etherMultiLib.h"#include "bufLib.h"#include "netinet/if_ether.h"/* defints *//* typedefs *//* globals *//* locals *//* forward declarations */void endRcvRtnCall ( END_OBJ* pEnd, M_BLK_ID pData ) { if (pEnd->receiveRtn) { pEnd->receiveRtn ((pEnd), pData); } }void tkRcvRtnCall ( END_OBJ* pEnd, M_BLK_ID pData, long netSvcOffset, long netSvcType, BOOL wrongDstInt, void* pAsyncData ) { if (pEnd->receiveRtn) { pEnd->receiveRtn ((pEnd), pData, netSvcOffset , netSvcType, wrongDstInt, pAsyncData); } }void endTxSemTake ( END_OBJ* pEnd, int tmout ) { semTake(pEnd->txSem,tmout); }void endTxSemGive ( END_OBJ* pEnd ) { semGive (pEnd->txSem); }void endFlagsClr ( END_OBJ* pEnd, int clrBits ) { pEnd->flags &= ~clrBits; }void endFlagsSet ( END_OBJ* pEnd, int setBits ) { pEnd->flags |= (setBits); }int endFlagsGet ( END_OBJ* pEnd ) { return(pEnd->flags); }int endMultiLstCnt ( END_OBJ* pEnd ) { return (lstCount(&pEnd->multiList)); }ETHER_MULTI* endMultiLstFirst ( END_OBJ *pEnd ) { return ((ETHER_MULTI *)(lstFirst(&pEnd->multiList))); }ETHER_MULTI* endMultiLstNext ( ETHER_MULTI* pCurrent ) { return ((ETHER_MULTI *)(lstNext(&pCurrent->node))); }char* endDevName ( END_OBJ* pEnd ) { return(pEnd->devObject.name); }void endObjectUnload ( END_OBJ* pEnd ) { lstFree (&pEnd->multiList); lstFree (&pEnd->protocols); }/******************************************************************************** mib2Init - initialize a MIB-II structure** Initialize a MIB-II structure. Set all error counts to zero. Assume* a 10Mbps Ethernet device.** RETURNS: OK or ERROR.*/STATUS mib2Init ( M2_INTERFACETBL *pMib, /* struct to be initialized */ long ifType, /* ifType from m2Lib.h */ UCHAR * phyAddr, /* MAC/PHY address */ int addrLength, /* MAC/PHY address length */ int mtuSize, /* MTU size */ int speed /* interface speed */ ) { /* Clear out our statistics. */ bzero ((char *)pMib, sizeof (*pMib)); pMib->ifPhysAddress.addrLength = addrLength; /* Obtain our Ethernet address and save it */ bcopy ((char *) phyAddr, (char *)pMib->ifPhysAddress.phyAddress, pMib->ifPhysAddress.addrLength); /* Set static statistics. assume ethernet */ pMib->ifType = ifType; pMib->ifMtu = mtuSize; pMib->ifSpeed = speed; return OK; }/******************************************************************************** mib2ErrorAdd - change a MIB-II error count** This function adds a specified value to one of the MIB-II error counters* in a MIB-II interface table. The counter to be altered is specified* by the errCode argument. Specifying a negative value reduces the error* count, a positive value increases the error count.** RETURNS: OK or ERROR.*/STATUS mib2ErrorAdd ( M2_INTERFACETBL * pMib, int errCode, int value ) { switch (errCode) { default: case MIB2_IN_ERRS: pMib->ifInErrors += value; break; case MIB2_IN_UCAST: pMib->ifInUcastPkts += value; break; case MIB2_OUT_ERRS: pMib->ifOutErrors += value; break; case MIB2_OUT_UCAST: pMib->ifOutUcastPkts += value; break; } return OK; }/********************************************************************************* endObjInit - initialize an END_OBJ structure** This routine initializes an END_OBJ structure and fills it with data from * the argument list. It also creates and initializes semaphores and * protocol list.** RETURNS: OK or ERROR.*/STATUS endObjInit ( END_OBJ * pEndObj, /* object to be initialized */ DEV_OBJ* pDevice, /* ptr to device struct */ char * pBaseName, /* device base name, for example, "ln" */ int unit, /* unit number */ NET_FUNCS * pFuncTable, /* END device functions */ char* pDescription ) { pEndObj->devObject.pDevice = pDevice; /* Create the transmit semaphore. */ pEndObj->txSem = semMCreate ( SEM_Q_PRIORITY | SEM_DELETE_SAFE | SEM_INVERSION_SAFE); if (pEndObj->txSem == NULL) { return (ERROR); } /* Install data and functions into the network node. */ pEndObj->flags = 0; lstInit (&pEndObj->protocols); /* Head of protocol list, */ /* none yet. */ /* Check and control the length of the name string. */ if (strlen(pBaseName) > sizeof(pEndObj->devObject.name)) pBaseName[sizeof(pEndObj->devObject.name - 1)] = EOS; strcpy (pEndObj->devObject.name, pBaseName); /* Check and control the length of the description string. */ if (strlen(pDescription) > sizeof(pEndObj->devObject.description)) pDescription[sizeof(pEndObj->devObject.description - 1)] = EOS; strcpy (pEndObj->devObject.description, pDescription);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -