Mark Bergsma has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/370894 )
Change subject: Allow BGP socket to listen on specific IPs and port ...................................................................... Allow BGP socket to listen on specific IPs and port Add global config option bgp-local-ips (default empty: all IPs) which takes a set of IPs for BGP to bind to. Add global config option bgp-local-port to override the default TCP port 179. Error handling has been altered to log a critical message and raise an exception if pybal fails to bind to the port on on one of the IP addresses, instead of ignoring it. Bug: T103882 Change-Id: I0e4a1cae515602eea8ab07bffb61b9009d5a995a --- M pybal/bgpfailover.py 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/pybal/bgpfailover.py b/pybal/bgpfailover.py index 5392bcb..b967837 100755 --- a/pybal/bgpfailover.py +++ b/pybal/bgpfailover.py @@ -8,6 +8,7 @@ """ from twisted.internet import reactor +from twisted.internet.error import CannotListenError from pybal.util import log try: @@ -67,11 +68,23 @@ else: BGPFailover.peerings.append(self.bgpPeering) reactor.addSystemEventTrigger('before', 'shutdown', self.closeSession, self.bgpPeering) - try: - # Try to listen on the BGP port, not fatal if fails - reactor.listenTCP(bgp.PORT, bgp.BGPServerFactory({self.bgpPeering.peerAddr: self.bgpPeering})) - except Exception: - pass + + # Bind on the IPs listed in 'bgp_local_ips'. Default to + # localhost v4 and v6 if no IPs have been specified in the + # configuration. + bgp_local_ips = eval(self.globalConfig.get('bgp-local-ips', '[""]')) + bgp_local_port = self.globalConfig.getint('bgp-local-port', bgp.PORT) + # Try to listen on the BGP port, not fatal if fails + for ip in bgp_local_ips: + try: + reactor.listenTCP( + bgp_local_port, + bgp.BGPServerFactory({self.bgpPeering.peerAddr: self.bgpPeering}), + interface=ip) + except CannotListenError as e: + log.critical( + "Could not listen for BGP connections: " + str(e)) + raise def closeSession(self, peering): log.info("Clearing session to {}".format(peering.peerAddr)) -- To view, visit https://gerrit.wikimedia.org/r/370894 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I0e4a1cae515602eea8ab07bffb61b9009d5a995a Gerrit-PatchSet: 3 Gerrit-Project: operations/debs/pybal Gerrit-Branch: master Gerrit-Owner: Mark Bergsma <m...@wikimedia.org> Gerrit-Reviewer: Giuseppe Lavagetto <glavage...@wikimedia.org> Gerrit-Reviewer: Mark Bergsma <m...@wikimedia.org> Gerrit-Reviewer: Volans <rcocci...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits