@@ -38,7 +38,8 @@ static struct sbrec_igmp_group *
igmp_group_create_(struct ovsdb_idl_txn *idl_txn,
const char *addr_str,
const struct sbrec_datapath_binding *datapath,
- const struct sbrec_chassis *chassis);
+ const struct sbrec_chassis *chassis,
+ bool igmp_group_has_chassis_name);
struct ovsdb_idl_index *
igmp_group_index_create(struct ovsdb_idl *idl)
@@ -86,7 +87,8 @@ struct sbrec_igmp_group *
igmp_group_create(struct ovsdb_idl_txn *idl_txn,
const struct in6_addr *address,
const struct sbrec_datapath_binding *datapath,
- const struct sbrec_chassis *chassis)
+ const struct sbrec_chassis *chassis,
+ bool igmp_group_has_chassis_name)
{
char addr_str[INET6_ADDRSTRLEN];
@@ -94,16 +96,18 @@ igmp_group_create(struct ovsdb_idl_txn *idl_txn,
return NULL;
}
- return igmp_group_create_(idl_txn, addr_str, datapath, chassis);
+ return igmp_group_create_(idl_txn, addr_str, datapath, chassis,
+ igmp_group_has_chassis_name);
}
struct sbrec_igmp_group *
igmp_mrouter_create(struct ovsdb_idl_txn *idl_txn,
const struct sbrec_datapath_binding *datapath,
- const struct sbrec_chassis *chassis)
+ const struct sbrec_chassis *chassis,
+ bool igmp_group_has_chassis_name)
{
return igmp_group_create_(idl_txn, OVN_IGMP_GROUP_MROUTERS, datapath,
- chassis);
+ chassis, igmp_group_has_chassis_name);
}
void
@@ -249,13 +253,17 @@ static struct sbrec_igmp_group *
igmp_group_create_(struct ovsdb_idl_txn *idl_txn,
const char *addr_str,
const struct sbrec_datapath_binding *datapath,
- const struct sbrec_chassis *chassis)
+ const struct sbrec_chassis *chassis,
+ bool igmp_group_has_chassis_name)
{
struct sbrec_igmp_group *g = sbrec_igmp_group_insert(idl_txn);
sbrec_igmp_group_set_address(g, addr_str);
sbrec_igmp_group_set_datapath(g, datapath);
sbrec_igmp_group_set_chassis(g, chassis);
+ if (igmp_group_has_chassis_name) {
+ sbrec_igmp_group_set_chassis_name(g, chassis->name);
+ }
return g;
}
@@ -39,11 +39,13 @@ struct sbrec_igmp_group *igmp_group_create(
struct ovsdb_idl_txn *idl_txn,
const struct in6_addr *address,
const struct sbrec_datapath_binding *datapath,
- const struct sbrec_chassis *chassis);
+ const struct sbrec_chassis *chassis,
+ bool igmp_group_has_chassis_name);
struct sbrec_igmp_group *igmp_mrouter_create(
struct ovsdb_idl_txn *idl_txn,
const struct sbrec_datapath_binding *datapath,
- const struct sbrec_chassis *chassis);
+ const struct sbrec_chassis *chassis,
+ bool igmp_group_has_chassis_name);
void igmp_group_update_ports(const struct sbrec_igmp_group *g,
struct ovsdb_idl_index *datapaths,
@@ -181,6 +181,7 @@ struct pinctrl {
bool fdb_can_timestamp;
bool dns_supports_ovn_owned;
bool mac_binding_has_chassis_name;
+ bool igmp_group_has_chassis_name;
};
static struct pinctrl pinctrl;
@@ -3600,6 +3601,13 @@ pinctrl_update(const struct ovsdb_idl *idl, const char *br_int_name)
notify_pinctrl_handler();
}
+ bool igmp_group_has_chassis_name =
+ sbrec_server_has_igmp_group_table_col_chassis_name(idl);
+ if (igmp_group_has_chassis_name != pinctrl.igmp_group_has_chassis_name) {
+ pinctrl.igmp_group_has_chassis_name = igmp_group_has_chassis_name;
+ notify_pinctrl_handler();
+ }
+
ovs_mutex_unlock(&pinctrl_mutex);
}
@@ -5417,8 +5425,9 @@ ip_mcast_sync(struct ovsdb_idl_txn *ovnsb_idl_txn,
sbrec_igmp = igmp_group_lookup(sbrec_igmp_groups, &mc_group->addr,
local_dp->datapath, chassis);
if (!sbrec_igmp) {
- sbrec_igmp = igmp_group_create(ovnsb_idl_txn, &mc_group->addr,
- local_dp->datapath, chassis);
+ sbrec_igmp = igmp_group_create(
+ ovnsb_idl_txn, &mc_group->addr, local_dp->datapath,
+ chassis, pinctrl.igmp_group_has_chassis_name);
}
igmp_group_update_ports(sbrec_igmp, sbrec_datapath_binding_by_key,
@@ -5433,7 +5442,8 @@ ip_mcast_sync(struct ovsdb_idl_txn *ovnsb_idl_txn,
if (!sbrec_ip_mrouter) {
sbrec_ip_mrouter = igmp_mrouter_create(ovnsb_idl_txn,
local_dp->datapath,
- chassis);
+ chassis,
+ pinctrl.igmp_group_has_chassis_name);
}
igmp_mrouter_update_ports(sbrec_ip_mrouter,
sbrec_datapath_binding_by_key,
@@ -118,7 +118,7 @@ static const char *rbac_svc_monitor_auth[] =
static const char *rbac_svc_monitor_auth_update[] =
{"status"};
static const char *rbac_igmp_group_auth[] =
- {""};
+ {"chassis_name"};
static const char *rbac_igmp_group_update[] =
{"address", "chassis", "datapath", "ports"};
static const char *rbac_bfd_auth[] =
@@ -1,7 +1,7 @@
{
"name": "OVN_Southbound",
- "version": "20.32.0",
- "cksum": "482767101 31276",
+ "version": "20.33.0",
+ "cksum": "3042447672 31328",
"tables": {
"SB_Global": {
"columns": {
@@ -494,7 +494,8 @@
"ports": {"type": {"key": {"type": "uuid",
"refTable": "Port_Binding",
"refType": "weak"},
- "min": 0, "max": "unlimited"}}},
+ "min": 0, "max": "unlimited"}},
+ "chassis_name": {"type": "string"}},
"indexes": [["address", "datapath", "chassis"]],
"isRoot": true},
"Service_Monitor": {
@@ -4770,6 +4770,11 @@ tcp.flags = RST;
<column name="ports">
The destination port bindings for this IGMP group.
</column>
+
+ <column name="chassis_name">
+ The chassis that inserted this record. This column is used for RBAC
+ purposes only.
+ </column>
</table>
<table name="Service_Monitor">