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

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

?? dhcpc.c

?? Linux下DHCP Client的實(shí)現(xiàn)。
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
					if (thaddr)
						memcpy(thaddr, reparp.sha, 6);
					return ARP_HAVE_SAME_ADDR;
					//break;
				}
			}
		}
		else
		{
			break;
		}
		//break;
	}
	close(LpfSd);
	if (result>=25)
	{
		return ARP_ERROR;
	}
	return ARP_SUCCESS;
}

void DHCPClientFillReturnMsg(
		DhcpcMsgConfigStatus_t *Msg,
		char *szIfName,
		uint32_t ulMsgType,
		uint32_t ulConfigStatus
	)
{
	memset(Msg, 0, sizeof(DhcpcMsgConfigStatus_t));
	Msg->ulMsgType = ulMsgType;
	strcpy(Msg->szIfName, szIfName);
	Msg->ulConfigStatus = ulConfigStatus;
}

bool_t DHCPClientSendPktToConfigServer(
		DhcpcMsgConfigStatus_t *Msg,
		struct sockaddr_in saddr,
		int len
	)
{
	if (-1 == (sendto(s_iConfigServerSocket, 
		(char *)Msg, 
		sizeof(DhcpcMsgConfigStatus_t),
		0,
		(struct sockaddr *)&saddr,
		len)))
	{
		perror("send msg to config server error");
		return FALSE;
	}
	return TRUE;
}

//////////////////////////////////////////////////////////////////
//					Functions
//////////////////////////////////////////////////////////////////
void DHCPClientPrintAllTransActionId(void)
{
	DHCPClientBlock_t *pTmpBlock = NULL;
	for (pTmpBlock=pDHCPClientCtxtBlockHead;pTmpBlock!=NULL;pTmpBlock=pTmpBlock->next)
	{
		printf("Interface name = %s\n", pTmpBlock->cszIfName);
	}
}

void DHCPClientDeleteTimer(char *szIfName)
{
	DHCPWAITEvent_t *pTmpBlock = pDHCPClientTimerHead;
	DHCPWAITEvent_t *pLastBlock = pDHCPClientTimerHead;
	
	if (pDHCPClientTimerHead == pDHCPClientTimerTail)
	{
		//only one node
		printf("In DHCPClientDeleteTimer Only One Node!******************************\n");
		free(pDHCPClientTimerHead);
		pDHCPClientTimerHead = NULL;
		pDHCPClientTimerTail = NULL;
		return;
	}
	
	for (;pTmpBlock; pTmpBlock = pTmpBlock->Next)
	{
		if (0 == strcmp(pTmpBlock->cszIfName, szIfName))
		{
			if (NULL == pTmpBlock->Next)
			{
				//tail node
				while (pLastBlock->Next != pTmpBlock)
					pLastBlock = pLastBlock->Next;
				free(pTmpBlock);
				pLastBlock->Next = NULL;
				pDHCPClientTimerTail = pLastBlock;
				return ;
			}
			else
			{
				if (pDHCPClientTimerHead == pTmpBlock) //head node
				{
					pTmpBlock = pTmpBlock->Next;
					free(pDHCPClientTimerHead);
					pDHCPClientTimerHead = pTmpBlock;
					return;
				}
				while (pLastBlock->Next != pTmpBlock)
					pLastBlock = pLastBlock->Next;
				pLastBlock->Next = pLastBlock->Next->Next;
				return ;
			}
		}		
	}
}

int DHCPClientInsertTimer(DHCPWAITEvent_t *pTimer)
{
	//DHCPWAITEvent_t *insert = pTimer;
	DHCPWAITEvent_t *block = pDHCPClientTimerHead;
	if (NULL == pTimer)
	{
		return FALSE;
	}
	for (;block; block=block->Next)
	{
		//if (block->iIfIndex == pTimer->iIfIndex)
		if (0 == strcmp(block->cszIfName, pTimer->cszIfName))
			return FALSE;
	}
	if (NULL == pDHCPClientTimerHead)
	{
		pDHCPClientTimerHead = pDHCPClientTimerTail = pTimer;		
	}
	else
	{
		pDHCPClientTimerTail->Next = pTimer;
		pDHCPClientTimerTail = pTimer;
	}
	//pDHCPClientTimerCurrent = pDHCPClientTimerTail;
	return TRUE;
}

#define MAX_TRANSACTIONID	16
int DHCPClientInsertBlock(DHCPClientBlock_t *pCurBlock)
{
	int num = 0;
	DHCPClientBlock_t *DelBlock = NULL;
	DHCPClientBlock_t *block = pDHCPClientCtxtBlockHead;
	for (;block;block=block->next)
	{
		num++;
		//change judge interface index to interface name, because interface index can == -1
		//if (block->uiIfIndex == pCurBlock->uiIfIndex)
		if (0 == strcmp(block->cszIfName, pCurBlock->cszIfName))
		{
			return FALSE;
		}
	}
	if (NULL == pDHCPClientCtxtBlockHead)
	{
		pDHCPClientCtxtBlockHead = pDHCPClientCtxtBlockTail = pCurBlock;
		pDHCPClientCtxtBlockHead->next = NULL;
		return TRUE;
	}
	if (num > MAX_TRANSACTIONID)
	{
		//when list is too long then del some node
		//xhema 20041119 must modify don't delete node, but use other idea
		printf("over max num!\n");
		DelBlock = pDHCPClientCtxtBlockHead;
		pDHCPClientCtxtBlockHead = pDHCPClientCtxtBlockHead->next;
		free(DelBlock);
	}
	pDHCPClientCtxtBlockTail->next = pCurBlock;
	pDHCPClientCtxtBlockTail = pCurBlock;

	return TRUE;
}

uint32_t  DHCPClientRemoveInterface(char *szIfName)
{
	DHCPClientBlock_t *pTmpBlock = pDHCPClientCtxtBlockHead;
	DHCPClientBlock_t *pLastBlock = pDHCPClientCtxtBlockHead;
	if (pDHCPClientCtxtBlockHead == pDHCPClientCtxtBlockTail)
	{
		//only one node
		free(pDHCPClientCtxtBlockHead);
		pDHCPClientCtxtBlockHead = pDHCPClientCtxtBlockTail = NULL;
		g_pDHCPClientCurrent = NULL;
		return TRUE;
	}
	for (; pTmpBlock; pTmpBlock = pTmpBlock->next)
	{
		if (0 == (strcmp(pTmpBlock->cszIfName, szIfName)))
		{
			printf("In DHCPClientRemoveInterface: %s\n", pTmpBlock->cszIfName);
			if (NULL == pTmpBlock->next)
			{
				//tail node
				while (pLastBlock->next != pTmpBlock)
					pLastBlock = pLastBlock->next;
				free(pTmpBlock);
				pLastBlock->next = NULL;
				pDHCPClientCtxtBlockTail = pLastBlock;
				return TRUE;
			}
			else
			{
				printf("Next != NULL\n");
				if (pDHCPClientCtxtBlockHead == pTmpBlock)
				{
					pTmpBlock = pTmpBlock->next;
					free(pDHCPClientCtxtBlockHead);
					pDHCPClientCtxtBlockHead = pTmpBlock;
					return TRUE;
				}
				while (pLastBlock->next != pTmpBlock)
					pLastBlock = pLastBlock->next;
				pLastBlock->next = pLastBlock->next->next;
				return TRUE;
			}
		}		
	}
	return DHCPC_STATUS_IF_MISSED;
}

uint32_t DHCPClientFillInterfaceName(DhcpcMsgInterfaceList_t *ListMsg)
{
	int i = 0;
	DHCPClientBlock_t *pTmpBlock = pDHCPClientCtxtBlockHead;
	for (; pTmpBlock; pTmpBlock = pTmpBlock->next)
	{
		strcpy(ListMsg->szIfName[i++], pTmpBlock->cszIfName);
	}
	return TRUE;
}
uint32_t DHCPClientCurrentIfaceCount(void)
{
	uint32_t Num = 0;
	DHCPClientBlock_t *pTmpBlock = pDHCPClientCtxtBlockHead;
	for (;pTmpBlock; pTmpBlock = pTmpBlock->next)
	{
		Num++;
	}
	return Num;
}

DHCPClientBlock_t *DHCPClientIfaceIsAllocByIfName(char *szIfName)
{
	DHCPClientBlock_t *pTmpBlock = pDHCPClientCtxtBlockHead;
	for (;pTmpBlock; pTmpBlock = pTmpBlock->next)
	{
		if (0 == strcmp(szIfName, pTmpBlock->cszIfName))
			break;
	}
	return pTmpBlock;
}
		
		
DHCPClientBlock_t *DHCPClientIfaceIsAllocByIndex(
		int uiIfIndex,
		bool_t bActive,
		bool_t bIgnoreActive
	)
{
	DHCPClientBlock_t *TmpBlock = pDHCPClientCtxtBlockHead;
	for (;TmpBlock;TmpBlock=TmpBlock->next)
	{
		if (bIgnoreActive)
		{
			if (uiIfIndex == TmpBlock->uiIfIndex)
			{
				break;
			}
		}
		else
		{
			if ((uiIfIndex == TmpBlock->uiIfIndex) &&
				(bActive == TmpBlock->bIfActive))
			{
				break;
			}
		}
	}
	return TmpBlock;
}


void DHCPClientFillFunctions(struct DHCPClientFunctions *pEntry)
{
	pEntry->DHCPNetworkConfig = DHCPClientDefaultConfig;
	pEntry->FillOptions = DHCPCFillOptions;
	pEntry->SendPacket = DHCPClientSendPacket;
	return;
}

void DHCPClientTimerProc(void)
{
	DHCPWAITEvent_t *pEvent= pDHCPClientTimerHead;
	
	for (; pEvent!=NULL; pEvent=pEvent->Next)
	{
		//judge this interface whether up, update it's status
		DHCPClientUpdateIfStatus(pEvent);
		//
		if (TRUE == pEvent->bStartWaitEvent)
		{
			if ((CurrentTime - pEvent->iWaitStartTime) >= pEvent->iWaitTimeOutTime)
			{
				switch (pEvent->EventType)
				{
				case WAIT_DISCOVER:
					printf("discover timeout***********************************\n");
					if (-1 == DHCPClientDiscoverTimeoutProcess(pEvent, pEvent->pPointToBlock))
					{
						printf("Timeout Set Network error....\n");
					}
					break;
				case WAIT_REQUEST:
					printf("Request timeout**********************************\n");
					if (-1 == DHCPClientRequestTimeoutProcess(pEvent))
					{
						printf("Request timeout error....\n");
					}
					break;
				case WAIT_INFORM:
					printf("now inform is timeout.... Event = %d  Time = %d\n", pEvent->EventType, pEvent->iWaitStartTime);
					pEvent->bStartWaitEvent = FALSE;
					break;
				default:
					break;
				}
			}
		}
		//if lease time is over half then send request pkt
		if (NULL!=pEvent->pPointToBlock)
		{
			if ((pEvent->pPointToBlock->bDHCPClientEnabled) &&
				(FALSE == pEvent->pPointToBlock->bRequestToConnect))
			{
				if ((pEvent->pPointToBlock->ulStartLeaseTime!=0 && 
					pEvent->pPointToBlock->ulLeasedTime!=0) &&
					((CurrentTime - pEvent->pPointToBlock->ulStartLeaseTime) 
					>= pEvent->pPointToBlock->ulLeasedTime/2)
				   )
				{
					//printf("**********************Lease time is over half!********************\n");
					pEvent->pPointToBlock->CurrentState = DHCP_CLIENT_RENEW;
					pEvent->pPointToBlock->ulStartLeaseTime = 0;	
					TimerStart(
						pEvent->pPointToBlock->pTimer, 
						DEFAULT_REQUEST_TIMEOUT, 
						WAIT_REQUEST);
					if (FALSE == DHCPClientSendDHCPRequest(pEvent->pPointToBlock))
					{
						printf("Request is error\n");
					}
				}
				else if ((TRUE == pEvent->fWillSend) &&
							((CurrentTime - pEvent->uiStartLeaseTime) >= pEvent->pPointToBlock->ulLeasedTime)
						)
				{
					//printf("**********************Lease time is over half  ()()()()!********************\n");
					pEvent->pPointToBlock->CurrentState = DHCP_CLIENT_RENEW;
					pEvent->uiStartLeaseTime = CurrentTime;
					pEvent->fWillSend = FALSE;
					TimerStart(
						pEvent->pPointToBlock->pTimer, 
						0, 
						WAIT_REQUEST);
					if (FALSE == DHCPClientSendDHCPRequest(pEvent->pPointToBlock))
					{
						printf("Request is error\n");
					}
				}
			}
		}
		//DHCP Client change to disable but still want to get DHCP Server's IP Setting
		if (TRUE == pEvent->pPointToBlock->bRequestToConnect)
		{
			//(int) change unsigned int style to int
			if ((int)(CurrentTime-pEvent->pPointToBlock->ulLeaveTime)>0)
			{
				#define INTERVAL_TIME 60;
				pEvent->pPointToBlock->ulLeaveTime += INTERVAL_TIME;
				DHCPClientSendDHCPDiscover(pEvent->pPointToBlock);
				return;
			}
		}
		//DHCP Client will send arp packet when interface is BOUND states (one minute)
		if (DHCP_CLIENT_BOUND == pEvent->pPointToBlock->CurrentState)
		{
			if ((int)(CurrentTime-pEvent->pPointToBlock->ulLeaveArpSendTime)>0)
			{
				#define SEND_ARP_INTERVAL_TIME 60;
				char desthwaddr[6] = {0};
				ipaddr addr1;
				ArpReplyType_t ArpReply;
				pEvent->pPointToBlock->ulLeaveArpSendTime += SEND_ARP_INTERVAL_TIME;
				memset(desthwaddr, 0, 6);
				addr1 = inet_addr("127.0.0.1");
				pEvent->pPointToBlock->CurrentState = DHCP_CLIENT_ARP_AWAIT;
				ArpReply = DHCPClientSendArp(pEvent->pPointToBlock->cszIfName, 
					pEvent->pPointToBlock->aucHwAddress, desthwaddr, 
					addr1, pEvent->pPointToBlock->LeasedIpAddress);
				printf("ArpReply = %d\n", ArpReply);
				if ((ARP_SUCCESS == ArpReply) || (ARP_ERROR == ArpReply))
				{
					pEvent->pPointToBlock->CurrentState = DHCP_CLIENT_BOUND;
				}
				if (ArpReply == ARP_HAVE_SAME_ADDR)
				{
					if (0==memcmp(pEvent->pPointToBlock->aucHwAddress, desthwaddr, 6))
					{
						//the eth addr is local machine, NO ip clash
						printf("arp is not clash\n");
						pEvent->pPointToBlock->CurrentState = DHCP_CLIENT_BOUND;
					}
					else
					{
						//ip clash
						printf("ip clash!!!!!\n");
						DHCPClientSendDHCPDecline(pEvent->pPointToBlock);    //refuse this addr
						sleep(1);
						pEvent->pPointToBlock->CurrentState = DHCP_CLIENT_INITIALIZED;
						TimerStart(pEvent,
							DEFAULT_DISCOVER_TIMEOUT, 
							WAIT_DISCOVER);
						pEvent->pPointToBlock->CurrentState = DHCP_CLIENT_SELECT;			
						DHCPClientSendDHCPDiscover(pEvent->pPointToBlock);
						return;
					}
				}
			}
		}
	}
}

///////////////////////////////////////////////////////////////////////////////
// IP converter routines
///////////////////////////////////////////////////////////////////////////////
bool_t IsValidIP(in_addr_t ulIP)
{
	uint8_t uchFirstOctet;
	uint8_t uchLastOctet;

	ulIP = ntohl(ulIP);

	uchFirstOctet	= (uint8_t)((ulIP>>24)&0x000000FFL);
	uchLastOctet	= (uint8_t)(ulIP&0x000000FFL);

	if (uchFirstOctet<1 || uchFirstOctet>223)
	{
		//TRACE("First octet of IP must be between 1 and 223\n");
		return FALSE;
	}
	if (uchFirstOctet==127)
	{
		//TRACE("First octet 127 is reserved for loop back\n");
		return FALSE;
	}
	if (uchLastOctet==255 || uchLastOctet==0)
	{
		//TRACE("Last octet 0 and 255 are reserved for broadcast\n");
		return FALSE;
	}
	return TRUE;
}

bool_t InterfaceGatewaySet(const char *cszIfName, in_addr_t ulGateway)
{
	struct rtentry RouteEntry = {0};
	struct sockaddr_in *pSockAddrIn
		= (struct sockaddr_in *)&RouteEntry.rt_gateway;

	// remove all exist gateway
	RouteEntry.rt_dst.sa_family = 2;
	RouteEntry.rt_flags = RTF_UP | RTF_GATEWAY;
	RouteEntry.rt_dev = (char*)cszIfName;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品高潮呻吟| 亚洲国产乱码最新视频 | 国产高清不卡一区二区| 亚洲乱码一区二区三区在线观看| 91精品国产91综合久久蜜臀| 99精品视频在线观看免费| 免费看精品久久片| 亚洲一区二区av在线| 国产精品乱人伦| 精品国内二区三区| 制服丝袜国产精品| 欧美婷婷六月丁香综合色| 成人午夜电影久久影院| 久久成人免费电影| 日韩高清国产一区在线| 亚洲一区av在线| 亚洲人精品午夜| 国产精品久久久久久久久动漫| 精品乱人伦小说| 日韩一二三区视频| 777a∨成人精品桃花网| 欧美视频在线播放| 91久久久免费一区二区| 91丝袜美女网| 不卡影院免费观看| 国产91精品精华液一区二区三区| 久久成人免费网站| 精品在线免费观看| 美女视频黄久久| 久久成人18免费观看| 免费精品视频在线| 日本中文在线一区| 蜜桃在线一区二区三区| 日本不卡一二三| 奇米综合一区二区三区精品视频| 午夜视频久久久久久| 亚洲国产另类av| 天堂av在线一区| 欧美aaa在线| 久久丁香综合五月国产三级网站| 老司机午夜精品| 激情五月婷婷综合网| 国产美女久久久久| 国产成人在线观看| 成人av在线网站| 91啪在线观看| 欧美在线观看视频一区二区 | 91美女视频网站| 91美女片黄在线观看91美女| 色哟哟亚洲精品| 91搞黄在线观看| 制服丝袜亚洲网站| 精品国产免费视频| 欧美高清在线一区| 一区二区三区在线观看国产| 亚洲成av人片在线| 美腿丝袜在线亚洲一区| 国产精品69毛片高清亚洲| 成人激情文学综合网| 色94色欧美sute亚洲13| 欧美三电影在线| 日韩欧美123| 中文字幕不卡的av| 一区二区三区精品视频在线| 亚洲3atv精品一区二区三区| 久久精品国产亚洲5555| 国产不卡视频一区| 欧美日韩一区国产| 精品成人在线观看| 亚洲视频在线观看一区| 午夜伦理一区二区| 国产a久久麻豆| 欧美日韩成人激情| 国产午夜精品久久久久久免费视| 亚洲欧洲国产日韩| 日韩av电影一区| 成人开心网精品视频| 欧美精品一卡两卡| 中文字幕精品三区| 日韩电影网1区2区| 白白色亚洲国产精品| 欧美日韩国产三级| 欧美激情一区在线观看| 日韩综合一区二区| 不卡一区二区在线| 26uuuu精品一区二区| 亚洲一级二级在线| 成人丝袜18视频在线观看| 777a∨成人精品桃花网| 亚洲欧美日本在线| 国内精品嫩模私拍在线| 欧美少妇bbb| 中文字幕在线不卡一区| 久久不见久久见免费视频7 | 东方aⅴ免费观看久久av| 精品婷婷伊人一区三区三| 中文在线免费一区三区高中清不卡| 亚洲国产精品久久久久婷婷884| 国产激情视频一区二区在线观看| 欧美日韩亚洲综合一区| 日韩一区在线播放| 国产精品一区在线观看你懂的| 欧美日韩在线精品一区二区三区激情 | 亚洲精品视频免费看| 国产精品一区二区免费不卡| 精品视频在线看| 18成人在线视频| 国产精品一二三区在线| 日韩精品中文字幕一区| 亚洲成人手机在线| 91国内精品野花午夜精品| 中文成人综合网| 国产成人亚洲综合a∨婷婷图片| 51精品秘密在线观看| 亚洲一区二区三区中文字幕| 成人涩涩免费视频| 国产日产欧美一区二区三区| 激情成人午夜视频| 91精品国产综合久久久久久漫画| 亚洲午夜精品一区二区三区他趣| 99riav久久精品riav| 国产精品欧美一区喷水| 成人午夜视频在线| 国产夜色精品一区二区av| 韩日欧美一区二区三区| 精品少妇一区二区三区免费观看| 日产国产高清一区二区三区| 91精品国产91热久久久做人人 | 亚洲男女一区二区三区| 91视频www| 亚洲欧美一区二区三区久本道91| aaa亚洲精品| 中文字幕佐山爱一区二区免费| 99精品国产99久久久久久白柏| 国产精品青草综合久久久久99| 福利一区二区在线观看| 国产三区在线成人av| 成人午夜视频免费看| 国产精品久久免费看| 99久久国产综合精品女不卡| 亚洲丝袜另类动漫二区| 色国产综合视频| 手机精品视频在线观看| 日韩一级片网站| 黄网站免费久久| 欧美国产日韩精品免费观看| 成人涩涩免费视频| 一二三四社区欧美黄| 欧美日韩国产影片| 麻豆精品国产91久久久久久| 精品福利在线导航| 国产福利91精品| 中文字幕永久在线不卡| 色老汉一区二区三区| 婷婷国产v国产偷v亚洲高清| 日韩美一区二区三区| 成人激情动漫在线观看| 亚洲美女偷拍久久| 在线播放中文字幕一区| 国产最新精品免费| 综合久久一区二区三区| 欧美精品 国产精品| 国产毛片精品一区| 亚洲情趣在线观看| 91精品欧美福利在线观看| 国产精品原创巨作av| 国产精品久99| 911精品国产一区二区在线| 国产乱子伦视频一区二区三区 | 国产一区不卡在线| 中文字幕中文在线不卡住| 欧美日韩免费电影| 国产一区二区毛片| 亚洲综合无码一区二区| 日韩欧美国产精品| 色94色欧美sute亚洲线路一ni| 久久精品国产精品亚洲红杏| 亚洲欧洲日产国码二区| 欧美一级理论片| 99麻豆久久久国产精品免费优播| 午夜精品一区二区三区免费视频 | 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 夜夜精品浪潮av一区二区三区| 宅男噜噜噜66一区二区66| 国产成人精品综合在线观看 | 白白色亚洲国产精品| 日韩电影一区二区三区四区| 国产精品超碰97尤物18| 欧美一二区视频| 色中色一区二区| 国产在线视频精品一区| 亚洲福利视频一区| 国产精品三级视频| 亚洲精品一区二区三区在线观看 | 欧美一级一级性生活免费录像| 成人av资源在线| 国产精品白丝jk黑袜喷水| 无码av免费一区二区三区试看 | aaa欧美日韩| 国产乱码精品1区2区3区|