in src/analysis/nfs_parser.cpp [242:280]
void NFSParser::analyze_nfs_procedure(FilteredDataQueue::Ptr&& call,
FilteredDataQueue::Ptr&& reply,
Session* session)
{
using namespace NST::protocols::rpc;
auto header = reinterpret_cast<const CallHeader*>(call->data);
const uint32_t major_version{header->vers()};
const uint32_t procedure{header->proc()};
try
{
const Session* s{session->get_session()};
switch(major_version)
{
case NFS_V4:
analyze_nfsv4_procedure(procedure, std::move(call), std::move(reply), s, this->analyzers);
break;
case NFS_V3:
analyze_nfsv3_procedure(procedure, std::move(call), std::move(reply), s, this->analyzers);
break;
}
}
catch(XDRDecoderError& e)
{
const char* procedure_name{"Unknown procedure"};
switch(major_version)
{
case NFS_V4:
procedure_name = print_nfs4_procedures(static_cast<ProcEnumNFS4::NFSProcedure>(procedure));
break;
case NFS_V3:
procedure_name = print_nfs3_procedures(static_cast<ProcEnumNFS3::NFSProcedure>(procedure));
break;
}
LOG("Some data of NFS operation %s %s(%u) was not parsed: %s", session->str().c_str(), procedure_name, procedure, e.what());
}
}