On Mon, Jan 22, 2024 at 5:26 PM Dumitru Ceara <dce...@redhat.com> wrote:
> On 1/22/24 15:14, Mohammad Heib wrote: > > Expose the igmp/mld group protocol version through the > > IGMP_GROUP table in SBDB. > > > > This patch can be used by ovn consumer for debuggability purposes, user > > now can match between the protocol version used in the OVN logical > > switches and the uplink ports. > > > > Rreported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2160476 > > Signed-off-by: Mohammad Heib <mh...@redhat.com> > > --- > Hi Dumitru, Thank you for your review :), i have small question please see below. > Hi Mohammad, > > I have a few (minor) comments, please see below. > > > NEWS | 2 ++ > > controller/ip-mcast.c | 8 ++++++++ > > controller/ip-mcast.h | 3 +++ > > controller/pinctrl.c | 19 ++++++++++++++++++- > > northd/ovn-northd.c | 2 +- > > ovn-sb.ovsschema | 5 +++-- > > ovn-sb.xml | 4 ++++ > > tests/ovn.at | 3 +++ > > 8 files changed, 42 insertions(+), 4 deletions(-) > > > > diff --git a/NEWS b/NEWS > > index 5f267b4c6..9075e7d80 100644 > > --- a/NEWS > > +++ b/NEWS > > @@ -14,6 +14,8 @@ Post v23.09.0 > > - ovn-northd-ddlog has been removed. > > - A new LSP option "enable_router_port_acl" has been added to enable > > conntrack for the router port whose peer is l3dgw_port if set it > true. > > + - IGMP_Group have a new "protocol" column that displays the the group > > Nit: s/have/has > > > + protocol version. > > > > OVN v23.09.0 - 15 Sep 2023 > > -------------------------- > > diff --git a/controller/ip-mcast.c b/controller/ip-mcast.c > > index a870fb29e..83e41c81f 100644 > > --- a/controller/ip-mcast.c > > +++ b/controller/ip-mcast.c > > @@ -226,6 +226,14 @@ igmp_group_cleanup(struct ovsdb_idl_txn > *ovnsb_idl_txn, > > return true; > > } > > > > + > > +void igmp_group_set_protocol(const struct sbrec_igmp_group *group, > > + mcast_group_proto protocol) > > +{ > > + sbrec_igmp_group_set_protocol(group, > > + > mcast_snooping_group_protocol_str(protocol)); > > +} > > + > > Does it make more sense to add the protocol as argument to > igmp_group_update_ports() and rename that function to igmp_group_update()? > yes that make sense and will make the code more cleaner. > > > static const struct sbrec_igmp_group * > > igmp_group_lookup_(struct ovsdb_idl_index *igmp_groups, > > const char *addr_str, > > diff --git a/controller/ip-mcast.h b/controller/ip-mcast.h > > index 326f39db1..f0c34343f 100644 > > --- a/controller/ip-mcast.h > > +++ b/controller/ip-mcast.h > > @@ -63,4 +63,7 @@ void igmp_group_delete(const struct sbrec_igmp_group > *g); > > bool igmp_group_cleanup(struct ovsdb_idl_txn *ovnsb_idl_txn, > > struct ovsdb_idl_index *igmp_groups); > > > > +void igmp_group_set_protocol(const struct sbrec_igmp_group *group, > > + mcast_group_proto protocol); > > + > > #endif /* controller/ip-mcast.h */ > > diff --git a/controller/pinctrl.c b/controller/pinctrl.c > > index 77bf67e58..6379b7afb 100644 > > --- a/controller/pinctrl.c > > +++ b/controller/pinctrl.c > > @@ -180,6 +180,7 @@ struct pinctrl { > > bool mac_binding_can_timestamp; > > bool fdb_can_timestamp; > > bool dns_supports_ovn_owned; > > + bool igmp_support_protocol; > > }; > > > > static struct pinctrl pinctrl; > > @@ -3586,11 +3587,21 @@ pinctrl_update(const struct ovsdb_idl *idl, > const char *br_int_name) > > if (dns_supports_ovn_owned != pinctrl.dns_supports_ovn_owned) { > > pinctrl.dns_supports_ovn_owned = dns_supports_ovn_owned; > > > > - /* Notify pinctrl_handler that fdb timestamp column > > + /* Notify pinctrl_handler that dns ovn_owned column > > * availability has changed. */ > > notify_pinctrl_handler(); > > } > > > > + bool igmp_support_proto = > > + sbrec_server_has_igmp_group_table_col_protocol(idl); > > + if (igmp_support_proto != pinctrl.igmp_support_protocol) { > > + pinctrl.igmp_support_protocol = igmp_support_proto; > > We only use this in the main thread, when updating the SB, why can't we > just directly check the column support there instead? > *like you mean to call sbrec_server_has_igmp_group_table_col_protocol(idl); inside the **ip_mcast_sync function?* *something like this:* * /* Set Group protocol*/ if (sbrec_server_has_igmp_group_table_col_protocol(idl)) { igmp_group_set_protocol(sbrec_igmp, mc_group->protocol_version); }* > > > + > > + /* Notify pinctrl_handler that igmp protocol column > > + * availability has changed. */ > > + notify_pinctrl_handler(); > > + } > > + > > ovs_mutex_unlock(&pinctrl_mutex); > > } > > > > @@ -5400,6 +5411,12 @@ ip_mcast_sync(struct ovsdb_idl_txn *ovnsb_idl_txn, > > local_dp->datapath, > chassis); > > } > > > > + /* Set Group protocol*/ > > + if (pinctrl.igmp_support_protocol) { > > + igmp_group_set_protocol(sbrec_igmp, > > + mc_group->protocol_version); > > + } > > + > > igmp_group_update_ports(sbrec_igmp, > sbrec_datapath_binding_by_key, > > sbrec_port_binding_by_key, > ip_ms->ms, > > mc_group); > > diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c > > index f3868068d..700c9cf6e 100644 > > --- a/northd/ovn-northd.c > > +++ b/northd/ovn-northd.c > > @@ -120,7 +120,7 @@ static const char *rbac_svc_monitor_auth_update[] = > > static const char *rbac_igmp_group_auth[] = > > {""}; > > static const char *rbac_igmp_group_update[] = > > - {"address", "chassis", "datapath", "ports"}; > > + {"address", "protocol", "chassis", "datapath", "ports"}; > > static const char *rbac_bfd_auth[] = > > {""}; > > static const char *rbac_bfd_update[] = > > diff --git a/ovn-sb.ovsschema b/ovn-sb.ovsschema > > index 72e230b75..240d65f69 100644 > > --- a/ovn-sb.ovsschema > > +++ b/ovn-sb.ovsschema > > @@ -1,7 +1,7 @@ > > { > > "name": "OVN_Southbound", > > - "version": "20.30.0", > > - "cksum": "2972392849 31172", > > + "version": "20.31.0", > > + "cksum": "2643271413 31220", > > "tables": { > > "SB_Global": { > > "columns": { > > @@ -480,6 +480,7 @@ > > "IGMP_Group": { > > "columns": { > > "address": {"type": "string"}, > > + "protocol": {"type": "string"}, > > "datapath": {"type": {"key": {"type": "uuid", > > "refTable": > "Datapath_Binding", > > "refType": "weak"}, > > diff --git a/ovn-sb.xml b/ovn-sb.xml > > index e393f92b3..56e26b674 100644 > > --- a/ovn-sb.xml > > +++ b/ovn-sb.xml > > @@ -4756,6 +4756,10 @@ tcp.flags = RST; > > Destination IPv4 address for the IGMP group. > > </column> > > > > + <column name="protocol"> > > + Group protocol version either IGMPv1,v2,v3 or MLDv1,v2. > > + </column> > > + > > <column name="datapath"> > > Datapath to which this IGMP group belongs. > > </column> > > diff --git a/tests/ovn.at b/tests/ovn.at > > index 8cc4c311c..180b9bfdd 100644 > > --- a/tests/ovn.at > > +++ b/tests/ovn.at > > @@ -22549,6 +22549,7 @@ send_igmp_v3_report hv2-vif1 hv2 000000000002 > $(ip_to_hex 10 0 0 2) f9f9 \ > > > > # Check that the IGMP Group is learned on both hv. > > wait_row_count IGMP_Group 2 address=239.0.1.68 > > +wait_row_count IGMP_Group 2 protocol=IGMPv3 > > check ovn-nbctl --wait=hv sync > > > > AT_CAPTURE_FILE([sbflows3]) > > @@ -22626,6 +22627,7 @@ send_igmp_v3_report hv1-vif1 hv1 \ > > > > # Check that the IGMP Group is learned. > > wait_row_count IGMP_Group 1 address=224.0.0.42 > > +wait_row_count IGMP_Group 1 protocol=IGMPv3 > > > > AS_BOX([IGMP traffic test 3]) > > # Send traffic and make sure it gets flooded to all ports. > > @@ -23287,6 +23289,7 @@ send_mld_v2_report hv2-vif1 hv2 \ > > > > # Check that the IP multicast group is learned on both hv. > > wait_row_count IGMP_Group 2 address='"ff0a:dead:beef::1"' > > +wait_row_count IGMP_Group 2 protocol=MLDv2 > > > > # This gives the ovn-controller nodes a chance to see the new > IGMP_Group. > > check ovn-nbctl --wait=hv sync > > Regards, > Dumitru > > Thanks, _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev