Skip to content

Commit 4d9d45a

Browse files
authored
Merge pull request #4353 from natali-rs1985/T5810
T5810: Add support for RPKI source ip
2 parents c63b116 + 7f1c5d9 commit 4d9d45a

File tree

3 files changed

+39
-2
lines changed

3 files changed

+39
-2
lines changed

data/templates/frr/rpki.frr.j2

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ rpki
55
{% for peer, peer_config in cache.items() %}
66
{# port is mandatory and preference uses a default value #}
77
{% if peer_config.ssh.username is vyos_defined %}
8-
rpki cache ssh {{ peer | replace('_', '-') }} {{ peer_config.port }} {{ peer_config.ssh.username }} {{ peer_config.ssh.private_key_file }} {{ peer_config.ssh.public_key_file }} preference {{ peer_config.preference }}
8+
rpki cache ssh {{ peer | replace('_', '-') }} {{ peer_config.port }} {{ peer_config.ssh.username }} {{ peer_config.ssh.private_key_file }} {{ peer_config.ssh.public_key_file }}{{ ' source ' ~ peer_config.source_address if peer_config.source_address is vyos_defined }} preference {{ peer_config.preference }}
99
{% else %}
10-
rpki cache tcp {{ peer | replace('_', '-') }} {{ peer_config.port }} preference {{ peer_config.preference }}
10+
rpki cache tcp {{ peer | replace('_', '-') }} {{ peer_config.port }}{{ ' source ' ~ peer_config.source_address if peer_config.source_address is vyos_defined }} preference {{ peer_config.preference }}
1111
{% endif %}
1212
{% endfor %}
1313
{% endif %}

interface-definitions/protocols_rpki.xml.in

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
</constraint>
4343
</properties>
4444
</leafNode>
45+
#include <include/source-address-ipv4.xml.i>
4546
<node name="ssh">
4647
<properties>
4748
<help>RPKI SSH connection settings</help>

smoketest/scripts/cli/test_protocols_rpki.py

+36
Original file line numberDiff line numberDiff line change
@@ -248,5 +248,41 @@ def test_rpki_verify_preference(self):
248248
with self.assertRaises(ConfigSessionError):
249249
self.cli_commit()
250250

251+
def test_rpki_source_address(self):
252+
peer = '192.0.2.1'
253+
port = '8080'
254+
preference = '1'
255+
username = 'foo'
256+
source_address = '100.10.10.1'
257+
258+
self.cli_set(['interfaces', 'ethernet', 'eth0', 'address', f'{source_address}/24'])
259+
260+
# Configure a TCP cache server
261+
self.cli_set(base_path + ['cache', peer, 'port', port])
262+
self.cli_set(base_path + ['cache', peer, 'preference', preference])
263+
self.cli_set(base_path + ['cache', peer, 'source-address', source_address])
264+
self.cli_commit()
265+
266+
# Verify FRR configuration
267+
frrconfig = self.getFRRconfig('rpki')
268+
self.assertIn(f'rpki cache tcp {peer} {port} source {source_address} preference {preference}', frrconfig)
269+
270+
self.cli_set(['pki', 'openssh', rpki_key_name, 'private', 'key', rpki_ssh_key.replace('\n', '')])
271+
self.cli_set(['pki', 'openssh', rpki_key_name, 'public', 'key', rpki_ssh_pub.replace('\n', '')])
272+
self.cli_set(['pki', 'openssh', rpki_key_name, 'public', 'type', rpki_key_type])
273+
274+
# Configure a SSH cache server
275+
self.cli_set(base_path + ['cache', peer, 'ssh', 'username', username])
276+
self.cli_set(base_path + ['cache', peer, 'ssh', 'key', rpki_key_name])
277+
self.cli_commit()
278+
279+
# Verify FRR configuration
280+
frrconfig = self.getFRRconfig('rpki')
281+
self.assertIn(
282+
f'rpki cache ssh {peer} {port} {username} /run/frr/id_rpki_{peer} /run/frr/id_rpki_{peer}.pub source {source_address} preference {preference}',
283+
frrconfig,
284+
)
285+
286+
251287
if __name__ == '__main__':
252288
unittest.main(verbosity=2)

0 commit comments

Comments
 (0)