Right now in RNS 1.5.5 you can only make interfaces discoverable that are in either gateway, ap, or internal mode (depending on the interface type). This can be frustrating. For example if you set up an interface in internal mode you will need to set the rest up as boundary for the internal mode to take effect. So not discoverable? I want to share my configuration showing how to work around this issue so to spare others some work and possibly also start a discussion that may or may not shape how discoverable interfaces work in the future (thanks mark).
Working around the limitation is pretty straightforward actually. Lets describe the scenario:
Say you already have your Backbone Listeners and Backbone connections to the wider net set up. You decided to also add another interface in internal mode protected by IFAC so you can save some battery life on your mobile devices. This will of course only work if you set your other, public, backbone listeners to boundary mode, so announces wont propagate to your internal interface, which was the whole point. In addition to that you also need to enable recursive_prs so people on the public interface can still request paths through it. You now finally want to make the public listener discoverable. But as soon as do that it will be forced to gateway mode again. Oh no. You internal interface still receives and propagates all announces you receive from the global ret.
Now, all you need to do to make this work properly is to create a third "dummy" interface that listens on something nobody will ever connect to, like localhost. Now simply move all the discovery configurations to it instead of the actual interface you want people to find. Just make sure the reachable_on parameter is set and points to where you are actually reachable. Now the announces will reach the wider net, people can connect to it, requests paths over it, and the internal interface only propagates announces received from its own peers. Et voilà!
Here is a config snippet that shows what I mean:
[[Backbone Listener - Dummy]]
type = BackboneInterface
enabled = yes
listen_on = localhost
port = 4242
discoverable = yes
discovery_name = My-public-backbone-interface
reachable_on = 203.0.113.0
announce_interval = 720
discovery_stamp_value = 24
discovery_lxmf_address = xxxxxxxxxxxxxxxxxxxxx
latitude = 0.0
longitude = 0.0
height = 0
[[Backbone Listener]]
type = BackboneInterface
enabled = yes
listen_on = 203.0.113.0
port = 4242
mode = boundary
# so internal interfaces work, but paths can still be requested from here
recursive_prs = yes
gravity = 50
[[Backbone Listener - Internal]]
type = BackboneInterface
enabled = yes
listen_on = 203.0.113.0
port = 4343
mode = internal
gravity = 100
announce_rate_target = 10800 # 3 hours
announce_rate_grace = 3
announce_rate_penalty = 43200 # 12 hours
passphrase = mysecretpassphrase