]> git.puffer.fish Git - matthieu/frr.git/commitdiff
topotests: fix 'parse_topology' function in test_isis_topo1_vrf.py
authorEmanuele Altomare <emanuele@common-net.org>
Mon, 29 Mar 2021 15:41:16 +0000 (17:41 +0200)
committerEmanuele Altomare <emanuele@common-net.org>
Mon, 29 Mar 2021 15:41:16 +0000 (17:41 +0200)
Now the parse_topology function handles well the vertex type identifier.

Signed-off-by: Emanuele Altomare <emanuele@common-net.org>
tests/topotests/isis-topo1-vrf/r1/r1_topology.json
tests/topotests/isis-topo1-vrf/r2/r2_topology.json
tests/topotests/isis-topo1-vrf/r3/r3_topology.json
tests/topotests/isis-topo1-vrf/r4/r4_topology.json
tests/topotests/isis-topo1-vrf/r5/r5_topology.json
tests/topotests/isis-topo1-vrf/test_isis_topo1_vrf.py

index 8e3cdc7bd64f2e1659996044035f2b5a15278882..1a6fe6d5c616a5c9ce56cd441939e8e0d0b53067 100644 (file)
@@ -5,73 +5,73 @@
         {
           "vertex": "r1"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r1"
         }
       ]
-    }, 
+    },
     "level-2": {
       "ipv4": [
         {
           "vertex": "r1"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r1(4)",
+          "type": "IP internal",
           "vertex": "10.0.20.0/24"
-        }, 
+        },
         {
-          "interface": "r1-eth0", 
-          "metric": "10", 
-          "next-hop": "r3", 
-          "parent": "r1(4)", 
-          "type": "TE-IS", 
+          "interface": "r1-eth0",
+          "metric": "10",
+          "next-hop": "r3",
+          "parent": "r1(4)",
+          "type": "TE-IS",
           "vertex": "r3"
-        }, 
+        },
         {
-          "interface": "r3", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r1-eth0", 
-          "type": "IP", 
+          "interface": "r1-eth0",
+          "metric": "20",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "IP TE",
           "vertex": "10.0.20.0/24"
-        }, 
+        },
         {
-          "interface": "r3", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r1-eth0", 
-          "type": "IP", 
+          "interface": "r1-eth0",
+          "metric": "20",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "IP TE",
           "vertex": "10.0.10.0/24"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r1"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r1(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:1::/64"
-        }, 
+        },
         {
-          "interface": "r1-eth0", 
-          "metric": "10", 
-          "next-hop": "r3", 
-          "parent": "r1(4)", 
-          "type": "TE-IS", 
+          "interface": "r1-eth0",
+          "metric": "10",
+          "next-hop": "r3",
+          "parent": "r1(4)",
+          "type": "TE-IS",
           "vertex": "r3"
-        }, 
+        },
         {
-          "interface": "r3", 
-          "metric": "internal", 
-          "next-hop": "20", 
-          "parent": "r1-eth0", 
-          "type": "IP6", 
+          "interface": "r1-eth0",
+          "metric": "20",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:1::/64"
         }
       ]
index 72022a8167801b3cebe8041962d97cc20c110432..a77f7977f940196e6db4bfeb651c074a8e3da297 100644 (file)
@@ -5,76 +5,76 @@
         {
           "vertex": "r2"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r2"
         }
       ]
-    }, 
+    },
     "level-2": {
       "ipv4": [
         {
           "vertex": "r2"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r2(4)",
+          "type": "IP internal",
           "vertex": "10.0.21.0/24"
-        }, 
+        },
         {
-          "interface": "r2-eth0", 
-          "metric": "10", 
-          "next-hop": "r4", 
-          "parent": "r2(4)", 
-          "type": "TE-IS", 
+          "interface": "r2-eth0",
+          "metric": "10",
+          "next-hop": "r4",
+          "parent": "r2(4)",
+          "type": "TE-IS",
           "vertex": "r4"
-        }, 
+        },
         {
-          "interface": "r4", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r2-eth0", 
-          "type": "IP", 
+          "interface": "r2-eth0",
+          "metric": "20",
+          "next-hop": "r4",
+          "parent": "r4(4)",
+          "type": "IP TE",
           "vertex": "10.0.21.0/24"
-        }, 
+        },
         {
-          "interface": "r4", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r2-eth0", 
-          "type": "IP", 
+          "interface": "r2-eth0",
+          "metric": "20",
+          "next-hop": "r4",
+          "parent": "r4(4)",
+          "type": "IP TE",
           "vertex": "10.0.11.0/24"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r2"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r2(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:2::/64"
-        }, 
+        },
         {
-          "interface": "r2-eth0", 
-          "metric": "10", 
-          "next-hop": "r4", 
-          "parent": "r2(4)", 
-          "type": "TE-IS", 
+          "interface": "r2-eth0",
+          "metric": "10",
+          "next-hop": "r4",
+          "parent": "r2(4)",
+          "type": "TE-IS",
           "vertex": "r4"
-        }, 
+        },
         {
-          "interface": "r4", 
-          "metric": "internal", 
-          "next-hop": "20", 
-          "parent": "r2-eth0", 
-          "type": "IP6", 
+          "interface": "r2-eth0",
+          "metric": "20",
+          "next-hop": "r4",
+          "parent": "r4(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:2::/64"
         }
       ]
     }
   }
-}
\ No newline at end of file
+}
index 62b895766e8dc6e1dce8535369858f97b66cc974..1e5d331965b9f08a8545c74f9dfa7d9dbfeaee3e 100644 (file)
       "ipv4": [
         {
           "vertex": "r3"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r3(4)",
+          "type": "IP internal",
           "vertex": "10.0.10.0/24"
-        }, 
+        },
         {
-          "interface": "r3-eth1", 
-          "metric": "10", 
-          "next-hop": "r5", 
-          "parent": "r3(4)", 
-          "type": "TE-IS", 
+          "interface": "r3-eth1",
+          "metric": "10",
+          "next-hop": "r5",
+          "parent": "r3(4)",
+          "type": "TE-IS",
           "vertex": "r5"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r3-eth1", 
-          "type": "IP", 
+          "interface": "r3-eth1",
+          "metric": "20",
+          "next-hop": "r5",
+          "parent": "r5(4)",
+          "type": "IP TE",
           "vertex": "10.0.10.0/24"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r3-eth1", 
-          "type": "IP", 
+          "interface": "r3-eth1",
+          "metric": "20",
+          "next-hop": "r5",
+          "parent": "r5(4)",
+          "type": "IP TE",
           "vertex": "10.0.11.0/24"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "TE", 
-          "next-hop": "30", 
-          "parent": "r3-eth1", 
-          "type": "IP", 
+          "interface": "r3-eth1",
+          "metric": "30",
+          "next-hop": "r5",
+          "parent": "r4(4)",
+          "type": "IP TE",
           "vertex": "10.0.21.0/24"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r3"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r3(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:1::/64"
-        }, 
+        },
         {
-          "interface": "r3-eth1", 
-          "metric": "10", 
-          "next-hop": "r5", 
-          "parent": "r3(4)", 
-          "type": "TE-IS", 
+          "interface": "r3-eth1",
+          "metric": "10",
+          "next-hop": "r5",
+          "parent": "r3(4)",
+          "type": "TE-IS",
           "vertex": "r5"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "internal", 
-          "next-hop": "20", 
-          "parent": "r3-eth1", 
-          "type": "IP6", 
+          "interface": "r3-eth1",
+          "metric": "20",
+          "next-hop": "r5",
+          "parent": "r5(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:2::/64"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "internal", 
-          "next-hop": "30", 
-          "parent": "r3-eth1", 
-          "type": "IP6", 
+          "interface": "r3-eth1",
+          "metric": "30",
+          "next-hop": "r5",
+          "parent": "r4(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:2::/64"
         }
       ]
-    }, 
+    },
     "level-2": {
       "ipv4": [
         {
           "vertex": "r3"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r3(4)",
+          "type": "IP internal",
           "vertex": "10.0.20.0/24"
-        }, 
+        },
         {
-          "interface": "r3-eth0", 
-          "metric": "10", 
-          "next-hop": "r3", 
-          "parent": "r3(4)", 
-          "type": "TE-IS", 
+          "interface": "r3-eth0",
+          "metric": "10",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "TE-IS",
           "vertex": "r3"
-        }, 
+        },
         {
-          "interface": "r3", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r3-eth0", 
-          "type": "IP", 
+          "interface": "r3-eth0",
+          "metric": "20",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "IP TE",
           "vertex": "10.0.20.0/24"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r3"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r3(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:1::/64"
-        }, 
+        },
         {
-          "interface": "r3-eth0", 
-          "metric": "10", 
-          "next-hop": "r3", 
-          "parent": "r3(4)", 
-          "type": "TE-IS", 
+          "interface": "r3-eth0",
+          "metric": "10",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "TE-IS",
           "vertex": "r3"
         }
       ]
index 0d69550cadd386a0b68eb91bd463bef68639bbd4..34f5ac9ca41353b46c7777fe052641dc59ab891d 100644 (file)
       "ipv4": [
         {
           "vertex": "r4"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r4(4)",
+          "type": "IP internal",
           "vertex": "10.0.11.0/24"
-        }, 
+        },
         {
-          "interface": "r4-eth1", 
-          "metric": "10", 
-          "next-hop": "r5", 
-          "parent": "r4(4)", 
-          "type": "TE-IS", 
+          "interface": "r4-eth1",
+          "metric": "10",
+          "next-hop": "r5",
+          "parent": "r4(4)",
+          "type": "TE-IS",
           "vertex": "r5"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r4-eth1", 
-          "type": "IP", 
+          "interface": "r4-eth1",
+          "metric": "20",
+          "next-hop": "r5",
+          "parent": "r5(4)",
+          "type": "IP TE",
           "vertex": "10.0.10.0/24"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r4-eth1", 
-          "type": "IP", 
+          "interface": "r4-eth1",
+          "metric": "20",
+          "next-hop": "r5",
+          "parent": "r5(4)",
+          "type": "IP TE",
           "vertex": "10.0.11.0/24"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "TE", 
-          "next-hop": "30", 
-          "parent": "r4-eth1", 
-          "type": "IP", 
+          "interface": "r4-eth1",
+          "metric": "30",
+          "next-hop": "r5",
+          "parent": "r3(4)",
+          "type": "IP TE",
           "vertex": "10.0.20.0/24"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r4"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r4(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:2::/64"
-        }, 
+        },
         {
-          "interface": "r4-eth1", 
-          "metric": "10", 
-          "next-hop": "r5", 
-          "parent": "r4(4)", 
-          "type": "TE-IS", 
+          "interface": "r4-eth1",
+          "metric": "10",
+          "next-hop": "r5",
+          "parent": "r4(4)",
+          "type": "TE-IS",
           "vertex": "r5"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "internal", 
-          "next-hop": "20", 
-          "parent": "r4-eth1", 
-          "type": "IP6", 
+          "interface": "r4-eth1",
+          "metric": "20",
+          "next-hop": "r5",
+          "parent": "r5(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:1::/64"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "internal", 
-          "next-hop": "30", 
-          "parent": "r4-eth1", 
-          "type": "IP6", 
+          "interface": "r4-eth1",
+          "metric": "30",
+          "next-hop": "r5",
+          "parent": "r3(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:1::/64"
         }
       ]
-    }, 
+    },
     "level-2": {
       "ipv4": [
         {
           "vertex": "r4"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r4(4)",
+          "type": "IP internal",
           "vertex": "10.0.21.0/24"
-        }, 
+        },
         {
-          "interface": "r4-eth0", 
-          "metric": "10", 
-          "next-hop": "r2", 
-          "parent": "r4(4)", 
-          "type": "TE-IS", 
+          "interface": "r4-eth0",
+          "metric": "10",
+          "next-hop": "r2",
+          "parent": "r4(4)",
+          "type": "TE-IS",
           "vertex": "r2"
-        }, 
+        },
         {
-          "interface": "r2", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r4-eth0", 
-          "type": "IP", 
+          "interface": "r4-eth0",
+          "metric": "20",
+          "next-hop": "r2",
+          "parent": "r2(4)",
+          "type": "IP TE",
           "vertex": "10.0.21.0/24"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r4"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r4(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:2::/64"
-        }, 
+        },
         {
-          "interface": "r4-eth0", 
-          "metric": "10", 
-          "next-hop": "r2", 
-          "parent": "r4(4)", 
-          "type": "TE-IS", 
+          "interface": "r4-eth0",
+          "metric": "10",
+          "next-hop": "r2",
+          "parent": "r4(4)",
+          "type": "TE-IS",
           "vertex": "r2"
         }
       ]
index b4ed6a069dac3851f3ca9d5e4c1f87b2cf9e64c4..ace56536e9f34c09bef7d361839a1b646923564b 100644 (file)
       "ipv4": [
         {
           "vertex": "r5"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r5(4)",
+          "type": "IP internal",
           "vertex": "10.0.10.0/24"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r5(4)",
+          "type": "IP internal",
           "vertex": "10.0.11.0/24"
-        }, 
+        },
         {
-          "interface": "r5-eth0", 
-          "metric": "10", 
-          "next-hop": "r3", 
-          "parent": "r5(4)", 
-          "type": "TE-IS", 
+          "interface": "r5-eth0",
+          "metric": "10",
+          "next-hop": "r3",
+          "parent": "r5(4)",
+          "type": "TE-IS",
           "vertex": "r3"
-        }, 
+        },
         {
-          "interface": "r5-eth1", 
-          "metric": "10", 
-          "next-hop": "r4", 
-          "parent": "r5(4)", 
-          "type": "TE-IS", 
+          "interface": "r5-eth1",
+          "metric": "10",
+          "next-hop": "r4",
+          "parent": "r5(4)",
+          "type": "TE-IS",
           "vertex": "r4"
-        }, 
+        },
         {
-          "interface": "r3", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r5-eth0", 
-          "type": "IP", 
+          "interface": "r5-eth0",
+          "metric": "20",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "IP TE",
           "vertex": "10.0.20.0/24"
-        }, 
+        },
         {
-          "interface": "r3", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r5-eth0", 
-          "type": "IP", 
+          "interface": "r5-eth0",
+          "metric": "20",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "IP TE",
           "vertex": "10.0.10.0/24"
-        }, 
+        },
         {
-          "interface": "r4", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r5-eth1", 
-          "type": "IP", 
+          "interface": "r5-eth1",
+          "metric": "20",
+          "next-hop": "r4",
+          "parent": "r4(4)",
+          "type": "IP TE",
           "vertex": "10.0.21.0/24"
-        }, 
+        },
         {
-          "interface": "r4", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r5-eth1", 
-          "type": "IP", 
+          "interface": "r5-eth1",
+          "metric": "20",
+          "next-hop": "r4",
+          "parent": "r4(4)",
+          "type": "IP TE",
           "vertex": "10.0.11.0/24"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r5"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r5(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:1::/64"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r5(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:2::/64"
-        }, 
+        },
         {
-          "interface": "r5-eth0", 
-          "metric": "10", 
-          "next-hop": "r3", 
-          "parent": "r5(4)", 
-          "type": "TE-IS", 
+          "interface": "r5-eth0",
+          "metric": "10",
+          "next-hop": "r3",
+          "parent": "r5(4)",
+          "type": "TE-IS",
           "vertex": "r3"
-        }, 
+        },
         {
-          "interface": "r5-eth1", 
-          "metric": "10", 
-          "next-hop": "r4", 
-          "parent": "r5(4)", 
-          "type": "TE-IS", 
+          "interface": "r5-eth1",
+          "metric": "10",
+          "next-hop": "r4",
+          "parent": "r5(4)",
+          "type": "TE-IS",
           "vertex": "r4"
-        }, 
+        },
         {
-          "interface": "r3", 
-          "metric": "internal", 
-          "next-hop": "20", 
-          "parent": "r5-eth0", 
-          "type": "IP6", 
+          "interface": "r5-eth0",
+          "metric": "20",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:1::/64"
-        }, 
+        },
         {
-          "interface": "r4", 
-          "metric": "internal", 
-          "next-hop": "20", 
-          "parent": "r5-eth1", 
-          "type": "IP6", 
+          "interface": "r5-eth1",
+          "metric": "20",
+          "next-hop": "r4",
+          "parent": "r4(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:2::/64"
         }
       ]
-    }, 
+    },
     "level-2": {
-      "ipv4": [], 
+      "ipv4": [],
       "ipv6": []
     }
   }
-}
\ No newline at end of file
+}
index ae904ba69e831f087e93178bd90628df7216dd27..3e2c217664a822ac4be6ef0187a123d6383044ca 100644 (file)
@@ -47,6 +47,19 @@ from mininet.topo import Topo
 
 pytestmark = [pytest.mark.isisd]
 
+VERTEX_TYPE_LIST = [
+               "pseudo_IS",
+               "pseudo_TE-IS",
+               "IS",
+               "TE-IS",
+               "ES",
+               "IP internal",
+               "IP external",
+               "IP TE",
+               "IP6 internal",
+               "IP6 external",
+               "UNKNOWN"
+             ]
 
 class ISISTopo1(Topo):
     "Simple two layer ISIS vrf topology"
@@ -316,6 +329,7 @@ def parse_topology(lines, level):
     areas = {}
     area = None
     ipv = None
+    vertex_type_regex = "|".join(VERTEX_TYPE_LIST)
 
     for line in lines:
         area_match = re.match(r"Area (.+):", line)
@@ -335,44 +349,50 @@ def parse_topology(lines, level):
             ipv = "ipv4"
             continue
 
-        item_match = re.match(r"([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)", line)
-        if item_match is not None:
+        item_match = re.match(r"([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+)"
+                              , line)
+        if (
+            item_match is not None
+            and item_match.group(1) == "Vertex"
+            and item_match.group(2) == "Type"
+            and item_match.group(3) == "Metric"
+            and item_match.group(4) == "Next-Hop"
+            and item_match.group(5) == "Interface"
+            and item_match.group(6) == "Parent"
+        ):
             # Skip header
-            if (
-                item_match.group(1) == "Vertex"
-                and item_match.group(2) == "Type"
-                and item_match.group(3) == "Metric"
-                and item_match.group(4) == "Next-Hop"
-                and item_match.group(5) == "Interface"
-                and item_match.group(6) == "Parent"
-            ):
-                continue
+            continue
 
+        item_match = re.match(r"([^\s]+) ({}) ([0]|([1-9][0-9]*)) ([^\s]+) ([^\s]+) ([^\s]+)"
+                              .format(vertex_type_regex), line)
+        if item_match is not None:
             areas[area][level][ipv].append(
                 {
                     "vertex": item_match.group(1),
                     "type": item_match.group(2),
                     "metric": item_match.group(3),
-                    "next-hop": item_match.group(4),
-                    "interface": item_match.group(5),
-                    "parent": item_match.group(6),
+                    "next-hop": item_match.group(5),
+                    "interface": item_match.group(6),
+                    "parent": item_match.group(7),
                 }
             )
             continue
 
-        item_match = re.match(r"([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)", line)
+        item_match = re.match(r"([^\s]+) ({}) ([0]|([1-9][0-9]*)) ([^\s]+)"
+                              .format(vertex_type_regex), line)
+
         if item_match is not None:
             areas[area][level][ipv].append(
                 {
                     "vertex": item_match.group(1),
                     "type": item_match.group(2),
                     "metric": item_match.group(3),
-                    "parent": item_match.group(4),
+                    "parent": item_match.group(5),
                 }
             )
             continue
 
-        item_match = re.match(r"([^ ]+)", line)
+        item_match = re.match(r"([^\s]+)", line)
         if item_match is not None:
             areas[area][level][ipv].append({"vertex": item_match.group(1)})
             continue