summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interface-definitions/include/rip-interface.xml.i47
-rw-r--r--interface-definitions/protocols-rip.xml.in51
-rw-r--r--smoketest/configs/rip-router129
-rwxr-xr-xsrc/migration-scripts/interfaces/18-to-1953
4 files changed, 221 insertions, 59 deletions
diff --git a/interface-definitions/include/rip-interface.xml.i b/interface-definitions/include/rip-interface.xml.i
index 1d5e6f949..6279c16c8 100644
--- a/interface-definitions/include/rip-interface.xml.i
+++ b/interface-definitions/include/rip-interface.xml.i
@@ -14,53 +14,6 @@
</constraint>
</properties>
<children>
- <node name="authentication">
- <properties>
- <help>Authentication</help>
- </properties>
- <children>
- <tagNode name="md5">
- <properties>
- <help>MD5 key id</help>
- <valueHelp>
- <format>u32:1-255</format>
- <description>OSPF key id</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-255"/>
- </constraint>
- </properties>
- <children>
- <leafNode name="password">
- <properties>
- <help>Authentication password</help>
- <valueHelp>
- <format>txt</format>
- <description>MD5 Key (16 characters or less)</description>
- </valueHelp>
- <constraint>
- <regex>^[^[:space:]]{1,16}$</regex>
- </constraint>
- <constraintErrorMessage>Password must be 16 characters or less</constraintErrorMessage>
- </properties>
- </leafNode>
- </children>
- </tagNode>
- <leafNode name="plaintext-password">
- <properties>
- <help>Plain text password</help>
- <valueHelp>
- <format>txt</format>
- <description>Plain text password (16 characters or less)</description>
- </valueHelp>
- <constraint>
- <regex>^[^[:space:]]{1,16}$</regex>
- </constraint>
- <constraintErrorMessage>Password must be 16 characters or less</constraintErrorMessage>
- </properties>
- </leafNode>
- </children>
- </node>
<node name="split-horizon">
<properties>
<help>Split horizon parameters</help>
diff --git a/interface-definitions/protocols-rip.xml.in b/interface-definitions/protocols-rip.xml.in
index 4ced26d8a..263350dc8 100644
--- a/interface-definitions/protocols-rip.xml.in
+++ b/interface-definitions/protocols-rip.xml.in
@@ -50,6 +50,57 @@
</children>
</node>
#include <include/rip-interface.xml.i>
+ <tagNode name="interface">
+ <children>
+ <node name="authentication">
+ <properties>
+ <help>Authentication</help>
+ </properties>
+ <children>
+ <tagNode name="md5">
+ <properties>
+ <help>MD5 key id</help>
+ <valueHelp>
+ <format>u32:1-255</format>
+ <description>OSPF key id</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-255"/>
+ </constraint>
+ </properties>
+ <children>
+ <leafNode name="password">
+ <properties>
+ <help>Authentication password</help>
+ <valueHelp>
+ <format>txt</format>
+ <description>MD5 Key (16 characters or less)</description>
+ </valueHelp>
+ <constraint>
+ <regex>^[^[:space:]]{1,16}$</regex>
+ </constraint>
+ <constraintErrorMessage>Password must be 16 characters or less</constraintErrorMessage>
+ </properties>
+ </leafNode>
+ </children>
+ </tagNode>
+ <leafNode name="plaintext-password">
+ <properties>
+ <help>Plain text password</help>
+ <valueHelp>
+ <format>txt</format>
+ <description>Plain text password (16 characters or less)</description>
+ </valueHelp>
+ <constraint>
+ <regex>^[^[:space:]]{1,16}$</regex>
+ </constraint>
+ <constraintErrorMessage>Password must be 16 characters or less</constraintErrorMessage>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
+ </children>
+ </tagNode>
<leafNode name="neighbor">
<properties>
<help>Neighbor router</help>
diff --git a/smoketest/configs/rip-router b/smoketest/configs/rip-router
index 0a3a41103..09cb11a45 100644
--- a/smoketest/configs/rip-router
+++ b/smoketest/configs/rip-router
@@ -16,6 +16,13 @@ interfaces {
}
}
}
+ ipv6 {
+ ripng {
+ split-horizon {
+ poison-reverse
+ }
+ }
+ }
smp-affinity auto
speed auto
address 172.18.202.10/24
@@ -35,6 +42,13 @@ interfaces {
}
}
}
+ ipv6 {
+ ripng {
+ split-horizon {
+ disable
+ }
+ }
+ }
}
vif-s 200 {
ip {
@@ -49,6 +63,13 @@ interfaces {
}
}
}
+ ipv6 {
+ ripng {
+ split-horizon {
+ poison-reverse
+ }
+ }
+ }
vif-c 2000 {
ip {
rip {
@@ -68,10 +89,52 @@ interfaces {
}
}
}
+ ipv6 {
+ ripng {
+ split-horizon {
+ poison-reverse
+ }
+ }
+ }
}
}
}
}
+policy {
+ access-list6 198 {
+ rule 10 {
+ action permit
+ source {
+ any
+ }
+ }
+ }
+ access-list6 199 {
+ rule 20 {
+ action deny
+ source {
+ any
+ }
+ }
+ }
+ prefix-list6 bar-prefix {
+ rule 200 {
+ action deny
+ prefix 2001:db8::/32
+ }
+ }
+ prefix-list6 foo-prefix {
+ rule 100 {
+ action permit
+ prefix 2001:db8::/32
+ }
+ }
+ route-map FooBar123 {
+ rule 10 {
+ action permit
+ }
+ }
+}
protocols {
rip {
default-distance 20
@@ -89,6 +152,72 @@ protocols {
}
}
}
+ ripng {
+ aggregate-address 2001:db8:1000::/48
+ default-information {
+ originate
+ }
+ default-metric 8
+ distribute-list {
+ access-list {
+ in 198
+ out 199
+ }
+ interface eth0 {
+ access-list {
+ in 198
+ out 199
+ }
+ prefix-list {
+ in foo-prefix
+ out bar-prefix
+ }
+ }
+ interface eth1 {
+ access-list {
+ in 198
+ out 199
+ }
+ prefix-list {
+ in foo-prefix
+ out bar-prefix
+ }
+ }
+ interface eth2 {
+ access-list {
+ in 198
+ out 199
+ }
+ prefix-list {
+ in foo-prefix
+ out bar-prefix
+ }
+ }
+ prefix-list {
+ in foo-prefix
+ out bar-prefix
+ }
+ }
+ interface eth0
+ interface eth1
+ interface eth2
+ network 2001:db8:1000::/64
+ network 2001:db8:1001::/64
+ network 2001:db8:2000::/64
+ network 2001:db8:2001::/64
+ passive-interface default
+ redistribute {
+ connected {
+ metric 8
+ route-map FooBar123
+ }
+ static {
+ metric 8
+ route-map FooBar123
+ }
+ }
+ route 2001:db8:1000::/64
+ }
}
service {
ssh {
diff --git a/src/migration-scripts/interfaces/18-to-19 b/src/migration-scripts/interfaces/18-to-19
index 31e253098..460032602 100755
--- a/src/migration-scripts/interfaces/18-to-19
+++ b/src/migration-scripts/interfaces/18-to-19
@@ -46,6 +46,20 @@ def migrate_rip(config, path, interface):
if len(config.list_nodes(path[:-1])) == 0:
config.delete(path[:-1])
+def migrate_ripng(config, path, interface):
+ path = path + ['ripng']
+ if config.exists(path):
+ new_base = ['protocols', 'ripng', 'interface']
+ config.set(new_base)
+ config.set_tag(new_base)
+ config.copy(path, new_base + [interface])
+ config.delete(path)
+
+ # if "ipv6 ripng" was the only setting, we can clean out the empty
+ # ip node afterwards
+ if len(config.list_nodes(path[:-1])) == 0:
+ config.delete(path[:-1])
+
if __name__ == '__main__':
if (len(argv) < 1):
print("Must specify file name!")
@@ -62,33 +76,48 @@ if __name__ == '__main__':
#
for type in config.list_nodes(['interfaces']):
for interface in config.list_nodes(['interfaces', type]):
- if_base = ['interfaces', type, interface, 'ip']
- migrate_rip(config, if_base, interface)
- migrate_ospf(config, if_base, interface)
+ ip_base = ['interfaces', type, interface, 'ip']
+ ipv6_base = ['interfaces', type, interface, 'ipv6']
+ migrate_rip(config, ip_base, interface)
+ migrate_ripng(config, ipv6_base, interface)
+ migrate_ospf(config, ip_base, interface)
vif_path = ['interfaces', type, interface, 'vif']
if config.exists(vif_path):
for vif in config.list_nodes(vif_path):
- vif_if_base = vif_path + [vif, 'ip']
- migrate_rip(config, vif_if_base, f'{interface}.{vif}')
- migrate_ospf(config, vif_if_base, f'{interface}.{vif}')
+ vif_ip_base = vif_path + [vif, 'ip']
+ vif_ipv6_base = vif_path + [vif, 'ipv6']
+ ifname = f'{interface}.{vif}'
+
+ migrate_rip(config, vif_ip_base, ifname)
+ migrate_ripng(config, vif_ipv6_base, ifname)
+ migrate_ospf(config, vif_ip_base, ifname)
+
vif_s_path = ['interfaces', type, interface, 'vif-s']
if config.exists(vif_s_path):
for vif_s in config.list_nodes(vif_s_path):
- vif_s_if_base = vif_s_path + [vif_s, 'ip']
+ vif_s_ip_base = vif_s_path + [vif_s, 'ip']
+ vif_s_ipv6_base = vif_s_path + [vif_s, 'ipv6']
# vif-c interfaces MUST be migrated before their parent vif-s
# interface as the migrate_*() functions delete the path!
vif_c_path = ['interfaces', type, interface, 'vif-s', vif_s, 'vif-c']
if config.exists(vif_c_path):
for vif_c in config.list_nodes(vif_c_path):
- vif_c_if_base = vif_c_path + [vif_c, 'ip']
- migrate_rip(config, vif_c_if_base, f'{interface}.{vif_s}.{vif_c}')
- migrate_ospf(config, vif_c_if_base, f'{interface}.{vif_s}.{vif_c}')
+ vif_c_ip_base = vif_c_path + [vif_c, 'ip']
+ vif_c_ipv6_base = vif_c_path + [vif_c, 'ipv6']
+ ifname = f'{interface}.{vif_s}.{vif_c}'
+
+ migrate_rip(config, vif_c_ip_base, ifname)
+ migrate_ripng(config, vif_c_ipv6_base, ifname)
+ migrate_ospf(config, vif_c_ip_base, ifname)
+
- migrate_rip(config, vif_s_if_base, f'{interface}.{vif_s}')
- migrate_ospf(config, vif_s_if_base, f'{interface}.{vif_s}')
+ ifname = f'{interface}.{vif_s}'
+ migrate_rip(config, vif_s_ip_base, ifname)
+ migrate_ripng(config, vif_s_ipv6_base, ifname)
+ migrate_ospf(config, vif_s_ip_base, ifname)
try:
with open(file_name, 'w') as f: