From 9e0156b46a5a94c23d93b7e33850b4d19bb04ee7 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Thu, 20 Jan 2022 20:15:50 +0200 Subject: [PATCH] net: copy the freebsd address declarations for netbsd, openbsd, dragonfly --- vlib/net/address_dragonfly.c.v | 79 ++++++++++++++++++++++++++++++++++ vlib/net/address_netbsd.c.v | 79 ++++++++++++++++++++++++++++++++++ vlib/net/address_openbsd.c.v | 77 +++++++++++++++++++++++++++++++++ vlib/v/pref/should_compile.v | 2 + 4 files changed, 237 insertions(+) create mode 100644 vlib/net/address_dragonfly.c.v create mode 100644 vlib/net/address_netbsd.c.v create mode 100644 vlib/net/address_openbsd.c.v diff --git a/vlib/net/address_dragonfly.c.v b/vlib/net/address_dragonfly.c.v new file mode 100644 index 0000000000..a2ce22e354 --- /dev/null +++ b/vlib/net/address_dragonfly.c.v @@ -0,0 +1,79 @@ +module net + +// TODO: test this on actual DragonFlyBSD + +#include +#include + +const max_unix_path = 104 + +struct C.addrinfo { +mut: + ai_family int + ai_socktype int + ai_flags int + ai_protocol int + ai_addrlen int + ai_addr voidptr + ai_canonname voidptr + ai_next voidptr +} + +struct C.sockaddr_in6 { +mut: + // 1 + 1 + 2 + 4 + 16 + 4 = 28; + sin6_len byte // 1 + sin6_family byte // 1 + sin6_port u16 // 2 + sin6_flowinfo u32 // 4 + sin6_addr [16]byte // 16 + sin6_scope_id u32 // 4 +} + +struct C.sockaddr_in { +mut: + sin_len byte + sin_family byte + sin_port u16 + sin_addr u32 + sin_zero [8]char +} + +struct C.sockaddr_un { +mut: + sun_len byte + sun_family byte + sun_path [max_unix_path]char +} + +[_pack: '1'] +struct Ip6 { + port u16 + flow_info u32 + addr [16]byte + scope_id u32 +} + +[_pack: '1'] +struct Ip { + port u16 + addr [4]byte + // Pad to size so that socket functions + // dont complain to us (see in.h and bind()) + // TODO(emily): I would really like to use + // some constant calculations here + // so that this doesnt have to be hardcoded + sin_pad [8]byte +} + +struct Unix { + path [max_unix_path]char +} + +[_pack: '1'] +struct Addr { +pub: + len u8 + f u8 + addr AddrData +} diff --git a/vlib/net/address_netbsd.c.v b/vlib/net/address_netbsd.c.v new file mode 100644 index 0000000000..8013bd35b8 --- /dev/null +++ b/vlib/net/address_netbsd.c.v @@ -0,0 +1,79 @@ +module net + +// TODO: test this on NetBSD + +#include +#include + +const max_unix_path = 104 + +struct C.addrinfo { +mut: + ai_family int + ai_socktype int + ai_flags int + ai_protocol int + ai_addrlen int + ai_addr voidptr + ai_canonname voidptr + ai_next voidptr +} + +struct C.sockaddr_in6 { +mut: + // 1 + 1 + 2 + 4 + 16 + 4 = 28; + sin6_len byte // 1 + sin6_family byte // 1 + sin6_port u16 // 2 + sin6_flowinfo u32 // 4 + sin6_addr [16]byte // 16 + sin6_scope_id u32 // 4 +} + +struct C.sockaddr_in { +mut: + sin_len byte + sin_family byte + sin_port u16 + sin_addr u32 + sin_zero [8]char +} + +struct C.sockaddr_un { +mut: + sun_len byte + sun_family byte + sun_path [max_unix_path]char +} + +[_pack: '1'] +struct Ip6 { + port u16 + flow_info u32 + addr [16]byte + scope_id u32 +} + +[_pack: '1'] +struct Ip { + port u16 + addr [4]byte + // Pad to size so that socket functions + // dont complain to us (see in.h and bind()) + // TODO(emily): I would really like to use + // some constant calculations here + // so that this doesnt have to be hardcoded + sin_pad [8]byte +} + +struct Unix { + path [max_unix_path]char +} + +[_pack: '1'] +struct Addr { +pub: + len u8 + f u8 + addr AddrData +} diff --git a/vlib/net/address_openbsd.c.v b/vlib/net/address_openbsd.c.v new file mode 100644 index 0000000000..bc84665a0f --- /dev/null +++ b/vlib/net/address_openbsd.c.v @@ -0,0 +1,77 @@ +module net + +#include +#include + +const max_unix_path = 104 + +struct C.addrinfo { +mut: + ai_family int + ai_socktype int + ai_flags int + ai_protocol int + ai_addrlen int + ai_addr voidptr + ai_canonname voidptr + ai_next voidptr +} + +struct C.sockaddr_in6 { +mut: + // 1 + 1 + 2 + 4 + 16 + 4 = 28; + sin6_len byte // 1 + sin6_family byte // 1 + sin6_port u16 // 2 + sin6_flowinfo u32 // 4 + sin6_addr [16]byte // 16 + sin6_scope_id u32 // 4 +} + +struct C.sockaddr_in { +mut: + sin_len byte + sin_family byte + sin_port u16 + sin_addr u32 + sin_zero [8]char +} + +struct C.sockaddr_un { +mut: + sun_len byte + sun_family byte + sun_path [max_unix_path]char +} + +[_pack: '1'] +struct Ip6 { + port u16 + flow_info u32 + addr [16]byte + scope_id u32 +} + +[_pack: '1'] +struct Ip { + port u16 + addr [4]byte + // Pad to size so that socket functions + // dont complain to us (see in.h and bind()) + // TODO(emily): I would really like to use + // some constant calculations here + // so that this doesnt have to be hardcoded + sin_pad [8]byte +} + +struct Unix { + path [max_unix_path]char +} + +[_pack: '1'] +struct Addr { +pub: + len u8 + f u8 + addr AddrData +} diff --git a/vlib/v/pref/should_compile.v b/vlib/v/pref/should_compile.v index ffb116bb01..a7138b91d7 100644 --- a/vlib/v/pref/should_compile.v +++ b/vlib/v/pref/should_compile.v @@ -123,6 +123,8 @@ fn fname_without_platform_postfix(file string) string { '_', 'freebsd.c.v', '_', + 'openbsd.c.v', + '_', 'netbsd.c.v', '_', 'dragonfly.c.v',