From 4dda7f6d0a4dcc19392a4c6620a4812230e3552b Mon Sep 17 00:00:00 2001 From: Mark Puha Date: Fri, 15 Sep 2023 07:09:56 +0200 Subject: [PATCH] add openbsd new fields --- src/ipc-openbsd.h | 91 ++++++++++++++++++++++++++++++++++++ src/uapi/openbsd/net/if_wg.h | 27 +++++++---- 2 files changed, 109 insertions(+), 9 deletions(-) diff --git a/src/ipc-openbsd.h b/src/ipc-openbsd.h index 03fbdb5..1b0955d 100644 --- a/src/ipc-openbsd.h +++ b/src/ipc-openbsd.h @@ -110,6 +110,51 @@ static int kernel_get_device(struct wgdevice **device, const char *iface) dev->flags |= WGDEVICE_HAS_PRIVATE_KEY; } + if (wg_iface->i_flags & WG_INTERFACE_DEVICE_HAS_JC) { + dev->junk_packet_count = wg_iface->i_junk_packet_count; + dev->flags |= WGDEVICE_HAS_JC; + } + + if (wg_iface->i_flags & WG_INTERFACE_DEVICE_HAS_JMIN) { + dev->junk_packet_min_size = wg_iface->i_junk_packet_min_size; + dev->flags |= WGDEVICE_HAS_JMIN; + } + + if (wg_iface->i_flags & WG_INTERFACE_DEVICE_HAS_JMAX) { + dev->junk_packet_max_size = wg_iface->i_junk_packet_max_size; + dev->flags |= WGDEVICE_HAS_JMAX; + } + + if (wg_iface->i_flags & WG_INTERFACE_DEVICE_HAS_S1) { + dev->init_packet_junk_size = wg_iface->i_init_packet_junk_size; + dev->flags |= WGDEVICE_HAS_S1; + } + + if (wg_iface->i_flags & WG_INTERFACE_DEVICE_HAS_S2) { + dev->response_packet_junk_size = wg_iface->i_response_packet_junk_size; + dev->flags |= WGDEVICE_HAS_S2; + } + + if (wg_iface->i_flags & WG_INTERFACE_DEVICE_HAS_H1) { + dev->init_packet_magic_header = wg_iface->i_init_packet_magic_header; + dev->flags |= WGDEVICE_HAS_H1; + } + + if (wg_iface->i_flags & WG_INTERFACE_DEVICE_HAS_H2) { + dev->response_packet_magic_header = wg_iface->i_response_packet_magic_header; + dev->flags |= WGDEVICE_HAS_H2; + } + + if (wg_iface->i_flags & WG_INTERFACE_DEVICE_HAS_H3) { + dev->underload_packet_magic_header = wg_iface->i_underload_packet_magic_header; + dev->flags |= WGDEVICE_HAS_H3; + } + + if (wg_iface->i_flags & WG_INTERFACE_DEVICE_HAS_H4) { + dev->transport_packet_magic_header = wg_iface->i_transport_packet_magic_header; + dev->flags |= WGDEVICE_HAS_H4; + } + wg_peer = &wg_iface->i_peers[0]; for (size_t i = 0; i < wg_iface->i_peers_count; ++i) { peer = calloc(1, sizeof(*peer)); @@ -221,6 +266,52 @@ static int kernel_set_device(struct wgdevice *dev) if (dev->flags & WGDEVICE_REPLACE_PEERS) wg_iface->i_flags |= WG_INTERFACE_REPLACE_PEERS; + + if (dev->flags & WGDEVICE_HAS_JC) { + wg_iface->i_junk_packet_count = dev->junk_packet_count; + wg_iface->i_flags |= WG_INTERFACE_DEVICE_HAS_JC; + } + + if (dev->flags & WGDEVICE_HAS_JMIN) { + wg_iface->i_junk_packet_min_size = dev->junk_packet_min_size; + wg_iface->i_flags |= WG_INTERFACE_DEVICE_HAS_JMIN; + } + + if (dev->flags & WGDEVICE_HAS_JMAX) { + wg_iface->i_junk_packet_max_size = dev->junk_packet_max_size; + wg_iface->i_flags |= WG_INTERFACE_DEVICE_HAS_JMAX; + } + + if (dev->flags & WGDEVICE_HAS_S1) { + wg_iface->i_init_packet_junk_size = dev->init_packet_junk_size; + wg_iface->i_flags |= WG_INTERFACE_DEVICE_HAS_S1; + } + + if (dev->flags & WGDEVICE_HAS_S2) { + wg_iface->i_response_packet_junk_size = dev->response_packet_junk_size; + wg_iface->i_flags |= WG_INTERFACE_DEVICE_HAS_S2; + } + + if (dev->flags & WGDEVICE_HAS_H1) { + wg_iface->i_init_packet_magic_header = dev->init_packet_magic_header; + wg_iface->i_flags |= WG_INTERFACE_DEVICE_HAS_H1; + } + + if (dev->flags & WGDEVICE_HAS_H2) { + wg_iface->i_response_packet_magic_header = dev->response_packet_magic_header; + wg_iface->i_flags |= WG_INTERFACE_DEVICE_HAS_H2; + } + + if (dev->flags & WGDEVICE_HAS_H3) { + wg_iface->i_underload_packet_magic_header = dev->underload_packet_magic_header; + wg_iface->i_flags |= WG_INTERFACE_DEVICE_HAS_H3; + } + + if (dev->flags & WGDEVICE_HAS_H4) { + wg_iface->i_transport_packet_magic_header = dev->transport_packet_magic_header; + wg_iface->i_flags |= WG_INTERFACE_DEVICE_HAS_H4; + } + peer_count = 0; wg_peer = &wg_iface->i_peers[0]; for_each_wgpeer(dev, peer) { diff --git a/src/uapi/openbsd/net/if_wg.h b/src/uapi/openbsd/net/if_wg.h index bd33a88..23c120e 100644 --- a/src/uapi/openbsd/net/if_wg.h +++ b/src/uapi/openbsd/net/if_wg.h @@ -40,8 +40,8 @@ struct wg_aip_io { #define WG_PEER_HAS_PUBLIC (1 << 0) #define WG_PEER_HAS_PSK (1 << 1) #define WG_PEER_HAS_PKA (1 << 2) -#define WG_PEER_HAS_ENDPOINT (1 << 3) -#define WG_PEER_REPLACE_AIPS (1 << 4) +#define WG_PEER_HAS_ENDPOINT (1 << 3) +#define WG_PEER_REPLACE_AIPS (1 << 4) #define WG_PEER_REMOVE (1 << 5) #define WG_PEER_UPDATE (1 << 6) @@ -67,16 +67,25 @@ struct wg_peer_io { struct wg_aip_io p_aips[]; }; -#define WG_INTERFACE_HAS_PUBLIC (1 << 0) -#define WG_INTERFACE_HAS_PRIVATE (1 << 1) -#define WG_INTERFACE_HAS_PORT (1 << 2) -#define WG_INTERFACE_HAS_RTABLE (1 << 3) -#define WG_INTERFACE_REPLACE_PEERS (1 << 4) +#define WG_INTERFACE_HAS_PUBLIC (1 << 0) +#define WG_INTERFACE_HAS_PRIVATE (1 << 1) +#define WG_INTERFACE_HAS_PORT (1 << 2) +#define WG_INTERFACE_HAS_RTABLE (1 << 3) +#define WG_INTERFACE_REPLACE_PEERS (1 << 4) +#define WG_INTERFACE_DEVICE_HAS_JC (1 << 5) +#define WG_INTERFACE_DEVICE_HAS_JMIN (1 << 6) +#define WG_INTERFACE_DEVICE_HAS_JMAX (1 << 7) +#define WG_INTERFACE_DEVICE_HAS_S1 (1 << 8) +#define WG_INTERFACE_DEVICE_HAS_S2 (1 << 9) +#define WG_INTERFACE_DEVICE_HAS_H1 (1 << 10) +#define WG_INTERFACE_DEVICE_HAS_H2 (1 << 11) +#define WG_INTERFACE_DEVICE_HAS_H3 (1 << 12) +#define WG_INTERFACE_DEVICE_HAS_H4 (1 << 13) struct wg_interface_io { - uint8_t i_flags; + uint16_t i_flags; in_port_t i_port; - int i_rtable; + int i_rtable; uint8_t i_public[WG_KEY_LEN]; uint8_t i_private[WG_KEY_LEN]; size_t i_peers_count;