亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pppoethernet.c

?? 這是全套的PPP協(xié)議的源碼
?? C
?? 第 1 頁 / 共 5 頁
字號(hào):
		pStackData->userHandle = userHandle;		pStackData->stackObjCallbacks = callbacks;		pComponent->pppOEServiceNameMap[i] = pComponentState;		pProfileData=(PPPOE_PROFILE_DATA *)pComponentState->profileData;		if (strlen(pProfileData->acNameTag) == 0)		    {            /* profile has no name for the AC, use default name */		    sprintf(pProfileData->acNameTag,PPPOE_DEFAULT_AC_NAME);		    }		pComponent->pppOEServices++;		return OK;		}	    }	}    printf("PPPOE: Too many services; Max allowed = %d\n",	    pComponent->pppOEMaxServices);    return ERROR;    }/********************************************************************************* pppOEServiceNameDelete - delete a service name and all corresponding stacks ** This routine deletes the stacks corresponding to the svcName** RETURNS: OK on success and ERROR otherwise*/STATUS pppOEServiceNameDelete    (    PFW_OBJ * pfw,		/* pfw from which to delete service */    char * svcName       	/* service name we're deleting */    )    {    PPPOE_STACK_DATA * pStackData =  NULL;    PFW_PLUGIN_OBJ_STATE * pComponentState;    int i;    char service[32];    PPPOE_COMPONENT *pComponent;    BOOL found = FALSE;    if (pfw == NULL)	{	printf ("PPPOE: Null framework object \n");	return ERROR;	}    pComponent =(PPPOE_COMPONENT *)pfwPluginObjGet(pfw,"PPP_O_ETHERNET");    bzero(service,32);    if (strlen(svcName))	strcpy(service,svcName);    else	sprintf(service,"%s","ANY");    for (i = 1 ; i <= pComponent->pppOEMaxServices ; i++)	{	if ((pComponentState = pComponent->pppOEServiceNameMap[i]) == NULL)	    {	    continue;	    }	pStackData = (PPPOE_STACK_DATA *)pComponentState->stackData;	if (!strcmp(pStackData->serviceName,service))	    {	    /* delete connection */	    pfwStackDelete (pComponentState->stackObj);	    found = TRUE;	    }	}    if (!found)        {        printf("PPPOE: No such service: %s\n",svcName);        return (ERROR);        }    else        return (OK);    }/******************************************************************************** pppOEStackObjResolve - obtain stack object from received PPPOE frame ** This is the stack object resolver and it returns a valid stack object* within which the frame will be processed further or ERROR if cannot* determine the stack object** RETURNS: The stack object if successful and ERROR otherwise */LOCAL PFW_STACK_OBJ * pppOEStackObjResolve    (    PFW_PLUGIN_OBJ * pPluginObj,	/* this component */    M_BLK_ID         pFrame,            /* the received ethernet frame */    ULONG            portId    )    {    struct ether_header * pEtherHdr = NULL;    PPPOE_HEADER  * pPPPOEHeader = NULL;    PPPOE_TLV * pTlv = NULL;    PPPOE_TLV * foundTlv = NULL;    PFW_STACK_OBJ * stackObj;    PPPOE_COMPONENT * pComponent = (PPPOE_COMPONENT *)pPluginObj;    PFW_STACK_STATUS stackStatus = PFW_STACK_ADD_IN_PROGRESS;    PFW_PLUGIN_OBJ_STATE * pppoeACState = NULL;    if (pFrame == NULL)	return NULL;    /* if we dont have the headers in the first MBLK drop the packet */    if (pFrame->mBlkHdr.mLen >= 	    (sizeof(struct ether_header) + sizeof(PPPOE_HEADER)))	{	pEtherHdr = mtod (pFrame, struct ether_header *);	}    else	return NULL;    /* ethertype field has to indicate session or a discovery frame */    if ((ntohs(pEtherHdr->ether_type) != ETHERTYPE_PPPOE_DISCOVERY) &&	(ntohs(pEtherHdr->ether_type) != ETHERTYPE_PPPOE_SESSION))	return NULL;    /*     * check the PPPOE header and in the case of DISCOVERY packets     * PPPOE expects a contiguous buffer!!     */    pPPPOEHeader = (PPPOE_HEADER *)(pFrame->mBlkHdr.mData + 				    sizeof(struct ether_header));    /* check if we have as much data as the header says we do */    if (pFrame->mBlkHdr.mLen < (ntohs(pPPPOEHeader->pppOE_length) +			    sizeof(PPPOE_HEADER) + sizeof(struct ether_header)))	return NULL;    /* point to the first tlv */    pTlv = (PPPOE_TLV *)((char *)pPPPOEHeader + sizeof(PPPOE_HEADER));    /*     * try to find the stack object depending on the type of PPOE packet     */    switch (pPPPOEHeader->pppOE_code)	{	/* these two cases are encountered by the Access concentarator */	case PPPOE_CODE_PADI:	    /* incoming PADI must have a service name tag */	    if ((foundTlv = pppOEFindTlv(PPPOE_TAG_SVC_NAME,pTlv,pFrame))!=NULL)		{	        return (pppOESvcStackObjGet(pComponent, foundTlv, portId));		}	   /* this will return NULL */	   break;	case PPPOE_CODE_PADR:	    /* search for and return the AC cookie we inserted in the PADO */	    if ((foundTlv=pppOEFindTlv(PPPOE_TAG_AC_COOKIE,pTlv,pFrame)) !=NULL)		{	        bcopy(PPPOE_TAG_VALUE(foundTlv),(char *)&stackObj,					       sizeof(PFW_STACK_OBJ *));		/* verify if AC cookie  is valid */		if (pppOEVerifyACCookie (pComponent, stackObj) != OK)		    break;		else		    {		    PPPOE_STACK_DATA * pStackData;		    pppoeACState = pfwPluginObjStateGet(stackObj,pPluginObj);		    if (pppoeACState == NULL)			break;		    pStackData = pppoeACState->stackData;		    /*		     * if we've received a request based on our PADO with 		     * multiple serviceNames in it and we need to find the		     * stack based on the serviceName in this request		     */		    if (!strcmp(pStackData->serviceName,"ANY"))			{			if ((foundTlv = pppOEFindTlv(PPPOE_TAG_SVC_NAME,					             pTlv,pFrame))!=NULL)			    {			    /*			     * we dont accept a zero length service name tag			     * in a PADR			     */			    if (PPPOE_TAG_LENGTH(foundTlv) == 0)				break;			    return (pppOESvcStackObjGet(pComponent, foundTlv, portId));			    }			else 			    break; /* cant find a service name in this frame */			}		    return (stackObj);		    }		}	   /* this will return NULL */	   break;	/* these two cases are encountered by the client/host */	case PPPOE_CODE_PADO:	    /*	     * a PADO must have a AC name tag; if it does we find	     * the host unique cookie that we sent out in the PADI	     * and return it as our stack object 	     */	    if ((foundTlv=pppOEFindTlv(PPPOE_TAG_AC_NAME,pTlv,pFrame)) !=NULL)		{		if ((foundTlv = pppOEFindTlv(PPPOE_TAG_HOST_UNIQ,pTlv,pFrame))		    !=NULL)		    {		    /* the host cookie is the stack object that sent the PADI */		    bcopy(PPPOE_TAG_VALUE(foundTlv),(char *)&stackObj,					       sizeof(PFW_STACK_OBJ *));		    /* verify that stack is valid */		    if (pfwStackStatusGet (stackObj, &stackStatus) != OK)			break;		    else			return (stackObj);		    }		}	   /* this will return NULL */	   break;	case PPPOE_CODE_PADS:	    /*	     * check session ID to be non NULL. If it is NULL an AC error	     * occured; return NULL after printing any AC system errors 	     */	    if (ntohs(pPPPOEHeader->pppOE_session) == PPPOE_SESSION_DISCOVERY)		/*|| (pPPPOEHeader->pppOE_code == 0))*/		{		if ((foundTlv=pppOEFindTlv(PPPOE_TAG_AC_SYSTEM_ERROR,pTlv,							    pFrame)) != NULL)		    {		    char message[256];		    bzero(message,sizeof(message));		    strncpy(message,PPPOE_TAG_VALUE(foundTlv),255);		    if (message[0] != '\0')			printf ("PPPOE: AC SYSTEM ERROR: %s\n",message);		    }		break;		}	    /* Once again the host cookie is our stack object */	    if ((foundTlv=pppOEFindTlv(PPPOE_TAG_HOST_UNIQ,pTlv,pFrame)) !=NULL)		{	        bcopy(PPPOE_TAG_VALUE(foundTlv), (char *)&stackObj,						       sizeof(PFW_STACK_OBJ *));		/* verify that stack is valid */		if (pfwStackStatusGet (stackObj, &stackStatus) != OK)		    break;		else		    return (stackObj);		}	   /* this will return NULL */	   break;	/* encountered by both AC and host during the session phase */	case PPPOE_CODE_SESSION:	case PPPOE_CODE_PADT:	    /* find the stackObj from the MAP(sessionID,stack object) */	    stackObj = pppOEStackObjGet(pComponent,		    ntohs(pPPPOEHeader->pppOE_session),		    pEtherHdr->ether_shost);	    /* verify that stack is valid and ready */	    if ((pfwStackStatusGet (stackObj, &stackStatus) != OK) ||		(stackStatus != PFW_STACK_READY))		break;	    else		return (stackObj);	default:	    break;	}    return NULL;    }/******************************************************************************** pppOEProfileDataConstruct - initialize profile data for PPP over Ethernet** This function is called by the framework to get default values for the* parameters managed and supported by this component** RETURNS: OK on success and ERROR otherwise*/LOCAL STATUS pppOEProfileDataConstruct    (    PFW_OBJ * pfw,    void * pProfileData 	/* reference to this component's profile data */    )    {    PPPOE_PROFILE_DATA * pPPPOEProfileData = (PPPOE_PROFILE_DATA *)pProfileData;    bzero((void *)pPPPOEProfileData, sizeof(PPPOE_PROFILE_DATA));    /* set some default values */    pPPPOEProfileData->connectionMode = PPPOE_HOST_MODE;    pPPPOEProfileData->discoveryRetries = PPPOE_DISCOVERY_RETRIES;    pPPPOEProfileData->minDiscTimeout = PPPOE_MIN_TIMEOUT;    return OK;    }/******************************************************************************** pppOEStackDataConstruct - initialize stack data for PPP over Ethernet** This function is called by the framework at the time this component is* included in a stack for the purpose of allowing the component to initialize* its stack data** RETURNS: OK on success and ERROR otherwise*/LOCAL STATUS pppOEStackDataConstruct    (    PFW_OBJ * pfw,    void * stackData, 	/* reference to this component's stack data */    void * profileData	/* reference to this component's profile data */    )    {    PPPOE_STACK_DATA * pStackData = (PPPOE_STACK_DATA *)stackData;    bzero((void *)pStackData, sizeof(PPPOE_STACK_DATA));    pStackData->collectPppAttributesEvent = NULL;    pStackData->lcpUpFlag = FALSE;    pStackData->sendPADT = TRUE;    if  ((pStackData->netPoolId = pfwNetPoolIdGet(pfw)) == NULL)	{	printf ("PPPOE: must have a valid netPoolId; see pfwCreate()\n");	return ERROR;	}    if  (NULL == (pStackData->pppSubordinateLayerDeadEvent =                  pfwEventObjGet(pfw, "PPP_SUB_LAYER_DEAD_EVENT")))    return(ERROR);    return OK;    }/******************************************************************************** pppOEStackDataDestruct - clean up and close stack data** This function is called by the framework at the time this component is* removed from a stack for the purpose of allowing the component to cleanup* its stack data** RETURNS: OK on success and ERROR otherwise*/LOCAL STATUS pppOEStackDataDestruct    (    PFW_OBJ * pfw,    void * stackData, 	/* reference to this component's stack data */    void * profileData	/* reference to this component's profile data */    )    {    PPPOE_STACK_DATA * pStackData = (PPPOE_STACK_DATA *)stackData;    PPPOE_FREE_RECVD_PKT(pStackData);    PPPOE_FREE_RETRY_PKT(pStackData);    return OK;    }/******************************************************************************** pppOEStackDel - Delete an established PPPOE session** This is the first interface invoked by the framework when deleting a * PPP connection* * RETURNS: OK on success and ERROR otherwise*/LOCAL STATUS pppOEStackDel    (    PFW_PLUGIN_OBJ_STATE * pComponentState /* our state for this stack */    )    {    PPPOE_COMPONENT * pComponent = 			    (PPPOE_COMPONENT *)pComponentState->pluginObj;    PPPOE_STACK_DATA * pStackData =			    (PPPOE_STACK_DATA *)(pComponentState->stackData);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产亚洲另类动漫| 亚洲精品在线免费观看视频| 99视频有精品| 成人国产在线观看| 国产91精品一区二区| 国产一区二区三区黄视频 | 亚洲国产毛片aaaaa无费看 | 久99久精品视频免费观看| 日韩高清不卡一区| 奇米777欧美一区二区| 蜜桃久久精品一区二区| 久久国内精品视频| 国产在线乱码一区二区三区| 国产一区二区免费在线| 国产精品综合二区| 成人免费毛片高清视频| 91丨porny丨中文| 欧美性受xxxx黑人xyx性爽| 欧美天堂亚洲电影院在线播放| 欧美色图免费看| 日韩免费一区二区| 久久久综合视频| 中文字幕在线一区| 一区二区三区在线视频免费观看| 亚洲综合色丁香婷婷六月图片| 亚洲成人动漫在线免费观看| 免费国产亚洲视频| 国产.欧美.日韩| 91九色最新地址| 日韩视频免费观看高清完整版| 精品少妇一区二区三区日产乱码| 国产日韩亚洲欧美综合| 亚洲视频在线观看一区| 亚洲午夜日本在线观看| 蜜桃av噜噜一区二区三区小说| 国产毛片精品视频| 91网站视频在线观看| 欧美日韩国产高清一区| 久久久精品免费免费| 亚洲精品videosex极品| 欧美aaa在线| 国产精品一级在线| 欧美影视一区二区三区| 久久久不卡网国产精品一区| 一区二区三区中文字幕电影| 久久疯狂做爰流白浆xx| 99国产精品一区| 日韩欧美成人激情| 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲国产精品精华液2区45| 亚洲精品亚洲人成人网在线播放| 亚洲不卡av一区二区三区| 国产精品一区二区在线观看不卡| 色爱区综合激月婷婷| 久久久久国产成人精品亚洲午夜| 亚洲一区二区高清| 国产v综合v亚洲欧| 欧美精品久久久久久久多人混战 | 国产精品第四页| 三级欧美在线一区| 99视频在线精品| 欧美成人一区二区三区片免费| 亚洲精品午夜久久久| 国产一区激情在线| 欧美一区二区视频网站| 亚洲欧美另类在线| 国产精品18久久久久久久久| 这里只有精品免费| 亚洲精品ww久久久久久p站| 国产98色在线|日韩| 欧美一卡二卡在线观看| 亚洲黄一区二区三区| 成人综合在线网站| 精品久久久久久久人人人人传媒| 一级日本不卡的影视| 成人高清免费观看| 日韩免费高清视频| 青娱乐精品视频| 欧美老年两性高潮| 亚洲乱码国产乱码精品精的特点| 国产成人综合亚洲91猫咪| 日韩午夜在线影院| 视频一区欧美日韩| 欧美日韩在线一区二区| 亚洲男人电影天堂| 91视视频在线观看入口直接观看www| 久久久久久久综合日本| 久久不见久久见免费视频1| 欧美日韩成人高清| 亚洲国产欧美日韩另类综合| 色婷婷国产精品久久包臀| 中文av字幕一区| 国产精品一区一区| 国产日韩精品久久久| 极品销魂美女一区二区三区| 日韩一区二区在线观看视频 | 日韩精品一级二级| 欧美日韩免费不卡视频一区二区三区| 综合中文字幕亚洲| 91网站最新地址| 亚洲乱码日产精品bd| 在线观看视频一区二区| 一区二区三区欧美视频| 色视频欧美一区二区三区| 亚洲视频免费在线观看| 在线中文字幕一区| 亚洲国产视频直播| 555夜色666亚洲国产免| 免费观看91视频大全| 精品国产一二三| 国产精品一二一区| 国产欧美精品一区aⅴ影院| 国产91丝袜在线18| 亚洲四区在线观看| 欧美四级电影在线观看| 日韩精品视频网站| 精品国产亚洲在线| 成人激情电影免费在线观看| 国产精品白丝在线| 欧美无人高清视频在线观看| 日韩在线一二三区| 久久综合成人精品亚洲另类欧美| 国产精品亚洲第一| 中文字幕一区免费在线观看| 一本大道av一区二区在线播放| 亚洲欧美另类久久久精品2019| 色婷婷久久99综合精品jk白丝| 亚州成人在线电影| 精品国产乱码久久久久久牛牛 | 色婷婷亚洲精品| 丝袜脚交一区二区| 久久先锋影音av| 99免费精品在线| 丝袜美腿亚洲一区二区图片| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 在线免费观看日韩欧美| 日韩福利视频网| 国产精品全国免费观看高清| 欧美三片在线视频观看| 精品一区二区三区欧美| 中文字幕亚洲区| 91精品国产一区二区三区香蕉| 国产一区二区三区综合| 亚洲乱码国产乱码精品精98午夜| 欧美另类videos死尸| 国产精品白丝av| 夜夜揉揉日日人人青青一国产精品 | 精品卡一卡二卡三卡四在线| www.在线欧美| 久久精品免费看| 亚洲同性同志一二三专区| 91精品欧美一区二区三区综合在 | 色综合久久久久久久久| 热久久久久久久| 综合激情网...| 精品久久久久久久久久久久包黑料 | 欧美精品一区二区三区蜜臀| 99天天综合性| 久久电影国产免费久久电影| 亚洲欧美日韩一区二区三区在线观看| 91精品国产综合久久精品app| 成人激情综合网站| 精品一区二区免费| 亚洲第一狼人社区| 国产精品福利电影一区二区三区四区| 91精品国产综合久久精品麻豆| 91在线云播放| 国产精品中文字幕欧美| 日韩在线观看一区二区| 亚洲精品写真福利| 欧美激情一区二区| 欧美mv日韩mv国产| 6080国产精品一区二区| 在线亚洲精品福利网址导航| 国产aⅴ精品一区二区三区色成熟| 天天综合日日夜夜精品| 亚洲免费观看在线视频| 国产视频视频一区| 日韩免费电影网站| 69堂成人精品免费视频| 日本久久电影网| 99视频在线精品| 成人一道本在线| 免费在线成人网| 亚洲成人动漫在线观看| 亚洲视频一二三| 中文字幕高清一区| 久久综合资源网| 精品久久一区二区| 欧美一区三区二区| 欧美日韩电影一区| 欧美丝袜丝nylons| 在线区一区二视频| 91豆麻精品91久久久久久| 91原创在线视频| 99久免费精品视频在线观看| 国产夫妻精品视频| 国产91丝袜在线播放九色| 国产福利精品导航| 成人在线综合网|