This commit is contained in:
Zack Buhman 2024-09-24 21:45:28 -05:00
parent af79779970
commit b767b810c3

View File

@ -22,8 +22,16 @@
#include "ping_pong.h" #include "ping_pong.h"
#include "gpio.h" #include "gpio.h"
#define DEST_PORT 1234 struct addr_port {
#define DEST_ADDR "fd00::1" const char * addr;
const int port;
};
const struct addr_port dests[] = {
{"fd00::1", 1234},
{"fd00::10", 1234},
};
const int dests_len = (sizeof (dests)) / (sizeof (dests[0]));
#define PORT 4321 #define PORT 4321
@ -65,8 +73,8 @@ int handle_buf(int sockfd,
} }
int handle_sockfd(int sockfd, int handle_sockfd(int sockfd,
struct sockaddr_in6 * dest_addr, struct dest_addr dest_addr[],
struct link_state * link_state) struct link_state link_state[])
{ {
struct sockaddr_in6 src_addr; struct sockaddr_in6 src_addr;
socklen_t addrlen = (sizeof (struct sockaddr_in6)); socklen_t addrlen = (sizeof (struct sockaddr_in6));
@ -88,10 +96,16 @@ int handle_sockfd(int sockfd,
} }
} }
//char src_addr_str[INET6_ADDRSTRLEN]; char src_addr_str[INET6_ADDRSTRLEN];
//inet_ntop(AF_INET6, &src_addr.sin6_addr, src_addr_str, INET6_ADDRSTRLEN); inet_ntop(AF_INET6, &src_addr.sin6_addr, src_addr_str, INET6_ADDRSTRLEN);
//printf("received packet from %s:%d\n", src_addr_str, ntohs(src_addr.sin6_port)); printf("received packet from %s:%d\n", src_addr_str, ntohs(src_addr.sin6_port));
//printf("length: %ld\n", recv_len); printf("length: %ld\n", recv_len);
for (int i = 0; i < dests_len; i++) {
if (memcmp(src_addr.sin6_addr.s6_addr, dest_addr[i].sin6_addr.s6_addr, (sizeof (struct in6_addr))) == 0) {
printf("MATCH %d\n", i);
}
}
int ret = handle_buf(sockfd, dest_addr, buf, recv_len, link_state); int ret = handle_buf(sockfd, dest_addr, buf, recv_len, link_state);
if (ret == -1) { if (ret == -1) {
@ -387,15 +401,17 @@ int main(void)
} }
} }
struct sockaddr_in6 dest_addr; struct sockaddr_in6 dest_addr[dests_len];
dest_addr.sin6_family = AF_INET6; for (int i = 0; i < dests_len; i++) {
dest_addr.sin6_port = htons(DEST_PORT); dest_addr[i].sin6_family = AF_INET6;
ret = inet_pton(AF_INET6, DEST_ADDR, &dest_addr.sin6_addr); dest_addr[i].sin6_port = htons(dests[i].port);
assert(ret == 1); ret = inet_pton(AF_INET6, dests[i].addr, &dest_addr[i].sin6_addr);
assert(ret == 1);
}
struct parser_state parser_state = {0}; struct parser_state parser_state = {0};
struct timer_state timer_state = {0}; struct timer_state timer_state = {0};
struct link_state link_state = {0}; struct link_state link_state[dests_len] = {0};
struct gpio_state gpio_state = {0}; struct gpio_state gpio_state = {0};
gpio_open("/dev/gpiochip0", &gpio_state); gpio_open("/dev/gpiochip0", &gpio_state);
@ -410,13 +426,13 @@ int main(void)
for (int n = 0; n < nfds; ++n) { for (int n = 0; n < nfds; ++n) {
if (events[n].data.fd == sockfd) { if (events[n].data.fd == sockfd) {
ret = handle_sockfd(sockfd, &dest_addr, &link_state); ret = handle_sockfd(sockfd, link_state);
if (ret == -1) if (ret == -1)
return -1; return -1;
} else if (events[n].data.fd == timerfd) { } else if (events[n].data.fd == timerfd) {
ret = handle_timerfd(timerfd, ret = handle_timerfd(timerfd,
sockfd, sockfd,
&dest_addr, dest_addr,
&timer_state, &timer_state,
&link_state, &link_state,
&gpio_state); &gpio_state);
@ -426,7 +442,7 @@ int main(void)
fprintf(stderr, "handle_serialfd\n"); fprintf(stderr, "handle_serialfd\n");
ret = handle_serialfd(serialfd, ret = handle_serialfd(serialfd,
sockfd, sockfd,
&dest_addr, dest_addr,
&parser_state, &parser_state,
&timer_state, &timer_state,
&link_state, &link_state,