Hi Alexandra, Thanks for this new version!
On 2/17/26 6:58 PM, Alexandra Rukomoinikova wrote: > 1) Encapsulate global service monitor addresses into a structure > 2) Simplify network function service monitor creation by passing the > nbrec_network_function object directly instead of individual fields. > 3) Moved required filed setting inside the service monitor lookup/create Nit: s/filed/field/ > function and removed assert bc function cannot return null. > 4) chassis_name parameter is now set outside the lookup/create function. > > Signed-off-by: Alexandra Rukomoinikova <[email protected]> > --- > v2 --> v3: 1) combined the last two patches in v2 and removed the changes > that were not agreed upon. > 2) moved chassis_name setting outside lookup/create function - > This separation clarifies > that only fields which are immutable (cannot be changed without > recreating the monitor) > are handled inside this function. > --- > northd/en-global-config.c | 58 ++++++++------- > northd/en-global-config.h | 28 +++---- > northd/en-lflow.c | 3 +- > northd/en-northd.c | 8 +- > northd/en-sync-sb.c | 4 +- > northd/northd.c | 150 +++++++++++++++++--------------------- > northd/northd.h | 8 +- > 7 files changed, 119 insertions(+), 140 deletions(-) > > diff --git a/northd/en-global-config.c b/northd/en-global-config.c > index 2556b2888..5d6050578 100644 > --- a/northd/en-global-config.c > +++ b/northd/en-global-config.c > @@ -124,16 +124,19 @@ en_global_config_run(struct engine_node *node , void > *data) > const char *mac_addr_prefix = set_mac_prefix(smap_get(&nb->options, > "mac_prefix")); > > - const char *monitor_mac = smap_get(&nb->options, "svc_monitor_mac"); > - if (monitor_mac) { > - if (eth_addr_from_string(monitor_mac, > - &config_data->svc_monitor_mac_ea)) { > - snprintf(config_data->svc_monitor_mac, > - sizeof config_data->svc_monitor_mac, > + struct svc_monitor_addresses *svc_addresses = > + &config_data->svc_global_addresses; > + > + const char *src_monitor_mac = smap_get(&nb->options, "svc_monitor_mac"); > + if (src_monitor_mac) { > + if (eth_addr_from_string(src_monitor_mac, > + &svc_addresses->mac_ea_src)) { > + snprintf(svc_addresses->mac_src, > + sizeof svc_addresses->mac_src, > ETH_ADDR_FMT, > - ETH_ADDR_ARGS(config_data->svc_monitor_mac_ea)); > + ETH_ADDR_ARGS(svc_addresses->mac_ea_src)); > } else { > - monitor_mac = NULL; > + src_monitor_mac = NULL; > } > } > > @@ -141,22 +144,21 @@ en_global_config_run(struct engine_node *node , void > *data) > "svc_monitor_mac_dst"); > if (dst_monitor_mac) { > if (eth_addr_from_string(dst_monitor_mac, > - &config_data->svc_monitor_mac_ea_dst)) { > - snprintf(config_data->svc_monitor_mac_dst, > - sizeof config_data->svc_monitor_mac_dst, > + &svc_addresses->mac_ea_dst)) { > + snprintf(svc_addresses->mac_dst, > + sizeof svc_addresses->mac_dst, > ETH_ADDR_FMT, > - ETH_ADDR_ARGS(config_data->svc_monitor_mac_ea_dst)); > + ETH_ADDR_ARGS(svc_addresses->mac_ea_dst)); > } else { > dst_monitor_mac = NULL; > } > } > > const char *monitor_ip = smap_get(&nb->options, "svc_monitor_ip"); > - update_svc_monitor_addr(monitor_ip, &config_data->svc_monitor_ip); > + update_svc_monitor_addr(monitor_ip, &svc_addresses->ip_src); config_data->svc_global_addresses.ip_src can be NULL here. > > const char *monitor_ip_dst = smap_get(&nb->options, > "svc_monitor_ip_dst"); > - update_svc_monitor_addr(monitor_ip_dst, > - &config_data->svc_monitor_ip_dst); > + update_svc_monitor_addr(monitor_ip_dst, &svc_addresses->ip_dst); config_data->svc_global_addresses.ip_dst can be NULL here. and in ovn_nf_svc_create() we pass them directly to strcmp(), that will crash if they're NULL. > > struct smap *options = &config_data->nb_options; > smap_destroy(options); > @@ -164,22 +166,22 @@ en_global_config_run(struct engine_node *node , void > *data) > > smap_replace(options, "mac_prefix", mac_addr_prefix); > > - if (!monitor_mac) { > - eth_addr_random(&config_data->svc_monitor_mac_ea); > - snprintf(config_data->svc_monitor_mac, > - sizeof config_data->svc_monitor_mac, ETH_ADDR_FMT, > - ETH_ADDR_ARGS(config_data->svc_monitor_mac_ea)); > + if (!src_monitor_mac) { > + eth_addr_random(&svc_addresses->mac_ea_src); > + snprintf(svc_addresses->mac_src, > + sizeof svc_addresses->mac_src, ETH_ADDR_FMT, > + ETH_ADDR_ARGS(svc_addresses->mac_ea_src)); > smap_replace(options, "svc_monitor_mac", > - config_data->svc_monitor_mac); > + svc_addresses->mac_src); > } > > if (!dst_monitor_mac) { > - eth_addr_random(&config_data->svc_monitor_mac_ea_dst); > - snprintf(config_data->svc_monitor_mac_dst, > - sizeof config_data->svc_monitor_mac_dst, ETH_ADDR_FMT, > - ETH_ADDR_ARGS(config_data->svc_monitor_mac_ea_dst)); > + eth_addr_random(&svc_addresses->mac_ea_dst); > + snprintf(svc_addresses->mac_dst, > + sizeof svc_addresses->mac_dst, ETH_ADDR_FMT, > + ETH_ADDR_ARGS(svc_addresses->mac_ea_dst)); > smap_replace(options, "svc_monitor_mac_dst", > - config_data->svc_monitor_mac_dst); > + svc_addresses->mac_dst); > } > > bool ic_vxlan_mode = false; > @@ -244,8 +246,8 @@ void en_global_config_cleanup(void *data OVS_UNUSED) > struct ed_type_global_config *config_data = data; > smap_destroy(&config_data->nb_options); > smap_destroy(&config_data->sb_options); > - free(config_data->svc_monitor_ip); > - free(config_data->svc_monitor_ip_dst); > + free(config_data->svc_global_addresses.ip_src); > + free(config_data->svc_global_addresses.ip_dst); > destroy_debug_config(); > } > > diff --git a/northd/en-global-config.h b/northd/en-global-config.h > index 413cd3849..0c75ab246 100644 > --- a/northd/en-global-config.h > +++ b/northd/en-global-config.h > @@ -30,27 +30,29 @@ struct global_config_tracked_data { > bool chassis_features_changed; > }; > > -/* struct which maintains the data of the engine node global_config. */ > -struct ed_type_global_config { > - struct smap nb_options; > - struct smap sb_options; > - const struct nbrec_nb_global *nb_global; > - const struct sbrec_sb_global *sb_global; > - > +struct svc_monitor_addresses { > /* MAC allocated for service monitor usage. Just one pair is allocated > * for this purpose and ovn-controller's on each chassis will make use > * of this pair when sending out the packets to monitor the services > * defined in Service_Monitor Southbound table. Since these packets > * are locally handled, having just one pair is good enough. */ > - char svc_monitor_mac[ETH_ADDR_STRLEN + 1]; > - struct eth_addr svc_monitor_mac_ea; > - char svc_monitor_mac_dst[ETH_ADDR_STRLEN + 1]; > - struct eth_addr svc_monitor_mac_ea_dst; > + char mac_src[ETH_ADDR_STRLEN + 1]; > + struct eth_addr mac_ea_src; > + char mac_dst[ETH_ADDR_STRLEN + 1]; > + struct eth_addr mac_ea_dst; > > /* IP addresses configured for NF service monitor usage. */ > - char *svc_monitor_ip; > - char *svc_monitor_ip_dst; > + char *ip_src; > + char *ip_dst; > +}; > > +/* struct which maintains the data of the engine node global_config. */ > +struct ed_type_global_config { > + struct smap nb_options; > + struct smap sb_options; > + const struct nbrec_nb_global *nb_global; > + const struct sbrec_sb_global *sb_global; > + struct svc_monitor_addresses svc_global_addresses; > struct chassis_features features; > > bool ovn_internal_version_changed; > diff --git a/northd/en-lflow.c b/northd/en-lflow.c > index 940bd18bd..704fae709 100644 > --- a/northd/en-lflow.c > +++ b/northd/en-lflow.c > @@ -111,7 +111,8 @@ lflow_get_input_data(struct engine_node *node, > lflow_input->features = &global_config->features; > lflow_input->ovn_internal_version_changed = > global_config->ovn_internal_version_changed; > - lflow_input->svc_monitor_mac = global_config->svc_monitor_mac; > + lflow_input->svc_monitor_mac = > + global_config->svc_global_addresses.mac_src; > > struct ed_type_sampling_app_data *sampling_app_data = > engine_get_input_data("sampling_app", node); > diff --git a/northd/en-northd.c b/northd/en-northd.c > index ef74175a2..d4f49917b 100644 > --- a/northd/en-northd.c > +++ b/northd/en-northd.c > @@ -115,12 +115,8 @@ northd_get_input_data(struct engine_node *node, > engine_get_input_data("global_config", node); > input_data->nb_options = &global_config->nb_options; > input_data->sb_options = &global_config->sb_options; > - input_data->svc_monitor_mac = global_config->svc_monitor_mac; > - input_data->svc_monitor_mac_ea = global_config->svc_monitor_mac_ea; > - input_data->svc_monitor_mac_dst = global_config->svc_monitor_mac_dst; > - input_data->svc_monitor_mac_ea_dst = > global_config->svc_monitor_mac_ea_dst; > - input_data->svc_monitor_ip = global_config->svc_monitor_ip; > - input_data->svc_monitor_ip_dst = global_config->svc_monitor_ip_dst; > + > + input_data->svc_global_addresses = &global_config->svc_global_addresses; > input_data->features = &global_config->features; > input_data->vxlan_mode = global_config->vxlan_mode; > > diff --git a/northd/en-sync-sb.c b/northd/en-sync-sb.c > index fbe26eb8c..0b2a85b3b 100644 > --- a/northd/en-sync-sb.c > +++ b/northd/en-sync-sb.c > @@ -106,8 +106,8 @@ en_sync_to_sb_addr_set_run(struct engine_node *node, void > *data OVS_UNUSED) > nb_port_group_table, sb_address_set_table, > &lr_stateful_data->table, > &northd_data->lr_datapaths, > - global_config->svc_monitor_mac, > - global_config->svc_monitor_mac_dst); > + global_config->svc_global_addresses.mac_src, > + global_config->svc_global_addresses.mac_dst); > > return EN_UPDATED; > } > diff --git a/northd/northd.c b/northd/northd.c > index 98f97af26..abf38d79f 100644 > --- a/northd/northd.c > +++ b/northd/northd.c > @@ -3097,7 +3097,7 @@ create_or_get_service_mon(struct ovsdb_idl_txn > *ovnsb_txn, > const char *logical_port, > const char *logical_input_port, > uint16_t service_port, const char *protocol, > - const char *chassis_name, bool remote_backend) > + bool remote_backend) > { > struct service_monitor_info *mon_info = > get_service_mon(local_svc_monitors_map, > @@ -3105,11 +3105,6 @@ create_or_get_service_mon(struct ovsdb_idl_txn > *ovnsb_txn, > ip, logical_port, service_port, protocol); > > if (mon_info) { > - if (chassis_name && strcmp(mon_info->sbrec_mon->chassis_name, > - chassis_name)) { > - sbrec_service_monitor_set_chassis_name(mon_info->sbrec_mon, > - chassis_name); > - } > /* > * if a similar record was created by the interconet database, > * then we transfer ownership rights to delete to northd: > @@ -3118,6 +3113,7 @@ create_or_get_service_mon(struct ovsdb_idl_txn > *ovnsb_txn, > */ > sbrec_service_monitor_set_ic_learned(mon_info->sbrec_mon, > false); > + mon_info->required = true; > return mon_info; > } > > @@ -3139,36 +3135,27 @@ create_or_get_service_mon(struct ovsdb_idl_txn > *ovnsb_txn, > sbrec_service_monitor_set_protocol(sbrec_mon, protocol); > sbrec_service_monitor_set_remote(sbrec_mon, remote_backend); > sbrec_service_monitor_set_ic_learned(sbrec_mon, false); > - if (chassis_name) { > - sbrec_service_monitor_set_chassis_name(sbrec_mon, chassis_name); > - } > + > mon_info = xzalloc(sizeof *mon_info); > mon_info->sbrec_mon = sbrec_mon; > + mon_info->required = true; > hmap_insert(local_svc_monitors_map, &mon_info->hmap_node, hash); > + > return mon_info; > } > > static void > ovn_nf_svc_create(struct ovsdb_idl_txn *ovnsb_txn, > + const struct nbrec_network_function *nbrec_nf, > + const struct svc_monitor_addresses *svc_global_addresses, > struct hmap *local_svc_monitors_map, > struct hmap *ic_learned_svc_monitors_map, > struct sset *svc_monitor_lsps, > - struct hmap *ls_ports, > - const char *mac_src, const char *mac_dst, > - const char *ip_src, const char *ip_dst, > - const char *logical_port, const char *logical_input_port, > - const struct smap *health_check_options) > + struct hmap *ls_ports) > { > static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1); > > - if (!ip_src || !ip_dst || !mac_src || !mac_dst) { > - VLOG_ERR_RL(&rl, "NetworkFunction: invalid service monitor " > - "src_mac: %s dst_mac:%s src_ip:%s dst_ip:%s", > - mac_src, mac_dst, ip_src, ip_dst); > - return; > - } As mentioned above, we need to keep this check. But the log was wrong too as it was potentially passing NULL as "%". We should: if (!svc_global_addresses->ip_src || !svc_global_addresses->ip_dst) { VLOG_ERR_RL(&rl, "NetworkFunction %s: invalid service monitor", nbrec_nf->name); return; } I made these small changes and then applied the patch to main. Regards, Dumitru > - > - const char *ports[] = {logical_port, logical_input_port}; > + const char *ports[] = {nbrec_nf->outport->name, nbrec_nf->inport->name}; > const char *chassis_name = NULL; > bool port_up = true; > > @@ -3198,51 +3185,55 @@ ovn_nf_svc_create(struct ovsdb_idl_txn *ovnsb_txn, > create_or_get_service_mon(ovnsb_txn, > local_svc_monitors_map, > ic_learned_svc_monitors_map, > - "network-function", ip_dst, > - logical_port, > - logical_input_port, > - 0, > - "icmp", > - chassis_name, > - false); > - ovs_assert(mon_info); > - sbrec_service_monitor_set_options( > - mon_info->sbrec_mon, health_check_options); > + "network-function", > + svc_global_addresses->ip_dst, > + nbrec_nf->outport->name, > + nbrec_nf->inport->name, > + 0, "icmp", false); > + > + set_service_mon_options(mon_info->sbrec_mon, > + &nbrec_nf->health_check->options, NULL); > > if (!mon_info->sbrec_mon->src_mac || > - strcmp(mon_info->sbrec_mon->src_mac, mac_src)) { > + strcmp(mon_info->sbrec_mon->src_mac, svc_global_addresses->mac_src)) > { > sbrec_service_monitor_set_src_mac(mon_info->sbrec_mon, > - mac_src); > + svc_global_addresses->mac_src); > } > > if (!mon_info->sbrec_mon->mac || > - strcmp(mon_info->sbrec_mon->mac, mac_dst)) { > + strcmp(mon_info->sbrec_mon->mac, svc_global_addresses->mac_dst)) { > sbrec_service_monitor_set_mac(mon_info->sbrec_mon, > - mac_dst); > + svc_global_addresses->mac_dst); > } > > if (!mon_info->sbrec_mon->src_ip || > - strcmp(mon_info->sbrec_mon->src_ip, ip_src)) { > - sbrec_service_monitor_set_src_ip(mon_info->sbrec_mon, ip_src); > + strcmp(mon_info->sbrec_mon->src_ip, svc_global_addresses->ip_src)) { > + sbrec_service_monitor_set_src_ip(mon_info->sbrec_mon, > + svc_global_addresses->ip_src); > } > > if (!mon_info->sbrec_mon->ip || > - strcmp(mon_info->sbrec_mon->ip, ip_dst)) { > - sbrec_service_monitor_set_ip(mon_info->sbrec_mon, ip_dst); > + strcmp(mon_info->sbrec_mon->ip, svc_global_addresses->ip_dst)) { > + sbrec_service_monitor_set_ip(mon_info->sbrec_mon, > + svc_global_addresses->ip_dst); > } > > if (!port_up && mon_info->sbrec_mon->status > && !strcmp(mon_info->sbrec_mon->status, "online")) { > sbrec_service_monitor_set_status(mon_info->sbrec_mon, "offline"); > } > - mon_info->required = true; > + > + if (chassis_name && strcmp(mon_info->sbrec_mon->chassis_name, > + chassis_name)) { > + sbrec_service_monitor_set_chassis_name(mon_info->sbrec_mon, > + chassis_name); > + } > } > > static void > ovn_lb_svc_create(struct ovsdb_idl_txn *ovnsb_txn, > const struct ovn_northd_lb *lb, > - const char *svc_monitor_mac, > - const struct eth_addr *svc_monitor_mac_ea, > + const struct svc_monitor_addresses *svc_global_addresses, > struct hmap *ls_ports, > struct sset *svc_monitor_lsps, > struct hmap *local_svc_monitors_map, > @@ -3285,8 +3276,8 @@ ovn_lb_svc_create(struct ovsdb_idl_txn *ovnsb_txn, > source_mac_ea = &backend_nb->svc_mon_lrp->lrp_networks.ea; > source_mac = backend_nb->svc_mon_lrp->lrp_networks.ea_s; > } else { > - source_mac_ea = svc_monitor_mac_ea; > - source_mac = svc_monitor_mac; > + source_mac_ea = &svc_global_addresses->mac_ea_src; > + source_mac = svc_global_addresses->mac_src; > } > > const char *protocol = lb->nlb->protocol; > @@ -3294,11 +3285,6 @@ ovn_lb_svc_create(struct ovsdb_idl_txn *ovnsb_txn, > protocol = "tcp"; > } > > - const char *chassis_name = NULL; > - if (!backend_nb->remote_backend && op->sb->chassis) { > - chassis_name = op->sb->chassis->name; > - } > - > struct service_monitor_info *mon_info = > create_or_get_service_mon(ovnsb_txn, > local_svc_monitors_map, > @@ -3309,9 +3295,8 @@ ovn_lb_svc_create(struct ovsdb_idl_txn *ovnsb_txn, > NULL, > backend->port, > protocol, > - chassis_name, > backend_nb->remote_backend); > - ovs_assert(mon_info); > + > set_service_mon_options(mon_info->sbrec_mon, > &lb_vip_nb->lb_health_check->options, > backend_nb->az_name); > @@ -3339,7 +3324,12 @@ ovn_lb_svc_create(struct ovsdb_idl_txn *ovnsb_txn, > "offline"); > } > > - mon_info->required = true; > + if (!backend_nb->remote_backend && op->sb->chassis && > + strcmp(mon_info->sbrec_mon->chassis_name, > + op->sb->chassis->name)) { > + sbrec_service_monitor_set_chassis_name(mon_info->sbrec_mon, > + > op->sb->chassis->name); > + } > } > } > } > @@ -3592,12 +3582,12 @@ build_lb_datapaths(const struct hmap *lbs, const > struct hmap *lb_groups, > } > > static void > -ovn_lsp_svc_monitors_process_port(struct ovsdb_idl_txn *ovnsb_txn, > - const struct ovn_port *op, > - const char *svc_monitor_mac, > - const struct eth_addr *svc_monitor_mac_ea, > - struct hmap *local_svc_monitors_map, > - struct sset *svc_monitor_lsps) > +ovn_lsp_svc_monitors_process_port( > + struct ovsdb_idl_txn *ovnsb_txn, > + const struct ovn_port *op, > + const struct svc_monitor_addresses *svc_global_addresses, > + struct hmap *local_svc_monitors_map, > + struct sset *svc_monitor_lsps) > { > sset_add(svc_monitor_lsps, op->key); > > @@ -3630,20 +3620,17 @@ ovn_lsp_svc_monitors_process_port(struct > ovsdb_idl_txn *ovnsb_txn, > NULL, "logical-switch-port", > lsp_hc->address, op->key, NULL, > lsp_hc->port, lsp_hc->protocol, > - (op->sb && op->sb->chassis) ? > - op->sb->chassis->name : NULL, > false); > > - mon_info->required = true; > set_service_mon_options(mon_info->sbrec_mon, > &lsp_hc->options, NULL); > > struct eth_addr ea; > if (!mon_info->sbrec_mon->src_mac || > !eth_addr_from_string(mon_info->sbrec_mon->src_mac, &ea) || > - !eth_addr_equals(ea, *svc_monitor_mac_ea)) { > + !eth_addr_equals(ea, svc_global_addresses->mac_ea_src)) { > sbrec_service_monitor_set_src_mac(mon_info->sbrec_mon, > - svc_monitor_mac); > + svc_global_addresses->mac_src); > } > > if (!mon_info->sbrec_mon->src_ip || > @@ -3657,6 +3644,12 @@ ovn_lsp_svc_monitors_process_port(struct ovsdb_idl_txn > *ovnsb_txn, > !strcmp(mon_info->sbrec_mon->status, "online")) { > sbrec_service_monitor_set_status(mon_info->sbrec_mon, "offline"); > } > + > + if (op->sb->chassis && strcmp(mon_info->sbrec_mon->chassis_name, > + op->sb->chassis->name)) { > + sbrec_service_monitor_set_chassis_name(mon_info->sbrec_mon, > + op->sb->chassis->name); > + } > } > } > > @@ -3664,11 +3657,7 @@ static void > build_svc_monitors_data( > struct ovsdb_idl_txn *ovnsb_txn, > struct ovsdb_idl_index *sbrec_service_monitor_by_learned_type, > - const char *svc_monitor_mac, > - const struct eth_addr *svc_monitor_mac_ea, > - const char *svc_monitor_mac_dst, > - const char *svc_monitor_ip, > - const char *svc_monitor_ip_dst, > + const struct svc_monitor_addresses *svc_global_addresses, > struct hmap *ls_ports, struct hmap *lb_dps_map, > const struct nbrec_network_function_table *nbrec_network_function_table, > struct sset *svc_monitor_lsps, > @@ -3700,8 +3689,7 @@ build_svc_monitors_data( > struct ovn_lb_datapaths *lb_dps; > HMAP_FOR_EACH (lb_dps, hmap_node, lb_dps_map) { > ovn_lb_svc_create(ovnsb_txn, lb_dps->lb, > - svc_monitor_mac, > - svc_monitor_mac_ea, > + svc_global_addresses, > ls_ports, > svc_monitor_lsps, > local_svc_monitors_map, > @@ -3713,14 +3701,12 @@ build_svc_monitors_data( > nbrec_network_function_table) { > if (nbrec_nf->health_check) { > ovn_nf_svc_create(ovnsb_txn, > + nbrec_nf, > + svc_global_addresses, > local_svc_monitors_map, > ic_learned_svc_monitors_map, > svc_monitor_lsps, > - ls_ports, > - svc_monitor_mac, svc_monitor_mac_dst, > - svc_monitor_ip, svc_monitor_ip_dst, > - nbrec_nf->outport->name, > nbrec_nf->inport->name, > - &nbrec_nf->health_check->options); > + ls_ports); > } > } > > @@ -3728,8 +3714,8 @@ build_svc_monitors_data( > const struct ovn_port *op; > HMAPX_FOR_EACH (hmapx_node, monitored_ports_map) { > op = hmapx_node->data; > - ovn_lsp_svc_monitors_process_port(ovnsb_txn, op, svc_monitor_mac, > - svc_monitor_mac_ea, > + ovn_lsp_svc_monitors_process_port(ovnsb_txn, op, > + svc_global_addresses, > local_svc_monitors_map, > svc_monitor_lsps); > } > @@ -20935,11 +20921,7 @@ ovnnb_db_run(struct northd_input *input_data, > &data->lb_group_datapaths_map); > build_svc_monitors_data(ovnsb_txn, > input_data->sbrec_service_monitor_by_learned_type, > - input_data->svc_monitor_mac, > - &input_data->svc_monitor_mac_ea, > - input_data->svc_monitor_mac_dst, > - input_data->svc_monitor_ip, > - input_data->svc_monitor_ip_dst, > + input_data->svc_global_addresses, > &data->ls_ports, &data->lb_datapaths_map, > input_data->nbrec_network_function_table, > &data->svc_monitor_lsps, &data->local_svc_monitors_map, > @@ -20950,7 +20932,7 @@ ovnnb_db_run(struct northd_input *input_data, > input_data->nbrec_network_function_group_table, > &data->local_svc_monitors_map, > input_data->ic_learned_svc_monitors_map, > - input_data->svc_monitor_ip_dst); > + input_data->svc_global_addresses->ip_dst); > build_ipam(&data->ls_datapaths.datapaths); > build_lrouter_groups(&data->lr_ports, &data->lr_datapaths); > build_ip_mcast(ovnsb_txn, input_data->sbrec_ip_multicast_table, > diff --git a/northd/northd.h b/northd/northd.h > index cc05c3b1f..8fb3e06be 100644 > --- a/northd/northd.h > +++ b/northd/northd.h > @@ -22,6 +22,7 @@ > #include "lib/sset.h" > #include "lib/hmapx.h" > #include "northd/en-port-group.h" > +#include "northd/en-global-config.h" > #include "northd/ipam.h" > #include "northd/lb.h" > #include "openvswitch/hmap.h" > @@ -69,12 +70,7 @@ struct northd_input { > /* Global config data node inputs. */ > const struct smap *nb_options; > const struct smap *sb_options; > - const char *svc_monitor_mac; > - struct eth_addr svc_monitor_mac_ea; > - const char *svc_monitor_mac_dst; > - struct eth_addr svc_monitor_mac_ea_dst; > - char *svc_monitor_ip; > - char *svc_monitor_ip_dst; > + const struct svc_monitor_addresses *svc_global_addresses; > const struct chassis_features *features; > bool vxlan_mode; > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
