timer/packet.h
Zack Buhman 8c1c1e97f6 duplicate send, resend, ack
The 'software' renderer is now explicitly requested.
2024-06-26 02:44:07 -05:00

90 lines
2.5 KiB
C

#pragma once
#include <assert.h>
#include <stdint.h>
#include <time.h>
#include <netinet/in.h>
#include "timer.h"
#include "link.h"
#define EVENT_TYPE__INVALID 0x00000000
#define EVENT_TYPE__TIME_START 0x12858517
#define EVENT_TYPE__TIME_RESUME 0x56100f0f
#define EVENT_TYPE__TIME_STOP 0xdf75d3f8
#define EVENT_TYPE__AVERAGE_RTT 0xc7065931
#define EVENT_TYPE__PING 0x0ba0d4c2
#define EVENT_TYPE__PONG 0x49a87c9d
#define EVENT_TYPE__ACK 0xfde7959f
static_assert((sizeof (struct timespec)) == 8 + 8);
struct event {
uint32_t type;
uint32_t sequence;
};
struct packet_stopwatch {
struct event event;
struct stopwatch_time stopwatch_time;
};
static_assert((sizeof (struct packet_stopwatch)) ==
(sizeof (struct event)) + (sizeof (struct stopwatch_time)));
struct packet_start {
struct event event;
};
static_assert((sizeof (struct packet_start)) == (sizeof (struct event)));
struct packet_resume {
struct event event;
struct timespec offset;
};
static_assert((sizeof (struct packet_resume)) ==
(sizeof (struct event)) + (sizeof (struct timespec)));
struct packet_ack {
struct event event;
};
static_assert((sizeof (struct packet_ack)) == (sizeof (struct event)));
struct packet_average_rtt {
struct event event;
struct timespec offset;
};
static_assert((sizeof (struct packet_average_rtt)) == (sizeof (struct event)) + (sizeof (struct timespec)));
struct packet_ping_pong {
struct event event;
struct timespec time;
};
int packet_send_ping(int sockfd,
struct sockaddr_in6 * dest_addr);
int packet_send_pong(int sockfd,
struct sockaddr_in6 * dest_addr,
struct timespec * time);
int packet_send_average_rtt(int sockfd,
struct sockaddr_in6 * dest_addr,
struct timespec * offset);
int packet_send_start_event(int sockfd,
struct sockaddr_in6 * dest_addr,
struct link_state * link_state);
int packet_send_resume_event(int sockfd,
struct sockaddr_in6 * dest_addr,
struct timer_state * timer_state,
struct link_state * link_state);
int packet_send_stopwatch_event(int sockfd,
struct sockaddr_in6 * dest_addr,
struct timer_state * timer_state,
struct link_state * link_state);
int packet_send_ack(int sockfd,
struct sockaddr_in6 * dest_addr,
uint32_t sequence);