> A lot of the arguments fo certain functions were getting out of hand, Just a typo here 'for'.
Lorenzo > pass struct physical_ctx instead of fields from that struct. This > has the added benefit of having available anything that is > in struct physical_ctx without adding additional arguments. > > Signed-off-by: Ales Musil <[email protected]> > --- > controller/physical.c | 242 +++++++++++++++--------------------------- > 1 file changed, 87 insertions(+), 155 deletions(-) > > diff --git a/controller/physical.c b/controller/physical.c > index 3ca4e0783..b3da527ae 100644 > --- a/controller/physical.c > +++ b/controller/physical.c > @@ -332,8 +332,7 @@ find_additional_encap_for_chassis(const struct > sbrec_port_binding *pb, > > static struct ovs_list * > get_remote_tunnels(const struct sbrec_port_binding *binding, > - const struct sbrec_chassis *chassis, > - const struct hmap *chassis_tunnels, > + const struct physical_ctx *ctx, > const char *local_encap_ip) > { > const struct chassis_tunnel *tun; > @@ -341,9 +340,9 @@ get_remote_tunnels(const struct sbrec_port_binding > *binding, > struct ovs_list *tunnels = xmalloc(sizeof *tunnels); > ovs_list_init(tunnels); > > - if (binding->chassis && binding->chassis != chassis) { > + if (binding->chassis && binding->chassis != ctx->chassis) { > tun = get_port_binding_tun(binding->encap, binding->chassis, > - chassis_tunnels, local_encap_ip); > + ctx->chassis_tunnels, local_encap_ip); > if (!tun) { > static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); > VLOG_WARN_RL( > @@ -358,14 +357,15 @@ get_remote_tunnels(const struct sbrec_port_binding > *binding, > } > > for (size_t i = 0; i < binding->n_additional_chassis; i++) { > - if (binding->additional_chassis[i] == chassis) { > + if (binding->additional_chassis[i] == ctx->chassis) { > continue; > } > const struct sbrec_encap *additional_encap; > - additional_encap = find_additional_encap_for_chassis(binding, > chassis); > + additional_encap = find_additional_encap_for_chassis(binding, > + ctx->chassis); > tun = get_port_binding_tun(additional_encap, > binding->additional_chassis[i], > - chassis_tunnels, local_encap_ip); > + ctx->chassis_tunnels, local_encap_ip); > if (!tun) { > static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); > VLOG_WARN_RL( > @@ -383,25 +383,20 @@ get_remote_tunnels(const struct sbrec_port_binding > *binding, > > static void > put_remote_port_redirect_overlay(const struct sbrec_port_binding *binding, > - enum mf_field_id mff_ovn_geneve, > + const struct physical_ctx *ctx, > uint32_t port_key, > struct match *match, > struct ofpbuf *ofpacts_p, > - const struct sbrec_chassis *chassis, > - const struct hmap *chassis_tunnels, > - size_t n_encap_ips, > - const char **encap_ips, > struct ovn_desired_flow_table *flow_table) > { > /* Setup encapsulation */ > - for (size_t i = 0; i < n_encap_ips; i++) { > + for (size_t i = 0; i < ctx->n_encap_ips; i++) { > + const char *encap_ip = ctx->encap_ips[i]; > struct ofpbuf *ofpacts_clone = ofpbuf_clone(ofpacts_p); > > match_set_reg_masked(match, MFF_LOG_ENCAP_ID - MFF_REG0, i << 16, > (uint32_t) 0xFFFF << 16); > - struct ovs_list *tuns = get_remote_tunnels(binding, chassis, > - chassis_tunnels, > - encap_ips[i]); > + struct ovs_list *tuns = get_remote_tunnels(binding, ctx, encap_ip); > if (!ovs_list_is_empty(tuns)) { > bool is_vtep_port = !strcmp(binding->type, "vtep"); > /* rewrite MFF_IN_PORT to bypass OpenFlow loopback check for > ARP/ND > @@ -413,7 +408,7 @@ put_remote_port_redirect_overlay(const struct > sbrec_port_binding *binding, > > struct tunnel *tun; > LIST_FOR_EACH (tun, list_node, tuns) { > - put_encapsulation(mff_ovn_geneve, tun->tun, > + put_encapsulation(ctx->mff_ovn_geneve, tun->tun, > binding->datapath, port_key, is_vtep_port, > ofpacts_clone); > ofpact_put_OUTPUT(ofpacts_clone)->port = tun->tun->ofport; > @@ -763,18 +758,14 @@ ofpact_put_push_vlan(struct ofpbuf *ofpacts, const > struct smap *options, int tag > } > > static void > -put_replace_router_port_mac_flows(struct ovsdb_idl_index > - *sbrec_port_binding_by_name, > +put_replace_router_port_mac_flows(const struct physical_ctx *ctx, > const struct > sbrec_port_binding *localnet_port, > - const struct sbrec_chassis *chassis, > - const struct sset *active_tunnels, > - const struct hmap *local_datapaths, > struct ofpbuf *ofpacts_p, > ofp_port_t ofport, > struct ovn_desired_flow_table *flow_table) > { > - struct local_datapath *ld = get_local_datapath(local_datapaths, > + struct local_datapath *ld = get_local_datapath(ctx->local_datapaths, > localnet_port->datapath-> > tunnel_key); > ovs_assert(ld); > @@ -794,7 +785,7 @@ put_replace_router_port_mac_flows(struct ovsdb_idl_index > } > > /* Get chassis mac */ > - if (!chassis_get_mac(chassis, network, &chassis_mac)) { > + if (!chassis_get_mac(ctx->chassis, network, &chassis_mac)) { > static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1); > /* Keeping the log level low for backward compatibility. > * Chassis mac is a new configuration. > @@ -810,8 +801,8 @@ put_replace_router_port_mac_flows(struct ovsdb_idl_index > struct match match; > struct ofpact_mac *replace_mac; > char *cr_peer_name = xasprintf("cr-%s", rport_binding->logical_port); > - if (lport_is_chassis_resident(sbrec_port_binding_by_name, > - chassis, active_tunnels, > + if (lport_is_chassis_resident(ctx->sbrec_port_binding_by_name, > + ctx->chassis, ctx->active_tunnels, > cr_peer_name)) { > /* If a router port's chassisredirect port is > * resident on this chassis, then we need not do mac replace. */ > @@ -1421,18 +1412,14 @@ static void > enforce_tunneling_for_multichassis_ports( > struct local_datapath *ld, > const struct sbrec_port_binding *binding, > - const struct sbrec_chassis *chassis, > - const struct hmap *chassis_tunnels, > - enum mf_field_id mff_ovn_geneve, > - struct ovn_desired_flow_table *flow_table, > - const struct if_status_mgr *if_mgr) > + const struct physical_ctx *ctx, > + struct ovn_desired_flow_table *flow_table) > { > if (shash_is_empty(&ld->multichassis_ports)) { > return; > } > > - struct ovs_list *tuns = get_remote_tunnels(binding, chassis, > - chassis_tunnels, NULL); > + struct ovs_list *tuns = get_remote_tunnels(binding, ctx, NULL); > if (ovs_list_is_empty(tuns)) { > free(tuns); > return; > @@ -1461,7 +1448,7 @@ enforce_tunneling_for_multichassis_ports( > > struct tunnel *tun; > LIST_FOR_EACH (tun, list_node, tuns) { > - put_encapsulation(mff_ovn_geneve, tun->tun, > + put_encapsulation(ctx->mff_ovn_geneve, tun->tun, > binding->datapath, port_key, is_vtep_port, > &ofpacts); > ofpact_put_OUTPUT(&ofpacts)->port = tun->tun->ofport; > @@ -1471,7 +1458,7 @@ enforce_tunneling_for_multichassis_ports( > &binding->header_.uuid); > ofpbuf_uninit(&ofpacts); > > - handle_pkt_too_big(flow_table, tuns, binding, mcp, if_mgr); > + handle_pkt_too_big(flow_table, tuns, binding, mcp, ctx->if_mgr); > } > > struct tunnel *tun_elem; > @@ -1482,28 +1469,15 @@ enforce_tunneling_for_multichassis_ports( > } > > static void > -consider_port_binding(struct ovsdb_idl_index *sbrec_port_binding_by_name, > - enum mf_field_id mff_ovn_geneve, > - const struct shash *ct_zones, > - const struct sset *active_tunnels, > - const struct hmap *local_datapaths, > - const struct shash *local_bindings, > - const struct simap *patch_ofports, > - const struct hmap *chassis_tunnels, > +consider_port_binding(const struct physical_ctx *ctx, > const struct sbrec_port_binding *binding, > - const struct sbrec_chassis *chassis, > - const struct physical_debug *debug, > - const struct if_status_mgr *if_mgr, > - size_t n_encap_ips, > - const char **encap_ips, > - bool always_tunnel, > struct ovn_desired_flow_table *flow_table, > struct ofpbuf *ofpacts_p) > { > uint32_t dp_key = binding->datapath->tunnel_key; > uint32_t port_key = binding->tunnel_key; > struct local_datapath *ld; > - if (!(ld = get_local_datapath(local_datapaths, dp_key))) { > + if (!(ld = get_local_datapath(ctx->local_datapaths, dp_key))) { > return; > } > > @@ -1517,7 +1491,7 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > match_set_metadata(&match, htonll(dp_key)); > match_set_reg(&match, MFF_LOG_INPORT - MFF_REG0, port_key); > > - struct zone_ids icmp_zone_ids = get_zone_ids(binding, ct_zones); > + struct zone_ids icmp_zone_ids = get_zone_ids(binding, ctx->ct_zones); > ofpbuf_clear(ofpacts_p); > put_zones_ofpacts(&icmp_zone_ids, ofpacts_p); > put_resubmit(OFTABLE_LOG_INGRESS_PIPELINE, ofpacts_p); > @@ -1530,17 +1504,17 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > struct match match; > if (!strcmp(binding->type, "patch") > || (!strcmp(binding->type, "l3gateway") > - && binding->chassis == chassis)) { > + && binding->chassis == ctx->chassis)) { > > const struct sbrec_port_binding *peer = get_binding_peer( > - sbrec_port_binding_by_name, binding); > + ctx->sbrec_port_binding_by_name, binding); > if (!peer) { > return; > } > > - struct zone_ids binding_zones = get_zone_ids(binding, ct_zones); > + struct zone_ids binding_zones = get_zone_ids(binding, ctx->ct_zones); > put_local_common_flows(dp_key, binding, NULL, &binding_zones, > - debug, ofpacts_p, flow_table); > + &ctx->debug, ofpacts_p, flow_table); > > ofpbuf_clear(ofpacts_p); > match_outport_dp_and_port_keys(&match, dp_key, port_key); > @@ -1551,9 +1525,9 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > put_load(0, MFF_LOG_DNAT_ZONE, 0, 32, ofpacts_p); > put_load(0, MFF_LOG_SNAT_ZONE, 0, 32, ofpacts_p); > put_load(0, MFF_LOG_CT_ZONE, 0, 16, ofpacts_p); > - struct zone_ids peer_zones = get_zone_ids(peer, ct_zones); > - load_logical_ingress_metadata(peer, &peer_zones, n_encap_ips, > - encap_ips, ofpacts_p, false); > + struct zone_ids peer_zones = get_zone_ids(peer, ctx->ct_zones); > + load_logical_ingress_metadata(peer, &peer_zones, ctx->n_encap_ips, > + ctx->encap_ips, ofpacts_p, false); > put_load(0, MFF_LOG_FLAGS, 0, 32, ofpacts_p); > put_load(0, MFF_LOG_OUTPORT, 0, 32, ofpacts_p); > for (int i = 0; i < MFF_N_LOG_REGS; i++) { > @@ -1570,9 +1544,9 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > return; > } > if (!strcmp(binding->type, "chassisredirect") > - && (binding->chassis == chassis > - || ha_chassis_group_is_active(binding->ha_chassis_group, > - active_tunnels, chassis))) { > + && (binding->chassis == ctx->chassis || > + ha_chassis_group_is_active(binding->ha_chassis_group, > + ctx->active_tunnels, ctx->chassis))) { > > /* Table 40, priority 100. > * ======================= > @@ -1589,7 +1563,7 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > const char *distributed_port = smap_get_def(&binding->options, > "distributed-port", ""); > const struct sbrec_port_binding *distributed_binding > - = lport_lookup_by_name(sbrec_port_binding_by_name, > + = lport_lookup_by_name(ctx->sbrec_port_binding_by_name, > distributed_port); > > if (!distributed_binding) { > @@ -1613,7 +1587,7 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > MFF_LOG_OUTPORT, 0, 32, ofpacts_p); > > struct zone_ids zone_ids = get_zone_ids(distributed_binding, > - ct_zones); > + ctx->ct_zones); > put_zones_ofpacts(&zone_ids, ofpacts_p); > > /* Clear the MFF_INPORT. Its possible that the same packet may > @@ -1655,16 +1629,16 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > if (!binding->tag) { > return; > } > - ofport = local_binding_get_lport_ofport(local_bindings, > + ofport = local_binding_get_lport_ofport(ctx->local_bindings, > binding->parent_port); > if (ofport) { > tag = *binding->tag; > nested_container = true; > parent_port = lport_lookup_by_name( > - sbrec_port_binding_by_name, binding->parent_port); > + ctx->sbrec_port_binding_by_name, binding->parent_port); > > if (parent_port > - && (lport_can_bind_on_this_chassis(chassis, > + && (lport_can_bind_on_this_chassis(ctx->chassis, > parent_port) != CAN_BIND_AS_MAIN)) { > /* Even though there is an ofport for this container > * parent port, it is requested on different chassis ignore > @@ -1676,15 +1650,15 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > } else if (!strcmp(binding->type, "localnet") > || !strcmp(binding->type, "l2gateway")) { > > - ofport = u16_to_ofp(simap_get(patch_ofports, > + ofport = u16_to_ofp(simap_get(ctx->patch_ofports, > binding->logical_port)); > if (ofport && binding->tag) { > tag = *binding->tag; > } > } else { > - ofport = local_binding_get_lport_ofport(local_bindings, > + ofport = local_binding_get_lport_ofport(ctx->local_bindings, > binding->logical_port); > - if (ofport && !lport_can_bind_on_this_chassis(chassis, binding)) { > + if (ofport && !lport_can_bind_on_this_chassis(ctx->chassis, > binding)) { > /* Even though there is an ofport for this port_binding, it is > * requested on different chassis. So ignore this ofport. > */ > @@ -1693,7 +1667,7 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > } > > const struct sbrec_port_binding *localnet_port = > - get_localnet_port(local_datapaths, dp_key); > + get_localnet_port(ctx->local_datapaths, dp_key); > > struct ha_chassis_ordered *ha_ch_ordered; > ha_ch_ordered = ha_chassis_get_ordered(binding->ha_chassis_group); > @@ -1704,7 +1678,7 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > /* Enforce tunneling while we clone packets to additional chassis b/c > * otherwise upstream switch won't flood the packet to both chassis. > */ > if (localnet_port && !binding->additional_chassis) { > - ofport = u16_to_ofp(simap_get(patch_ofports, > + ofport = u16_to_ofp(simap_get(ctx->patch_ofports, > localnet_port->logical_port)); > if (!ofport) { > goto out; > @@ -1727,11 +1701,11 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > * arrive from containers have a tag (vlan) associated with them. > */ > > - struct zone_ids zone_ids = get_zone_ids(binding, ct_zones); > + struct zone_ids zone_ids = get_zone_ids(binding, ctx->ct_zones); > /* Pass the parent port binding if the port is a nested > * container. */ > put_local_common_flows(dp_key, binding, parent_port, &zone_ids, > - debug, ofpacts_p, flow_table); > + &ctx->debug, ofpacts_p, flow_table); > > /* Table 0, Priority 150 and 100. > * ============================== > @@ -1776,15 +1750,15 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > } > } > > - setup_activation_strategy(binding, chassis, dp_key, port_key, > + setup_activation_strategy(binding, ctx->chassis, dp_key, port_key, > ofport, &zone_ids, flow_table); > > /* Remember the size with just strip vlan added so far, > * as we're going to remove this with ofpbuf_pull() later. */ > uint32_t ofpacts_orig_size = ofpacts_p->size; > > - load_logical_ingress_metadata(binding, &zone_ids, n_encap_ips, > - encap_ips, ofpacts_p, true); > + load_logical_ingress_metadata(binding, &zone_ids, ctx->n_encap_ips, > + ctx->encap_ips, ofpacts_p, true); > > if (!strcmp(binding->type, "localport")) { > /* mark the packet as incoming from a localport */ > @@ -1811,8 +1785,9 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > } > > if (!strcmp(binding->type, "localnet")) { > - put_replace_chassis_mac_flows(ct_zones, binding, local_datapaths, > - ofpacts_p, ofport, flow_table); > + put_replace_chassis_mac_flows(ctx->ct_zones, binding, > + ctx->local_datapaths, ofpacts_p, > + ofport, flow_table); > } > > /* Table 65, Priority 100. > @@ -1841,9 +1816,7 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > &match, ofpacts_p, &binding->header_.uuid); > > if (!strcmp(binding->type, "localnet")) { > - put_replace_router_port_mac_flows(sbrec_port_binding_by_name, > - binding, chassis, > active_tunnels, > - local_datapaths, ofpacts_p, > + put_replace_router_port_mac_flows(ctx, binding, ofpacts_p, > ofport, flow_table); > } > > @@ -1855,7 +1828,7 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > if (!strcmp(binding->type, "localnet")) { > /* do not forward traffic from localport to localnet port */ > ofpbuf_clear(ofpacts_p); > - put_drop(debug, OFTABLE_CHECK_LOOPBACK, ofpacts_p); > + put_drop(&ctx->debug, OFTABLE_CHECK_LOOPBACK, ofpacts_p); > match_outport_dp_and_port_keys(&match, dp_key, port_key); > match_set_reg_masked(&match, MFF_LOG_FLAGS - MFF_REG0, > MLF_LOCALPORT, MLF_LOCALPORT); > @@ -1865,7 +1838,7 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > > /* Drop LOCAL_ONLY traffic leaking through localnet ports. */ > ofpbuf_clear(ofpacts_p); > - put_drop(debug, OFTABLE_CHECK_LOOPBACK, ofpacts_p); > + put_drop(&ctx->debug, OFTABLE_CHECK_LOOPBACK, ofpacts_p); > match_outport_dp_and_port_keys(&match, dp_key, port_key); > match_set_reg_masked(&match, MFF_LOG_FLAGS - MFF_REG0, > MLF_LOCAL_ONLY, MLF_LOCAL_ONLY); > @@ -1882,7 +1855,7 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > if (!pb->chassis) { > continue; > } > - if (strcmp(pb->chassis->name, chassis->name)) { > + if (strcmp(pb->chassis->name, ctx->chassis->name)) { > continue; > } > > @@ -1935,7 +1908,7 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > binding->header_.uuid.parts[0], &match, > ofpacts_p, &binding->header_.uuid); > } > - } else if (access_type == PORT_LOCALNET && !always_tunnel) { > + } else if (access_type == PORT_LOCALNET && !ctx->always_tunnel) { > /* Remote port connected by localnet port */ > /* Table 40, priority 100. > * ======================= > @@ -1963,10 +1936,7 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > binding->header_.uuid.parts[0], > &match, ofpacts_p, &binding->header_.uuid); > > - enforce_tunneling_for_multichassis_ports(ld, binding, chassis, > - chassis_tunnels, > - mff_ovn_geneve, flow_table, > - if_mgr); > + enforce_tunneling_for_multichassis_ports(ld, binding, ctx, > flow_table); > > /* No more tunneling to set up. */ > goto out; > @@ -1988,15 +1958,14 @@ consider_port_binding(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > > if (redirect_type && !strcasecmp(redirect_type, "bridged")) { > put_remote_port_redirect_bridged( > - binding, local_datapaths, ld, &match, ofpacts_p, flow_table); > + binding, ctx->local_datapaths, ld, &match, ofpacts_p, > flow_table); > } else if (access_type == PORT_HA_REMOTE) { > put_remote_port_redirect_overlay_ha_remote( > - binding, ha_ch_ordered, mff_ovn_geneve, port_key, > - &match, ofpacts_p, chassis_tunnels, flow_table); > + binding, ha_ch_ordered, ctx->mff_ovn_geneve, port_key, > + &match, ofpacts_p, ctx->chassis_tunnels, flow_table); > } else { > put_remote_port_redirect_overlay( > - binding, mff_ovn_geneve, port_key, &match, ofpacts_p, > - chassis, chassis_tunnels, n_encap_ips, encap_ips, flow_table); > + binding, ctx, port_key, &match, ofpacts_p, flow_table); > } > out: > if (ha_ch_ordered) { > @@ -2126,19 +2095,13 @@ mc_ofctrl_add_flow(const struct sbrec_multicast_group > *mc, > } > > static void > -consider_mc_group(struct ovsdb_idl_index *sbrec_port_binding_by_name, > - enum mf_field_id mff_ovn_geneve, > - const struct shash *ct_zones, > - const struct hmap *local_datapaths, > - struct shash *local_bindings, > - struct simap *patch_ofports, > - const struct sbrec_chassis *chassis, > +consider_mc_group(const struct physical_ctx *ctx, > const struct sbrec_multicast_group *mc, > - const struct hmap *chassis_tunnels, > struct ovn_desired_flow_table *flow_table) > { > uint32_t dp_key = mc->datapath->tunnel_key; > - struct local_datapath *ldp = get_local_datapath(local_datapaths, dp_key); > + struct local_datapath *ldp = get_local_datapath(ctx->local_datapaths, > + dp_key); > if (!ldp) { > return; > } > @@ -2192,7 +2155,7 @@ consider_mc_group(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > continue; > } > > - int zone_id = ct_zone_find_zone(ct_zones, port->logical_port); > + int zone_id = ct_zone_find_zone(ctx->ct_zones, port->logical_port); > if (zone_id) { > put_load(zone_id, MFF_LOG_CT_ZONE, 0, 16, &ofpacts); > } > @@ -2213,27 +2176,28 @@ consider_mc_group(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > } > } else if (!strcmp(port->type, "localport")) { > remote_ports = true; > - } else if ((port->chassis == chassis > - || is_additional_chassis(port, chassis)) > - && (local_binding_get_primary_pb(local_bindings, > lport_name) > + } else if ((port->chassis == ctx->chassis > + || is_additional_chassis(port, ctx->chassis)) > + && (local_binding_get_primary_pb(ctx->local_bindings, > + lport_name) > || !strcmp(port->type, "l3gateway"))) { > local_output_pb(port->tunnel_key, &ofpacts); > - } else if (simap_contains(patch_ofports, port->logical_port)) { > + } else if (simap_contains(ctx->patch_ofports, port->logical_port)) { > local_output_pb(port->tunnel_key, &ofpacts); > } else if (!strcmp(port->type, "chassisredirect") > - && port->chassis == chassis) { > + && port->chassis == ctx->chassis) { > const char *distributed_port = smap_get(&port->options, > "distributed-port"); > if (distributed_port) { > const struct sbrec_port_binding *distributed_binding > - = lport_lookup_by_name(sbrec_port_binding_by_name, > + = lport_lookup_by_name(ctx->sbrec_port_binding_by_name, > distributed_port); > if (distributed_binding > && port->datapath == distributed_binding->datapath) { > local_output_pb(distributed_binding->tunnel_key, > &ofpacts); > } > } > - } else if (!get_localnet_port(local_datapaths, > + } else if (!get_localnet_port(ctx->local_datapaths, > mc->datapath->tunnel_key)) { > /* Add remote chassis only when localnet port not exist, > * otherwise multicast will reach remote ports through localnet > @@ -2274,9 +2238,10 @@ consider_mc_group(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > put_load(mc->tunnel_key, MFF_LOG_OUTPORT, 0, 32, &ofpacts_last); > } > > - fanout_to_chassis(mff_ovn_geneve, &remote_chassis, chassis_tunnels, > - mc->datapath, mc->tunnel_key, false, &ofpacts_last); > - fanout_to_chassis(mff_ovn_geneve, &vtep_chassis, chassis_tunnels, > + fanout_to_chassis(ctx->mff_ovn_geneve, &remote_chassis, > + ctx->chassis_tunnels, mc->datapath, mc->tunnel_key, > + false, &ofpacts_last); > + fanout_to_chassis(ctx->mff_ovn_geneve, &vtep_chassis, > ctx->chassis_tunnels, > mc->datapath, mc->tunnel_key, true, &ofpacts_last); > > remote_ports |= (ofpacts_last.size > 0); > @@ -2284,7 +2249,8 @@ consider_mc_group(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > put_resubmit(OFTABLE_LOCAL_OUTPUT, &ofpacts_last); > } > > - bool has_vtep = get_vtep_port(local_datapaths, mc->datapath->tunnel_key); > + bool has_vtep = get_vtep_port(ctx->local_datapaths, > + mc->datapath->tunnel_key); > uint32_t reverse_ramp_flow_index = MC_BUF_START_ID; > flow_index = MC_BUF_START_ID; > > @@ -2314,8 +2280,8 @@ consider_mc_group(struct ovsdb_idl_index > *sbrec_port_binding_by_name, > if (port->chassis) { > put_load(port->tunnel_key, MFF_LOG_OUTPORT, 0, 32, > &remote_ofpacts); > - tunnel_to_chassis(mff_ovn_geneve, port->chassis->name, > - chassis_tunnels, mc->datapath, > + tunnel_to_chassis(ctx->mff_ovn_geneve, port->chassis->name, > + ctx->chassis_tunnels, mc->datapath, > port->tunnel_key, &remote_ofpacts); > } > } else if (!strcmp(port->type, "localport")) { > @@ -2362,19 +2328,7 @@ physical_eval_port_binding(struct physical_ctx *p_ctx, > { > struct ofpbuf ofpacts; > ofpbuf_init(&ofpacts, 0); > - consider_port_binding(p_ctx->sbrec_port_binding_by_name, > - p_ctx->mff_ovn_geneve, p_ctx->ct_zones, > - p_ctx->active_tunnels, > - p_ctx->local_datapaths, > - p_ctx->local_bindings, > - p_ctx->patch_ofports, > - p_ctx->chassis_tunnels, > - pb, p_ctx->chassis, &p_ctx->debug, > - p_ctx->if_mgr, > - p_ctx->n_encap_ips, > - p_ctx->encap_ips, > - p_ctx->always_tunnel, > - flow_table, &ofpacts); > + consider_port_binding(p_ctx, pb, flow_table, &ofpacts); > ofpbuf_uninit(&ofpacts); > } > > @@ -2454,13 +2408,7 @@ physical_handle_mc_group_changes(struct physical_ctx > *p_ctx, > if (!sbrec_multicast_group_is_new(mc)) { > ofctrl_remove_flows(flow_table, &mc->header_.uuid); > } > - consider_mc_group(p_ctx->sbrec_port_binding_by_name, > - p_ctx->mff_ovn_geneve, p_ctx->ct_zones, > - p_ctx->local_datapaths, p_ctx->local_bindings, > - p_ctx->patch_ofports, > - p_ctx->chassis, mc, > - p_ctx->chassis_tunnels, > - flow_table); > + consider_mc_group(p_ctx, mc, flow_table); > } > } > } > @@ -2486,18 +2434,7 @@ physical_run(struct physical_ctx *p_ctx, > * 64 for logical-to-physical translation. */ > const struct sbrec_port_binding *binding; > SBREC_PORT_BINDING_TABLE_FOR_EACH (binding, p_ctx->port_binding_table) { > - consider_port_binding(p_ctx->sbrec_port_binding_by_name, > - p_ctx->mff_ovn_geneve, p_ctx->ct_zones, > - p_ctx->active_tunnels, p_ctx->local_datapaths, > - p_ctx->local_bindings, > - p_ctx->patch_ofports, > - p_ctx->chassis_tunnels, binding, > - p_ctx->chassis, &p_ctx->debug, > - p_ctx->if_mgr, > - p_ctx->n_encap_ips, > - p_ctx->encap_ips, > - p_ctx->always_tunnel, > - flow_table, &ofpacts); > + consider_port_binding(p_ctx, binding, flow_table, &ofpacts); > } > > /* Default flow for CT_ZONE_LOOKUP Table. */ > @@ -2511,12 +2448,7 @@ physical_run(struct physical_ctx *p_ctx, > /* Handle output to multicast groups, in tables 40 and 41. */ > const struct sbrec_multicast_group *mc; > SBREC_MULTICAST_GROUP_TABLE_FOR_EACH (mc, p_ctx->mc_group_table) { > - consider_mc_group(p_ctx->sbrec_port_binding_by_name, > - p_ctx->mff_ovn_geneve, p_ctx->ct_zones, > - p_ctx->local_datapaths, p_ctx->local_bindings, > - p_ctx->patch_ofports, p_ctx->chassis, > - mc, p_ctx->chassis_tunnels, > - flow_table); > + consider_mc_group(p_ctx, mc, flow_table); > } > > /* Table 0, priority 100. > -- > 2.47.0 > > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev >
_______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
