def new_open(self, restarted, asn4, config, enabledFamilies=[]): '''Same as exabgp.Protocol.new_open except that we advertise support for MPLS VPN and RTC''' asn = self.neighbor.local_as # (we don't support ASN4) o = Open(4, asn, self.neighbor.router_id.ip, Capabilities().default(self.neighbor, restarted), self.neighbor.hold_time) o.capabilities[Capabilities.MULTIPROTOCOL_EXTENSIONS].remove( (AFI(AFI.ipv4), SAFI(SAFI.flow_ipv4))) o.capabilities[Capabilities.MULTIPROTOCOL_EXTENSIONS].remove( (AFI(AFI.ipv4), SAFI(SAFI.unicast))) o.capabilities[Capabilities.MULTIPROTOCOL_EXTENSIONS].remove( (AFI(AFI.ipv6), SAFI(SAFI.unicast))) for afi_safi in enabledFamilies: o.capabilities[Capabilities.MULTIPROTOCOL_EXTENSIONS].append( afi_safi) if config['enable_rtc']: o.capabilities[Capabilities.MULTIPROTOCOL_EXTENSIONS].append( (AFI(AFI.ipv4), SAFI(SAFI.rtc))) if not self.connection.write(o.message()): raise Exception("Error while sending open") return o
def OpenFactory(self, data): version = ord(data[0]) if version != 4: # Only version 4 is supported nowdays.. raise Notify(2, 1, data[0]) asn = unpack('!H', data[1:3])[0] hold_time = unpack('!H', data[3:5])[0] numeric = unpack('!L', data[5:9])[0] router_id = "%d.%d.%d.%d" % (numeric >> 24, (numeric >> 16) & 0xFF, (numeric >> 8) & 0xFF, numeric & 0xFF) capabilities = self.CapabilitiesFactory(data[9:]) return Open(version, asn, router_id, capabilities, hold_time)
def new_open(self, restarted, asn4): if asn4: asn = self.neighbor.local_as else: asn = AS_TRANS o = Open(4, asn, self.neighbor.router_id.ip, Capabilities().default(self.neighbor, restarted), self.neighbor.hold_time) if not self.connection.write(o.message()): raise Failure('Could not send open') return o