summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaditya Dhruv <[email protected]>2025-07-29 22:07:21 -0500
committerAaditya Dhruv <[email protected]>2025-07-29 22:07:21 -0500
commit4c595bf45e87269d541b30b8012512cba15521f7 (patch)
tree6d3b8e38f20b3695c59a6b70e522bf8810fb53ec
parentb3a344f2f79ca506cdadcfc39c5617c48546bc2f (diff)
Add arp_packet struct and parsing in eth_recv
-rw-r--r--include/junk/network.h15
-rw-r--r--src/network.c4
2 files changed, 18 insertions, 1 deletions
diff --git a/include/junk/network.h b/include/junk/network.h
index 73dd127..12a3af0 100644
--- a/include/junk/network.h
+++ b/include/junk/network.h
@@ -2,6 +2,7 @@
//Layer 4, TCP
+#include <linux/if_ether.h>
int tcp_ipv4_send(char* ip, char* port, char* data);
int tcp_ipv4_recv(char* ip, char* port, char* data);
int ipv4_bind(char* ip, char* port, char* data);
@@ -11,3 +12,17 @@ int ipv4_bind(char* ip, char* port, char* data);
int eth_bind(char address[]);
int eth_send(int sockfd, char* data);
int eth_recv(int sockfd);
+
+typedef struct ethhdr ethhdr;
+
+typedef struct arp_packet {
+ unsigned char hardware_type[2];
+ unsigned char protocol_type[2];
+ unsigned char hardware_length[1];
+ unsigned char protocol_length[1];
+ unsigned char operation[2];
+ unsigned char sender_hardware_address[6];
+ unsigned char sender_protocol_address[4];
+ unsigned char target_hardware_address[6];
+ unsigned char target_protocol_address[4];
+ } arp_packet;
diff --git a/src/network.c b/src/network.c
index 2174f47..0e32677 100644
--- a/src/network.c
+++ b/src/network.c
@@ -124,10 +124,12 @@ int eth_recv(int sockfd) {
}
else {
fprintf(stderr, "\nCharacters:\n");
- struct ethhdr* recv_struct = (struct ethhdr*) buffer;
+ ethhdr* recv_struct = (ethhdr*) buffer;
fprintf(stderr, "%s: source mac (%02x:%02x:%02x:%02x:%02x:%02x)\n", TAG, recv_struct->h_source[0], recv_struct->h_source[1], recv_struct->h_source[2], recv_struct->h_source[3], recv_struct->h_source[4], recv_struct->h_source[5]);
fprintf(stderr, "%s: dest mac (%02x:%02x:%02x:%02x:%02x:%02x)\n", TAG, recv_struct->h_dest[0], recv_struct->h_dest[1], recv_struct->h_dest[2], recv_struct->h_dest[3], recv_struct->h_dest[4], recv_struct->h_dest[5]);
+ arp_packet* packet = (arp_packet*) (buffer + sizeof (ethhdr));
+
return 0;
}
}