in fboss/py/fboss/cli/commands/port.py [0:0]
def _print_port_details(self, port_info):
"""Print out port details
:var port_info PortInfoThrift: port information
"""
admin_status = "ENABLED" if port_info.adminState else "DISABLED"
oper_status = "UP" if port_info.operState else "DOWN"
speed, suffix = self._convert_bps(port_info.speedMbps * (10 ** 6))
vlans = " ".join(str(vlan) for vlan in (port_info.vlans or []))
fec_status = port_info.fecMode
pause = ""
if port_info.txPause:
pause = "TX "
if port_info.rxPause:
pause = pause + "RX"
if pause == "":
pause = "None"
fmt = "{:.<50}{}"
lines = [
("Name", port_info.name.strip()),
("ID", str(port_info.portId)),
("Description", port_info.description or ""),
("Admin State", admin_status),
("Link State", oper_status),
("Speed", "{:.0f} {}".format(speed, suffix)),
("VLANs", vlans),
("Forward Error Correction", fec_status),
("Pause", pause),
]
if hasattr(port_info, "pfc") and port_info.pfc:
pfc_str = ""
if port_info.pfc.tx:
pfc_str = "TX "
if port_info.pfc.rx:
pfc_str = pfc_str + "RX"
if port_info.pfc.watchdog:
pfc_str = pfc_str + " WD"
lines.append(("PFC", pfc_str))
if hasattr(port_info, "profileID") and port_info.profileID:
lines.append(("ProfileID", port_info.profileID))
print()
print("\n".join(fmt.format(*l) for l in lines))
if hasattr(port_info, "portQueues"):
print(fmt.format("Unicast queues", len(port_info.portQueues)))
for queue in port_info.portQueues:
name = "({})".format(queue.name) if queue.name != "" else ""
attrs = [queue.mode]
for val in (
"weight",
"reservedBytes",
"scalingFactor",
"bandwidthBurstMinKbits",
"bandwidthBurstMaxKbits",
):
if hasattr(queue, val) and getattr(queue, val):
attrs.append("{}={}".format(val, getattr(queue, val)))
if hasattr(queue, "portQueueRate") and queue.portQueueRate:
if queue.portQueueRate.field == 1: # pps
attrs.append(
"minpps={}".format(queue.portQueueRate.value.minimum)
)
attrs.append(
"maxpps={}".format(queue.portQueueRate.value.maximum)
)
elif queue.portQueueRate.field == 2: # kbps
attrs.append(
"minkbps={}".format(queue.portQueueRate.value.minimum)
)
attrs.append(
"maxkbps={}".format(queue.portQueueRate.value.maximum)
)
if not (hasattr(queue, "aqms") and queue.aqms):
attrs.append("TAIL DROP")
print(
" Queue {} {:29}{}".format(queue.id, name, ",".join(attrs))
)
else:
print(
" Queue {} {:29}{}".format(queue.id, name, ",".join(attrs))
)
for aqm in queue.aqms:
attrs = []
if aqm.behavior == QueueCongestionBehavior.EARLY_DROP:
attrs.append("EARLY DROP")
elif aqm.behavior == QueueCongestionBehavior.ECN:
attrs.append("ECN")
if hasattr(aqm.detection, "linear") and aqm.detection.linear:
attrs.append("{}={}".format("detection", "linear"))
linear = aqm.detection.linear
attrs.append(
"{}={}".format("minThresh", linear.minimumLength)
)
attrs.append(
"{}={}".format("maxThresh", linear.maximumLength)
)
attrs.append(
"{}={}".format("probability", linear.probability)
)
print("{:<41}{}".format("", ",".join(attrs)))
if hasattr(queue, "dscps") and queue.dscps:
dscpRanges = []
for _, dscpRange in itertools.groupby(
enumerate(sorted(queue.dscps)), lambda p: p[1] - p[0]
):
dscpRange = list(dscpRange)
dscpRanges.append(
"[{}]".format(dscpRange[0][1])
if len(dscpRange) == 1
else "[{}-{}]".format(dscpRange[0][1], dscpRange[-1][1])
)
print("{:<41}DSCP={}".format("", ",".join(dscpRanges)))