summaryrefslogtreecommitdiff
path: root/net/bridge/br_cfm_netlink.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/bridge/br_cfm_netlink.c')
-rw-r--r--net/bridge/br_cfm_netlink.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/net/bridge/br_cfm_netlink.c b/net/bridge/br_cfm_netlink.c
index c8b5ff0825a3..5c4c369f8536 100644
--- a/net/bridge/br_cfm_netlink.c
+++ b/net/bridge/br_cfm_netlink.c
@@ -613,7 +613,9 @@ nla_info_failure:
return -EMSGSIZE;
}
-int br_cfm_status_fill_info(struct sk_buff *skb, struct net_bridge *br)
+int br_cfm_status_fill_info(struct sk_buff *skb,
+ struct net_bridge *br,
+ bool getlink)
{
struct br_cfm_peer_mep *peer_mep;
struct br_cfm_mep *mep;
@@ -643,10 +645,13 @@ int br_cfm_status_fill_info(struct sk_buff *skb, struct net_bridge *br)
mep->status.rx_level_low_seen))
goto nla_put_failure;
- /* Clear all 'seen' indications */
- mep->status.opcode_unexp_seen = false;
- mep->status.version_unexp_seen = false;
- mep->status.rx_level_low_seen = false;
+ /* Only clear if this is a GETLINK */
+ if (getlink) {
+ /* Clear all 'seen' indications */
+ mep->status.opcode_unexp_seen = false;
+ mep->status.version_unexp_seen = false;
+ mep->status.rx_level_low_seen = false;
+ }
nla_nest_end(skb, tb);
@@ -700,10 +705,12 @@ int br_cfm_status_fill_info(struct sk_buff *skb, struct net_bridge *br)
peer_mep->cc_status.seq_unexp_seen))
goto nla_put_failure;
- /* Clear all 'seen' indications */
- peer_mep->cc_status.seen = false;
- peer_mep->cc_status.tlv_seen = false;
- peer_mep->cc_status.seq_unexp_seen = false;
+ if (getlink) { /* Only clear if this is a GETLINK */
+ /* Clear all 'seen' indications */
+ peer_mep->cc_status.seen = false;
+ peer_mep->cc_status.tlv_seen = false;
+ peer_mep->cc_status.seq_unexp_seen = false;
+ }
nla_nest_end(skb, tb);
}