From c2e7b6e711e3452e2df804d7da9bdc19a8077b8b Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Tue, 5 Dec 2023 08:16:54 +0800 Subject: [PATCH] add function sf_set_address_family_by_ip --- src/sf_global.c | 35 +++++++++++++++++++++++++++++++++++ src/sf_global.h | 13 ++++++++----- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/sf_global.c b/src/sf_global.c index acc22b5..94f9be9 100644 --- a/src/sf_global.c +++ b/src/sf_global.c @@ -794,6 +794,41 @@ int sf_alloc_rdma_pd(SFContext *sf_context, return 0; } +void sf_set_address_family_by_ip(SFContext *sf_context, + FCAddressPtrArray *address_array) +{ + SFAddressFamilyHandler *handler; + SFAddressFamilyHandler *hend; + FCAddressInfo **pp_addr; + FCAddressInfo **addr_end; + + if (sf_context->address_family != sf_address_family_auto) { + return; + } + + hend = sf_context->handlers + SF_ADDRESS_FAMILY_COUNT; + for (handler=sf_context->handlers; handleraf == AF_UNSPEC) { + continue; + } + + if (*(handler->inner_bind_addr) == '\0' && + *(handler->outer_bind_addr) == '\0') + { + handler->af = AF_UNSPEC; + } + } + + addr_end = address_array->addrs + address_array->count; + for (pp_addr=address_array->addrs; pp_addrconn.af == AF_INET) { + sf_context->handlers[SF_IPV4_ADDRESS_FAMILY_INDEX].af = AF_INET; + } else { + sf_context->handlers[SF_IPV6_ADDRESS_FAMILY_INDEX].af = AF_INET6; + } + } +} + static void combine_bind_addr(char *bind_addr, const char *ip_addr) { char *p; diff --git a/src/sf_global.h b/src/sf_global.h index 693fb73..3a78802 100644 --- a/src/sf_global.h +++ b/src/sf_global.h @@ -123,13 +123,13 @@ extern SFContext g_sf_context; #define SF_G_EPOLL_EDGE_TRIGGER g_sf_global_vars.epoll_edge_trigger -#define SF_WORK_THREADS(sf_context) sf_context.work_threads -#define SF_ALIVE_THREAD_COUNT(sf_context) sf_context.thread_count -#define SF_THREAD_INDEX(sf_context, tdata) (int)(tdata - sf_context.thread_data) +#define SF_WORK_THREADS(sf_context) (sf_context).work_threads +#define SF_ALIVE_THREAD_COUNT(sf_context) (sf_context).thread_count +#define SF_THREAD_INDEX(sf_context, tdata) (int)(tdata - (sf_context).thread_data) -#define SF_IPV4_ENABLED(sf_context) (sf_context.handlers \ +#define SF_IPV4_ENABLED(sf_context) ((sf_context).handlers \ [SF_IPV4_ADDRESS_FAMILY_INDEX].af == AF_INET) -#define SF_IPV6_ENABLED(sf_context) (sf_context.handlers \ +#define SF_IPV6_ENABLED(sf_context) ((sf_context).handlers \ [SF_IPV6_ADDRESS_FAMILY_INDEX].af == AF_INET6) #define SF_CHOWN_RETURN_ON_ERROR(path, current_uid, current_gid) \ @@ -255,6 +255,9 @@ static inline int sf_load_context_from_config(SFContext *sf_context, int sf_alloc_rdma_pd(SFContext *sf_context, FCAddressPtrArray *address_array); +void sf_set_address_family_by_ip(SFContext *sf_context, + FCAddressPtrArray *address_array); + int sf_load_log_config(IniFullContext *ini_ctx, LogContext *log_ctx, SFLogConfig *log_cfg);