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

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

?? pkthandler.c

?? lwip tcp/ip 協(xié)議棧 adsp BF533 DSP 移植 用 visual dsp++ 編譯
?? C
字號(hào):
/*
 * Descripton:
 *  Contains packet callbacks, dhcp, buffer handling functionlity
 */
#include "lwip/debug.h"
#include "lwip/ip.h"
#include "lwip/tcpip.h"
#include "lwip/netif.h"
#include "netif/etharp.h"

#include <cglobals.h>
#include <kernel_abs.h>
#include <sys/exception.h>
#include <services/services.h>
#include <drivers/adi_dev.h>
#include <services/adi_dcb.h>
#include <services/adi_dma.h>
#include <services/adi_int.h>
#include <services/adi_ebiu.h>
#include "netif/nifce_driver.h"
#include <ADI_ETHER.h>

// Enable it to print the obtained IP address.
//#define _LWIP_DEBUG_

// Maximum number of supported interfaces.
#define MAX_NETWORK_IF 2 

// struct to hold network driver instance specific information.
//
struct network_info {
  int                       num_if;
  int                       imask[MAX_NETWORK_IF]; 
  struct nifce_info          vinfo[MAX_NETWORK_IF];
  struct netif*             netif[MAX_NETWORK_IF];
  struct ip_addr            ipaddr[MAX_NETWORK_IF];
  struct ip_addr            netmask[MAX_NETWORK_IF];
  struct ip_addr            gateway[MAX_NETWORK_IF];
};

// The below two external variables will be  defined in the generated user 
// configuration file
//
extern net_config_info user_net_config_info[];
extern int user_net_num_ifces;

// global statics
static struct network_info  netinfo = {0};
static ADI_DEV_DEVICE_HANDLE pli_services[MAX_NETWORK_IF];
ADI_ETHER_BUFFER *rcv_list=NULL,*xmt_list=NULL;
void lwip_init(u8_t *lwip_memory);
void dhcp_timer_init(void);



void   etharp_timer_init();
int    dhcp_configure(void);
void   nifce_driver_poll(void*);

/****************************************************************
 *
 *  Append the packet the passed list. list could be recv list
 *  or transmit list.must be called in critical region.
 *  list could be rcv_list or xmt_list
 ****************************************************************/
static void append_list(ADI_ETHER_BUFFER **list,ADI_ETHER_BUFFER *b)
{
	ADI_ETHER_BUFFER *t;

	if(*list == NULL)
		*list = b;
	else
	{
		t = *list;
		while(t->pNext != NULL)
			t= t->pNext;
		t->pNext = b;
	}
}

/****************************************************************
 *
 * callback function that puts in poll function in the tcpip queue.
 * the enqued callback function is exectued by the tcpip thread.
 * enques callbacks for all n/w interfaces.
 ****************************************************************/
void tcpip_q_callback(void *in_args)
{
	int i,poll_period = (int)in_args;
	if(poll_period == 0) poll_period = 10;
    
	while (1)
    {
	  ker_sleep(poll_period);
	 
      for (i = 0; i < netinfo.num_if; i += 1)
        tcpip_callback(nifce_driver_poll, netinfo.netif[i]);
	}
		
}


/****************************************************************
 *
 * Deffered callback handler. Called in-response to device drivers
 * Post call.
 * TODO: Optimize to process xmt packets in the callback
 ****************************************************************/
void stack_callback_handler(void *arg1,unsigned int event,void* pack_list)
{
	if((ADI_ETHER_BUFFER*)pack_list != NULL)
	{
		int int_sts = ker_disable_interrupts(ker_kPriorityLevelAll);
		switch(event)
		{
			case ADI_ETHER_EVENT_FRAME_RCVD:
					append_list(&rcv_list,(ADI_ETHER_BUFFER*)pack_list);
					
					break;
			
			case ADI_ETHER_EVENT_FRAME_XMIT:
					append_list(&xmt_list,(ADI_ETHER_BUFFER*)pack_list);
					
				break;
		
			case ADI_ETHER_EVENT_INTERRUPT:	
				break;
		}
		ker_enable_interrupts(int_sts);	
	}
}


/****************************************************************
 * Initializes the stack and starts the packet handler thread
 * with the supplied priority and the supplied thread pool time
 *
 * Buffer structure
 * 
 *   ---------  ----------  --------------- --------------->
 *     buffer_t  buffer_info buffer overhead  actual buffer
 *	 ---------  ----------  ---------------  -------------->
 ****************************************************************/

int init_stack(int inThreadPriority, int inThreadPollTime, int inMemSize, char *MemArea)
{
	int i,overhead=0;
	int nw_ifce_buffer_length = 0;
	int total_buffer_length =0;
	unsigned int LWIP_AREA_START=0;
	unsigned int BUFF_AREA_START=0;
	unsigned int BUFF_AREA_LEN=0; 
   	unsigned int buff_overhead;

	BUFF_AREA_START = (unsigned int)MemArea;
	BUFF_AREA_LEN   = (unsigned int)inMemSize;

	overhead        = sizeof(ADI_ETHER_BUFFER) + sizeof(struct buffer_info);

	// defined in the user configruation file.
	netinfo.num_if =	user_net_num_ifces;

	nw_ifce_buffer_length = 0;
			

	// Caluculate the total buffer space for rx/tx and for all n/w interfaces.
	//
	for (i = 0; i < netinfo.num_if; i += 1)
	{
		nw_ifce_buffer_length += user_net_config_info[i].rx_buffs * user_net_config_info[i].rx_buff_datalen;
		nw_ifce_buffer_length += user_net_config_info[i].tx_buffs * user_net_config_info[i].tx_buff_datalen;
		nw_ifce_buffer_length  += user_net_config_info[i].rx_buffs * overhead;
		nw_ifce_buffer_length  += user_net_config_info[i].tx_buffs * overhead;
	}

	// base address for major lwip data areas
	//
  	LWIP_AREA_START = BUFF_AREA_START+nw_ifce_buffer_length;
	
	// Initialize lwip stack modules.
	//
	lwip_init((u8_t*)LWIP_AREA_START);

	// Setup interface's and their associated buffers.
	//
	for (i = 0; i < netinfo.num_if; i += 1)
	{
		struct nifce_info* nip = &netinfo.vinfo[i];
		struct netif*  ni;
		void *handle = pli_services[i];

		nip->handle = handle;

		// Compute the size of the memory area with the user given pli buffer
		// size and its length.
		nw_ifce_buffer_length = 0;

		// Add rx buffer area
		nw_ifce_buffer_length += user_net_config_info[i].rx_buffs * user_net_config_info[i].rx_buff_datalen;

		// Add Tx buffer area.
		nw_ifce_buffer_length += user_net_config_info[i].tx_buffs * user_net_config_info[i].tx_buff_datalen;

		// reserve space for overhead also.
		nw_ifce_buffer_length  += user_net_config_info[i].rx_buffs * overhead;
		nw_ifce_buffer_length  += user_net_config_info[i].tx_buffs * overhead;

		nip->rx_buffs = user_net_config_info[i].rx_buffs;
		nip->tx_buffs = user_net_config_info[i].tx_buffs;
		nip->rx_buff_datalen = user_net_config_info[i].rx_buff_datalen;
		nip->tx_buff_datalen = user_net_config_info[i].tx_buff_datalen;
		nip->buff_area = (char*)(BUFF_AREA_START + total_buffer_length);
		nip->buff_area_size = nw_ifce_buffer_length;
		nip->use_DHCP = user_net_config_info[i].use_dhcp;

		// add it to the total length
		total_buffer_length += nw_ifce_buffer_length;

		// If DHCP is not enabled then we have user specified IP address,
		// Subnet mask, Gateway
		//
		if(nip->use_DHCP == 0)
		{
		IP4_ADDR(&netinfo.ipaddr[i],
				(user_net_config_info[i].ipaddr >> 24) & 0x000000ff , 
				(user_net_config_info[i].ipaddr >> 16) & 0x000000ff, 
				( user_net_config_info[i].ipaddr>> 8) & 0x000000ff,
				( user_net_config_info[i].ipaddr >> 0) & 0x000000ff);

		IP4_ADDR(&netinfo.netmask[i],
				(user_net_config_info[i].netmask >> 24) & 0x000000ff , 
				(user_net_config_info[i].netmask >> 16) & 0x000000ff, 
				( user_net_config_info[i].netmask>> 8) & 0x000000ff,
				( user_net_config_info[i].netmask >> 0) & 0x000000ff);

		IP4_ADDR(&netinfo.gateway[i],
				(user_net_config_info[i].gateway >> 24) & 0x000000ff , 
				(user_net_config_info[i].gateway >> 16) & 0x000000ff, 
				( user_net_config_info[i].gateway>> 8) & 0x000000ff,
				( user_net_config_info[i].gateway >> 0) & 0x000000ff);
		}

		// get if Mac address is specified. If user specified is 0 then
		// we will query the supllied IPLI to get the actual address.
		//
		if(memcmp(user_net_config_info[i].mac_addr,"\x00\x00\x00\x00\x00\x00",6))
		{
			memcpy(&netinfo.vinfo[i].ia[0], user_net_config_info[i].mac_addr, 6);
			adi_dev_Control(pli_services[i],ADI_ETHER_CMD_SET_MAC_ADDR,(void*)&user_net_config_info[i].mac_addr);
		}
		else
		{
		  // Applicatons must set up the physical address of the interface
		  // before.
		  char m_addr[] = { 0,0,0,0,0,0 };
		  adi_dev_Control(pli_services[i],ADI_ETHER_CMD_GET_MAC_ADDR,(void*)&m_addr);
		  memcpy(&netinfo.vinfo[i].ia[0],m_addr,6);
		}

		adi_dev_Control(pli_services[i],ADI_ETHER_CMD_GET_BUFFER_PREFIX,(void*)&buff_overhead);

        nip->buff_overhead = (size_t)buff_overhead;     

		ni = netinfo.netif[i] = netif_add(
								  &netinfo.ipaddr[i],
								  &netinfo.netmask[i],
								  &netinfo.gateway[i],
								  &netinfo.vinfo[i],
								  nifce_driver_init,
								  ip_input
								);
		LWIP_ASSERT("boot thread: failed to add network interface", ni != NULL);

#ifdef LWIP_DEBUG
		printf(
		  "Network Interface %c%c%d: %d.%d.%d.%d : "
		  "%02X-%02X-%02X-%02X-%02X-%02X : RX buffs = %d : TX buffs = %d\n",
		  ni->name[0], ni->name[1], ni->num,
		  ip4_addr1(&ni->ip_addr), ip4_addr2(&ni->ip_addr),
		  ip4_addr3(&ni->ip_addr), ip4_addr4(&ni->ip_addr),
		  ni->hwaddr[0], ni->hwaddr[1], ni->hwaddr[2],
		  ni->hwaddr[3], ni->hwaddr[4], ni->hwaddr[5],
		  ((struct nifce_info*)ni->state)->rx_buffs,
		  ((struct nifce_info*)ni->state)->tx_buffs
		);
#endif /* LWIP_DEBUG */

	}

  // set the default network interface
  //
  netif_set_default(netinfo.netif[0]);

  // start the ARP update thread
   etharp_timer_init();

  // Create pkthandler thread that processes the packets.
  //
  sys_thread_new(tcpip_q_callback,(void*)inThreadPollTime,inThreadPriority);
  return 1;
}

/****************************************************************
 * Invoked when users calls StartStack on the TCP/IP component.
 * Currently only DHCP configuration is checked. If DHCP is enabled
 * stack checks the DHCP server and gets the addres.
 ****************************************************************/
int start_stack()
{
 return dhcp_configure();
}

/****************************************************************
 * Gets the address from the DHCP server. DHCP is checked for only
 * the interface on which the DHCP is enabled in the UI.
 ****************************************************************/
int dhcp_configure(void)
{
  int i;
  long time_slept=0;
  int  success_flag = 1;
  dhcp_timer_init();
  
  for (i = 0; i < netinfo.num_if; i += 1) {
    struct netif* ni = netinfo.netif[i];

	if(user_net_config_info[i].use_dhcp == 1)
	{
		dhcp_start(ni);

		// Wait for 50ms and check for the DHCP status.
		//
		ker_sleep(50);
		while (*(volatile u8_t*)&ni->dhcp->state != DHCP_BOUND) {
		  // sleep for 500ms and check again, for 2 min..
			ker_sleep(500);
		  time_slept += 500;

		  if(time_slept > 120*1000)
		  {
			  success_flag = 0;
			  break;
		  }
		}

#ifdef _LWIP_DEBUG_
		printf(
		  "Network Interface %c%c%d: %d.%d.%d.%d : "
		  "%02X-%02X-%02X-%02X-%02X-%02X : RX buffs = %d : TX buffs = %d\n",
		  ni->name[0], ni->name[1], ni->num,
		  ip4_addr1(&ni->ip_addr), ip4_addr2(&ni->ip_addr),
		  ip4_addr3(&ni->ip_addr), ip4_addr4(&ni->ip_addr),
		  ni->hwaddr[0], ni->hwaddr[1], ni->hwaddr[2],
		  ni->hwaddr[3], ni->hwaddr[4], ni->hwaddr[5],
		  ((struct nifce_info*)ni->state)->rx_buffs,
		  ((struct nifce_info*)ni->state)->tx_buffs
		);
#endif /* _LWIP_DEBUG_ */
	}
  }
  return success_flag;
}

/****************************************************************
 * gethostaddr() gets the primary network interfaces IP address
 * in dot notation form.
 ****************************************************************/
int gethostaddr(int nwifce_no,char *host_addr)
{

	if(nwifce_no >= 0 && nwifce_no < netinfo.num_if)
	{
    	struct netif* ni = netinfo.netif[nwifce_no];
		u32_t ipaddr = ni->ip_addr.addr;
		u8_t *ip_in_dot = inet_ntoa(ipaddr);
		 memcpy(host_addr,ip_in_dot,16);
		 return 1;
	}
	return -1;
}

// sets the pli services for stack to use
int set_pli_services(int num_services, ADI_DEV_DEVICE_HANDLE *pservices)
{
	int i=0;
	for (i=0; i<num_services; i++)
			pli_services[i]= (ADI_DEV_DEVICE_HANDLE)pservices[i];
	return 1;
}
// return default gateway
struct ip_addr get_default_gateway()
{
	struct netif* ni = netinfo.netif[0];
	return (ni->gw);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美中文一区二区| 久久综合久久综合久久| 欧美aaa在线| 国产精品国产精品国产专区不蜜| 欧美亚洲自拍偷拍| 国产激情一区二区三区桃花岛亚洲| 亚洲视频小说图片| 欧美va在线播放| 欧美制服丝袜第一页| 国产综合色在线| 香港成人在线视频| 中文字幕在线观看一区| 欧美大片在线观看一区| 色婷婷av一区二区三区大白胸| 精品一区二区国语对白| 亚洲午夜av在线| 成人免费一区二区三区在线观看| 欧美一级高清片| 欧美在线影院一区二区| 成人av电影在线播放| 久久草av在线| 日韩精品一级中文字幕精品视频免费观看 | 国产精品进线69影院| 日韩精品影音先锋| 欧美顶级少妇做爰| 欧美丝袜自拍制服另类| 91在线观看污| 成人精品视频一区| 丰满少妇在线播放bd日韩电影| 奇米影视7777精品一区二区| 一区二区三区欧美| 综合分类小说区另类春色亚洲小说欧美 | 日本v片在线高清不卡在线观看| 亚洲另类在线视频| 亚洲欧洲中文日韩久久av乱码| 久久久亚洲精华液精华液精华液| 欧美一区二区三区不卡| 欧美日韩国产123区| 欧美亚洲动漫精品| 色老汉一区二区三区| 99re这里都是精品| proumb性欧美在线观看| 国产91精品在线观看| 国产成人av电影在线| 国产成人av电影免费在线观看| 精品一区二区三区在线视频| 老司机精品视频在线| 青青草97国产精品免费观看| 天堂成人国产精品一区| 丝袜亚洲精品中文字幕一区| 五月天国产精品| 日产国产欧美视频一区精品| 日本欧美久久久久免费播放网| 视频一区中文字幕| 久久疯狂做爰流白浆xx| 精品一区二区三区不卡| 国产久卡久卡久卡久卡视频精品| 国产精品456| 床上的激情91.| 91欧美激情一区二区三区成人| 色综合久久中文综合久久牛| 欧美在线短视频| 91精品国产综合久久精品麻豆| 欧美一区午夜精品| 久久综合久久久久88| 国产精品视频免费| 一区二区三区中文字幕电影| 亚洲国产精品自拍| 麻豆精品一区二区av白丝在线| 精久久久久久久久久久| 成人午夜免费视频| 在线一区二区三区四区五区| 91精品国产综合久久蜜臀| 精品嫩草影院久久| 国产精品久久久久影视| 一区二区成人在线视频 | 日韩精品久久理论片| 麻豆精品国产91久久久久久| 国产成人av影院| 在线看不卡av| 日韩精品一区二区三区中文精品| 久久精品在线免费观看| 一区二区三区色| 美女性感视频久久| 99精品视频在线观看免费| 欧美日韩精品一区二区天天拍小说 | 久久久久久久久久看片| 一区二区三区中文在线观看| 毛片av中文字幕一区二区| 成人爽a毛片一区二区免费| 在线观看亚洲a| 久久伊人中文字幕| 亚洲一区二区三区精品在线| 国产专区欧美精品| 欧美性一二三区| 国产婷婷色一区二区三区 | 国产欧美一区二区三区鸳鸯浴| 亚洲精品免费电影| 国产最新精品精品你懂的| 在线亚洲免费视频| 国产午夜精品久久久久久免费视| 亚洲午夜久久久久久久久久久 | av在线不卡电影| 欧美电影免费观看高清完整版在线观看| 国产精品九色蝌蚪自拍| 久久99国产精品久久99| 色女孩综合影院| 亚洲国产精品精华液ab| 日本vs亚洲vs韩国一区三区二区| 99国产精品视频免费观看| 欧美精品一区二区三区视频| 亚洲国产成人av好男人在线观看| 高清国产午夜精品久久久久久| 欧美一级理论片| 亚洲夂夂婷婷色拍ww47| 9l国产精品久久久久麻豆| 精品国产免费一区二区三区香蕉| 亚洲一区二区三区三| av一二三不卡影片| 国产视频一区二区在线观看| 麻豆中文一区二区| 欧美日韩dvd在线观看| 亚洲欧美另类综合偷拍| 高清不卡在线观看| 精品国产亚洲一区二区三区在线观看| 午夜国产精品一区| 欧美自拍偷拍午夜视频| 亚洲激情成人在线| 91在线免费看| 国产精品电影一区二区三区| 国产成人午夜精品影院观看视频 | 日本高清免费不卡视频| 国产精品进线69影院| 国产成人av一区二区三区在线观看| 欧美变态tickling挠脚心| 日本sm残虐另类| 欧美丰满少妇xxxbbb| 丝袜亚洲另类欧美| 91麻豆精品91久久久久同性| 一区二区欧美国产| 欧美三级日本三级少妇99| 亚洲综合一区二区| 欧美日韩一区视频| 亚洲sss视频在线视频| 欧美色图天堂网| 天堂久久一区二区三区| 日韩一区二区三区在线视频| 秋霞成人午夜伦在线观看| 日韩视频国产视频| 国内精品在线播放| 国产日本欧美一区二区| 国产sm精品调教视频网站| 国产精品久久久久久久蜜臀 | 亚洲精品成人精品456| 日本道免费精品一区二区三区| 亚洲免费观看高清完整版在线观看熊| 91亚洲国产成人精品一区二三| 亚洲区小说区图片区qvod| 欧美午夜精品理论片a级按摩| 亚洲不卡一区二区三区| 91精品国产全国免费观看| 激情六月婷婷久久| 亚洲国产高清aⅴ视频| 色哟哟国产精品| 日韩国产欧美在线视频| 久久综合九色综合欧美就去吻| 国产成人av电影| 亚洲综合男人的天堂| 337p亚洲精品色噜噜狠狠| 精品一二三四区| 国产精品成人免费精品自在线观看| 91国在线观看| 老色鬼精品视频在线观看播放| 精品日韩av一区二区| av在线免费不卡| 日韩精品视频网| 中文字幕欧美国产| 欧美日韩国产片| 国产精品白丝jk黑袜喷水| 一区二区三区不卡视频在线观看 | 中文字幕日本不卡| 欧美三电影在线| 国产成人亚洲综合a∨婷婷| 一区二区三区日韩精品| 精品国产伦一区二区三区观看体验| 成人综合婷婷国产精品久久蜜臀| 亚洲自拍另类综合| 久久久精品日韩欧美| 欧美三级电影一区| 成人一二三区视频| 琪琪一区二区三区| 成人免费小视频| 精品国产乱码久久久久久免费| 99精品国产91久久久久久| 久久国产人妖系列| 一区二区三区精品久久久| 久久久久国产精品厨房| 欧美精品99久久久**| 99久久亚洲一区二区三区青草| 卡一卡二国产精品|