get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2194261/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2194261,
    "url": "http://patchwork.ozlabs.org/api/patches/2194261/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/ovn/patch/20260207214852.86991-8-arukomoinikova@k2.cloud/",
    "project": {
        "id": 68,
        "url": "http://patchwork.ozlabs.org/api/projects/68/?format=api",
        "name": "Open Virtual Network development",
        "link_name": "ovn",
        "list_id": "ovs-dev.openvswitch.org",
        "list_email": "ovs-dev@openvswitch.org",
        "web_url": "http://openvswitch.org/",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260207214852.86991-8-arukomoinikova@k2.cloud>",
    "list_archive_url": null,
    "date": "2026-02-07T21:48:49",
    "name": "[ovs-dev,8/8,v2] northd: Refactor service monitor addresses into structure.",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": false,
    "hash": "fe38977e13dd7cdca921353585e34a7e13ecca10",
    "submitter": {
        "id": 89461,
        "url": "http://patchwork.ozlabs.org/api/people/89461/?format=api",
        "name": "Rukomoinikova Aleksandra",
        "email": "ARukomoinikova@k2.cloud"
    },
    "delegate": {
        "id": 94943,
        "url": "http://patchwork.ozlabs.org/api/users/94943/?format=api",
        "username": "dceara",
        "first_name": "Dumitru",
        "last_name": "Ceara",
        "email": "dceara@redhat.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/ovn/patch/20260207214852.86991-8-arukomoinikova@k2.cloud/mbox/",
    "series": [
        {
            "id": 491397,
            "url": "http://patchwork.ozlabs.org/api/series/491397/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/ovn/list/?series=491397",
            "date": "2026-02-07T21:48:46",
            "name": "[ovs-dev,1/8,v2] ovn-nb, ovn-nbctl: Add Logical Switch Port Health Check support.",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/491397/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2194261/comments/",
    "check": "success",
    "checks": "http://patchwork.ozlabs.org/api/patches/2194261/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<ovs-dev-bounces@openvswitch.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "dev@openvswitch.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "ovs-dev@lists.linuxfoundation.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=k2.cloud header.i=@k2.cloud header.a=rsa-sha256\n header.s=cloudmail header.b=cI3AKLfE;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org\n (client-ip=140.211.166.136; helo=smtp3.osuosl.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org)",
            "smtp3.osuosl.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key)\n header.d=k2.cloud header.i=@k2.cloud header.a=rsa-sha256 header.s=cloudmail\n header.b=cI3AKLfE",
            "smtp4.osuosl.org;\n dmarc=pass (p=none dis=none) header.from=k2.cloud",
            "smtp4.osuosl.org;\n dkim=pass (1024-bit key) header.d=k2.cloud header.i=@k2.cloud\n header.a=rsa-sha256 header.s=cloudmail header.b=cI3AKLfE"
        ],
        "Received": [
            "from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4f7l3R1hRQz1xvW\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 08 Feb 2026 08:49:23 +1100 (AEDT)",
            "from localhost (localhost [127.0.0.1])\n\tby smtp3.osuosl.org (Postfix) with ESMTP id C994E612EC;\n\tSat,  7 Feb 2026 21:49:19 +0000 (UTC)",
            "from smtp3.osuosl.org ([127.0.0.1])\n by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id a49Cleydnfml; Sat,  7 Feb 2026 21:49:16 +0000 (UTC)",
            "from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56])\n\tby smtp3.osuosl.org (Postfix) with ESMTPS id 240F2612B5;\n\tSat,  7 Feb 2026 21:49:10 +0000 (UTC)",
            "from lf-lists.osuosl.org (localhost [127.0.0.1])\n\tby lists.linuxfoundation.org (Postfix) with ESMTP id EBEC8C0780;\n\tSat,  7 Feb 2026 21:49:09 +0000 (UTC)",
            "from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137])\n by lists.linuxfoundation.org (Postfix) with ESMTP id E4454C0784\n for <dev@openvswitch.org>; Sat,  7 Feb 2026 21:49:03 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n by smtp4.osuosl.org (Postfix) with ESMTP id BC55541BE1\n for <dev@openvswitch.org>; Sat,  7 Feb 2026 21:49:03 +0000 (UTC)",
            "from smtp4.osuosl.org ([127.0.0.1])\n by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id JQ1-21VqPf84 for <dev@openvswitch.org>;\n Sat,  7 Feb 2026 21:49:02 +0000 (UTC)",
            "from mail1.k2.cloud (mail1.k2.cloud [109.73.14.252])\n by smtp4.osuosl.org (Postfix) with ESMTPS id 5EB0840B89\n for <dev@openvswitch.org>; Sat,  7 Feb 2026 21:49:02 +0000 (UTC)"
        ],
        "X-Virus-Scanned": [
            "amavis at osuosl.org",
            "amavis at osuosl.org"
        ],
        "X-Comment": "SPF check N/A for local connections - client-ip=140.211.9.56;\n helo=lists.linuxfoundation.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=<UNKNOWN> ",
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 smtp3.osuosl.org 240F2612B5",
            "OpenDKIM Filter v2.11.0 smtp4.osuosl.org 5EB0840B89"
        ],
        "Received-SPF": "Pass (mailfrom) identity=mailfrom; client-ip=109.73.14.252;\n helo=mail1.k2.cloud; envelope-from=arukomoinikova@k2.cloud;\n receiver=<UNKNOWN>",
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 smtp4.osuosl.org 5EB0840B89",
        "From": "Alexandra Rukomoinikova <arukomoinikova@k2.cloud>",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=k2.cloud;\n s=cloudmail; t=1770500938;\n bh=p/b8yS95GqFBcM0X9A7Jxh4CjUO3Puixs9T6VHen8mM=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References;\n b=cI3AKLfEh7Cxu61VO39OEVGldfghY1RQaK+nW3GCazQatrZmVLf2FKJbibzV570oR\n SZiOvVWLJ2wyY9aW97xb/n8XHJOdy7JTcwVpzUeO6HaAZ0TqAcwfzHvaXzKvPcY3Xb\n tv22kGp3J8U0Rsl2jn12M/5GtgV998lOcj5bkWbE=",
        "To": "dev@openvswitch.org",
        "Cc": "Alexandra Rukomoinikova <arukomoinikova@k2.cloud>",
        "Date": "Sun,  8 Feb 2026 00:48:49 +0300",
        "Message-Id": "<20260207214852.86991-8-arukomoinikova@k2.cloud>",
        "In-Reply-To": "<20260207214852.86991-1-arukomoinikova@k2.cloud>",
        "References": "<20260207214852.86991-1-arukomoinikova@k2.cloud>",
        "MIME-Version": "1.0",
        "Subject": "[ovs-dev] [PATCH ovn 8/8 v2] northd: Refactor service monitor\n addresses into structure.",
        "X-BeenThere": "ovs-dev@openvswitch.org",
        "X-Mailman-Version": "2.1.30",
        "Precedence": "list",
        "List-Id": "<ovs-dev.openvswitch.org>",
        "List-Unsubscribe": "<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>",
        "List-Archive": "<http://mail.openvswitch.org/pipermail/ovs-dev/>",
        "List-Post": "<mailto:ovs-dev@openvswitch.org>",
        "List-Help": "<mailto:ovs-dev-request@openvswitch.org?subject=help>",
        "List-Subscribe": "<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=subscribe>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "ovs-dev-bounces@openvswitch.org",
        "Sender": "\"dev\" <ovs-dev-bounces@openvswitch.org>"
    },
    "content": "Replace individual global service monitor address parameters with unified\nsvc_monitor_addresses structure to simplify function signatures.\n\nSigned-off-by: Alexandra Rukomoinikova <arukomoinikova@k2.cloud>\n---\n northd/en-global-config.c | 47 +++++++++++---------\n northd/en-global-config.h | 29 ++++++------\n northd/en-lflow.c         |  3 +-\n northd/en-northd.c        |  8 +---\n northd/en-sync-sb.c       |  4 +-\n northd/northd.c           | 94 +++++++++++++++------------------------\n northd/northd.h           |  8 +---\n 7 files changed, 84 insertions(+), 109 deletions(-)",
    "diff": "diff --git a/northd/en-global-config.c b/northd/en-global-config.c\nindex 2556b2888..bad1bcf68 100644\n--- a/northd/en-global-config.c\n+++ b/northd/en-global-config.c\n@@ -124,14 +124,17 @@ en_global_config_run(struct engine_node *node , void *data)\n     const char *mac_addr_prefix = set_mac_prefix(smap_get(&nb->options,\n                                                           \"mac_prefix\"));\n \n+    struct svc_monitor_addresses *svc_addresses =\n+        &config_data->svc_global_addresses;\n+\n     const char *monitor_mac = smap_get(&nb->options, \"svc_monitor_mac\");\n     if (monitor_mac) {\n         if (eth_addr_from_string(monitor_mac,\n-                                 &config_data->svc_monitor_mac_ea)) {\n-            snprintf(config_data->svc_monitor_mac,\n-                     sizeof config_data->svc_monitor_mac,\n+                                 &svc_addresses->mac_ea_src)) {\n+            snprintf(svc_addresses->mac_src,\n+                     sizeof svc_addresses->mac_src,\n                      ETH_ADDR_FMT,\n-                     ETH_ADDR_ARGS(config_data->svc_monitor_mac_ea));\n+                     ETH_ADDR_ARGS(svc_addresses->mac_ea_src));\n         } else {\n             monitor_mac = NULL;\n         }\n@@ -141,22 +144,22 @@ en_global_config_run(struct engine_node *node , void *data)\n                                            \"svc_monitor_mac_dst\");\n     if (dst_monitor_mac) {\n         if (eth_addr_from_string(dst_monitor_mac,\n-                                 &config_data->svc_monitor_mac_ea_dst)) {\n-            snprintf(config_data->svc_monitor_mac_dst,\n-                     sizeof config_data->svc_monitor_mac_dst,\n+                                 &svc_addresses->mac_ea_dst)) {\n+            snprintf(svc_addresses->mac_dst,\n+                     sizeof svc_addresses->mac_dst,\n                      ETH_ADDR_FMT,\n-                     ETH_ADDR_ARGS(config_data->svc_monitor_mac_ea_dst));\n+                     ETH_ADDR_ARGS(svc_addresses->mac_ea_dst));\n         } else {\n             dst_monitor_mac = NULL;\n         }\n     }\n \n     const char *monitor_ip = smap_get(&nb->options, \"svc_monitor_ip\");\n-    update_svc_monitor_addr(monitor_ip, &config_data->svc_monitor_ip);\n+    update_svc_monitor_addr(monitor_ip, &svc_addresses->ip_src);\n \n     const char *monitor_ip_dst = smap_get(&nb->options, \"svc_monitor_ip_dst\");\n     update_svc_monitor_addr(monitor_ip_dst,\n-                            &config_data->svc_monitor_ip_dst);\n+                            &svc_addresses->ip_dst);\n \n     struct smap *options = &config_data->nb_options;\n     smap_destroy(options);\n@@ -165,21 +168,21 @@ en_global_config_run(struct engine_node *node , void *data)\n     smap_replace(options, \"mac_prefix\", mac_addr_prefix);\n \n     if (!monitor_mac) {\n-        eth_addr_random(&config_data->svc_monitor_mac_ea);\n-        snprintf(config_data->svc_monitor_mac,\n-                 sizeof config_data->svc_monitor_mac, ETH_ADDR_FMT,\n-                 ETH_ADDR_ARGS(config_data->svc_monitor_mac_ea));\n+        eth_addr_random(&svc_addresses->mac_ea_src);\n+        snprintf(svc_addresses->mac_src,\n+                 sizeof svc_addresses->mac_src, ETH_ADDR_FMT,\n+                 ETH_ADDR_ARGS(svc_addresses->mac_ea_src));\n         smap_replace(options, \"svc_monitor_mac\",\n-                     config_data->svc_monitor_mac);\n+                     svc_addresses->mac_src);\n     }\n \n     if (!dst_monitor_mac) {\n-        eth_addr_random(&config_data->svc_monitor_mac_ea_dst);\n-        snprintf(config_data->svc_monitor_mac_dst,\n-                 sizeof config_data->svc_monitor_mac_dst, ETH_ADDR_FMT,\n-                 ETH_ADDR_ARGS(config_data->svc_monitor_mac_ea_dst));\n+        eth_addr_random(&svc_addresses->mac_ea_dst);\n+        snprintf(svc_addresses->mac_dst,\n+                 sizeof svc_addresses->mac_dst, ETH_ADDR_FMT,\n+                 ETH_ADDR_ARGS(svc_addresses->mac_ea_dst));\n         smap_replace(options, \"svc_monitor_mac_dst\",\n-                     config_data->svc_monitor_mac_dst);\n+                     svc_addresses->mac_dst);\n     }\n \n     bool ic_vxlan_mode = false;\n@@ -244,8 +247,8 @@ void en_global_config_cleanup(void *data OVS_UNUSED)\n     struct ed_type_global_config *config_data = data;\n     smap_destroy(&config_data->nb_options);\n     smap_destroy(&config_data->sb_options);\n-    free(config_data->svc_monitor_ip);\n-    free(config_data->svc_monitor_ip_dst);\n+    free(config_data->svc_global_addresses.ip_src);\n+    free(config_data->svc_global_addresses.ip_dst);\n     destroy_debug_config();\n }\n \ndiff --git a/northd/en-global-config.h b/northd/en-global-config.h\nindex 413cd3849..e84b0e9e5 100644\n--- a/northd/en-global-config.h\n+++ b/northd/en-global-config.h\n@@ -30,27 +30,30 @@ struct global_config_tracked_data {\n     bool chassis_features_changed;\n };\n \n-/* struct which maintains the data of the engine node global_config. */\n-struct ed_type_global_config {\n-    struct smap nb_options;\n-    struct smap sb_options;\n-    const struct nbrec_nb_global *nb_global;\n-    const struct sbrec_sb_global *sb_global;\n-\n+struct svc_monitor_addresses {\n     /* MAC allocated for service monitor usage. Just one pair is allocated\n      * for this purpose and ovn-controller's on each chassis will make use\n      * of this pair when sending out the packets to monitor the services\n      * defined in Service_Monitor Southbound table. Since these packets\n      * are locally handled, having just one pair is good enough. */\n-    char svc_monitor_mac[ETH_ADDR_STRLEN + 1];\n-    struct eth_addr svc_monitor_mac_ea;\n-    char svc_monitor_mac_dst[ETH_ADDR_STRLEN + 1];\n-    struct eth_addr svc_monitor_mac_ea_dst;\n+    char mac_src[ETH_ADDR_STRLEN + 1];\n+    struct eth_addr mac_ea_src;\n+    char mac_dst[ETH_ADDR_STRLEN + 1];\n+    struct eth_addr mac_ea_dst;\n \n     /* IP addresses configured for NF service monitor usage. */\n-    char *svc_monitor_ip;\n-    char *svc_monitor_ip_dst;\n+    char *ip_src;\n+    char *ip_dst;\n+};\n+\n+/* struct which maintains the data of the engine node global_config. */\n+struct ed_type_global_config {\n+    struct smap nb_options;\n+    struct smap sb_options;\n+    const struct nbrec_nb_global *nb_global;\n+    const struct sbrec_sb_global *sb_global;\n \n+    struct svc_monitor_addresses svc_global_addresses;\n     struct chassis_features features;\n \n     bool ovn_internal_version_changed;\ndiff --git a/northd/en-lflow.c b/northd/en-lflow.c\nindex 41a5a97ff..0f64aef49 100644\n--- a/northd/en-lflow.c\n+++ b/northd/en-lflow.c\n@@ -113,7 +113,8 @@ lflow_get_input_data(struct engine_node *node,\n     lflow_input->features = &global_config->features;\n     lflow_input->ovn_internal_version_changed =\n         global_config->ovn_internal_version_changed;\n-    lflow_input->svc_monitor_mac = global_config->svc_monitor_mac;\n+    lflow_input->svc_monitor_mac =\n+        global_config->svc_global_addresses.mac_src;\n \n     struct ed_type_sampling_app_data *sampling_app_data =\n         engine_get_input_data(\"sampling_app\", node);\ndiff --git a/northd/en-northd.c b/northd/en-northd.c\nindex 9b37f3eee..e81e4bbb2 100644\n--- a/northd/en-northd.c\n+++ b/northd/en-northd.c\n@@ -117,12 +117,8 @@ northd_get_input_data(struct engine_node *node,\n         engine_get_input_data(\"global_config\", node);\n     input_data->nb_options = &global_config->nb_options;\n     input_data->sb_options = &global_config->sb_options;\n-    input_data->svc_monitor_mac = global_config->svc_monitor_mac;\n-    input_data->svc_monitor_mac_ea = global_config->svc_monitor_mac_ea;\n-    input_data->svc_monitor_mac_dst = global_config->svc_monitor_mac_dst;\n-    input_data->svc_monitor_mac_ea_dst = global_config->svc_monitor_mac_ea_dst;\n-    input_data->svc_monitor_ip = global_config->svc_monitor_ip;\n-    input_data->svc_monitor_ip_dst = global_config->svc_monitor_ip_dst;\n+\n+    input_data->svc_global_addresses = &global_config->svc_global_addresses;\n     input_data->features = &global_config->features;\n     input_data->vxlan_mode = global_config->vxlan_mode;\n \ndiff --git a/northd/en-sync-sb.c b/northd/en-sync-sb.c\nindex fbe26eb8c..0b2a85b3b 100644\n--- a/northd/en-sync-sb.c\n+++ b/northd/en-sync-sb.c\n@@ -106,8 +106,8 @@ en_sync_to_sb_addr_set_run(struct engine_node *node, void *data OVS_UNUSED)\n                    nb_port_group_table, sb_address_set_table,\n                    &lr_stateful_data->table,\n                    &northd_data->lr_datapaths,\n-                   global_config->svc_monitor_mac,\n-                   global_config->svc_monitor_mac_dst);\n+                   global_config->svc_global_addresses.mac_src,\n+                   global_config->svc_global_addresses.mac_dst);\n \n     return EN_UPDATED;\n }\ndiff --git a/northd/northd.c b/northd/northd.c\nindex 7a2c472c0..629651efb 100644\n--- a/northd/northd.c\n+++ b/northd/northd.c\n@@ -3165,28 +3165,28 @@ svc_mon_update_status_if_online(const struct sbrec_service_monitor *sbrec_mon,\n \n static void\n svc_mon_update_mac_ip_addresses(const struct sbrec_service_monitor *sbrec_mon,\n-                                const struct eth_addr *svc_monitor_mac_ea,\n-                                const char *source_mac,\n-                                const char *target_mac,\n-                                const char *source_ip,\n-                                const char *target_ip)\n+                                const struct eth_addr *mac_ea_src,\n+                                const char *mac_src,\n+                                const char *mac_dst,\n+                                const char *ip_src,\n+                                const char *ip_dst)\n {\n     struct eth_addr ea;\n     if (sbrec_mon->src_mac ||\n         !eth_addr_from_string(sbrec_mon->src_mac, &ea) ||\n-        !eth_addr_equals(ea, *svc_monitor_mac_ea)) {\n-        sbrec_service_monitor_set_src_mac(sbrec_mon, source_mac);\n+        !eth_addr_equals(ea, *mac_ea_src)) {\n+        sbrec_service_monitor_set_src_mac(sbrec_mon, mac_src);\n     }\n \n-    if (target_mac) {\n-        svc_mon_update_field_if_changed(sbrec_mon, sbrec_mon->mac, target_mac,\n+    if (mac_dst) {\n+        svc_mon_update_field_if_changed(sbrec_mon, sbrec_mon->mac, mac_dst,\n                                         sbrec_service_monitor_set_mac);\n     }\n \n-    svc_mon_update_field_if_changed(sbrec_mon, sbrec_mon->src_ip, source_ip,\n+    svc_mon_update_field_if_changed(sbrec_mon, sbrec_mon->src_ip, ip_src,\n                                     sbrec_service_monitor_set_src_ip);\n-    if (target_ip) {\n-        svc_mon_update_field_if_changed(sbrec_mon, sbrec_mon->ip, target_ip,\n+    if (ip_dst) {\n+        svc_mon_update_field_if_changed(sbrec_mon, sbrec_mon->ip, ip_dst,\n                                         sbrec_service_monitor_set_ip);\n     }\n }\n@@ -3194,15 +3194,11 @@ svc_mon_update_mac_ip_addresses(const struct sbrec_service_monitor *sbrec_mon,\n static void\n ovn_nf_svc_create(struct ovsdb_idl_txn *ovnsb_txn,\n                   const struct nbrec_network_function *nbrec_nf,\n+                  const struct svc_monitor_addresses *svc_global_addresses,\n                   struct hmap *local_svc_monitors_map,\n                   struct hmap *ic_learned_svc_monitors_map,\n                   struct sset *svc_monitor_lsps,\n-                  struct hmap *ls_ports,\n-                  const char *global_svc_monitor_mac_src,\n-                  const struct eth_addr *global_svc_monitor_mac_ea_src,\n-                  const char *global_svc_monitor_mac_dst,\n-                  const char *global_svc_monitor_ip_src,\n-                  const char *global_svc_monitor_ip_dst)\n+                  struct hmap *ls_ports)\n {\n     if (!nbrec_nf->health_check) {\n         return;\n@@ -3241,22 +3237,18 @@ ovn_nf_svc_create(struct ovsdb_idl_txn *ovnsb_txn,\n                                   local_svc_monitors_map,\n                                   ic_learned_svc_monitors_map,\n                                   \"network-function\",\n-                                  global_svc_monitor_ip_dst,\n+                                  svc_global_addresses->ip_dst,\n                                   nbrec_nf->outport->name,\n                                   nbrec_nf->inport->name,\n-                                  0,\n-                                  \"icmp\",\n-                                  chassis_name,\n-                                  false);\n+                                  0, \"icmp\", chassis_name, false);\n     set_service_mon_options(mon_info->sbrec_mon,\n-                            &nbrec_nf->health_check->options,\n-                            NULL);\n+                            &nbrec_nf->health_check->options, NULL);\n     svc_mon_update_mac_ip_addresses(mon_info->sbrec_mon,\n-                                    global_svc_monitor_mac_ea_src,\n-                                    global_svc_monitor_mac_src,\n-                                    global_svc_monitor_mac_dst,\n-                                    global_svc_monitor_ip_src,\n-                                    global_svc_monitor_ip_dst);\n+                                    &svc_global_addresses->mac_ea_src,\n+                                    svc_global_addresses->mac_src,\n+                                    svc_global_addresses->mac_dst,\n+                                    svc_global_addresses->ip_src,\n+                                    svc_global_addresses->ip_dst);\n     svc_mon_update_status_if_online(mon_info->sbrec_mon,\n                                     !port_up_condition);\n }\n@@ -3264,8 +3256,7 @@ ovn_nf_svc_create(struct ovsdb_idl_txn *ovnsb_txn,\n static void\n ovn_lb_svc_create(struct ovsdb_idl_txn *ovnsb_txn,\n                   const struct ovn_northd_lb *lb,\n-                  const char *global_svc_monitor_mac_src,\n-                  const struct eth_addr *global_svc_monitor_mac_ea_src,\n+                  const struct svc_monitor_addresses *svc_global_addresses,\n                   struct hmap *ls_ports,\n                   struct sset *svc_monitor_lsps,\n                   struct hmap *local_svc_monitors_map,\n@@ -3311,8 +3302,8 @@ ovn_lb_svc_create(struct ovsdb_idl_txn *ovnsb_txn,\n                 source_mac_ea = &backend_nb->svc_mon_lrp->lrp_networks.ea;\n                 source_mac = backend_nb->svc_mon_lrp->lrp_networks.ea_s;\n             } else {\n-                source_mac_ea = global_svc_monitor_mac_ea_src;\n-                source_mac = global_svc_monitor_mac_src;\n+                source_mac_ea = &svc_global_addresses->mac_ea_src;\n+                source_mac = svc_global_addresses->mac_src;\n             }\n \n             const char *protocol = lb->nlb->protocol;\n@@ -3554,8 +3545,7 @@ build_lb_datapaths(const struct hmap *lbs, const struct hmap *lb_groups,\n static void\n ovn_lsp_svc_monitors_process_port(\n     struct ovsdb_idl_txn *ovnsb_txn, const struct ovn_port *op,\n-    const char *global_svc_monitor_mac_src,\n-    const struct eth_addr *global_svc_monitor_mac_ea_src,\n+    const struct svc_monitor_addresses *svc_global_addresses,\n     struct hmap *local_svc_monitors_map,\n     struct sset *svc_monitor_lsps)\n {\n@@ -3597,8 +3587,8 @@ ovn_lsp_svc_monitors_process_port(\n         set_service_mon_options(mon_info->sbrec_mon,\n                                 &lsp_hc->options, NULL);\n         svc_mon_update_mac_ip_addresses(mon_info->sbrec_mon,\n-                                        global_svc_monitor_mac_ea_src,\n-                                        global_svc_monitor_mac_src,\n+                                        &svc_global_addresses->mac_ea_src,\n+                                        svc_global_addresses->mac_src,\n                                         NULL, lsp_hc->src_ip, NULL);\n         svc_mon_update_status_if_online(mon_info->sbrec_mon,\n                                         port_up_condition);\n@@ -3610,11 +3600,7 @@ build_svc_monitors_data(\n     struct ovsdb_idl_txn *ovnsb_txn,\n     struct ovsdb_idl_index *sbrec_service_monitor_by_learned_type,\n     const struct nbrec_network_function_table *nbrec_network_function_table,\n-    const char *global_svc_monitor_mac_src,\n-    const struct eth_addr *global_svc_monitor_mac_ea_src,\n-    const char *global_svc_monitor_mac_dst,\n-    const char *global_svc_monitor_ip_src,\n-    const char *global_svc_monitor_ip_dst,\n+    const struct svc_monitor_addresses *svc_global_addresses,\n     struct hmap *ls_ports, struct hmap *lb_dps_map,\n     struct sset *svc_monitor_lsps,\n     struct hmap *local_svc_monitors_map,\n@@ -3645,8 +3631,7 @@ build_svc_monitors_data(\n     struct ovn_lb_datapaths *lb_dps;\n     HMAP_FOR_EACH (lb_dps, hmap_node, lb_dps_map) {\n         ovn_lb_svc_create(ovnsb_txn, lb_dps->lb,\n-                          global_svc_monitor_mac_src,\n-                          global_svc_monitor_mac_ea_src,\n+                          svc_global_addresses,\n                           ls_ports,\n                           svc_monitor_lsps,\n                           local_svc_monitors_map,\n@@ -3658,15 +3643,11 @@ build_svc_monitors_data(\n                             nbrec_network_function_table) {\n         ovn_nf_svc_create(ovnsb_txn,\n                           nbrec_nf,\n+                          svc_global_addresses,\n                           local_svc_monitors_map,\n                           ic_learned_svc_monitors_map,\n                           svc_monitor_lsps,\n-                          ls_ports,\n-                          global_svc_monitor_mac_src,\n-                          global_svc_monitor_mac_ea_src,\n-                          global_svc_monitor_mac_dst,\n-                          global_svc_monitor_ip_src,\n-                          global_svc_monitor_ip_dst);\n+                          ls_ports);\n     }\n \n     struct hmapx_node *hmapx_node;\n@@ -3675,8 +3656,7 @@ build_svc_monitors_data(\n         op = hmapx_node->data;\n         ovn_lsp_svc_monitors_process_port(ovnsb_txn,\n                                           op,\n-                                          global_svc_monitor_mac_src,\n-                                          global_svc_monitor_mac_ea_src,\n+                                          svc_global_addresses,\n                                           local_svc_monitors_map,\n                                           svc_monitor_lsps);\n     }\n@@ -20771,11 +20751,7 @@ ovnnb_db_run(struct northd_input *input_data,\n     build_svc_monitors_data(ovnsb_txn,\n         input_data->sbrec_service_monitor_by_learned_type,\n         input_data->nbrec_network_function_table,\n-        input_data->svc_monitor_mac,\n-        &input_data->svc_monitor_mac_ea,\n-        input_data->svc_monitor_mac_dst,\n-        input_data->svc_monitor_ip,\n-        input_data->svc_monitor_ip_dst,\n+        input_data->svc_global_addresses,\n         &data->ls_ports, &data->lb_datapaths_map,\n         &data->svc_monitor_lsps, &data->local_svc_monitors_map,\n         input_data->ic_learned_svc_monitors_map,\n@@ -20785,7 +20761,7 @@ ovnnb_db_run(struct northd_input *input_data,\n         input_data->nbrec_network_function_group_table,\n         &data->local_svc_monitors_map,\n         input_data->ic_learned_svc_monitors_map,\n-        input_data->svc_monitor_ip_dst);\n+        input_data->svc_global_addresses->ip_dst);\n     build_ipam(&data->ls_datapaths.datapaths);\n     build_lrouter_groups(&data->lr_ports, &data->lr_datapaths);\n     build_ip_mcast(ovnsb_txn, input_data->sbrec_ip_multicast_table,\ndiff --git a/northd/northd.h b/northd/northd.h\nindex f5c8b17dd..b7cea07c1 100644\n--- a/northd/northd.h\n+++ b/northd/northd.h\n@@ -23,6 +23,7 @@\n #include \"lib/hmapx.h\"\n #include \"northd/en-port-group.h\"\n #include \"northd/en-sync-from-sb.h\"\n+#include \"northd/en-global-config.h\"\n #include \"northd/ipam.h\"\n #include \"northd/lb.h\"\n #include \"openvswitch/hmap.h\"\n@@ -70,12 +71,7 @@ struct northd_input {\n     /* Global config data node inputs. */\n     const struct smap *nb_options;\n     const struct smap *sb_options;\n-    const char *svc_monitor_mac;\n-    struct eth_addr svc_monitor_mac_ea;\n-    const char *svc_monitor_mac_dst;\n-    struct eth_addr svc_monitor_mac_ea_dst;\n-    char *svc_monitor_ip;\n-    char *svc_monitor_ip_dst;\n+    const struct svc_monitor_addresses *svc_global_addresses;\n     const struct chassis_features *features;\n     bool vxlan_mode;\n \n",
    "prefixes": [
        "ovs-dev",
        "8/8",
        "v2"
    ]
}