📄 uip_arp.i
字号:
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 + -