Skip to content

Commit 110c4aa

Browse files
committed
bugfix: #1
1 parent 6d576e1 commit 110c4aa

File tree

5 files changed

+34
-70
lines changed

5 files changed

+34
-70
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Looking forward to your testing and feedback :).
3232
- :white_check_mark: get_facts()
3333
- :white_check_mark: get_interfaces()
3434
- :white_check_mark: get_interfaces_ip()
35-
- :white_check_mark: get_interfaces_counters()
35+
- ~~:white_check_mark: get_interfaces_counters():x:needs to be rewritten~~
3636
- :white_check_mark: get_lldp_neighbors()
3737
- :white_check_mark: get_lldp_neighbors_detail()
3838
- :white_check_mark: get_environment()

README_CN.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
- :white_check_mark: get_facts():获取设备基础信息,如型号、软件版本、序列号等
3131
- :white_check_mark: get_interfaces():获取所有接口列表
3232
- :white_check_mark: get_interfaces_ip():获取当前存在 IP 地址的接口列表,目前只支持 IPv4
33-
- :white_check_mark: get_interfaces_counters():获取接口的计数信息,包括收发包、收发字节、错包、丢包、CRC 等
33+
- ~~:white_check_mark: get_interfaces_counters():获取接口的计数信息,包括收发包、收发字节、错包、丢包、CRC 等:x:需要重写~~
3434
- :white_check_mark: get_lldp_neighbors():获取 LLDP 邻居信息
3535
- :white_check_mark: get_lldp_neighbors_detail():获取 LLDP 的详细信息,包括对端的系统名称及描述、接口名称及描述等
3636
- :white_check_mark: get_environment():获取设备运行信息,包括 CPU、内存、电源、风扇、温度等状态

napalm_h3c_comware/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@
1515
from napalm_h3c_comware.comware import ComwareDriver
1616

1717
__all__ = ("ComwareDriver",)
18-
__version__ = "0.1.4"
18+
__version__ = "0.1.5"

napalm_h3c_comware/comware.py

+30-28
Original file line numberDiff line numberDiff line change
@@ -369,34 +369,36 @@ def get_environment(self):
369369

370370
return environment
371371

372-
def get_interfaces_counters(self):
373-
counters = {}
374-
keys = (
375-
"tx_errors", "rx_errors", "rx_crc",
376-
"tx_discards", "rx_discards",
377-
"tx_octets", "rx_octets",
378-
"tx_packets", "rx_packets",
379-
"tx_unicast_packets", "rx_unicast_packets",
380-
"tx_multicast_packets", "rx_multicast_packets",
381-
"tx_broadcast_packets", "rx_broadcast_packets",
382-
)
383-
structured_int_info = self._get_structured_output("display interface")
384-
385-
for interface in structured_int_info:
386-
values = itemgetter(
387-
"tx_errors", "rx_errors", "rx_crc",
388-
"tx_aborts", "rx_aborts",
389-
"tx_bytes", "rx_bytes",
390-
"tx_pkts", "rx_pkts",
391-
"tx_unicast", "rx_unicast",
392-
"tx_multicast", "rx_multicast",
393-
"tx_broadcast", "rx_broadcast",
394-
)(interface)
395-
396-
values = (parse_null(value, -1, int) for value in values)
397-
counters[interface.get("interface")] = dict(zip(keys, values))
398-
399-
return counters
372+
# TODO: 从 textfsm 的 display interface 模板中移除,模板无法支持太多类型的输出,重构为正则表达式比较好
373+
374+
# def get_interfaces_counters(self):
375+
# counters = {}
376+
# keys = (
377+
# "tx_errors", "rx_errors", "rx_crc",
378+
# "tx_discards", "rx_discards",
379+
# "tx_octets", "rx_octets",
380+
# "tx_packets", "rx_packets",
381+
# "tx_unicast_packets", "rx_unicast_packets",
382+
# "tx_multicast_packets", "rx_multicast_packets",
383+
# "tx_broadcast_packets", "rx_broadcast_packets",
384+
# )
385+
# structured_int_info = self._get_structured_output("display interface")
386+
387+
# for interface in structured_int_info:
388+
# values = itemgetter(
389+
# "tx_errors", "rx_errors", "rx_crc",
390+
# "tx_aborts", "rx_aborts",
391+
# "tx_bytes", "rx_bytes",
392+
# "tx_pkts", "rx_pkts",
393+
# "tx_unicast", "rx_unicast",
394+
# "tx_multicast", "rx_multicast",
395+
# "tx_broadcast", "rx_broadcast",
396+
# )(interface)
397+
398+
# values = (parse_null(value, -1, int) for value in values)
399+
# counters[interface.get("interface")] = dict(zip(keys, values))
400+
401+
# return counters
400402

401403
def get_lldp_neighbors_detail(self, interface: str = ""):
402404
lldp = {}

napalm_h3c_comware/utils/textfsm_templates/display_interface.tpl

+1-39
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,10 @@ Value PVID (\d+)
1313
Value LINK_TYPE (\S+)
1414
Value LAST_FLAPPING (.+)
1515
Value PRIMARY_IPADDR (\d+\.\d+\.\d+\.\d+/\d+)
16-
Value RX_PKTS (\d+|-)
17-
Value RX_BYTES (\d+|-)
18-
Value RX_UNICAST (\d+|-)
19-
Value RX_BROADCAST (\d+|-)
20-
Value RX_MULTICAST (\d+|-)
21-
Value RX_ERRORS (\d+|-)
22-
Value RX_ABORTS (\d+|-)
23-
Value RX_CRC (\d+|-)
24-
Value TX_PKTS (\d+|-)
25-
Value TX_BYTES (\d+|-)
26-
Value TX_UNICAST (\d+|-)
27-
Value TX_BROADCAST (\d+|-)
28-
Value TX_MULTICAST (\d+|-)
29-
Value TX_ERRORS (\d+|-)
30-
Value TX_ABORTS (\d+|-)
3116

3217
Start
3318
# 接口名所在行是一个独立的字符串,以此开始记录
3419
^\S+\s*$$ -> Continue.Record
35-
# 路由器某个 Serial 接口后面出现了空格,莫名奇妙的 comware bug
3620
^${INTERFACE}\s*$$
3721
^(C|c)urrent\s+state:\s+${LINK_STATUS}
3822
^(L|l)ine\s+protocol\s+state:\s+${PROTOCOL_STATUS}
@@ -46,26 +30,4 @@ Start
4630
^PVID:\s+${PVID}
4731
^Port\s+link-type:\s+${LINK_TYPE}
4832
^Last\s+link\s+flapping:\s+${LAST_FLAPPING}
49-
# 如果接口不存在计数信息(例如 Serial),直接开始匹配下一个接口
50-
^\s*$$ -> Start
51-
# 虚拟接口计数匹配
52-
^\s?Input:\s*${RX_PKTS}\s+packets,\s+${RX_BYTES}\s+bytes(,\s+\d+\s+buffers)?(,\s+${RX_ABORTS}\s+drops)?
53-
^\s?Output:\s*${TX_PKTS}\s+packets,\s+${TX_BYTES}\s+bytes(,\s+\d+\s+buffers)?(,\s+${TX_ABORTS}\s+drops)? -> Start
54-
# 物理接口计数匹配
55-
^\s*Input\s+\(total\) -> INPUT
56-
57-
58-
59-
# for physical interfaces
60-
INPUT
61-
^\s*Input\s+\(normal\):\s+${RX_PKTS}\s+packets,\s+${RX_BYTES}\s+bytes
62-
^\s*${RX_UNICAST}\s+unicasts,\s+${RX_BROADCAST}\s+broadcasts,\s+${RX_MULTICAST}\s+multicasts,\s+\d+\s+pauses
63-
^\s*Input:\s+${RX_ERRORS}\s+input\s+errors,
64-
^\s*${RX_CRC}\s+CRC,\s+\d+\s+frame,\s+\d+\s+overruns,\s+${RX_ABORTS}\s+aborts -> OUTPUT
65-
66-
# for physical interfaces
67-
OUTPUT
68-
^\s*Output\s+\(normal\):\s+${TX_PKTS}\s+packets,\s+${TX_BYTES}\s+bytes
69-
^\s*${TX_UNICAST}\s+unicasts,\s+${TX_BROADCAST}\s+broadcasts,\s+${TX_MULTICAST}\s+multicasts,\s+\d+\s+pauses
70-
^\s*Output:\s+${TX_ERRORS}\s+output\s+errors,
71-
^\s*${TX_ABORTS}\s+aborts,\s+\d+\s+deferred, -> Start
33+
^\s*$$

0 commit comments

Comments
 (0)