Files
mips/src/arp.c
T
jens 26291bca3d - initial import
git-svn-id: http://moon:8086/svn/mips@1 a8ebac50-d88d-4704-bea3-6648445a41b3
2014-07-20 15:01:37 +00:00

71 lines
1.8 KiB
C

// -------------------------------------------------------------------------
// ethernet.c
//
// 21.12.2003, J. Ahrensfeld
//
// -------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <time.h>
#include <sys/time.h>
#include <sys/types.h>
#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));
}