From 7ef74563891ca09202cd0a59f96f516fa44318f7 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Sun, 31 May 2020 13:30:07 -0400 Subject: [PATCH] Update to upstream bgp-rs --- Cargo.toml | 2 +- src/bgp_client.rs | 31 +++++++++++++++++++------------ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 075f296..a628f3f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] bitcoin = "0.19" bitcoin_hashes = "0.7" -bgp-rs = { git = "https://github.com/TheBlueMatt/bgp-rs", rev = "98f91c4e9e386bfdac0f8e2e9886fb15b15c861f" } +bgp-rs = { git = "https://github.com/TheBlueMatt/bgp-rs", rev = "96bd15e67789b91f679f835fc62ff3beb16685bf" } tokio = "0.1" bytes = "0.4" futures = "0.1" diff --git a/src/bgp_client.rs b/src/bgp_client.rs index ba3a164..dc5c673 100644 --- a/src/bgp_client.rs +++ b/src/bgp_client.rs @@ -142,6 +142,10 @@ impl RoutingTable { } }, NLRIEncoding::IP_MPLS(_) => (), + NLRIEncoding::IP_MPLS_WITH_PATH_ID(_) => (), + NLRIEncoding::IP_VPN_MPLS(_) => (), + NLRIEncoding::L2VPN(_) => (), + NLRIEncoding::FLOWSPEC(_) => (), }; } @@ -169,6 +173,10 @@ impl RoutingTable { } }, NLRIEncoding::IP_MPLS(_) => (), + NLRIEncoding::IP_MPLS_WITH_PATH_ID(_) => (), + NLRIEncoding::IP_VPN_MPLS(_) => (), + NLRIEncoding::L2VPN(_) => (), + NLRIEncoding::FLOWSPEC(_) => (), }; } } @@ -196,8 +204,8 @@ impl<'a> std::io::Read for BytesDecoder<'a> { } } -struct MsgCoder<'a>(&'a Printer); -impl<'a> codec::Decoder for MsgCoder<'a> { +struct MsgCoder(Option); +impl codec::Decoder for MsgCoder { type Item = Message; type Error = std::io::Error; @@ -206,13 +214,12 @@ impl<'a> codec::Decoder for MsgCoder<'a> { buf: bytes, pos: 0 }; - match (Reader { + let def_cap = Default::default(); + let mut reader = Reader { stream: &mut decoder, - capabilities: Capabilities { - FOUR_OCTET_ASN_SUPPORT: true, - EXTENDED_PATH_NLRI_SUPPORT: true, - } - }).read() { + capabilities: if let Some(cap) = &self.0 { cap } else { &def_cap }, + }; + match reader.read() { Ok((_header, msg)) => { decoder.buf.advance(decoder.pos); Ok(Some(msg)) @@ -224,12 +231,12 @@ impl<'a> codec::Decoder for MsgCoder<'a> { } } } -impl<'a> codec::Encoder for MsgCoder<'a> { +impl codec::Encoder for MsgCoder { type Item = Message; type Error = std::io::Error; fn encode(&mut self, msg: Message, res: &mut bytes::BytesMut) -> Result<(), std::io::Error> { - msg.write(&mut BytesCoder(res))?; + msg.encode(&mut BytesCoder(res))?; Ok(()) } } @@ -340,7 +347,7 @@ impl BGPClient { future::err(()) }) }).and_then(move |stream| { - let (write, read) = Framed::new(stream.0, MsgCoder(printer)).split(); + let (write, read) = Framed::new(stream.0, MsgCoder(None)).split(); let (mut sender, receiver) = mpsc::channel(10); // We never really should send more than 10 messages unless they're dumb tokio::spawn(write.sink_map_err(|_| { () }).send_all(receiver) .then(|_| { @@ -359,7 +366,7 @@ impl BGPClient { OpenCapability::AddPath(vec![ (AFI::IPV4, SAFI::Unicast, AddPathDirection::ReceivePaths), (AFI::IPV6, SAFI::Unicast, AddPathDirection::ReceivePaths)]), - ])] + ])], })); TimeoutStream::new_persistent(read, timeout).for_each(move |bgp_msg| { if client.shutdown.load(Ordering::Relaxed) { -- 2.39.5