Neutron hugely relies on namespaces, so we should try to dump
internal IP stack state for non-root network namespaces.
Change-Id: Ib980d22fbf3c6b680473754fa2b1684c2ef91b72
| ... | ... |
@@ -100,14 +100,24 @@ def iptables_dump(): |
| 100 | 100 |
_dump_cmd("sudo iptables --line-numbers -L -nv -t %s" % table)
|
| 101 | 101 |
|
| 102 | 102 |
|
| 103 |
+def _netns_list(): |
|
| 104 |
+ process = subprocess.Popen(['ip', 'netns'], stdout=subprocess.PIPE) |
|
| 105 |
+ stdout, _ = process.communicate() |
|
| 106 |
+ return stdout.split() |
|
| 107 |
+ |
|
| 108 |
+ |
|
| 103 | 109 |
def network_dump(): |
| 104 | 110 |
_header("Network Dump")
|
| 105 | 111 |
|
| 106 | 112 |
_dump_cmd("brctl show")
|
| 107 | 113 |
_dump_cmd("arp -n")
|
| 108 |
- _dump_cmd("ip addr")
|
|
| 109 |
- _dump_cmd("ip link")
|
|
| 110 |
- _dump_cmd("ip route")
|
|
| 114 |
+ ip_cmds = ["addr", "link", "route"] |
|
| 115 |
+ for cmd in ip_cmds + ['netns']: |
|
| 116 |
+ _dump_cmd("ip %s" % cmd)
|
|
| 117 |
+ for netns_ in _netns_list(): |
|
| 118 |
+ for cmd in ip_cmds: |
|
| 119 |
+ args = {'netns': netns_, 'cmd': cmd}
|
|
| 120 |
+ _dump_cmd('sudo ip netns exec %(netns)s ip %(cmd)s' % args)
|
|
| 111 | 121 |
|
| 112 | 122 |
|
| 113 | 123 |
def process_list(): |