Skip to content

Commit

Permalink
Merge branch 'master' into orch-stuck-when-remove-vlan-member
Browse files Browse the repository at this point in the history
  • Loading branch information
Yang-Yongzhi authored Sep 25, 2024
2 parents ffbe7b0 + 3c230d2 commit 611a78b
Show file tree
Hide file tree
Showing 8 changed files with 83 additions and 13 deletions.
7 changes: 7 additions & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,10 @@
# Chassis
/orchagent/fabricportsorch* @abdosi @judyjoseph
/tests/test_virtual_chassis.py @abdosi @judyjoseph

# Vnet Orch
/orchagent/vnet* @siqbal1986

# Acl Orch
/orchagent/acl* @siqbal1986

6 changes: 5 additions & 1 deletion cfgmgr/teammgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -396,11 +396,15 @@ bool TeamMgr::checkPortIffUp(const string &port)
if (fd == -1 || ioctl(fd, SIOCGIFFLAGS, &ifr) == -1)
{
SWSS_LOG_ERROR("Failed to get port %s flags", port.c_str());
if (fd != -1)
{
close(fd);
}
return false;
}

SWSS_LOG_INFO("Get port %s flags %i", port.c_str(), ifr.ifr_flags);

close(fd);
return ifr.ifr_flags & IFF_UP;
}

Expand Down
24 changes: 23 additions & 1 deletion orchagent/aclorch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ static acl_packet_action_lookup_t aclPacketActionLookup =
{
{ PACKET_ACTION_FORWARD, SAI_PACKET_ACTION_FORWARD },
{ PACKET_ACTION_DROP, SAI_PACKET_ACTION_DROP },
{ PACKET_ACTION_COPY, SAI_PACKET_ACTION_COPY },
};

static acl_dtel_flow_op_type_lookup_t aclDTelFlowOpTypeLookup =
Expand Down Expand Up @@ -2023,6 +2024,23 @@ bool AclRuleMirror::validate()
return true;
}

bool AclRuleMirror::createCounter()
{
SWSS_LOG_ENTER();

bool state = false;

m_pMirrorOrch->getSessionStatus(m_sessionName, state);

// If the mirror session is active, create the ACL counter
if(state)
{
return AclRule::createCounter();
}

return true;
}

bool AclRuleMirror::createRule()
{
SWSS_LOG_ENTER();
Expand Down Expand Up @@ -2152,7 +2170,11 @@ void AclRuleMirror::onUpdate(SubjectType type, void *cntx)
if (update->active)
{
SWSS_LOG_INFO("Activating mirroring ACL %s for session %s", m_id.c_str(), m_sessionName.c_str());
activate();
// During mirror session activation, the newly created counter needs to be registered to the FC.
if(activate() && hasCounter())
{
m_pAclOrch->registerFlexCounter(*this);
}
}
else
{
Expand Down
2 changes: 2 additions & 0 deletions orchagent/aclorch.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@

#define PACKET_ACTION_FORWARD "FORWARD"
#define PACKET_ACTION_DROP "DROP"
#define PACKET_ACTION_COPY "COPY"
#define PACKET_ACTION_REDIRECT "REDIRECT"
#define PACKET_ACTION_DO_NOT_NAT "DO_NOT_NAT"

Expand Down Expand Up @@ -343,6 +344,7 @@ class AclRuleMirror: public AclRule
AclRuleMirror(AclOrch *m_pAclOrch, MirrorOrch *m_pMirrorOrch, string rule, string table);
bool validateAddAction(string attr_name, string attr_value);
bool validate();
bool createCounter();
bool createRule();
bool removeRule();
void onUpdate(SubjectType, void *) override;
Expand Down
27 changes: 22 additions & 5 deletions orchagent/crmorch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@
#define CRM_EXCEEDED_MSG_MAX 10
#define CRM_ACL_RESOURCE_COUNT 256

using namespace std;
using namespace swss;

extern sai_object_id_t gSwitchId;
extern sai_switch_api_t *sai_switch_api;
extern sai_acl_api_t *sai_acl_api;
extern event_handle_t g_events_handle;

using namespace std;
using namespace swss;

extern string gMySwitchType;

const map<CrmResourceType, string> crmResTypeNameMap =
{
Expand Down Expand Up @@ -808,6 +808,12 @@ bool CrmOrch::getResAvailability(CrmResourceType type, CrmResourceEntry &res)

bool CrmOrch::getDashAclGroupResAvailability(CrmResourceType type, CrmResourceEntry &res)
{
if (gMySwitchType != "dpu")
{
res.resStatus = CrmResourceStatus::CRM_RES_NOT_SUPPORTED;
return false;
}

sai_object_type_t objType = crmResSaiObjAttrMap.at(type);

for (auto &cnt : res.countersMap)
Expand Down Expand Up @@ -872,6 +878,12 @@ void CrmOrch::getResAvailableCounters()
case CrmResourceType::CRM_SRV6_MY_SID_ENTRY:
case CrmResourceType::CRM_MPLS_NEXTHOP:
case CrmResourceType::CRM_SRV6_NEXTHOP:
case CrmResourceType::CRM_TWAMP_ENTRY:
{
getResAvailability(res.first, res.second);
break;
}

case CrmResourceType::CRM_DASH_VNET:
case CrmResourceType::CRM_DASH_ENI:
case CrmResourceType::CRM_DASH_ENI_ETHER_ADDRESS_MAP:
Expand All @@ -885,8 +897,13 @@ void CrmOrch::getResAvailableCounters()
case CrmResourceType::CRM_DASH_IPV6_OUTBOUND_CA_TO_PA:
case CrmResourceType::CRM_DASH_IPV4_ACL_GROUP:
case CrmResourceType::CRM_DASH_IPV6_ACL_GROUP:
case CrmResourceType::CRM_TWAMP_ENTRY:
{
if (gMySwitchType != "dpu")
{
res.second.resStatus = CrmResourceStatus::CRM_RES_NOT_SUPPORTED;
break;
}

getResAvailability(res.first, res.second);
break;
}
Expand Down
20 changes: 15 additions & 5 deletions orchagent/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,11 @@ uint32_t gCfgSystemPorts = 0;
string gMyHostName = "";
string gMyAsicName = "";
bool gTraditionalFlexCounter = false;
uint32_t create_switch_timeout = 0;

void usage()
{
cout << "usage: orchagent [-h] [-r record_type] [-d record_location] [-f swss_rec_filename] [-j sairedis_rec_filename] [-b batch_size] [-m MAC] [-i INST_ID] [-s] [-z mode] [-k bulk_size] [-q zmq_server_address] [-c mode]" << endl;
cout << "usage: orchagent [-h] [-r record_type] [-d record_location] [-f swss_rec_filename] [-j sairedis_rec_filename] [-b batch_size] [-m MAC] [-i INST_ID] [-s] [-z mode] [-k bulk_size] [-q zmq_server_address] [-c mode] [-t create_switch_timeout]" << endl;
cout << " -h: display this message" << endl;
cout << " -r record_type: record orchagent logs with type (default 3)" << endl;
cout << " Bit 0: sairedis.rec, Bit 1: swss.rec, Bit 2: responsepublisher.rec. For example:" << endl;
Expand All @@ -92,6 +93,7 @@ void usage()
cout << " -k max bulk size in bulk mode (default 1000)" << endl;
cout << " -q zmq_server_address: ZMQ server address (default disable ZMQ)" << endl;
cout << " -c counter mode (traditional|asic_db), default: asic_db" << endl;
cout << " -t Override create switch timeout, in sec" << endl;
}

void sighup_handler(int signo)
Expand Down Expand Up @@ -346,7 +348,7 @@ int main(int argc, char **argv)
string responsepublisher_rec_filename = Recorder::RESPPUB_FNAME;
int record_type = 3; // Only swss and sairedis recordings enabled by default.

while ((opt = getopt(argc, argv, "b:m:r:f:j:d:i:hsz:k:q:c:")) != -1)
while ((opt = getopt(argc, argv, "b:m:r:f:j:d:i:hsz:k:q:c:t:")) != -1)
{
switch (opt)
{
Expand Down Expand Up @@ -437,6 +439,9 @@ int main(int argc, char **argv)
enable_zmq = true;
}
break;
case 't':
create_switch_timeout = atoi(optarg);
break;
default: /* '?' */
exit(EXIT_FAILURE);
}
Expand Down Expand Up @@ -629,15 +634,20 @@ int main(int argc, char **argv)
delay_factor = 2;
}

if (gMySwitchType == "voq" || gMySwitchType == "fabric" || gMySwitchType == "chassis-packet" || gMySwitchType == "dpu" || asan_enabled)
if (gMySwitchType == "voq" || gMySwitchType == "fabric" || gMySwitchType == "chassis-packet" || gMySwitchType == "dpu" || asan_enabled || create_switch_timeout)
{
/* We set this long timeout in order for orchagent to wait enough time for
* response from syncd. It is needed since switch create takes more time
* than default time to create switch if there are lots of front panel ports
* and systems ports to initialize
*/

if (gMySwitchType == "voq" || gMySwitchType == "chassis-packet" || gMySwitchType == "dpu")
if (create_switch_timeout)
{
/* Convert timeout to milliseconds from seconds */
attr.value.u64 = (create_switch_timeout * 1000);
}
else if (gMySwitchType == "voq" || gMySwitchType == "chassis-packet" || gMySwitchType == "dpu")
{
attr.value.u64 = (5 * SAI_REDIS_DEFAULT_SYNC_OPERATION_RESPONSE_TIMEOUT);
}
Expand Down Expand Up @@ -672,7 +682,7 @@ int main(int argc, char **argv)
}
SWSS_LOG_NOTICE("Create a switch, id:%" PRIu64, gSwitchId);

if (gMySwitchType == "voq" || gMySwitchType == "fabric" || gMySwitchType == "chassis-packet" || gMySwitchType == "dpu")
if (gMySwitchType == "voq" || gMySwitchType == "fabric" || gMySwitchType == "chassis-packet" || gMySwitchType == "dpu" || create_switch_timeout)
{
/* Set syncd response timeout back to the default value */
attr.id = SAI_REDIS_SWITCH_ATTR_SYNC_OPERATION_RESPONSE_TIMEOUT;
Expand Down
7 changes: 7 additions & 0 deletions tests/mock_tests/aclorch_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -889,6 +889,13 @@ namespace aclorch_test
return false;
}
}
else if (attr_value == PACKET_ACTION_COPY)
{
if (it->second.getSaiAttr().value.aclaction.parameter.s32 != SAI_PACKET_ACTION_COPY)
{
return false;
}
}
else
{
// unknown attr_value
Expand Down
3 changes: 2 additions & 1 deletion tests/test_zmq.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,9 @@ class TestZmqDash(object):
@pytest.fixture(scope="class")
def enable_orchagent_zmq(self, dvs):
# change orchagent to use ZMQ
# change orchagent to use custom create_switch_timeout
dvs.runcmd("cp /usr/bin/orchagent.sh /usr/bin/orchagent.sh_zmq_ut_backup")
dvs.runcmd("sed -i.bak 's/\/usr\/bin\/orchagent /\/usr\/bin\/orchagent -q tcp:\/\/127.0.0.1:8100 /g' /usr/bin/orchagent.sh")
dvs.runcmd("sed -i.bak 's/\/usr\/bin\/orchagent /\/usr\/bin\/orchagent -q tcp:\/\/127.0.0.1:8100 -t 60 /g' /usr/bin/orchagent.sh")
dvs.stop_swss()
dvs.start_swss()

Expand Down

0 comments on commit 611a78b

Please sign in to comment.