diff --git a/SOURCES/openvswitch-2.17.0.patch b/SOURCES/openvswitch-2.17.0.patch index 9e4ec49..7720d72 100644 --- a/SOURCES/openvswitch-2.17.0.patch +++ b/SOURCES/openvswitch-2.17.0.patch @@ -50932,6 +50932,23 @@ index 3691a0eaf7..a185972e31 100644 +void numa_set_preferred(int node); + +#endif /* for sparse. */ +diff --git a/include/sparse/rte_memcpy.h b/include/sparse/rte_memcpy.h +index 5cd3f013ea..ec88500242 100644 +--- a/include/sparse/rte_memcpy.h ++++ b/include/sparse/rte_memcpy.h +@@ -20,11 +20,8 @@ + #error "Use this header only with sparse. It is not a correct implementation." + #endif + +-/* Include the same headers as the real rte_memcpy(). */ +-#include ++#include + #include +-#include +-#include + + /* Declare the same functions as the real rte_memcpy.h, without defining them. + * This gives sparse the information it needs without provoking sparse's diff --git a/ipsec/ovs-monitor-ipsec.in b/ipsec/ovs-monitor-ipsec.in index a8b0705d9f..631a8fca80 100755 --- a/ipsec/ovs-monitor-ipsec.in @@ -56316,7 +56333,7 @@ index a921159667..2fe6c540a7 100644 * key-value pairs, e.g. * diff --git a/lib/socket-util.c b/lib/socket-util.c -index 4f1ffecf5d..38705cc51e 100644 +index 4f1ffecf5d..3eb3a3816b 100644 --- a/lib/socket-util.c +++ b/lib/socket-util.c @@ -62,7 +62,8 @@ static bool parse_sockaddr_components(struct sockaddr_storage *ss, @@ -56408,16 +56425,42 @@ index 4f1ffecf5d..38705cc51e 100644 error = EAFNOSUPPORT; goto exit; } -@@ -660,7 +672,7 @@ inet_parse_passive(const char *target_, int default_port, +@@ -648,7 +660,8 @@ exit: + * zeros '*ss' and returns false. */ + bool + inet_parse_passive(const char *target_, int default_port, +- struct sockaddr_storage *ss) ++ struct sockaddr_storage *ss, ++ bool resolve_host, bool *dns_failure) + { + char *target = xstrdup(target_); + char *port, *host; +@@ -660,7 +673,7 @@ inet_parse_passive(const char *target_, int default_port, ok = false; } else { ok = parse_sockaddr_components(ss, host, port, default_port, - target_, true); -+ target_, true, NULL); ++ target_, resolve_host, dns_failure); } if (!ok) { memset(ss, 0, sizeof *ss); -@@ -783,7 +795,8 @@ inet_parse_address(const char *target_, struct sockaddr_storage *ss) +@@ -698,8 +711,14 @@ inet_open_passive(int style, const char *target, int default_port, + struct sockaddr_storage ss; + int fd = 0, error; + unsigned int yes = 1; ++ bool dns_failure; + +- if (!inet_parse_passive(target, default_port, &ss)) { ++ if (!inet_parse_passive(target, default_port, &ss, true, &dns_failure)) { ++ if (dns_failure) { ++ /* DNS failure means asynchronous DNS resolution is in progress, ++ * or that the name does currently not resolve. */ ++ return -EAGAIN; ++ } + return -EAFNOSUPPORT; + } + kernel_chooses_port = ss_get_port(&ss) == 0; +@@ -783,7 +802,8 @@ inet_parse_address(const char *target_, struct sockaddr_storage *ss) { char *target = xstrdup(target_); char *host = unbracket(target); @@ -56428,10 +56471,10 @@ index 4f1ffecf5d..38705cc51e 100644 memset(ss, 0, sizeof *ss); } diff --git a/lib/socket-util.h b/lib/socket-util.h -index 9ccb7d4cc4..bf66393df9 100644 +index 9ccb7d4cc4..4eec627e3e 100644 --- a/lib/socket-util.h +++ b/lib/socket-util.h -@@ -49,7 +49,8 @@ ovs_be32 guess_netmask(ovs_be32 ip); +@@ -49,12 +49,14 @@ ovs_be32 guess_netmask(ovs_be32 ip); void inet_parse_host_port_tokens(char *s, char **hostp, char **portp); void inet_parse_port_host_tokens(char *s, char **portp, char **hostp); bool inet_parse_active(const char *target, int default_port, @@ -56441,6 +56484,13 @@ index 9ccb7d4cc4..bf66393df9 100644 int inet_open_active(int style, const char *target, int default_port, struct sockaddr_storage *ssp, int *fdp, uint8_t dscp); + bool inet_parse_passive(const char *target, int default_port, +- struct sockaddr_storage *ssp); ++ struct sockaddr_storage *ssp, ++ bool resolve_host, bool *dns_failure); + int inet_open_passive(int style, const char *target, int default_port, + struct sockaddr_storage *ssp, uint8_t dscp, + bool kernel_print_port); diff --git a/lib/sset.c b/lib/sset.c index b2e3f43ec9..6fbaa9d60d 100644 --- a/lib/sset.c @@ -59328,7 +59378,7 @@ index 9f44007d97..ca80c28235 100644 break; } diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c -index 351c39d8aa..916a1f414e 100644 +index 351c39d8aa..17868f5b72 100644 --- a/ovsdb/jsonrpc-server.c +++ b/ovsdb/jsonrpc-server.c @@ -197,9 +197,9 @@ ovsdb_jsonrpc_server_remove_db(struct ovsdb_jsonrpc_server *svr, @@ -59355,7 +59405,60 @@ index 351c39d8aa..916a1f414e 100644 struct ovsdb_jsonrpc_remote *remote = node->data; struct ovsdb_jsonrpc_options *options = shash_find_data(new_remotes, node->name); -@@ -585,9 +585,9 @@ ovsdb_jsonrpc_session_set_options(struct ovsdb_jsonrpc_session *session, +@@ -267,25 +267,36 @@ ovsdb_jsonrpc_server_add_remote(struct ovsdb_jsonrpc_server *svr, + int error; + + error = jsonrpc_pstream_open(name, &listener, options->dscp); +- if (error && error != EAFNOSUPPORT) { +- VLOG_ERR_RL(&rl, "%s: listen failed: %s", name, ovs_strerror(error)); +- return NULL; +- } ++ switch (error) { ++ case 0: ++ case EAFNOSUPPORT: ++ remote = xmalloc(sizeof *remote); ++ remote->server = svr; ++ remote->listener = listener; ++ ovs_list_init(&remote->sessions); ++ remote->dscp = options->dscp; ++ remote->read_only = options->read_only; ++ remote->role = nullable_xstrdup(options->role); ++ shash_add(&svr->remotes, name, remote); ++ if (!listener) { ++ /* Not a listener, attempt creation of active jsonrpc session. */ ++ ovsdb_jsonrpc_session_create(remote, ++ jsonrpc_session_open(name, true), ++ svr->read_only || remote->read_only); ++ } ++ return remote; + +- remote = xmalloc(sizeof *remote); +- remote->server = svr; +- remote->listener = listener; +- ovs_list_init(&remote->sessions); +- remote->dscp = options->dscp; +- remote->read_only = options->read_only; +- remote->role = nullable_xstrdup(options->role); +- shash_add(&svr->remotes, name, remote); ++ case EAGAIN: ++ VLOG_DBG_RL(&rl, "%s: listen failed: " ++ "DNS resolution in progress or host not found", name); ++ return NULL; + +- if (!listener) { +- ovsdb_jsonrpc_session_create(remote, jsonrpc_session_open(name, true), +- svr->read_only || remote->read_only); ++ default: ++ VLOG_ERR_RL(&rl, "%s: listen failed: %s", name, ++ ovs_strerror(error)); ++ return NULL; + } +- return remote; ++ OVS_NOT_REACHED(); + } + + static void +@@ -585,9 +596,9 @@ ovsdb_jsonrpc_session_set_options(struct ovsdb_jsonrpc_session *session, static void ovsdb_jsonrpc_session_run_all(struct ovsdb_jsonrpc_remote *remote) { @@ -59367,7 +59470,7 @@ index 351c39d8aa..916a1f414e 100644 int error = ovsdb_jsonrpc_session_run(s); if (error) { ovsdb_jsonrpc_session_close(s); -@@ -642,9 +642,9 @@ ovsdb_jsonrpc_session_get_memory_usage_all( +@@ -642,9 +653,9 @@ ovsdb_jsonrpc_session_get_memory_usage_all( static void ovsdb_jsonrpc_session_close_all(struct ovsdb_jsonrpc_remote *remote) { @@ -59379,7 +59482,7 @@ index 351c39d8aa..916a1f414e 100644 ovsdb_jsonrpc_session_close(s); } } -@@ -660,9 +660,9 @@ static void +@@ -660,9 +671,9 @@ static void ovsdb_jsonrpc_session_reconnect_all(struct ovsdb_jsonrpc_remote *remote, bool force, const char *comment) { @@ -59391,7 +59494,7 @@ index 351c39d8aa..916a1f414e 100644 if (force || !s->db_change_aware) { jsonrpc_session_force_reconnect(s->js); if (comment && jsonrpc_session_is_connected(s->js)) { -@@ -909,9 +909,9 @@ error: +@@ -909,9 +920,9 @@ error: static void ovsdb_jsonrpc_session_unlock_all(struct ovsdb_jsonrpc_session *s) { @@ -59403,7 +59506,7 @@ index 351c39d8aa..916a1f414e 100644 ovsdb_jsonrpc_session_unlock__(waiter); } } -@@ -1198,8 +1198,8 @@ static void +@@ -1198,8 +1209,8 @@ static void ovsdb_jsonrpc_trigger_remove__(struct ovsdb_jsonrpc_session *s, struct ovsdb *db) { @@ -59414,7 +59517,7 @@ index 351c39d8aa..916a1f414e 100644 if (!db || t->trigger.db == db) { ovsdb_jsonrpc_trigger_complete(t); } -@@ -1226,8 +1226,8 @@ ovsdb_jsonrpc_trigger_complete_all(struct ovsdb_jsonrpc_session *s) +@@ -1226,8 +1237,8 @@ ovsdb_jsonrpc_trigger_complete_all(struct ovsdb_jsonrpc_session *s) static void ovsdb_jsonrpc_trigger_complete_done(struct ovsdb_jsonrpc_session *s) { @@ -59425,7 +59528,7 @@ index 351c39d8aa..916a1f414e 100644 ovsdb_jsonrpc_trigger_complete(trigger); } } -@@ -1688,8 +1688,8 @@ ovsdb_jsonrpc_monitor_preremove_db(struct ovsdb_jsonrpc_session *s, +@@ -1688,8 +1699,8 @@ ovsdb_jsonrpc_monitor_preremove_db(struct ovsdb_jsonrpc_session *s, { ovs_assert(db); @@ -59436,7 +59539,7 @@ index 351c39d8aa..916a1f414e 100644 if (m->db == db) { ovsdb_jsonrpc_monitor_destroy(m, true); } -@@ -1700,9 +1700,9 @@ ovsdb_jsonrpc_monitor_preremove_db(struct ovsdb_jsonrpc_session *s, +@@ -1700,9 +1711,9 @@ ovsdb_jsonrpc_monitor_preremove_db(struct ovsdb_jsonrpc_session *s, static void ovsdb_jsonrpc_monitor_remove_all(struct ovsdb_jsonrpc_session *s) { diff --git a/SPECS/openvswitch2.17.spec b/SPECS/openvswitch2.17.spec index 6746c7e..cb8a02b 100644 --- a/SPECS/openvswitch2.17.spec +++ b/SPECS/openvswitch2.17.spec @@ -57,7 +57,7 @@ Summary: Open vSwitch Group: System Environment/Daemons daemon/database/utilities URL: http://www.openvswitch.org/ Version: 2.17.0 -Release: 76%{?dist} +Release: 77%{?dist} # Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the # lib/sflow*.[ch] files are SISSL @@ -743,6 +743,13 @@ exit 0 %endif %changelog +* Mon Feb 13 2023 Open vSwitch CI - 2.17.0-77 +- Merging upstream branch-2.17 [RH git: 5ba5bb6bf9] + Commit list: + 6626562c53 sparse: Fix build with DPDK and GCC 12. + 82dc71f808 ovsdb-server: Fix handling of DNS name for listener configuration. + + * Thu Feb 09 2023 Open vSwitch CI - 2.17.0-76 - Merging upstream branch-2.17 [RH git: 10b09487e4] Commit list: