Добавлено поле interface_addr в ETCP_SOCKET и interface_ip/port в BGP_NAT_CHECK_REQ
- platform_compat: get_interface_ip_by_index() для получения IP по ifindex - ETCP_SOCKET: interface_addr заполняется из конфига/interface/default route - BGP_NAT_CHECK_REQ: добавлены interface_ip/interface_port (network byte order) - route_bgp_send_nat_check_req: отправляет interface_addr линка - route_bgp_handle_nat_check_req: принимает interface данные в sockaddr-заглушку
This commit is contained in:
1 parent
2e3eb0976a
commit
b466d14fe4
7 files changed
+320
-4
No files matched your search
@@ -136,3 +136,31 @@ uint32_t get_default_route_ip(void) {
|
||||
return get_default_route_ip_linux();
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef _WIN32
|
||||
uint32_t get_interface_ip_by_index(uint32_t netif_index) {
|
||||
struct ifaddrs *ifaddr, *ifa;
|
||||
if (getifaddrs(&ifaddr) == -1) return 0;
|
||||
|
||||
uint32_t result = 0;
|
||||
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
|
||||
if (ifa->ifa_addr == NULL) continue;
|
||||
if (ifa->ifa_name == NULL) continue;
|
||||
unsigned int idx = if_nametoindex(ifa->ifa_name);
|
||||
if (idx != netif_index) continue;
|
||||
if (ifa->ifa_addr->sa_family != AF_INET) continue;
|
||||
|
||||
struct sockaddr_in *addr = (struct sockaddr_in *)ifa->ifa_addr;
|
||||
result = addr->sin_addr.s_addr;
|
||||
break;
|
||||
}
|
||||
|
||||
freeifaddrs(ifaddr);
|
||||
return result;
|
||||
}
|
||||
#else
|
||||
uint32_t get_interface_ip_by_index(uint32_t netif_index) {
|
||||
(void)netif_index;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -159,5 +159,9 @@ int random_bytes(uint8_t *buffer, size_t len);
|
||||
// Returns IPv4 address in network byte order, 0 on error
|
||||
uint32_t get_default_route_ip(void);
|
||||
|
||||
// Get IPv4 address of interface by its index (ifindex)
|
||||
// Returns IPv4 address in network byte order, 0 on error
|
||||
uint32_t get_interface_ip_by_index(uint32_t netif_index);
|
||||
|
||||
|
||||
#endif // PLATFORM_COMPAT_H
|
||||
Reference in new issue
Block a user