Skip to content

Commit 33a7b18

Browse files
committed
[status] Add sticky values, upstream, downstream options for onu
1 parent 9ac8431 commit 33a7b18

File tree

4 files changed

+68
-13
lines changed

4 files changed

+68
-13
lines changed

src/CommandLineUtilities/ProgramStatus.cxx

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -245,17 +245,23 @@ class ProgramStatus : public Program
245245
if (mOptions.onu) {
246246
Cru::OnuStatus onuStatus = cruBar2->reportOnuStatus(mOptions.monitoring);
247247

248+
std::string onuUpstreamStatus = Cru::LinkStatusToString(onuStatus.stickyStatus.upstreamStatus);
249+
std::string onuDownstreamStatus = Cru::LinkStatusToString(onuStatus.stickyStatus.downstreamStatus);
250+
uint32_t onuStickyValue = onuStatus.stickyStatus.stickyValue;
251+
uint32_t onuStickyValuePrev = onuStatus.stickyStatus.stickyValuePrev;
252+
253+
// TODO: remove when monitoring is updated
248254
std::string onuStickyStatus;
249255
int onuStickyStatusInt = 0;
250256

251-
if (onuStatus.stickyBit == Cru::LinkStatus::Up) {
257+
if (onuStatus.stickyStatus.monStatus == Cru::LinkStatus::Up) {
252258
onuStickyStatus = "UP";
253259
onuStickyStatusInt = 1;
254-
} else if (onuStatus.stickyBit == Cru::LinkStatus::UpWasDown) {
260+
} else if (onuStatus.stickyStatus.monStatus == Cru::LinkStatus::UpWasDown) {
255261
onuStickyStatus = "UP (was DOWN)";
256262
// force status = 1 (vs = 2) when UP(was DOWN) for monitoring
257263
onuStickyStatusInt = 1;
258-
} else if (onuStatus.stickyBit == Cru::LinkStatus::Down) {
264+
} else if (onuStatus.stickyStatus.monStatus == Cru::LinkStatus::Down) {
259265
onuStickyStatus = "DOWN";
260266
onuStickyStatusInt = 0;
261267
}
@@ -282,7 +288,10 @@ class ProgramStatus : public Program
282288
.addTag(tags::Key::ID, card.sequenceId)
283289
.addTag(tags::Key::Type, tags::Value::CRU));
284290
} else if (mOptions.jsonOut) {
285-
root.put("ONU status", onuStickyStatus);
291+
root.put("ONU downstream status", onuDownstreamStatus);
292+
root.put("ONU upstream status", onuUpstreamStatus);
293+
root.put("ONU sticky value", Utilities::toHexString(onuStickyValue));
294+
root.put("ONU sticky value (was)", Utilities::toHexString(onuStickyValuePrev));
286295
root.put("ONU address", onuStatus.onuAddress);
287296
root.put("ONU RX40 locked", onuStatus.rx40Locked);
288297
root.put("ONU phase good", onuStatus.phaseGood);
@@ -297,7 +306,10 @@ class ProgramStatus : public Program
297306
root.put("PON RX power (dBm)", onuStatus.ponRxPower);
298307
} else {
299308
std::cout << "=============================" << std::endl;
300-
std::cout << "ONU status: \t\t" << onuStickyStatus << std::endl;
309+
std::cout << "ONU downstream status: \t" << onuDownstreamStatus << std::endl;
310+
std::cout << "ONU upstream status: \t" << onuUpstreamStatus << std::endl;
311+
std::cout << "ONU sticky value: \t0x" << std::hex << onuStickyValue << std::endl;
312+
std::cout << "ONU sticky value (was): 0x" << std::hex << onuStickyValuePrev << std::endl;
301313
std::cout << "ONU address: \t\t" << onuStatus.onuAddress << std::endl;
302314
std::cout << "-----------------------------" << std::endl;
303315
std::cout << "ONU RX40 locked: \t" << std::boolalpha << onuStatus.rx40Locked << std::endl;

src/Cru/Common.h

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,20 @@ enum LinkStatus {
3434
UpWasDown
3535
};
3636

37+
constexpr const char* LinkStatusToString(LinkStatus status)
38+
{
39+
switch (status) {
40+
case LinkStatus::Down:
41+
return "DOWN";
42+
case LinkStatus::Up:
43+
return "UP";
44+
case LinkStatus::UpWasDown:
45+
return "UP (was DOWN)";
46+
default:
47+
throw std::invalid_argument("Invalid LinkStatus provided for string conversion");
48+
}
49+
}
50+
3751
struct Link {
3852
int dwrapper = -1;
3953
int wrapper = -1;
@@ -103,6 +117,14 @@ struct ReportInfo {
103117
uint16_t timeFrameLength;
104118
};
105119

120+
struct OnuStickyStatus {
121+
LinkStatus monStatus; // TODO: Remove after monitoring is updated
122+
LinkStatus upstreamStatus;
123+
LinkStatus downstreamStatus;
124+
uint32_t stickyValue;
125+
uint32_t stickyValuePrev;
126+
};
127+
106128
struct OnuStatus {
107129
uint32_t onuAddress;
108130
bool rx40Locked;
@@ -113,7 +135,10 @@ struct OnuStatus {
113135
bool mgtRxReady;
114136
bool mgtTxPllLocked;
115137
bool mgtRxPllLocked;
116-
LinkStatus stickyBit;
138+
/* NEW */
139+
//LinkStatus stickyBit;
140+
OnuStickyStatus stickyStatus;
141+
/* NEW */
117142
uint32_t ponQuality;
118143
int ponQualityStatus;
119144
double ponRxPower;

src/Cru/Ttc.cxx

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ namespace roc
3131
{
3232

3333
using LinkStatus = Cru::LinkStatus;
34+
using OnuStickyStatus = Cru::OnuStickyStatus;
3435
using OnuStatus = Cru::OnuStatus;
3536
using FecStatus = Cru::FecStatus;
3637

@@ -149,8 +150,9 @@ bool Ttc::configurePonTx(uint32_t onuAddress)
149150
// The monitoring parameter is set when roc-status is called through the monitoring infrastructure
150151
// this reports and clears a different register, so that clock information is not lost
151152
// from rogue invocations of roc-status
152-
LinkStatus Ttc::getOnuStickyBit(bool monitoring)
153+
OnuStickyStatus Ttc::getOnuStickyStatus(bool monitoring)
153154
{
155+
LinkStatus monStatus = LinkStatus::Down, upstreamStatus = LinkStatus::Down, downstreamStatus = LinkStatus::Down;
154156
uint32_t was, is;
155157
if (monitoring) {
156158
was = mBar->readRegister(Cru::Registers::TTC_ONU_STICKY_MON.index);
@@ -163,12 +165,27 @@ LinkStatus Ttc::getOnuStickyBit(bool monitoring)
163165
mBar->modifyRegister(Cru::Registers::TTC_DATA.index, 28, 1, 0x0);
164166
is = mBar->readRegister(Cru::Registers::TTC_ONU_STICKY.index);
165167
}
168+
169+
if (is == 0x0 || is == 0x8) {
170+
upstreamStatus = LinkStatus::Up;
171+
downstreamStatus = LinkStatus::Up;
172+
} else if (is == 0x1a) {
173+
downstreamStatus = LinkStatus::Up;
174+
}
175+
166176
if (was == 0x0 && is == 0x0) {
167-
return LinkStatus::Up;
177+
monStatus = LinkStatus::Up;
168178
} else if (was != 0x0 && is == 0x0) {
169-
return LinkStatus::UpWasDown;
179+
monStatus = LinkStatus::UpWasDown;
170180
}
171-
return LinkStatus::Down;
181+
182+
return {
183+
monStatus,
184+
upstreamStatus,
185+
downstreamStatus,
186+
is,
187+
was
188+
};
172189
}
173190

174191
OnuStatus Ttc::onuStatus(bool monitoring)
@@ -186,7 +203,7 @@ OnuStatus Ttc::onuStatus(bool monitoring)
186203
(calStatus >> 5 & 0x1) == 1,
187204
(calStatus >> 6 & 0x1) == 1,
188205
(calStatus >> 7 & 0x1) == 1,
189-
getOnuStickyBit(monitoring),
206+
getOnuStickyStatus(monitoring),
190207
getPonQuality(),
191208
getPonQualityStatus(),
192209
getPonRxPower()

src/Cru/Ttc.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ namespace roc
2828

2929
class Ttc
3030
{
31+
using LinkStatus = Cru::LinkStatus;
32+
using OnuStickyStatus = Cru::OnuStickyStatus;
3133
using OnuStatus = Cru::OnuStatus;
3234
using FecStatus = Cru::FecStatus;
33-
using LinkStatus = Cru::LinkStatus;
3435

3536
public:
3637
Ttc(std::shared_ptr<BarInterface> bar, int serial = -1, int endpoint = -1);
@@ -68,7 +69,7 @@ class Ttc
6869
private:
6970
void configurePlls(uint32_t clock);
7071
void setRefGen(int frequency = 240);
71-
LinkStatus getOnuStickyBit(bool monitoring = false);
72+
OnuStickyStatus getOnuStickyStatus(bool monitoring = false);
7273
uint32_t getPonQuality();
7374
int getPonQualityStatus();
7475
double getPonRxPower();

0 commit comments

Comments
 (0)