@@ -164,6 +164,7 @@ SwitchOrch::SwitchOrch(DBConnector *db, vector<TableConnector>& connectors, Tabl
164164 initSensorsTable ();
165165 querySwitchTpidCapability ();
166166 querySwitchPortEgressSampleCapability ();
167+ querySwitchPortMirrorCapability ();
167168 querySwitchHashDefaults ();
168169 setSwitchIcmpOffloadCapability ();
169170
@@ -1859,6 +1860,63 @@ void SwitchOrch::querySwitchPortEgressSampleCapability()
18591860 set_switch_capability (fvVector);
18601861}
18611862
1863+ void SwitchOrch::querySwitchPortMirrorCapability ()
1864+ {
1865+ vector<FieldValueTuple> fvVector;
1866+ sai_status_t status = SAI_STATUS_SUCCESS;
1867+ sai_attr_capability_t capability;
1868+
1869+ // Check if SAI is capable of handling Port ingress mirror session
1870+ status = sai_query_attribute_capability (gSwitchId , SAI_OBJECT_TYPE_PORT,
1871+ SAI_PORT_ATTR_INGRESS_MIRROR_SESSION, &capability);
1872+ if (status != SAI_STATUS_SUCCESS)
1873+ {
1874+ SWSS_LOG_WARN (" Could not query port ingress mirror capability %d" , status);
1875+ fvVector.emplace_back (SWITCH_CAPABILITY_TABLE_PORT_INGRESS_MIRROR_CAPABLE, " false" );
1876+ m_portIngressMirrorSupported = false ;
1877+ }
1878+ else
1879+ {
1880+ if (capability.set_implemented )
1881+ {
1882+ fvVector.emplace_back (SWITCH_CAPABILITY_TABLE_PORT_INGRESS_MIRROR_CAPABLE, " true" );
1883+ m_portIngressMirrorSupported = true ;
1884+ }
1885+ else
1886+ {
1887+ fvVector.emplace_back (SWITCH_CAPABILITY_TABLE_PORT_INGRESS_MIRROR_CAPABLE, " false" );
1888+ m_portIngressMirrorSupported = false ;
1889+ }
1890+ SWSS_LOG_NOTICE (" port ingress mirror capability %d" , capability.set_implemented );
1891+ }
1892+
1893+ // Check if SAI is capable of handling Port egress mirror session
1894+ status = sai_query_attribute_capability (gSwitchId , SAI_OBJECT_TYPE_PORT,
1895+ SAI_PORT_ATTR_EGRESS_MIRROR_SESSION, &capability);
1896+ if (status != SAI_STATUS_SUCCESS)
1897+ {
1898+ SWSS_LOG_WARN (" Could not query port egress mirror capability %d" , status);
1899+ fvVector.emplace_back (SWITCH_CAPABILITY_TABLE_PORT_EGRESS_MIRROR_CAPABLE, " false" );
1900+ m_portEgressMirrorSupported = false ;
1901+ }
1902+ else
1903+ {
1904+ if (capability.set_implemented )
1905+ {
1906+ fvVector.emplace_back (SWITCH_CAPABILITY_TABLE_PORT_EGRESS_MIRROR_CAPABLE, " true" );
1907+ m_portEgressMirrorSupported = true ;
1908+ }
1909+ else
1910+ {
1911+ fvVector.emplace_back (SWITCH_CAPABILITY_TABLE_PORT_EGRESS_MIRROR_CAPABLE, " false" );
1912+ m_portEgressMirrorSupported = false ;
1913+ }
1914+ SWSS_LOG_NOTICE (" port egress mirror capability %d" , capability.set_implemented );
1915+ }
1916+
1917+ set_switch_capability (fvVector);
1918+ }
1919+
18621920void SwitchOrch::querySwitchTpidCapability ()
18631921{
18641922 SWSS_LOG_ENTER ();
0 commit comments