Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
arp.c
Go to the documentation of this file.
1#include "arp.h"
2#include "ethernet.h"
3#include <str.h>
4#include "netutils.h"
5
6void arp_reply(netdev_t* dev, uint32_t ip, uint8_t out_mac[6]) {
7 auto netbuff = create_netbuff();
8
9 struct arp_packet* reply = (struct arp_packet*) netbuff_put(
10 netbuff, sizeof(struct arp_packet));
11
12 // arp
13 reply->htype = 0x0100; // htons(1) → Ethernet
14 reply->ptype = 0x0008; // htons(0x0800) → IPv4
15 reply->hlen = 6;
16 reply->plen = 4;
17 reply->oper = 0x0200; // htons(2) → reply
18
19 // sender = kita
20 memcopy(reply->sender_mac, dev->mac, 6);
21 reply->sender_ip = vxInetAddr("192.168.100.80");
22
23 // target = pengirim request
24 memcopy(reply->target_mac, out_mac, 6);
25 reply->target_ip = ip;
26
27 ethernet_send_frame(dev, netbuff, 0x0608, out_mac);
28
30}
void arp_reply(netdev_t *dev, uint32_t ip, uint8_t out_mac[6])
Definition arp.c:6
void ethernet_send_frame(netdev_t *dev, struct netbuff *netbuff, uint16_t ethertype, const uint8_t dst_mac[6])
Definition ethernet.c:9
void free_netbuff(struct netbuff *netbuff)
Definition netbuff.c:56
void * netbuff_put(struct netbuff *nb, size_t len)
Definition netbuff.c:42
struct netbuff * create_netbuff()
Definition netbuff.c:19
struct netdev netdev_t
Definition netdev.h:19
uint32_t vxInetAddr(const char *addr)
Definition netutils.c:3
void memcopy(void *dest, void *src, size_t size)
uint8_t hlen
Definition arp.h:10
uint8_t target_mac[6]
Definition arp.h:17
uint16_t oper
Definition arp.h:12
uint16_t ptype
Definition arp.h:9
uint8_t plen
Definition arp.h:11
uint8_t sender_mac[6]
Definition arp.h:14
uint16_t htype
Definition arp.h:8
uint32_t target_ip
Definition arp.h:18
uint32_t sender_ip
Definition arp.h:15
uint8_t mac[6]
Definition netdev.h:35
unsigned int uint32_t
Definition type.h:19
unsigned char uint8_t
Definition type.h:7