// ------------------------------------------------------------------------- // ethernet.c // // 21.12.2003, J. Ahrensfeld // // ------------------------------------------------------------------------- #include #include #include #include #include #include #include #include "libsys.h" #include "ethernet.h" #include "arp.h" #define ARP_DGRAM_SIZE 46 // ------------------------------------------------------------------------- void ArpRequest(packet_t *pPacket, uint8_t *eth_addr_src, uint8_t *inet_addr_src, uint8_t *eth_addr_dst, uint8_t *inet_addr_dst) { ARP *pARP; pARP = (ARP*)Eth_pkt_buffer_get(pPacket); memset(pARP, 0, sizeof(ARP)); // Make ARP request memcpy(pARP->inet_addr_src, inet_addr_src, 4); memcpy(pARP->inet_addr_dst, inet_addr_dst, 4); memcpy(pARP->eth_addr_src, eth_addr_src, 6); memcpy(pARP->eth_addr_dst, eth_addr_dst, 6); pARP->hw_type = TYPE_HW_ETH10; pARP->proto_type = TYPE_PROTO_IP; pARP->opcode = ARP_REQUEST; pARP->hw_size = 6; pARP->proto_size = 4; // Send it Eth_pkt_append(pPacket, sizeof(ARP)); } void ArpReply(packet_t *pPacket, uint8_t *eth_addr_src, uint8_t *inet_addr_src, uint8_t *eth_addr_dst, uint8_t *inet_addr_dst) { ARP *pARP; pARP = (ARP*)Eth_pkt_buffer_get(pPacket); memset(pARP, 0, sizeof(ARP)); // Make ARP reply memcpy(pARP->inet_addr_src, inet_addr_src, 4); memcpy(pARP->inet_addr_dst, inet_addr_dst, 4); memcpy(pARP->eth_addr_src, eth_addr_src, 6); memcpy(pARP->eth_addr_dst, eth_addr_dst, 6); pARP->hw_type = TYPE_HW_ETH10; pARP->proto_type = TYPE_PROTO_IP; pARP->opcode = ARP_REPLY; pARP->hw_size = 6; pARP->proto_size = 4; // Send it Eth_pkt_append(pPacket, sizeof(ARP)); }