X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Fbgp_client.rs;h=5f436b1ca106f12d132952436961cd5df0db07a7;hb=f44ddf483a9e7f8cc136f6ac64de3e135429fd59;hp=dc5c6736a923fdfdbc2487d0fc51e2718034a40e;hpb=7ef74563891ca09202cd0a59f96f516fa44318f7;p=dnsseed-rust diff --git a/src/bgp_client.rs b/src/bgp_client.rs index dc5c673..5f436b1 100644 --- a/src/bgp_client.rs +++ b/src/bgp_client.rs @@ -22,7 +22,7 @@ use futures::sync::mpsc; use crate::printer::{Printer, Stat}; use crate::timeout_stream::TimeoutStream; -const PATH_SUFFIX_LEN: usize = 2; +const PATH_SUFFIX_LEN: usize = 3; #[derive(Clone)] struct Route { // 32 bytes with a path id u32 path_suffix: [u32; PATH_SUFFIX_LEN], @@ -31,7 +31,7 @@ struct Route { // 32 bytes with a path id u32 med: u32, } #[allow(dead_code)] -const ROUTE_LEN: usize = 32 - std::mem::size_of::<(u32, Route)>(); +const ROUTE_LEN: usize = 36 - std::mem::size_of::<(u32, Route)>(); // To keep memory tight (and since we dont' need such close alignment), newtype the v4/v6 routing // table entries to make sure they are aligned to single bytes. @@ -84,8 +84,8 @@ struct RoutingTable { impl RoutingTable { fn new() -> Self { Self { - v4_table: HashMap::new(), - v6_table: HashMap::new(), + v4_table: HashMap::with_capacity(900_000), + v6_table: HashMap::with_capacity(100_000), } } @@ -145,7 +145,6 @@ impl RoutingTable { NLRIEncoding::IP_MPLS_WITH_PATH_ID(_) => (), NLRIEncoding::IP_VPN_MPLS(_) => (), NLRIEncoding::L2VPN(_) => (), - NLRIEncoding::FLOWSPEC(_) => (), }; } @@ -176,7 +175,6 @@ impl RoutingTable { NLRIEncoding::IP_MPLS_WITH_PATH_ID(_) => (), NLRIEncoding::IP_VPN_MPLS(_) => (), NLRIEncoding::L2VPN(_) => (), - NLRIEncoding::FLOWSPEC(_) => (), }; } } @@ -222,6 +220,9 @@ impl codec::Decoder for MsgCoder { match reader.read() { Ok((_header, msg)) => { decoder.buf.advance(decoder.pos); + if let Message::Open(ref o) = &msg { + self.0 = Some(Capabilities::from_parameters(o.parameters.clone())); + } Ok(Some(msg)) }, Err(e) => match e.kind() {