mirror of
https://github.com/CumulusNetworks/ifupdown2.git
synced 2024-05-06 15:54:50 +00:00
nlpacket:: add netconf support (RTM_GETNETCONF/RTM_NEWNETCONF)
$ cd python-nlmanager/examples
$ ./netconf_show.py
2018-06-01 16:59:02,398 DEBUG: TXed RTM_GETNETCONF, length 32, seq 1, pid 14202, flags 0x0 ()
Netlink Header
1: 0x20000000 ... Length 0x00000020 (32)
2: 0x52000503 R... Type 0x0052 (82 - RTM_GETNETCONF), Flags 0x0305 (NLM_F_REQUEST, NLM_F_ACK, NLM_F_DUMP)
3: 0x01000000 .... Sequence Number 0x00000001 (1)
4: 0x7a370000 z7.. Process ID 0x0000377a (14202)
Service Header
5: 0x00000000 .... Family 0x00 (0), Device Type 0x0000 (0 - ARPHRD_NETROM)
6: 0x00000000 .... Interface Index 0x00000000 (0)
7: 0x00000000 .... Device Flags 0x00000000 ()
8: 0x00000000 .... Change Mask 0x00000000
Attributes
Attributes Summary
{}
2018-06-01 16:59:02,401 DEBUG: RXed RTM_NEWNETCONF, length 68, seq 1, pid 14202, flags 0x2
Netlink Header
1: 0x44000000 D... Length 0x00000044 (68)
2: 0x50000200 P... Type 0x0050 (80 - RTM_NEWNETCONF), Flags 0x0002 (NLM_F_MULTI)
3: 0x01000000 .... Sequence Number 0x00000001 (1)
4: 0x7a370000 z7.. Process ID 0x0000377a (14202)
Service Header
1: 0x00000002 .... Family 0x02 (2)
Attributes
5: 0x08000100 .... Length 0x0008 (8), Type 0x0001 (1) NETCONFA_IFINDEX
6: 0x01000000 .... 1
7: 0x08000200 .... Length 0x0008 (8), Type 0x0002 (2) NETCONFA_FORWARDING
8: 0x01000000 .... 1
9: 0x08000300 .... Length 0x0008 (8), Type 0x0003 (3) NETCONFA_RP_FILTER
10: 0x00000000 .... 0
11: 0x08000400 .... Length 0x0008 (8), Type 0x0004 (4) NETCONFA_MC_FORWARDING
12: 0x00000000 .... 0
13: 0x08000500 .... Length 0x0008 (8), Type 0x0005 (5) NETCONFA_PROXY_NEIGH
14: 0x00000000 .... 0
15: 0x08000600 .... Length 0x0008 (8), Type 0x0006 (6) NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN
16: 0x01000000 .... 1
Attributes Summary
{'( 1) NETCONFA_IFINDEX': 1,
'( 2) NETCONFA_FORWARDING': 1,
'( 3) NETCONFA_RP_FILTER': 0,
'( 4) NETCONFA_MC_FORWARDING': 0,
'( 5) NETCONFA_PROXY_NEIGH': 0,
'( 6) NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN': 1}
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
This commit is contained in:
@@ -129,6 +129,9 @@ class NetlinkManager(object):
|
||||
def debug_route(self, enabled):
|
||||
self._debug_set_clear((RTM_NEWROUTE, RTM_DELROUTE, RTM_GETROUTE), enabled)
|
||||
|
||||
def debug_netconf(self, enabled):
|
||||
self._debug_set_clear((RTM_GETNETCONF, RTM_NEWNETCONF), enabled)
|
||||
|
||||
def debug_this_packet(self, mtype):
|
||||
if mtype in self.debug:
|
||||
return True
|
||||
@@ -328,6 +331,9 @@ class NetlinkManager(object):
|
||||
elif msgtype == RTM_NEWROUTE or msgtype == RTM_DELROUTE:
|
||||
msg = Route(msgtype, nlpacket.debug, use_color=self.use_color)
|
||||
|
||||
elif msgtype in (RTM_GETNETCONF, RTM_NEWNETCONF):
|
||||
msg = Netconf(msgtype, nlpacket.debug, use_color=self.use_color)
|
||||
|
||||
else:
|
||||
raise Exception("RXed unknown netlink message type %s" % msgtype)
|
||||
|
||||
@@ -1019,3 +1025,20 @@ class NetlinkManager(object):
|
||||
|
||||
msg.build_message(self.sequence.next(), self.pid)
|
||||
return self.tx_nlpacket_get_response(msg)
|
||||
|
||||
# =======
|
||||
# Netconf
|
||||
# =======
|
||||
def netconf_dump(self):
|
||||
"""
|
||||
The attribute Netconf.NETCONFA_IFINDEX is available but don't let it fool you
|
||||
it seems like the kernel doesn't really care about this attribute and will dump
|
||||
everything according of the requested family (AF_UNSPEC for everything).
|
||||
Device filtering needs to be done afterwards by the user.
|
||||
"""
|
||||
debug = RTM_GETNETCONF in self.debug
|
||||
msg = Netconf(RTM_GETNETCONF, debug, use_color=self.use_color)
|
||||
msg.body = pack('Bxxxiii', socket.AF_UNSPEC, 0, 0, 0)
|
||||
msg.flags = NLM_F_REQUEST | NLM_F_DUMP | NLM_F_ACK
|
||||
msg.build_message(self.sequence.next(), self.pid)
|
||||
return self.tx_nlpacket_get_response(msg)
|
||||
|
||||
Reference in New Issue
Block a user