1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (C) 2022 Felix Fietkau <nbd@nbd.name>
5 #ifndef __UNETD_UTILS_H
6 #define __UNETD_UTILS_H
8 #include <netinet/in.h>
12 uint8_t network_id
[8];
19 union network_endpoint
{
21 struct sockaddr_in in
;
22 struct sockaddr_in6 in6
;
26 network_endpoint_addr(union network_endpoint
*ep
, int *addr_len
)
28 if (ep
->sa
.sa_family
== AF_INET6
) {
29 *addr_len
= sizeof(ep
->in6
.sin6_addr
);
30 return &ep
->in6
.sin6_addr
;
33 *addr_len
= sizeof(ep
->in
.sin_addr
);
34 return &ep
->in
.sin_addr
;
38 network_endpoint_addr_equal(union network_endpoint
*ep1
, union network_endpoint
*ep2
)
43 if (ep1
->sa
.sa_family
!= ep2
->sa
.sa_family
)
46 a1
= network_endpoint_addr(ep1
, &len
);
47 a2
= network_endpoint_addr(ep2
, &len
);
49 return !memcmp(a1
, a2
, len
);
52 int network_get_endpoint(union network_endpoint
*dest
, const char *str
,
53 int default_port
, int idx
);
54 int network_get_subnet(int af
, union network_addr
*addr
, int *mask
,
56 int network_get_local_addr(void *local
, const union network_endpoint
*target
);