- Fixed incorrect init_connections() call in test_etcp_simple_traffic.c (was calling server_instance instead of client_instance) - Fixed double free in timeout_heap_pop() when handling deleted elements - Enhanced NULL pointer safety in uasync_print_resources() by removing complex heap manipulation - Added debug logging to timeout_heap_pop() for better error tracking Test results: test_etcp_simple_traffic now passes without double free errors
90 lines
2.1 KiB
C
Executable File
90 lines
2.1 KiB
C
Executable File
// config_parser.h - Configuration parser for utun application
|
|
#ifndef CONFIG_PARSER_H
|
|
#define CONFIG_PARSER_H
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/inet.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define MAX_CONN_NAME_LEN 64
|
|
#define MAX_KEY_LEN 256
|
|
#define MAX_ADDR_LEN 64
|
|
|
|
struct IP {
|
|
sa_family_t family;
|
|
union {
|
|
struct in_addr v4;
|
|
struct in6_addr v6;
|
|
} addr;
|
|
};
|
|
|
|
#define CFG_SERVER_TYPE_UNKNOWN 0
|
|
#define CFG_SERVER_TYPE_PUBLIC 1
|
|
#define CFG_SERVER_TYPE_NAT 2
|
|
#define CFG_SERVER_TYPE_PRIVATE 3
|
|
|
|
struct CFG_SERVER {
|
|
struct CFG_SERVER* next;
|
|
char name[MAX_CONN_NAME_LEN];
|
|
struct sockaddr_storage ip; // ip:port
|
|
uint32_t netif_index;// if_nameindex, 0 - no interface specified
|
|
int so_mark;
|
|
uint8_t type; // public/nat/private
|
|
};
|
|
|
|
struct CFG_CLIENT_LINK {
|
|
struct CFG_CLIENT_LINK *next; // Next link in linked list
|
|
struct CFG_SERVER* local_srv;
|
|
struct sockaddr_storage remote_addr; // ip:port
|
|
};
|
|
|
|
struct CFG_CLIENT {
|
|
char name[MAX_CONN_NAME_LEN];
|
|
char peer_public_key_hex[MAX_KEY_LEN];
|
|
int keepalive;
|
|
struct CFG_CLIENT_LINK *links; // Linked list of links
|
|
struct CFG_CLIENT *next; // Next client in linked list
|
|
};
|
|
|
|
struct CFG_ROUTE_ENTRY {
|
|
struct CFG_ROUTE_ENTRY* next;
|
|
struct IP ip;
|
|
uint8_t netmask;
|
|
};
|
|
|
|
struct global_config {
|
|
char my_private_key_hex[MAX_KEY_LEN];
|
|
char my_public_key_hex[MAX_KEY_LEN];
|
|
uint64_t my_node_id;
|
|
char tun_ifname[16]; // TUN interface name (e.g., "tun12")
|
|
struct IP tun_ip;
|
|
int mtu;
|
|
struct sockaddr_storage control_sock;
|
|
int net_debug;
|
|
};
|
|
|
|
struct utun_config {
|
|
struct global_config global;
|
|
struct CFG_SERVER* servers;
|
|
struct CFG_CLIENT* clients;
|
|
struct CFG_ROUTE_ENTRY* allowed_subnets;
|
|
struct CFG_ROUTE_ENTRY* my_subnets;
|
|
};
|
|
|
|
struct utun_config* parse_config(const char *filename);
|
|
void free_config(struct utun_config *config);
|
|
void print_config(const struct utun_config *config);
|
|
int update_config_keys(const char *filename, const char *priv_key, const char *pub_key);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|