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)
@@ -479,8 +537,16 @@ MACsecOrch::MACsecOrch(
479
537
m_state_macsec_ingress_sa(state_db, STATE_MACSEC_INGRESS_SA_TABLE_NAME),
480
538
m_counter_db(" COUNTERS_DB" , 0 ),
481
539
m_macsec_counters_map(&m_counter_db, COUNTERS_MACSEC_NAME_MAP),
482
- m_macsec_flex_counter_manager(
483
- COUNTERS_MACSEC_ATTR_GROUP,
540
+ m_macsec_sa_attr_manager(
541
+ COUNTERS_MACSEC_SA_ATTR_GROUP,
542
+ StatsMode::READ,
543
+ MACSEC_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS, true ),
544
+ m_macsec_sa_stat_manager(
545
+ COUNTERS_MACSEC_SA_GROUP,
546
+ StatsMode::READ,
547
+ MACSEC_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS, true ),
548
+ m_macsec_flow_stat_manager(
549
+ COUNTERS_MACSEC_FLOW_GROUP,
484
550
StatsMode::READ,
485
551
MACSEC_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS, true )
486
552
{
@@ -1139,7 +1205,7 @@ bool MACsecOrch::updateMACsecPort(MACsecPort &macsec_port, const TaskArgs &port_
1139
1205
}
1140
1206
else
1141
1207
{
1142
- SWSS_LOG_WARN (" Unknow Cipher Suite %s" , cipher_suite.c_str ());
1208
+ SWSS_LOG_WARN (" Unknown Cipher Suite %s" , cipher_suite.c_str ());
1143
1209
return false ;
1144
1210
}
1145
1211
}
@@ -1798,11 +1864,11 @@ task_process_status MACsecOrch::createMACsecSA(
1798
1864
fvVector.emplace_back (" state" , " ok" );
1799
1865
if (direction == SAI_MACSEC_DIRECTION_EGRESS)
1800
1866
{
1801
- m_state_macsec_egress_sa.set (swss::join (' |' , port_name, sci, an), fvVector);
1867
+ 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);
1802
1868
}
1803
1869
else
1804
1870
{
1805
- m_state_macsec_ingress_sa.set (swss::join (' |' , port_name, sci, an), fvVector);
1871
+ 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);
1806
1872
}
1807
1873
1808
1874
SWSS_LOG_NOTICE (" MACsec SA %s is created." , port_sci_an.c_str ());
@@ -1836,7 +1902,8 @@ task_process_status MACsecOrch::deleteMACsecSA(
1836
1902
1837
1903
auto result = task_success;
1838
1904
1839
- uninstallCounter (port_sci_an, ctx.get_macsec_sc ()->m_sa_ids [an]);
1905
+ uninstallCounter (CounterType::MACSEC_SA_ATTR, port_sci_an, ctx.get_macsec_sc ()->m_sa_ids [an]);
1906
+ uninstallCounter (CounterType::MACSEC_SA, port_sci_an, ctx.get_macsec_sc ()->m_sa_ids [an]);
1840
1907
if (!deleteMACsecSA (ctx.get_macsec_sc ()->m_sa_ids [an]))
1841
1908
{
1842
1909
SWSS_LOG_WARN (" Cannot delete the MACsec SA %s." , port_sci_an.c_str ());
@@ -1977,12 +2044,51 @@ void MACsecOrch::installCounter(
1977
2044
{
1978
2045
counter_stats.emplace (stat);
1979
2046
}
1980
- m_macsec_flex_counter_manager.setCounterIdList (obj_id, counter_type, counter_stats);
2047
+ switch (counter_type)
2048
+ {
2049
+ case CounterType::MACSEC_SA_ATTR:
2050
+ m_macsec_sa_attr_manager.setCounterIdList (obj_id, counter_type, counter_stats);
2051
+ break ;
2052
+
2053
+ case CounterType::MACSEC_SA:
2054
+ m_macsec_sa_stat_manager.setCounterIdList (obj_id, counter_type, counter_stats);
2055
+ break ;
2056
+
2057
+ case CounterType::MACSEC_FLOW:
2058
+ m_macsec_flow_stat_manager.setCounterIdList (obj_id, counter_type, counter_stats);
2059
+ break ;
2060
+
2061
+ default :
2062
+ SWSS_LOG_ERROR (" Failed to install unknown counter type %u.\n " ,
2063
+ static_cast <uint32_t >(counter_type));
2064
+ break ;
2065
+ }
1981
2066
}
1982
2067
1983
- void MACsecOrch::uninstallCounter (const std::string &obj_name, sai_object_id_t obj_id)
2068
+ void MACsecOrch::uninstallCounter (
2069
+ CounterType counter_type,
2070
+ const std::string &obj_name,
2071
+ sai_object_id_t obj_id)
1984
2072
{
1985
- m_macsec_flex_counter_manager.clearCounterIdList (obj_id);
2073
+ switch (counter_type)
2074
+ {
2075
+ case CounterType::MACSEC_SA_ATTR:
2076
+ m_macsec_sa_attr_manager.clearCounterIdList (obj_id);
2077
+ break ;
2078
+
2079
+ case CounterType::MACSEC_SA:
2080
+ m_macsec_sa_stat_manager.clearCounterIdList (obj_id);
2081
+ break ;
2082
+
2083
+ case CounterType::MACSEC_FLOW:
2084
+ m_macsec_flow_stat_manager.clearCounterIdList (obj_id);
2085
+ break ;
2086
+
2087
+ default :
2088
+ SWSS_LOG_ERROR (" Failed to uninstall unknown counter type %u.\n " ,
2089
+ static_cast <uint32_t >(counter_type));
2090
+ break ;
2091
+ }
1986
2092
1987
2093
m_counter_db.hdel (COUNTERS_MACSEC_NAME_MAP, obj_name);
1988
2094
}
0 commit comments