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

📄 uip_arp.i

📁 实现在指定视频服务器下的视频点播
💻 I
📖 第 1 页 / 共 2 页
字号:

  







 












 












 
struct uip_udp_conn *uip_udp_new(u16 *ripaddr, u16 rport);







 












 


 

 







 
 



















 













 
# 715 "uip.h"







 

u16 htons(u16 val);


 







 

extern volatile u8 *uip_appdata;

extern volatile unsigned int uip_appdata_length; 


extern volatile u8 *uip_sappdata; 







 
extern volatile u8 *uip_urgdata; 











 
extern volatile u16 uip_len, uip_slen;


extern volatile u8 uip_urglen, uip_surglen;












 
struct uip_conn {
  u16 ripaddr[2];    
  
  u16 lport;         
  u16 rport;        
   
  
  u8 rcv_nxt[4];    
 
  u8 snd_nxt[4];    
 
  u16 len;           
  u16 mss;          
 
  u16 initialmss;   
   
  u8 sa;            
 
  u8 sv;            
 
  u8 rto;            
  u8 tcpstateflags;  
  u8 timer;          
  u8 nrtx;          
 

   
  u8 appstate[(sizeof(struct httpd_state))];  
};


 
extern struct uip_conn *uip_conn;
 
extern struct uip_conn uip_conns[10];



 



 
extern volatile u8 uip_acc32[4];

 


# 842 "uip.h"





 
struct uip_stats {
  struct {
    uip_stats_t drop;     
 
    uip_stats_t recv;     
 
    uip_stats_t sent;     
 
    uip_stats_t vhlerr;   
 
    uip_stats_t hblenerr; 
 
    uip_stats_t lblenerr; 
 
    uip_stats_t fragerr;  
 
    uip_stats_t chkerr;   
 
    uip_stats_t protoerr; 
 
  } ip;                    
  struct {
    uip_stats_t drop;      
    uip_stats_t recv;      
    uip_stats_t sent;      
    uip_stats_t typeerr;  
 
  } icmp;                  
  struct {
    uip_stats_t drop;      
    uip_stats_t recv;      
    uip_stats_t sent;      
    uip_stats_t chkerr;   
 
    uip_stats_t ackerr;   
 
    uip_stats_t rst;       
    uip_stats_t rexmit;    
    uip_stats_t syndrop;  
 
    uip_stats_t synrst;   
 
  } tcp;                   
};





 
extern struct uip_stats uip_stat;


 


 
 





 
extern volatile u8 uip_flags;





 

# 945 "uip.h"








 
void uip_process(u8 flag);





 

# 971 "uip.h"

 
# 983 "uip.h"
  




 
typedef struct {
   
  u8 vhl,
    tos,          
    len[2],       
    ipid[2],        
    ipoffset[2],  
    ttl,          
    proto;     
  u16 ipchksum;
  u16 srcipaddr[2], 
    destipaddr[2];
  
   
  u16 srcport,
    destport;
  u8 seqno[4],  
    ackno[4],
    tcpoffset,
    flags,
    wnd[2];     
  u16 tcpchksum;
  u8 urgp[2];
  u8 optdata[4];
} uip_tcpip_hdr;

 
typedef struct {
   
  u8 vhl,
    tos,          
    len[2],       
    ipid[2],        
    ipoffset[2],  
    ttl,          
    proto;     
  u16 ipchksum;
  u16 srcipaddr[2], 
    destipaddr[2];
   
  u8 type, icode;
  u16 icmpchksum;
  u16 id, seqno;  
} uip_icmpip_hdr;


 
typedef struct {
   
  u8 vhl,
    tos,          
    len[2],       
    ipid[2],        
    ipoffset[2],  
    ttl,          
    proto;     
  u16 ipchksum;
  u16 srcipaddr[2], 
    destipaddr[2];
  
   
  u16 srcport,
    destport;
  u16 udplen;
  u16 udpchksum;
} uip_udpip_hdr;






extern const u16 uip_hostaddr[2];











 

# 56 "uip_arp.h"





 
struct uip_eth_addr {
  u8 addr[6];
};

extern struct uip_eth_addr uip_ethaddr;



 
struct uip_eth_hdr {
  struct uip_eth_addr dest;
  struct uip_eth_addr src;
  u16_t type;
};








 
void uip_arp_init(void);





 
void uip_arp_ipin(void);






 
void uip_arp_arpin(void);










 
void uip_arp_out(void);


 
void uip_arp_timer(void);

 




 








 










 











 










 



















 
# 193 "uip_arp.h"

 




 
extern const u16_t uip_arp_draddr[2], uip_arp_netmask[2];









# 63 "uip_arp.c"
# 1 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\string.h"
#pragma once

#pragma system_header /* string.h */










 

 
# 1 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"








 

#pragma once

#pragma system_header /* yvals.h */




 


























































 

















 

# 130 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"
    






# 144 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"

# 153 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"



# 179 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"
   typedef long int _Ptrdifft;
   typedef long unsigned int _Sizet;






# 204 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"

typedef int _Int32t;
typedef unsigned int _Uint32t;












 
 
 


# 231 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"






		 









		 
 





  




  





 

# 355 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"















  




 






 







 







 
# 427 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"

 
# 438 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"







 






 
# 459 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"
  typedef long long   _Longlong;
  typedef unsigned long long  _ULonglong;
# 467 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"

 

  typedef unsigned int _Wintt;
  typedef unsigned int _Wchart;
# 488 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"



 


 



 

  typedef char *  va_list;


typedef va_list _Va_list;
# 511 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"

 



void _Atexit(void (*)(void));


typedef struct _Mbstatet {
   _Wchart _Wchar;
   char _State;
   } _Mbstatet;


 




typedef struct _Fpost {
   long _Off;    
   _Mbstatet _Wstate;
   } _Fpost;









typedef char _Sysch_t;

 




 




		 










# 576 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\yvals.h"



# 21 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\string.h"




		 




		 

# 38 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\string.h"
typedef _Sizet size_t;


		 

int memcmp(const void *, const void *, size_t);
void * __builtin_memcpy(void *, const void *, size_t);
void *memcpy(void *, const void *, size_t);
void * __builtin_memmove(void *, const void *, size_t);
void *memset(void *, int, size_t);
char *strcat(char *, const char *);
int strcmp(const char *, const char *);
char *strcpy(char *, const char *);
size_t __builtin_strlen(const char *);
size_t strlen(const char *);

void *memmove(void *, const void *, size_t);
int strcoll(const char *, const char *);
char *__builtin_strcpy(char *, const char *);
size_t strcspn(const char *, const char *);
char *strerror(int);
char *strncat(char *, const char *, size_t);
int strncmp(const char *, const char *, size_t);
char *strncpy(char *, const char *, size_t);
size_t strspn(const char *, const char *);
char *strtok(char *, const char *);
size_t strxfrm(char *, const char *, size_t);


char *strdup(const char *);
int strcasecmp(const char *, const char *);
int strncasecmp(const char *, const char *, size_t);
char *strtok_r(char *, const char *, char **);




# 81 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\string.h"

# 118 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\string.h"



char *strchr(const char *, int);
char *strpbrk(const char *, const char *);
char *strrchr(const char *, int);
char *strstr(const char *, const char *);






# 143 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\string.h"

void *memchr(const void *, int, size_t);







# 167 "D:\\Program Files\\Analog Devices\\VisualDSP 4.5\\Blackfin\\include\\string.h"

# 65 "uip_arp.c"

struct arp_hdr{
  struct uip_eth_hdr ethhdr;
  u16_t hwtype;
  u16_t protocol;
  u8_t hwlen;
  u8_t protolen;
  u16_t opcode;
  struct uip_eth_addr shwaddr;
  u16_t sipaddr[2];
  struct uip_eth_addr dhwaddr;
  u16_t dipaddr[2]; 
}ARP_HDR;

struct ethip_hdr {
  struct uip_eth_hdr ethhdr;
   
  u8_t vhl,
    tos,          
    len[2],       
    ipid[2],        
    ipoffset[2],  
    ttl,          
    proto;     
  u16_t ipchksum;
  u16_t srcipaddr[2], 
    destipaddr[2];
};






struct arp_entry {
  u16_t ipaddr[2];
  struct uip_eth_addr ethaddr;
  u8_t time;
};

struct uip_eth_addr uip_ethaddr = {{0x00,
				    'E',
				    'Z',
				    'K',
				    'I',
				    'T'}};

static struct arp_entry arp_table[8];
static u16_t ipaddr[2];
static u8_t i, c;

static u8_t arptime;
static u8_t tmpage;







 



 
 
void
uip_arp_init(void)
{
  for(i = 0; i < 8; ++i) {
    memset(arp_table[i].ipaddr, 0, 4);
  }
}
 







 
 
void
uip_arp_timer(void)
{
  struct arp_entry *tabptr;
  
  ++arptime;
  for(i = 0; i < 8; ++i) {
    tabptr = &arp_table[i];
    if((tabptr->ipaddr[0] | tabptr->ipaddr[1]) != 0 &&
       arptime - tabptr->time >= 120) {
      memset(tabptr->ipaddr, 0, 4);
    }
  }

}
 
static void
uip_arp_update(u16_t *ipaddr, struct uip_eth_addr *ethaddr)
{
  register struct arp_entry *tabptr;
  

 
  for(i = 0; i < 8; ++i) {

    tabptr = &arp_table[i];
     
    if(tabptr->ipaddr[0] != 0 &&
       tabptr->ipaddr[1] != 0) {

      
 
      if(ipaddr[0] == tabptr->ipaddr[0] &&
	 ipaddr[1] == tabptr->ipaddr[1]) {
	 
	 
	__builtin_memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6);
	tabptr->time = arptime;

	return;
      }
    }
  }

  
 

   
  for(i = 0; i < 8; ++i) {
    tabptr = &arp_table[i];
    if(tabptr->ipaddr[0] == 0 &&
       tabptr->ipaddr[1] == 0) {
      break;
    }
  }

  
 
  if(i == 8) {
    tmpage = 0;
    c = 0;
    for(i = 0; i < 8; ++i) {
      tabptr = &arp_table[i];
      if(arptime - tabptr->time > tmpage) {
	tmpage = arptime - tabptr->time;
	c = i;
      }
    }
    i = c;
  }

  
 
  __builtin_memcpy(tabptr->ipaddr, ipaddr, 4);
  __builtin_memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6);
  tabptr->time = arptime;
}
 











 
 
void
uip_arp_ipin(void)
{
  uip_len -= sizeof(struct uip_eth_hdr);
		
  
 
  if((((struct ethip_hdr *)&uip_buf[0])->srcipaddr[0] & uip_arp_netmask[0]) !=
     (uip_hostaddr[0] & uip_arp_netmask[0])) {
    return;
  }
  if((((struct ethip_hdr *)&uip_buf[0])->srcipaddr[1] & uip_arp_netmask[1]) !=
     (uip_hostaddr[1] & uip_arp_netmask[1])) {
    return;
  }
  uip_arp_update(((struct ethip_hdr *)&uip_buf[0])->srcipaddr, &(((struct ethip_hdr *)&uip_buf[0])->ethhdr.src));
  
  return;
}
 




















 
 
void
uip_arp_arpin(void)
{

  if(uip_len < sizeof(struct arp_hdr)) {
    uip_len = 0;
    STACK_BUSY = 0;
    
	
    
    return;
  }

  uip_len = 0;
  
  switch(((struct arp_hdr *)&uip_buf[0])->opcode) {
  case ((((u16)((1) & 0xff)) << 8) | (((1) & 0xff00) >> 8)):
    
 
    if(((struct arp_hdr *)&uip_buf[0])->dipaddr[0] == uip_hostaddr[0] &&
       ((struct arp_hdr *)&uip_buf[0])->dipaddr[1] == uip_hostaddr[1]) {
       
      ((struct arp_hdr *)&uip_buf[0])->opcode = ((((u16)((2) & 0xff)) << 8) | (((2) & 0xff00) >> 8));

      __builtin_memcpy(((struct arp_hdr *)&uip_buf[0])->dhwaddr.addr, ((struct arp_hdr *)&uip_buf[0])->shwaddr.addr, 6);
      __builtin_memcpy(((struct arp_hdr *)&uip_buf[0])->shwaddr.addr, uip_ethaddr.addr, 6);
      __builtin_memcpy(((struct arp_hdr *)&uip_buf[0])->ethhdr.src.addr, uip_ethaddr.addr, 6);
      __builtin_memcpy(((struct arp_hdr *)&uip_buf[0])->ethhdr.dest.addr, ((struct arp_hdr *)&uip_buf[0])->dhwaddr.addr, 6);
      
      ((struct arp_hdr *)&uip_buf[0])->dipaddr[0] = ((struct arp_hdr *)&uip_buf[0])->sipaddr[0];
      ((struct arp_hdr *)&uip_buf[0])->dipaddr[1] = ((struct arp_hdr *)&uip_buf[0])->sipaddr[1];
      ((struct arp_hdr *)&uip_buf[0])->sipaddr[0] = uip_hostaddr[0];
      ((struct arp_hdr *)&uip_buf[0])->sipaddr[1] = uip_hostaddr[1];

      ((struct arp_hdr *)&uip_buf[0])->ethhdr.type = ((((u16)((0x0806) & 0xff)) << 8) | (((0x0806) & 0xff00) >> 8));      
      uip_len = sizeof(struct arp_hdr);
    } 
    break;
  case ((((u16)((2) & 0xff)) << 8) | (((2) & 0xff00) >> 8)):
    
 
    if(((struct arp_hdr *)&uip_buf[0])->dipaddr[0] == uip_hostaddr[0] &&
       ((struct arp_hdr *)&uip_buf[0])->dipaddr[1] == uip_hostaddr[1]) {

      uip_arp_update(((struct arp_hdr *)&uip_buf[0])->sipaddr, &((struct arp_hdr *)&uip_buf[0])->shwaddr);
    }
    break;
  }
  STACK_BUSY = 1;
  
  
  return;
}
 

























 
 
void
uip_arp_out(void)
{
  struct arp_entry *tabptr;
  




 

   
  if((((struct ethip_hdr *)&uip_buf[0])->destipaddr[0] & uip_arp_netmask[0]) !=
     (uip_hostaddr[0] & uip_arp_netmask[0]) ||
     (((struct ethip_hdr *)&uip_buf[0])->destipaddr[1] & uip_arp_netmask[1]) !=
     (uip_hostaddr[1] & uip_arp_netmask[1])) {
    

 
    ipaddr[0] = uip_arp_draddr[0];
    ipaddr[1] = uip_arp_draddr[1];
  } else {
     
    ipaddr[0] = ((struct ethip_hdr *)&uip_buf[0])->destipaddr[0];
    ipaddr[1] = ((struct ethip_hdr *)&uip_buf[0])->destipaddr[1];
  }
      
  for(i = 0; i < 8; ++i) {
    tabptr = &arp_table[i];
    if(ipaddr[0] == tabptr->ipaddr[0] &&
       ipaddr[1] == tabptr->ipaddr[1])
      break;
  }

  if(i == 8) {
    
 

    memset(((struct arp_hdr *)&uip_buf[0])->ethhdr.dest.addr, 0xff, 6);
    memset(((struct arp_hdr *)&uip_buf[0])->dhwaddr.addr, 0x00, 6);
    __builtin_memcpy(((struct arp_hdr *)&uip_buf[0])->ethhdr.src.addr, uip_ethaddr.addr, 6);
    __builtin_memcpy(((struct arp_hdr *)&uip_buf[0])->shwaddr.addr, uip_ethaddr.addr, 6);
    
    ((struct arp_hdr *)&uip_buf[0])->dipaddr[0] = ipaddr[0];
    ((struct arp_hdr *)&uip_buf[0])->dipaddr[1] = ipaddr[1];
    ((struct arp_hdr *)&uip_buf[0])->sipaddr[0] = uip_hostaddr[0];
    ((struct arp_hdr *)&uip_buf[0])->sipaddr[1] = uip_hostaddr[1];
    ((struct arp_hdr *)&uip_buf[0])->opcode = ((((u16)((1) & 0xff)) << 8) | (((1) & 0xff00) >> 8));  
    ((struct arp_hdr *)&uip_buf[0])->hwtype = ((((u16)((1) & 0xff)) << 8) | (((1) & 0xff00) >> 8));
    ((struct arp_hdr *)&uip_buf[0])->protocol = ((((u16)((0x0800) & 0xff)) << 8) | (((0x0800) & 0xff00) >> 8));
    ((struct arp_hdr *)&uip_buf[0])->hwlen = 6;
    ((struct arp_hdr *)&uip_buf[0])->protolen = 4;
    ((struct arp_hdr *)&uip_buf[0])->ethhdr.type = ((((u16)((0x0806) & 0xff)) << 8) | (((0x0806) & 0xff00) >> 8));

    uip_appdata = &uip_buf[40 + 14];
    uip_appdata_length = 40 + 14;
    
    uip_len = sizeof(struct arp_hdr);
    STACK_BUSY = 1;
    return;
  }

   
  __builtin_memcpy(((struct ethip_hdr *)&uip_buf[0])->ethhdr.dest.addr, tabptr->ethaddr.addr, 6);
  __builtin_memcpy(((struct ethip_hdr *)&uip_buf[0])->ethhdr.src.addr, uip_ethaddr.addr, 6);
  
  ((struct ethip_hdr *)&uip_buf[0])->ethhdr.type = ((((u16)((0x0800) & 0xff)) << 8) | (((0x0800) & 0xff00) >> 8));

  uip_len += sizeof(struct uip_eth_hdr);
  STACK_BUSY = 1;
  
}
 

 
 

⌨️ 快捷键说明

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