From cb3b707e5359393d49ee62384e9e354550611208 Mon Sep 17 00:00:00 2001 From: Namonay Date: Fri, 8 Nov 2024 16:11:54 +0100 Subject: [PATCH] Add Makefile --- .gitignore | 4 +++ Makefile | 52 ++++++++++++++++++++++++++++++++ compile_commands.json | 12 ++++++++ ft_ping.h => includes/ft_ping.h | 3 +- objs/src/main.o | Bin 0 -> 7344 bytes objs/src/utils.o | Bin 0 -> 2952 bytes main.c => src/main.c | 5 +-- utils.c => src/utils.c | 9 ++++-- 8 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 Makefile create mode 100644 compile_commands.json rename ft_ping.h => includes/ft_ping.h (92%) create mode 100644 objs/src/main.o create mode 100644 objs/src/utils.o rename main.c => src/main.c (95%) rename utils.c => src/utils.c (85%) diff --git a/.gitignore b/.gitignore index 722d5e7..2ec987a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ .vscode +.cache +generate_json.py +ft_ping + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4549d0c --- /dev/null +++ b/Makefile @@ -0,0 +1,52 @@ +NAME = ./ft_ping + +SRCS = src/main.c \ + src/utils.c + + +OBJ_DIR = objs +OBJS = $(addprefix $(OBJ_DIR)/, $(SRCS:.c=.o)) + +CC = clang +CFLAGS = -Wall -Wextra -Werror -I includes + +DEBUG ?= false +MODE = "release" +TOOLCHAIN ?= clang + +ifeq ($(TOOLCHAIN), gcc) + CC = gcc +endif + +ifeq ($(DEBUG), true) + CFLAGS += -g -D DEBUG + MODE = "debug" +endif + +RM = rm -rf + +$(OBJ_DIR)/%.o: %.c + @echo "\e[1;32m[compiling "$(MODE)" {"$(CC)"}...]\e[1;00m "$< + @$(CC) $(CFLAGS) $(COPTS) -c $< -o $@ + +all: $(NAME) + + + +$(NAME): $(OBJ_DIR) $(OBJS) + @echo "\e[1;32m[linking "$(MODE)" {"$(CC)"}...]\e[1;00m "$@ + @$(CC) -o $(NAME) $(OBJS) -lm + @echo "\e[1;32m[build finished]\e[1;00m" + +$(OBJ_DIR): + @mkdir -p $(sort $(addprefix $(OBJ_DIR)/, $(dir $(SRCS)))) + +clean: + @$(RM) $(OBJ_DIR) + +fclean: clean + @$(RM) $(NAME) + +re: fclean all + +.PHONY: all clean fclean re diff --git a/compile_commands.json b/compile_commands.json new file mode 100644 index 0000000..963e993 --- /dev/null +++ b/compile_commands.json @@ -0,0 +1,12 @@ +[ + { + "directory": "/nfs/homes/vvaas/42/ft_ping", + "command": "clang++ -std=c++20 -I includes -c /nfs/homes/vvaas/42/ft_ping/src/main.c -o /nfs/homes/vvaas/42/ft_ping/objs/ma.o", + "file": "/nfs/homes/vvaas/42/ft_ping/src/main.c" + }, + { + "directory": "/nfs/homes/vvaas/42/ft_ping", + "command": "clang++ -std=c++20 -I includes -c /nfs/homes/vvaas/42/ft_ping/src/utils.c -o /nfs/homes/vvaas/42/ft_ping/objs/uti.o", + "file": "/nfs/homes/vvaas/42/ft_ping/src/utils.c" + } +] \ No newline at end of file diff --git a/ft_ping.h b/includes/ft_ping.h similarity index 92% rename from ft_ping.h rename to includes/ft_ping.h index d208e02..5d753ee 100644 --- a/ft_ping.h +++ b/includes/ft_ping.h @@ -15,6 +15,7 @@ #include #include #include +#include #define PACKET_SIZE 64 @@ -34,7 +35,7 @@ struct packet_stats double timestamp_array[65536]; }; -uint16_t calculate_checksum(uint16_t *data, int len); +uint16_t make_checksum(uint16_t *data, int len); double get_timestamp(); struct in_addr get_addr_by_hostname(char *hostname); double get_stddev(double *timestamp_array); diff --git a/objs/src/main.o b/objs/src/main.o new file mode 100644 index 0000000000000000000000000000000000000000..bb24153ff2bd93bfbcd1b1c8920cadc775c7b9b0 GIT binary patch literal 7344 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 literal 0 HcmV?d00001 diff --git a/main.c b/src/main.c similarity index 95% rename from main.c rename to src/main.c index 9aca163..fabf241 100644 --- a/main.c +++ b/src/main.c @@ -14,7 +14,7 @@ int ft_ping(int sock, uint16_t seq, struct sockaddr_in *dst) icmp_hdr->code = 0; icmp_hdr->id = getpid(); icmp_hdr->seq = seq; - icmp_hdr->checksum = calculate_checksum((uint16_t *)icmp_hdr, sizeof(icmp_hdr)); + icmp_hdr->checksum = make_checksum((uint16_t *)icmp_hdr, sizeof(icmp_hdr)); if (sendto(sock, data, sizeof(data), 0, (struct sockaddr *)dst, sizeof(struct sockaddr_in)) == -1) { @@ -42,7 +42,7 @@ void ft_recv(int sock, uint16_t seq, char *ip, double start) time = (get_timestamp() - start) * 1000; checksum = icmp_hdr->checksum; icmp_hdr->checksum = 0; - if (icmp_hdr->seq != seq || calculate_checksum((uint16_t *)icmp_hdr, sizeof(*icmp_hdr)) != checksum) + if (icmp_hdr->seq != seq || make_checksum((uint16_t *)icmp_hdr, sizeof(*icmp_hdr)) != checksum) return; fill_timestamp_array(&stats, time); stats.n_packet_recv++; @@ -93,6 +93,7 @@ void print_recap(char *ip) printf("%d packed transmitted, %d received, %0.0f%% packet loss\n", stats.n_packet_sent, stats.n_packet_recv, (double)(100 - (stats.n_packet_recv / stats.n_packet_sent) * 100)); printf("round-trip min/avg/max/stddev = %5.3f/%5.3f/%5.3f/%5.3f ms\n", get_min(stats.timestamp_array), get_avg(stats.timestamp_array), get_max(stats.timestamp_array), get_stddev(stats.timestamp_array)); } + int main(int argc, char **argv) { int sock; diff --git a/utils.c b/src/utils.c similarity index 85% rename from utils.c rename to src/utils.c index 7bfb413..f680b1b 100644 --- a/utils.c +++ b/src/utils.c @@ -1,7 +1,8 @@ #include "ft_ping.h" -uint16_t calculate_checksum(uint16_t *data, int len) +uint16_t make_checksum(uint16_t *data, int len) { + // make the checksum of data uint32_t checksum = 0; int i = 0; @@ -43,6 +44,7 @@ void fill_timestamp_array(struct packet_stats *stats, double time) double get_min(double *timestamp_array) { + // get the smallest element of the timestamp_array double min = timestamp_array[0]; for (int i = 1; timestamp_array[i]; i++) { @@ -54,6 +56,7 @@ double get_min(double *timestamp_array) double get_max(double *timestamp_array) { + // get the biggest element of the timestamp_array double max = timestamp_array[0]; for (int i = 1; timestamp_array[i]; i++) { @@ -65,6 +68,7 @@ double get_max(double *timestamp_array) double get_avg(double *timestamp_array) { + // get the average of elements in timestamp_array double avg = 0; int i = 0; @@ -78,6 +82,7 @@ double get_avg(double *timestamp_array) double get_stddev(double *timestamp_array) { + // get the standard deviation of elements in timestamp_array float avg = get_avg(timestamp_array); float variance = 0; float variance_tmp; @@ -88,4 +93,4 @@ double get_stddev(double *timestamp_array) variance += variance_tmp * variance_tmp; } return (sqrt(variance)); -} \ No newline at end of file +}