Index: linux-4.19.118/include/uapi/linux/if_link.h
===================================================================
--- linux-4.19.118.orig/include/uapi/linux/if_link.h
+++ linux-4.19.118/include/uapi/linux/if_link.h
@@ -287,6 +287,11 @@ enum {
 	IFLA_BR_MCAST_IGMP_VERSION,
 	IFLA_BR_MCAST_MLD_VERSION,
 	IFLA_BR_FLOOD_CHECK,
+	IFLA_BR_QUIESCING,
+	IFLA_BR_QUIESCE_WINDOW,
+	IFLA_BR_QUIESCE_DETECT,
+	IFLA_BR_QUIESCE_HOLD,
+	IFLA_BR_QUIESCE_TIMES,
 	__IFLA_BR_MAX,
 };
 
@@ -339,6 +344,11 @@ enum {
 	IFLA_BRPORT_ISOLATED,
 	IFLA_BRPORT_BACKUP_PORT,
 	IFLA_BRPORT_FLOOD_CHECK,
+	IFLA_BRPORT_QUIESCING,
+	IFLA_BRPORT_QUIESCE_WINDOW,
+	IFLA_BRPORT_QUIESCE_DETECT,
+	IFLA_BRPORT_QUIESCE_HOLD,
+	IFLA_BRPORT_QUIESCE_TIMES,
 	__IFLA_BRPORT_MAX
 };
 #define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
Index: linux-4.19.118/net/bridge/br_netlink.c
===================================================================
--- linux-4.19.118.orig/net/bridge/br_netlink.c
+++ linux-4.19.118/net/bridge/br_netlink.c
@@ -155,6 +155,11 @@ static inline size_t br_port_info_size(v
 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
 		+ nla_total_size(sizeof(u8))	/* IFLA_BRPORT_MULTICAST_ROUTER */
 #endif
+		+ nla_total_size(1)	/* IFLA_BRPORT_QUIESCING */
+		+ nla_total_size(sizeof(unsigned long))	/* IFLA_BRPORT_QUIESE_WINDOW */
+		+ nla_total_size(sizeof(unsigned long))	/* IFLA_BRPORT_QUIESE_DETECT */
+		+ nla_total_size(sizeof(unsigned long))	/* IFLA_BRPORT_QUIESE_HOLD */
+		+ nla_total_size(sizeof(u16))	/* IFLA_BRPORT_QUIESE_TIMES */
 		+ nla_total_size(sizeof(u16))	/* IFLA_BRPORT_GROUP_FWD_MASK */
 		+ 0;
 }
@@ -220,7 +225,15 @@ static int br_port_fill_attrs(struct sk_
 	    nla_put_u16(skb, IFLA_BRPORT_GROUP_FWD_MASK, p->group_fwd_mask) ||
 	    nla_put_u8(skb, IFLA_BRPORT_NEIGH_SUPPRESS,
 		       !!(p->flags & BR_NEIGH_SUPPRESS)) ||
-	    nla_put_u8(skb, IFLA_BRPORT_ISOLATED, !!(p->flags & BR_ISOLATED)))
+	    nla_put_u8(skb, IFLA_BRPORT_ISOLATED, !!(p->flags & BR_ISOLATED)) ||
+	    nla_put_u64_64bit(skb, IFLA_BRPORT_QUIESCE_WINDOW, p->quiesce_window,
+			    IFLA_BRPORT_PAD) ||
+	    nla_put_u64_64bit(skb, IFLA_BRPORT_QUIESCE_DETECT, p->quiesce_detect,
+			    IFLA_BRPORT_PAD) ||
+	    nla_put_u64_64bit(skb, IFLA_BRPORT_QUIESCE_HOLD, p->quiesce_hold,
+			    IFLA_BRPORT_PAD) ||
+	    nla_put_u16(skb, IFLA_BRPORT_QUIESCE_TIMES, p->quiesce_times) ||
+	    nla_put_u8(skb, IFLA_BRPORT_QUIESCING, !!(p->flags & BR_QUIESCING)))
 		return -EMSGSIZE;
 
 	timerval = br_timer_value(&p->message_age_timer);
@@ -678,6 +691,11 @@ static const struct nla_policy br_port_p
 	[IFLA_BRPORT_NEIGH_SUPPRESS] = { .type = NLA_U8 },
 	[IFLA_BRPORT_ISOLATED]	= { .type = NLA_U8 },
 	[IFLA_BRPORT_BACKUP_PORT] = { .type = NLA_U32 },
+	[IFLA_BRPORT_QUIESCING] = { .type = NLA_U8 },
+	[IFLA_BRPORT_QUIESCE_WINDOW] = { .type = NLA_U64 },
+	[IFLA_BRPORT_QUIESCE_DETECT] = { .type = NLA_U64 },
+	[IFLA_BRPORT_QUIESCE_HOLD] = { .type = NLA_U64 },
+	[IFLA_BRPORT_QUIESCE_TIMES] = { .type = NLA_U16 },
 };
 
 /* Change the state of the port and notify spanning tree */
@@ -836,6 +854,22 @@ static int br_setport(struct net_bridge_
 	if (err)
 		return err;
 
+	err = br_set_port_flag(p, tb, IFLA_BRPORT_QUIESCING, BR_QUIESCING);
+	if (err)
+		return err;
+
+	if (tb[IFLA_BRPORT_QUIESCE_WINDOW])
+		p->quiesce_window = nla_get_msecs(tb[IFLA_BRPORT_QUIESCE_WINDOW]);
+
+	if (tb[IFLA_BRPORT_QUIESCE_DETECT])
+		p->quiesce_detect = nla_get_msecs(tb[IFLA_BRPORT_QUIESCE_DETECT]);
+
+	if (tb[IFLA_BRPORT_QUIESCE_HOLD])
+		p->quiesce_hold = nla_get_msecs(tb[IFLA_BRPORT_QUIESCE_HOLD]);
+
+	if (tb[IFLA_BRPORT_QUIESCE_TIMES])
+		p->quiesce_times = nla_get_u16(tb[IFLA_BRPORT_QUIESCE_TIMES]);
+
 	if (tb[IFLA_BRPORT_BACKUP_PORT]) {
 		struct net_device *backup_dev = NULL;
 		u32 backup_ifindex;
@@ -1043,6 +1077,11 @@ static const struct nla_policy br_policy
 	[IFLA_BR_MCAST_STATS_ENABLED] = { .type = NLA_U8 },
 	[IFLA_BR_MCAST_IGMP_VERSION] = { .type = NLA_U8 },
 	[IFLA_BR_MCAST_MLD_VERSION] = { .type = NLA_U8 },
+	[IFLA_BR_QUIESCING] = { .type = NLA_U8 },
+	[IFLA_BR_QUIESCE_WINDOW] = { .type = NLA_U64 },
+	[IFLA_BR_QUIESCE_DETECT] = { .type = NLA_U64 },
+	[IFLA_BR_QUIESCE_HOLD] = { .type = NLA_U64 },
+	[IFLA_BR_QUIESCE_TIMES] = { .type = NLA_U16 },
 };
 
 static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
@@ -1300,6 +1339,23 @@ static int br_changelink(struct net_devi
 		br->nf_call_arptables = val ? true : false;
 	}
 #endif
+	if (data[IFLA_BR_QUIESCING]) {
+		u8 val = nla_get_u8(data[IFLA_BR_QUIESCING]);
+
+		br->quiescing = val ? true : false;
+	}
+
+	if (data[IFLA_BR_QUIESCE_WINDOW])
+		br->quiesce_window = nla_get_msecs(data[IFLA_BR_QUIESCE_WINDOW]);
+
+	if (data[IFLA_BR_QUIESCE_DETECT])
+		br->quiesce_detect = nla_get_msecs(data[IFLA_BR_QUIESCE_DETECT]);
+
+	if (data[IFLA_BR_QUIESCE_HOLD])
+		br->quiesce_hold = nla_get_msecs(data[IFLA_BR_QUIESCE_HOLD]);
+
+	if (data[IFLA_BR_QUIESCE_TIMES])
+		br->quiesce_times = nla_get_u16(data[IFLA_BR_QUIESCE_TIMES]);
 
 	return 0;
 }
@@ -1379,6 +1435,12 @@ static size_t br_get_size(const struct n
 	       nla_total_size(sizeof(u8)) +     /* IFLA_BR_NF_CALL_IP6TABLES */
 	       nla_total_size(sizeof(u8)) +     /* IFLA_BR_NF_CALL_ARPTABLES */
 #endif
+	       nla_total_size(sizeof(u8)) +	/* IFLA_BR_QUIESCING */
+	       nla_total_size(sizeof(u64)) +	/* IFLA_BR_QUIESCE_WINDOW */
+	       nla_total_size(sizeof(u64)) +	/* IFLA_BR_QUIESCE_DETECT */
+	       nla_total_size(sizeof(u64)) +	/* IFLA_BR_QUIESCE_HOLD */
+	       nla_total_size(sizeof(u16)) +	/* IFLA_BR_QUIESCE_TIMES */
+
 	       0;
 }
 
@@ -1494,6 +1556,20 @@ static int br_fill_info(struct sk_buff *
 		       br->nf_call_arptables ? 1 : 0))
 		return -EMSGSIZE;
 #endif
+	if (nla_put_u8(skb, IFLA_BR_QUIESCING, br->quiescing ?  1 : 0))
+		return -EMSGSIZE;
+	clockval = jiffies_to_clock_t(br->quiesce_window);
+	if (nla_put_u64_64bit(skb, IFLA_BR_QUIESCE_WINDOW, clockval,
+			      IFLA_BR_PAD))
+		return -EMSGSIZE;
+	clockval = jiffies_to_clock_t(br->quiesce_detect);
+	if (nla_put_u64_64bit(skb, IFLA_BR_QUIESCE_DETECT, clockval,
+			      IFLA_BR_PAD))
+		return -EMSGSIZE;
+	clockval = jiffies_to_clock_t(br->quiesce_hold);
+	if (nla_put_u64_64bit(skb, IFLA_BR_QUIESCE_HOLD, clockval,
+			      IFLA_BR_PAD))
+		return -EMSGSIZE;
 
 	return 0;
 }
Index: linux-4.19.118/net/core/rtnetlink.c
===================================================================
--- linux-4.19.118.orig/net/core/rtnetlink.c
+++ linux-4.19.118/net/core/rtnetlink.c
@@ -59,8 +59,8 @@
 #include <net/rtnetlink.h>
 #include <net/net_namespace.h>
 
-#define RTNL_MAX_TYPE		48
-#define RTNL_SLAVE_MAX_TYPE	36
+#define RTNL_MAX_TYPE		64
+#define RTNL_SLAVE_MAX_TYPE	48
 
 struct rtnl_link {
 	rtnl_doit_func		doit;
