📄 ethernet.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include "net.h"
void NetConvEther(char mac[6], char *str)
{
int i;
char *end;
for(i=0;i<6;i++){
mac[i] = strtol(str, &end, 16);
str += 3;
}
}
void NetCopyEther(volatile char * to, char * from)
{ int i; for (i = 0; i < 6; i++) *to++ = *from++;}void NetSetEther(volatile char * xet, char * addr, unsigned int prot)
{ volatile Ethernet_t *et = (Ethernet_t *)xet; NetCopyEther((char *)(et->et_dest), addr);
NetCopyEther((char *)(et->et_src), NetOurEther);
et->et_protlen = SWAP16(prot);}void NetPrintEther(volatile char * addr)
{ int i; for (i = 0; i < 6; i++) { printf("%02x", *(addr+i)); if (i != 5) printf(":"); } printf("\n");}
#if 0
typedef struct{
unsigned short lifetime;
char mac[6];
IPaddr_t ip;
}ethernet_intf_t;
#define IPPOOL_MAXNUM 8
#define IPPOOL_MAXLIFE 30
ethernet_intf_t IpadrPool[IPPOOL_MAXNUM];
char *ethernet_getMac(IPaddr_t dest)
{
int i;
ethernet_intf_t *pe = IpadrPool;
for(i=0;i<IPPOOL_MAXNUM;i++){
if (pe->lifetime > 0){
if (pe->ip == dest)
return pe->mac;
}
pe++;
}
return NULL;
}
void ethernet_updateMac(IPaddr_t dest, char *pmac)
{
static int index = 0;
int i;
ethernet_intf_t *pe = IpadrPool;
for(i=0;i<IPPOOL_MAXNUM;i++){
if (pe->ip == dest){
memcpy(pe->mac, pmac, 6);
pe->lifetime = IPPOOL_MAXLIFE;
return;
}
pe++;
}
pe = IpadrPool[index++];
if (index >= IPPOOL_MAXNUM) index = 0;
memcpy(pe->mac, pmac, 6);
pe->dest = dest;
pe->lifetime = IPPOOL_MAXLIFE;
}
#endif
void ethernet_send(char *packet, int length, IPaddr_t dest)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -