1
0
mirror of https://github.com/wfjm/w11.git synced 2026-03-06 03:29:14 +00:00

Rw11CntlDEUNA: add EtherType filter

This commit is contained in:
wfjm
2023-02-21 11:07:48 +01:00
parent 61b3d9d809
commit bb61927fb1
4 changed files with 94 additions and 13 deletions

View File

@@ -1,9 +1,10 @@
// $Id: Rw11CntlDEUNA.cpp 1376 2023-02-20 15:05:03Z mueller $
// $Id: Rw11CntlDEUNA.cpp 1377 2023-02-21 10:05:30Z mueller $
// SPDX-License-Identifier: GPL-3.0-or-later
// Copyright 2014-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
//
// Revision History:
// Date Rev Version Comment
// 2023-02-21 1377 0.6 add EtherType filter
// 2023-02-20 1376 0.5.11 log transitions into and out of kStateRxPoll
// 2019-06-15 1164 0.5.10 adapt to new RtimerFd API
// 2019-04-19 1133 0.5.9 use ExecWibr()
@@ -220,6 +221,10 @@ Rw11CntlDEUNA::Rw11CntlDEUNA()
fRxRingSize(0),
fRxRingELen(0),
fMacDefault(RethTools::String2Mac("08:00:2b:00:00:00")),
fMacList{},
fMcastCnt(0),
fEtfEnable(false),
fEtfTrace(false),
fPr0Last(0),
fPr1Pcto(false),
fPr1Delua(false),
@@ -246,7 +251,20 @@ Rw11CntlDEUNA::Rw11CntlDEUNA()
fRxPollTimer("Rw11CntlDEUNA::fRxPollTimer."),
fRxBufQueue(),
fRxBufCurr(),
fRxBufOffset(0)
fRxBufOffset(0),
fCtrTimeCleared(),
fCtrRxFra(0),
fCtrRxFraMcast(0),
fCtrRxByt(0),
fCtrRxBytMcast(0),
fCtrRxFraLoInt(0),
fCtrRxFraLoBuf(0),
fCtrTxFra(0),
fCtrTxFraMcast(0),
fCtrTxByt(0),
fCtrTxBytMcast(0),
fCtrTxFraAbort(0),
fCtrFraLoop(0)
{
// must be here because Units have a back-ptr (not available at Rw11CntlBase)
fspUnit[0].reset(new Rw11UnitDEUNA(this, 0)); // single unit controller
@@ -292,8 +310,9 @@ Rw11CntlDEUNA::Rw11CntlDEUNA()
fStats.Define(kStatNRxFraFProm , "NRxFraFProm" , "in frames promiscous");
fStats.Define(kStatNRxFraFUDrop, "NRxFraFUDrop", "in frames drop miss mac");
fStats.Define(kStatNRxFraFMDrop, "NRxFraFMDrop", "in frames drop miss mcast");
fStats.Define(kStatNRxFraQLDrop, "NRxFraQLDrop", "in frames drop drop");
fStats.Define(kStatNRxFraQLDrop, "NRxFraQLDrop", "in frames drop queue lim");
fStats.Define(kStatNRxFraNRDrop, "NRxFraNRDrop", "in frames drop not running");
fStats.Define(kStatNRxFraETDrop, "NRxFraETDrop", "in frames drop etf miss");
fStats.Define(kStatNRxFra , "NRxFra" , "rcvd frames");
fStats.Define(kStatNRxFraMcast , "NRxFraMcast" , "rcvd bcast+mcast frames");
fStats.Define(kStatNRxFraBcast , "NRxFraBcast" , "rcvd bcast frames");
@@ -548,11 +567,25 @@ bool Rw11CntlDEUNA::RcvCallback(RethBuf::pbuf_t& pbuf)
}
if (fTraceLevel>1) {
RlogMsg lmsg(LogFile());
lmsg << "-I " << Name() << ": fdrop " << pbuf->FrameInfo() << endl;
lmsg << "-I " << Name() << ": fdr " << pbuf->FrameInfo() << endl;
}
return true;
}
} else { // matched
if (EtfEnable()) { // EtherType filer enabled ?
uint16_t etype = pbuf->Type();
bool etfok = false;
etfok |= etype == 0x0800; // EtherType APV4
etfok |= etype == 0x0806; // EtherType ARP
if (!etfok) { // drop by EtherType
fStats.Inc(kStatNRxFraETDrop);
if (fTraceLevel>1 && EtfTrace()) {
RlogMsg lmsg(LogFile());
lmsg << "-I " << Name() << ": edr " << pbuf->FrameInfo() << endl;
}
return true;
}
}
if (matchdst == 0) {
fStats.Inc(kStatNRxFraFDst);
} else if (matchdst == 1) {
@@ -566,7 +599,7 @@ bool Rw11CntlDEUNA::RcvCallback(RethBuf::pbuf_t& pbuf)
fStats.Inc(kStatNRxFraQLDrop);
if (fTraceLevel>0) {
RlogMsg lmsg(LogFile());
lmsg << "-I " << Name() << ": qdrop " << pbuf->FrameInfo() << endl;
lmsg << "-I " << Name() << ": qdr " << pbuf->FrameInfo() << endl;
}
return true;
}
@@ -629,8 +662,10 @@ void Rw11CntlDEUNA::Dump(std::ostream& os, int ind, const char* text,
<< RosPrintf(fMacList[2+i],"x0",12) << " "
<< RethTools::Mac2String(fMacList[2+i]) << endl;
}
os << bl << " fEtfEnable: " << RosPrintf(fEtfEnable) << endl;
os << bl << " fEtfTrace: " << RosPrintf(fEtfTrace) << endl;
os << bl << " fPr0Last*: " << RosPrintf(fPr0Last,"o0", 6) << endl;
os << bl << " fPr0Last*: " << RosPrintf(fPr0Last,"o0", 6) << endl;
os << bl << " fPr1*: "
<< " Pcto=" << RosPrintf(fPr1Pcto)
<< " Delua=" << RosPrintf(fPr1Delua)

View File

@@ -1,9 +1,10 @@
// $Id: Rw11CntlDEUNA.hpp 1376 2023-02-20 15:05:03Z mueller $
// $Id: Rw11CntlDEUNA.hpp 1377 2023-02-21 10:05:30Z mueller $
// SPDX-License-Identifier: GPL-3.0-or-later
// Copyright 2014-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
// Copyright 2014-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
//
// Revision History:
// Date Rev Version Comment
// 2023-02-21 1377 0.6 add EtherType filter
// 2017-04-14 875 0.5 Initial version (minimal functions, 211bsd ready)
// 2014-06-09 561 0.1 First draft
// ---------------------------------------------------------------------------
@@ -44,10 +45,14 @@ namespace Retro {
void SetMacDefault(const std::string& mac);
void SetRxPollTime(const Rtime& time);
void SetRxQueLimit(size_t rxqlim);
void SetEtfEnable(bool etfena);
void SetEtfTrace(bool etftra);
std::string MacDefault() const;
const Rtime& RxPollTime() const;
size_t RxQueLimit() const;
bool EtfEnable() const;
bool EtfTrace() const;
bool Running() const;
@@ -242,6 +247,7 @@ namespace Retro {
kStatNRxFraFMDrop,
kStatNRxFraQLDrop,
kStatNRxFraNRDrop,
kStatNRxFraETDrop,
kStatNRxFra,
kStatNRxFraMcast,
kStatNRxFraBcast,
@@ -357,6 +363,8 @@ namespace Retro {
uint64_t fMacDefault; //!< default MAC
uint64_t fMacList[2+kDimMcast]; //!< MAC list:0=phys,1=bcast,2+=mcast
int fMcastCnt; //!< mcast count
bool fEtfEnable; //!< EtherType filter enable
bool fEtfTrace; //!< EtherType filter trave
uint16_t fPr0Last; //!< last pr0 value
bool fPr1Pcto; //!< pr1 pcto flag
bool fPr1Delua; //!< pr1 delua flag

View File

@@ -1,10 +1,11 @@
// $Id: Rw11CntlDEUNA.ipp 1186 2019-07-12 17:49:59Z mueller $
// $Id: Rw11CntlDEUNA.ipp 1377 2023-02-21 10:05:30Z mueller $
// SPDX-License-Identifier: GPL-3.0-or-later
// Copyright 2017- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
// Copyright 2017-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
//
// Revision History:
// Date Rev Version Comment
// 2017-02-25 856 1.0 Initial version
// 2023-02-21 1377 0.6 add EtherType filter
// 2017-02-25 856 0.5 Initial version
// ---------------------------------------------------------------------------
/*!
@@ -14,6 +15,22 @@
// all method definitions in namespace Retro
namespace Retro {
//--------------------------------------+-----------------------------------
//! FIXME_docs
inline void Rw11CntlDEUNA::SetEtfEnable(bool etfena)
{
fEtfEnable = etfena;
return;
}
//--------------------------------------+-----------------------------------
//! FIXME_docs
inline void Rw11CntlDEUNA::SetEtfTrace(bool etftra)
{
fEtfTrace = etftra;
return;
}
//--------------------------------------+-----------------------------------
//! FIXME_docs
inline const Rtime& Rw11CntlDEUNA::RxPollTime() const
@@ -28,6 +45,20 @@ inline size_t Rw11CntlDEUNA::RxQueLimit() const
return fRxQueLimit;
}
//--------------------------------------+-----------------------------------
//! FIXME_docs
inline bool Rw11CntlDEUNA::EtfEnable() const
{
return fEtfEnable;
}
//--------------------------------------+-----------------------------------
//! FIXME_docs
inline bool Rw11CntlDEUNA::EtfTrace() const
{
return fEtfTrace;
}
//--------------------------------------+-----------------------------------
//! FIXME_docs
inline bool Rw11CntlDEUNA::Running() const

View File

@@ -1,9 +1,10 @@
// $Id: RtclRw11CntlDEUNA.cpp 1186 2019-07-12 17:49:59Z mueller $
// $Id: RtclRw11CntlDEUNA.cpp 1377 2023-02-21 10:05:30Z mueller $
// SPDX-License-Identifier: GPL-3.0-or-later
// Copyright 2014-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
// Copyright 2014-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
//
// Revision History:
// Date Rev Version Comment
// 2023-02-21 1377 1.0.3 add EtherType filter
// 2019-02-23 1114 1.0.2 use std::bind instead of lambda
// 2018-12-15 1082 1.0.1 use lambda instead of boost::bind
// 2017-04-16 878 1.0 Initial version
@@ -44,6 +45,8 @@ RtclRw11CntlDEUNA::RtclRw11CntlDEUNA()
fGets.Add<string> ("dpa", bind(&Rw11CntlDEUNA::MacDefault, pobj));
fGets.Add<const Rtime&> ("rxpoll", bind(&Rw11CntlDEUNA::RxPollTime, pobj));
fGets.Add<size_t> ("rxqlim", bind(&Rw11CntlDEUNA::RxQueLimit, pobj));
fGets.Add<bool> ("etfena", bind(&Rw11CntlDEUNA::EtfEnable, pobj));
fGets.Add<bool> ("etftra", bind(&Rw11CntlDEUNA::EtfTrace, pobj));
fGets.Add<bool> ("run", bind(&Rw11CntlDEUNA::Running, pobj));
fSets.Add<const string&> ("type",
@@ -54,6 +57,10 @@ RtclRw11CntlDEUNA::RtclRw11CntlDEUNA()
bind(&Rw11CntlDEUNA::SetRxPollTime,pobj, _1));
fSets.Add<size_t> ("rxqlim",
bind(&Rw11CntlDEUNA::SetRxQueLimit,pobj, _1));
fSets.Add<bool> ("etfena",
bind(&Rw11CntlDEUNA::SetEtfEnable,pobj, _1));
fSets.Add<bool> ("etftra",
bind(&Rw11CntlDEUNA::SetEtfTrace,pobj, _1));
}
//------------------------------------------+-----------------------------------