完成函数 void eth_dispatch(unsigned char eth); 输入为帧的第一个字节的指针,要求返回源MAC的首地址。要求解析帧中的类型字段,根据类型编码确定该帧封装是IP,ARP或其他协议包。注意网络字节顺序可能与本地字节训练不同。已经IP协议对应的帧类型代码是0x0800,ARP协议对应的帧类型是0x0806。
时间: 2023-05-28 08:06:38 浏览: 79
eth.rar_STM32 ETH_eth 源代码下载_以太网源代码
void eth_dispatch(unsigned char* eth) {
unsigned char* src_mac = eth + 6; // 源MAC地址在帧的第7个字节开始
unsigned short type = (eth[12] << 8) | eth[13]; // 类型字段在帧的第13和14个字节
if (type == 0x0800) {
// IP协议
// TODO: 解析IP协议头
} else if (type == 0x0806) {
// ARP协议
// TODO: 解析ARP协议头
} else {
// 其他协议
// TODO: 解析其他协议头
}
return src_mac;
}
阅读全文