19
19
#define AVAILABLE_ACL_PRIORITIES_LIMITATION (32 )
20
20
#define EAPOL_ETHER_TYPE (0x888e )
21
21
#define MACSEC_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS (1000 )
22
- #define COUNTERS_MACSEC_ATTR_GROUP " COUNTERS_MACSEC_ATTR"
22
+ #define COUNTERS_MACSEC_SA_ATTR_GROUP " COUNTERS_MACSEC_SA_ATTR"
23
+ #define COUNTERS_MACSEC_SA_GROUP " COUNTERS_MACSEC_SA"
24
+ #define COUNTERS_MACSEC_FLOW_GROUP " COUNTERS_MACSEC_FLOW"
23
25
24
26
extern sai_object_id_t gSwitchId ;
25
27
extern sai_macsec_api_t *sai_macsec_api;
@@ -35,6 +37,62 @@ static const std::vector<std::string> macsec_sa_attrs =
35
37
{
36
38
" SAI_MACSEC_SA_ATTR_CURRENT_XPN" ,
37
39
};
40
+ static const std::vector<std::string> macsec_sa_ingress_stats =
41
+ {
42
+ " SAI_MACSEC_SA_STAT_OCTETS_ENCRYPTED" ,
43
+ " SAI_MACSEC_SA_STAT_OCTETS_PROTECTED" ,
44
+ " SAI_MACSEC_SA_STAT_IN_PKTS_UNCHECKED" ,
45
+ " SAI_MACSEC_SA_STAT_IN_PKTS_DELAYED" ,
46
+ " SAI_MACSEC_SA_STAT_IN_PKTS_LATE" ,
47
+ " SAI_MACSEC_SA_STAT_IN_PKTS_INVALID" ,
48
+ " SAI_MACSEC_SA_STAT_IN_PKTS_NOT_VALID" ,
49
+ " SAI_MACSEC_SA_STAT_IN_PKTS_NOT_USING_SA" ,
50
+ " SAI_MACSEC_SA_STAT_IN_PKTS_UNUSED_SA" ,
51
+ " SAI_MACSEC_SA_STAT_IN_PKTS_OK" ,
52
+ };
53
+ static const std::vector<std::string> macsec_sa_egress_stats =
54
+ {
55
+ " SAI_MACSEC_SA_STAT_OCTETS_ENCRYPTED" ,
56
+ " SAI_MACSEC_SA_STAT_OCTETS_PROTECTED" ,
57
+ " SAI_MACSEC_SA_STAT_OUT_PKTS_ENCRYPTED" ,
58
+ " SAI_MACSEC_SA_STAT_OUT_PKTS_PROTECTED" ,
59
+ };
60
+ static const std::vector<std::string> macsec_flow_ingress_stats =
61
+ {
62
+ " SAI_MACSEC_FLOW_STAT_OTHER_ERR" ,
63
+ " SAI_MACSEC_FLOW_STAT_OCTETS_UNCONTROLLED" ,
64
+ " SAI_MACSEC_FLOW_STAT_OCTETS_CONTROLLED" ,
65
+ " SAI_MACSEC_FLOW_STAT_UCAST_PKTS_UNCONTROLLED" ,
66
+ " SAI_MACSEC_FLOW_STAT_UCAST_PKTS_CONTROLLED" ,
67
+ " SAI_MACSEC_FLOW_STAT_MULTICAST_PKTS_UNCONTROLLED" ,
68
+ " SAI_MACSEC_FLOW_STAT_MULTICAST_PKTS_CONTROLLED" ,
69
+ " SAI_MACSEC_FLOW_STAT_BROADCAST_PKTS_UNCONTROLLED" ,
70
+ " SAI_MACSEC_FLOW_STAT_BROADCAST_PKTS_CONTROLLED" ,
71
+ " SAI_MACSEC_FLOW_STAT_CONTROL_PKTS" ,
72
+ " SAI_MACSEC_FLOW_STAT_PKTS_UNTAGGED" ,
73
+ " SAI_MACSEC_FLOW_STAT_IN_TAGGED_CONTROL_PKTS" ,
74
+ " SAI_MACSEC_FLOW_STAT_IN_PKTS_NO_TAG" ,
75
+ " SAI_MACSEC_FLOW_STAT_IN_PKTS_BAD_TAG" ,
76
+ " SAI_MACSEC_FLOW_STAT_IN_PKTS_NO_SCI" ,
77
+ " SAI_MACSEC_FLOW_STAT_IN_PKTS_UNKNOWN_SCI" ,
78
+ " SAI_MACSEC_FLOW_STAT_IN_PKTS_OVERRUN" ,
79
+ };
80
+ static const std::vector<std::string> macsec_flow_egress_stats =
81
+ {
82
+ " SAI_MACSEC_FLOW_STAT_OTHER_ERR" ,
83
+ " SAI_MACSEC_FLOW_STAT_OCTETS_UNCONTROLLED" ,
84
+ " SAI_MACSEC_FLOW_STAT_OCTETS_CONTROLLED" ,
85
+ " SAI_MACSEC_FLOW_STAT_OUT_OCTETS_COMMON" ,
86
+ " SAI_MACSEC_FLOW_STAT_UCAST_PKTS_UNCONTROLLED" ,
87
+ " SAI_MACSEC_FLOW_STAT_UCAST_PKTS_CONTROLLED" ,
88
+ " SAI_MACSEC_FLOW_STAT_MULTICAST_PKTS_UNCONTROLLED" ,
89
+ " SAI_MACSEC_FLOW_STAT_MULTICAST_PKTS_CONTROLLED" ,
90
+ " SAI_MACSEC_FLOW_STAT_BROADCAST_PKTS_UNCONTROLLED" ,
91
+ " SAI_MACSEC_FLOW_STAT_BROADCAST_PKTS_CONTROLLED" ,
92
+ " SAI_MACSEC_FLOW_STAT_CONTROL_PKTS" ,
93
+ " SAI_MACSEC_FLOW_STAT_PKTS_UNTAGGED" ,
94
+ " SAI_MACSEC_FLOW_STAT_OUT_PKTS_TOO_LONG" ,
95
+ };
38
96
39
97
template <typename T, typename ... Args>
40
98
static bool extract_variables (const std::string &input, char delimiter, T &output, Args &... args)
@@ -457,8 +515,16 @@ MACsecOrch::MACsecOrch(
457
515
m_state_macsec_ingress_sa(state_db, STATE_MACSEC_INGRESS_SA_TABLE_NAME),
458
516
m_counter_db(" COUNTERS_DB" , 0 ),
459
517
m_macsec_counters_map(&m_counter_db, COUNTERS_MACSEC_NAME_MAP),
460
- m_macsec_flex_counter_manager(
461
- COUNTERS_MACSEC_ATTR_GROUP,
518
+ m_macsec_sa_attr_manager(
519
+ COUNTERS_MACSEC_SA_ATTR_GROUP,
520
+ StatsMode::READ,
521
+ MACSEC_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS, true ),
522
+ m_macsec_sa_stat_manager(
523
+ COUNTERS_MACSEC_SA_GROUP,
524
+ StatsMode::READ,
525
+ MACSEC_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS, true ),
526
+ m_macsec_flow_stat_manager(
527
+ COUNTERS_MACSEC_FLOW_GROUP,
462
528
StatsMode::READ,
463
529
MACSEC_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS, true )
464
530
{
@@ -1095,7 +1161,7 @@ bool MACsecOrch::updateMACsecPort(MACsecPort &macsec_port, const TaskArgs &port_
1095
1161
}
1096
1162
else
1097
1163
{
1098
- SWSS_LOG_WARN (" Unknow Cipher Suite %s" , cipher_suite.c_str ());
1164
+ SWSS_LOG_WARN (" Unknown Cipher Suite %s" , cipher_suite.c_str ());
1099
1165
return false ;
1100
1166
}
1101
1167
}
@@ -1743,11 +1809,11 @@ task_process_status MACsecOrch::createMACsecSA(
1743
1809
fvVector.emplace_back (" state" , " ok" );
1744
1810
if (direction == SAI_MACSEC_DIRECTION_EGRESS)
1745
1811
{
1746
- m_state_macsec_egress_sa.set (swss::join (' |' , port_name, sci, an), fvVector);
1812
+ installCounter (CounterType::MACSEC_SA, port_sci_an, sc-> m_sa_ids [an], macsec_ m_state_macsec_egress_sa.set (swss::join (' |' , port_name, sci, an), fvVector);
1747
1813
}
1748
1814
else
1749
1815
{
1750
- m_state_macsec_ingress_sa.set (swss::join (' |' , port_name, sci, an), fvVector);
1816
+ installCounter (CounterType::MACSEC_SA, port_sci_an, sc-> m_sa_ids [an], macsec_ m_state_macsec_ingress_sa.set (swss::join (' |' , port_name, sci, an), fvVector);
1751
1817
}
1752
1818
1753
1819
SWSS_LOG_NOTICE (" MACsec SA %s is created." , port_sci_an.c_str ());
@@ -1781,7 +1847,8 @@ task_process_status MACsecOrch::deleteMACsecSA(
1781
1847
1782
1848
auto result = task_success;
1783
1849
1784
- uninstallCounter (port_sci_an, ctx.get_macsec_sc ()->m_sa_ids [an]);
1850
+ uninstallCounter (CounterType::MACSEC_SA_ATTR, port_sci_an, ctx.get_macsec_sc ()->m_sa_ids [an]);
1851
+ uninstallCounter (CounterType::MACSEC_SA, port_sci_an, ctx.get_macsec_sc ()->m_sa_ids [an]);
1785
1852
if (!deleteMACsecSA (ctx.get_macsec_sc ()->m_sa_ids [an]))
1786
1853
{
1787
1854
SWSS_LOG_WARN (" Cannot delete the MACsec SA %s." , port_sci_an.c_str ());
@@ -1922,12 +1989,51 @@ void MACsecOrch::installCounter(
1922
1989
{
1923
1990
counter_stats.emplace (stat);
1924
1991
}
1925
- m_macsec_flex_counter_manager.setCounterIdList (obj_id, counter_type, counter_stats);
1992
+ switch (counter_type)
1993
+ {
1994
+ case CounterType::MACSEC_SA_ATTR:
1995
+ m_macsec_sa_attr_manager.setCounterIdList (obj_id, counter_type, counter_stats);
1996
+ break ;
1997
+
1998
+ case CounterType::MACSEC_SA:
1999
+ m_macsec_sa_stat_manager.setCounterIdList (obj_id, counter_type, counter_stats);
2000
+ break ;
2001
+
2002
+ case CounterType::MACSEC_FLOW:
2003
+ m_macsec_flow_stat_manager.setCounterIdList (obj_id, counter_type, counter_stats);
2004
+ break ;
2005
+
2006
+ default :
2007
+ SWSS_LOG_ERROR (" Failed to install unknown counter type %u.\n " ,
2008
+ static_cast <uint32_t >(counter_type));
2009
+ break ;
2010
+ }
1926
2011
}
1927
2012
1928
- void MACsecOrch::uninstallCounter (const std::string &obj_name, sai_object_id_t obj_id)
2013
+ void MACsecOrch::uninstallCounter (
2014
+ CounterType counter_type,
2015
+ const std::string &obj_name,
2016
+ sai_object_id_t obj_id)
1929
2017
{
1930
- m_macsec_flex_counter_manager.clearCounterIdList (obj_id);
2018
+ switch (counter_type)
2019
+ {
2020
+ case CounterType::MACSEC_SA_ATTR:
2021
+ m_macsec_sa_attr_manager.clearCounterIdList (obj_id);
2022
+ break ;
2023
+
2024
+ case CounterType::MACSEC_SA:
2025
+ m_macsec_sa_stat_manager.clearCounterIdList (obj_id);
2026
+ break ;
2027
+
2028
+ case CounterType::MACSEC_FLOW:
2029
+ m_macsec_flow_stat_manager.clearCounterIdList (obj_id);
2030
+ break ;
2031
+
2032
+ default :
2033
+ SWSS_LOG_ERROR (" Failed to uninstall unknown counter type %u.\n " ,
2034
+ static_cast <uint32_t >(counter_type));
2035
+ break ;
2036
+ }
1931
2037
1932
2038
m_counter_db.hdel (COUNTERS_MACSEC_NAME_MAP, obj_name);
1933
2039
}
0 commit comments