From 531e720fd41427780621ccaf108e70a40cf2942b Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 11 Oct 2023 10:06:38 -0400 Subject: [PATCH] MT#55283 add desired_family to call_monologue This is required to look up the correct interface during Redis restore. Change-Id: I0ea67576deba95b4201c6384fdcf8051b84f879e --- daemon/call.c | 8 +++++--- daemon/redis.c | 9 +++++++-- include/call.h | 1 + t/auto-daemon-tests-redis.pl | 19 +++++++++++++++++++ 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/daemon/call.c b/daemon/call.c index c43915c12..904635a4a 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -2053,8 +2053,10 @@ static void __tos_change(struct call *call, const struct sdp_ng_flags *flags) { } static void __init_interface(struct call_media *media, const str *ifname, int num_ports) { - if (!media->logical_intf && media->monologue) + if (!media->logical_intf) media->logical_intf = media->monologue->logical_intf; + if (!media->desired_family) + media->desired_family = media->monologue->desired_family; if (!media->logical_intf) goto get; if (media->logical_intf->preferred_family != media->desired_family) @@ -2082,8 +2084,8 @@ get: media->logical_intf = get_logical_interface(NULL, NULL, 0); } } - if (media->monologue) - media->monologue->logical_intf = media->logical_intf; + media->monologue->logical_intf = media->logical_intf; + media->monologue->desired_family = media->desired_family; } diff --git a/daemon/redis.c b/daemon/redis.c index 953fb6344..fe6994e24 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -1509,11 +1509,15 @@ static int redis_tags(struct call *c, struct redis_list *tags, JsonReader *root_ if (!redis_hash_get_int(&ii, rh, "ml_flags")) ml->ml_flags = ii; + if (redis_hash_get_str(&s, rh, "desired_family")) + return -1; + ml->desired_family = get_socket_family_rfc(&s); + if (redis_hash_get_str(&s, rh, "logical_intf") - || !(ml->logical_intf = get_logical_interface(&s, NULL, 0))) + || !(ml->logical_intf = get_logical_interface(&s, ml->desired_family, 0))) { rlog(LOG_ERR, "unable to find specified local interface"); - ml->logical_intf = get_logical_interface(NULL, NULL, 0); + ml->logical_intf = get_logical_interface(NULL, ml->desired_family, 0); } if (json_build_ssrc(ml, root_reader)) @@ -2474,6 +2478,7 @@ char* redis_encode_json(struct call *c) { JSON_SET_SIMPLE("deleted", "%llu", (long long unsigned) ml->deleted); JSON_SET_SIMPLE("block_dtmf", "%i", ml->block_dtmf); JSON_SET_SIMPLE("ml_flags","%u", ml->ml_flags); + JSON_SET_SIMPLE_CSTR("desired_family", ml->desired_family ? ml->desired_family->rfc_name : ""); if (ml->logical_intf) JSON_SET_SIMPLE_STR("logical_intf", &ml->logical_intf->name); diff --git a/include/call.h b/include/call.h index 02b80326c..18d79f442 100644 --- a/include/call.h +++ b/include/call.h @@ -545,6 +545,7 @@ struct call_monologue { struct timeval started; /* for CDR */ struct timeval terminated; /* for CDR */ enum termination_reason term_reason; + sockfamily_t *desired_family; const struct logical_intf *logical_intf; GHashTable *associated_tags; GQueue subscriptions; /* who am I subscribed to (sources) */ diff --git a/t/auto-daemon-tests-redis.pl b/t/auto-daemon-tests-redis.pl index ccd09d41d..50b0eb01f 100755 --- a/t/auto-daemon-tests-redis.pl +++ b/t/auto-daemon-tests-redis.pl @@ -309,6 +309,7 @@ $json_exp = { 'tag-0' => { 'block_dtmf' => '0', 'created' => qr/^\d+$/, + 'desired_family' => 'IP4', 'deleted' => '0', 'logical_intf' => 'foo', 'ml_flags' => 0, @@ -317,6 +318,7 @@ $json_exp = { 'tag-1' => { 'block_dtmf' => '0', 'created' => qr/^\d+$/, + 'desired_family' => 'IP4', 'deleted' => '0', 'logical_intf' => 'foo', 'ml_flags' => 0, @@ -566,6 +568,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr/^\d+$/, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => ft() @@ -574,6 +577,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr/^\d+$/, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => tt() @@ -831,6 +835,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr/^\d+$/, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => ft() @@ -839,6 +844,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr/^\d+$/, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, } @@ -1090,6 +1096,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr/^\d+$/, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => ft() @@ -1098,6 +1105,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr/^\d+$/, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => tt() @@ -1535,6 +1543,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr/^\d+$/, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => ft() @@ -1543,6 +1552,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr/^\d+$/, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => tt() @@ -1551,6 +1561,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr/^\d+$/, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => qr// @@ -1739,6 +1750,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr//, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => ft() @@ -1978,6 +1990,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr//, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => ft() @@ -1986,6 +1999,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr//, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => qr//, @@ -2217,6 +2231,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr//, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => ft() @@ -2225,6 +2240,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr//, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => qr//, @@ -2549,6 +2565,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr//, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => ft() @@ -2557,6 +2574,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr//, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => qr//, @@ -2565,6 +2583,7 @@ $json_exp = { 'block_dtmf' => '0', 'created' => qr//, 'deleted' => '0', + 'desired_family' => 'IP4', 'logical_intf' => 'foo', 'ml_flags' => 0, 'tag' => qr//,