diff --git a/holo-bgp/src/events.rs b/holo-bgp/src/events.rs index e42514cd..64dcace6 100644 --- a/holo-bgp/src/events.rs +++ b/holo-bgp/src/events.rs @@ -166,7 +166,7 @@ fn process_nbr_update( rib, reach.prefixes.clone(), attrs, - &instance.shared, + instance.shared, &instance.state.policy_apply_tasks, ); } else { @@ -192,7 +192,7 @@ fn process_nbr_update( rib, prefixes, attrs, - &instance.shared, + instance.shared, &instance.state.policy_apply_tasks, ); } @@ -208,7 +208,7 @@ fn process_nbr_update( rib, prefixes, attrs, - &instance.shared, + instance.shared, &instance.state.policy_apply_tasks, ); } @@ -248,7 +248,7 @@ fn process_nbr_update( } // Schedule the BGP Decision Process. - instance.state.schedule_decision_process(&instance.tx); + instance.state.schedule_decision_process(instance.tx); Ok(()) } @@ -467,7 +467,7 @@ where } // Schedule the BGP Decision Process. - instance.state.schedule_decision_process(&instance.tx); + instance.state.schedule_decision_process(instance.tx); Ok(()) } @@ -634,7 +634,7 @@ where nbr, table, &reach, - &instance.shared, + instance.shared, &instance.state.policy_apply_tasks, ); } @@ -652,7 +652,7 @@ fn withdraw_routes( { // Update Adj-RIB-Out. for prefix in routes { - let dest = table.prefixes.get_mut(&prefix).unwrap(); + let dest = table.prefixes.get_mut(prefix).unwrap(); dest.adj_out_pre.remove(&nbr.remote_addr); if dest.adj_out_post.remove(&nbr.remote_addr).is_some() { let update_queue = A::update_queue(&mut nbr.update_queues); @@ -682,12 +682,11 @@ pub(crate) fn advertise_routes( // peer, the receiving BGP speaker SHALL NOT re-distribute the // routing information contained in that UPDATE message to other // internal peers". - if route.route_type == RouteType::Internal { - if let RouteOrigin::Neighbor { remote_addr, .. } = &route.origin - && *remote_addr == nbr.remote_addr - { - return false; - } + if route.route_type == RouteType::Internal + && let RouteOrigin::Neighbor { remote_addr, .. } = &route.origin + && *remote_addr == nbr.remote_addr + { + return false; } true @@ -695,7 +694,7 @@ pub(crate) fn advertise_routes( // Update pre-policy Adj-RIB-Out routes. for (prefix, route) in routes.clone() { - let dest = table.prefixes.get_mut(&prefix).unwrap(); + let dest = table.prefixes.get_mut(prefix).unwrap(); dest.adj_out_pre.insert(nbr.remote_addr, route.clone()); } diff --git a/holo-bgp/src/neighbor.rs b/holo-bgp/src/neighbor.rs index 5acfbe24..0157a743 100644 --- a/holo-bgp/src/neighbor.rs +++ b/holo-bgp/src/neighbor.rs @@ -242,7 +242,7 @@ impl Neighbor { fsm::State::Connect => match event { fsm::Event::Start => None, fsm::Event::Stop(_) => { - self.session_close(rib, &instance.tx, None); + self.session_close(rib, instance.tx, None); Some(fsm::State::Idle) } fsm::Event::Connected(stream, conn_info) => { @@ -262,12 +262,12 @@ impl Neighbor { Some(fsm::State::OpenSent) } fsm::Event::ConnFail => { - self.session_close(rib, &instance.tx, None); + self.session_close(rib, instance.tx, None); Some(fsm::State::Idle) } fsm::Event::RcvdError(error) => { let msg = NotificationMsg::from(error); - self.session_close(rib, &instance.tx, Some(msg)); + self.session_close(rib, instance.tx, Some(msg)); Some(fsm::State::Idle) } fsm::Event::Timer(fsm::Timer::ConnectRetry) => { @@ -279,7 +279,7 @@ impl Neighbor { } _ => { // FSM error. - self.session_close(rib, &instance.tx, None); + self.session_close(rib, instance.tx, None); Some(fsm::State::Idle) } }, @@ -287,7 +287,7 @@ impl Neighbor { fsm::State::Active => match event { fsm::Event::Start => None, fsm::Event::Stop(_) => { - self.session_close(rib, &instance.tx, None); + self.session_close(rib, instance.tx, None); Some(fsm::State::Idle) } fsm::Event::Connected(stream, conn_info) => { @@ -307,12 +307,12 @@ impl Neighbor { Some(fsm::State::OpenSent) } fsm::Event::ConnFail => { - self.session_close(rib, &instance.tx, None); + self.session_close(rib, instance.tx, None); Some(fsm::State::Idle) } fsm::Event::RcvdError(error) => { let msg = NotificationMsg::from(error); - self.session_close(rib, &instance.tx, Some(msg)); + self.session_close(rib, instance.tx, Some(msg)); Some(fsm::State::Idle) } fsm::Event::Timer(fsm::Timer::ConnectRetry) => { @@ -324,7 +324,7 @@ impl Neighbor { } _ => { // FSM error. - self.session_close(rib, &instance.tx, None); + self.session_close(rib, instance.tx, None); Some(fsm::State::Idle) } }, @@ -332,11 +332,11 @@ impl Neighbor { fsm::State::OpenSent => match event { fsm::Event::Start => None, fsm::Event::Stop(msg) => { - self.session_close(rib, &instance.tx, msg); + self.session_close(rib, instance.tx, msg); Some(fsm::State::Idle) } fsm::Event::ConnFail => { - self.session_close(rib, &instance.tx, None); + self.session_close(rib, instance.tx, None); self.connect_retry_start( &instance.tx.protocol_input.nbr_timer, ); @@ -344,7 +344,7 @@ impl Neighbor { } fsm::Event::RcvdError(error) => { let msg = NotificationMsg::from(error); - self.session_close(rib, &instance.tx, Some(msg)); + self.session_close(rib, instance.tx, Some(msg)); Some(fsm::State::Idle) } fsm::Event::RcvdOpen(msg) => { @@ -355,7 +355,7 @@ impl Neighbor { let error_code = ErrorCode::HoldTimerExpired; let error_subcode = 0; let msg = NotificationMsg::new(error_code, error_subcode); - self.session_close(rib, &instance.tx, Some(msg)); + self.session_close(rib, instance.tx, Some(msg)); Some(fsm::State::Idle) } _ => { @@ -364,7 +364,7 @@ impl Neighbor { let error_subcode = FsmErrorSubcode::UnexpectedMessageInOpenSent; let msg = NotificationMsg::new(error_code, error_subcode); - self.session_close(rib, &instance.tx, Some(msg)); + self.session_close(rib, instance.tx, Some(msg)); Some(fsm::State::Idle) } }, @@ -372,16 +372,16 @@ impl Neighbor { fsm::State::OpenConfirm => match event { fsm::Event::Start => None, fsm::Event::Stop(msg) => { - self.session_close(rib, &instance.tx, msg); + self.session_close(rib, instance.tx, msg); Some(fsm::State::Idle) } fsm::Event::ConnFail => { - self.session_close(rib, &instance.tx, None); + self.session_close(rib, instance.tx, None); Some(fsm::State::Idle) } fsm::Event::RcvdError(error) => { let msg = NotificationMsg::from(error); - self.session_close(rib, &instance.tx, Some(msg)); + self.session_close(rib, instance.tx, Some(msg)); Some(fsm::State::Idle) } fsm::Event::RcvdOpen(_msg) => { @@ -389,7 +389,7 @@ impl Neighbor { Some(fsm::State::Idle) } fsm::Event::RcvdNotif(_) => { - self.session_close(rib, &instance.tx, None); + self.session_close(rib, instance.tx, None); Some(fsm::State::Idle) } fsm::Event::RcvdKalive => { @@ -400,7 +400,7 @@ impl Neighbor { let error_code = ErrorCode::HoldTimerExpired; let error_subcode = 0; let msg = NotificationMsg::new(error_code, error_subcode); - self.session_close(rib, &instance.tx, Some(msg)); + self.session_close(rib, instance.tx, Some(msg)); Some(fsm::State::Idle) } _ => { @@ -409,7 +409,7 @@ impl Neighbor { let error_subcode = FsmErrorSubcode::UnexpectedMessageInOpenConfirm; let msg = NotificationMsg::new(error_code, error_subcode); - self.session_close(rib, &instance.tx, Some(msg)); + self.session_close(rib, instance.tx, Some(msg)); Some(fsm::State::Idle) } }, @@ -417,20 +417,20 @@ impl Neighbor { fsm::State::Established => match event { fsm::Event::Start => None, fsm::Event::Stop(msg) => { - self.session_close(rib, &instance.tx, msg); + self.session_close(rib, instance.tx, msg); Some(fsm::State::Idle) } fsm::Event::ConnFail => { - self.session_close(rib, &instance.tx, None); + self.session_close(rib, instance.tx, None); Some(fsm::State::Idle) } fsm::Event::RcvdError(error) => { let msg = NotificationMsg::from(error); - self.session_close(rib, &instance.tx, Some(msg)); + self.session_close(rib, instance.tx, Some(msg)); Some(fsm::State::Idle) } fsm::Event::RcvdNotif(_) => { - self.session_close(rib, &instance.tx, None); + self.session_close(rib, instance.tx, None); Some(fsm::State::Idle) } fsm::Event::RcvdKalive | fsm::Event::RcvdUpdate => { @@ -441,7 +441,7 @@ impl Neighbor { let error_code = ErrorCode::HoldTimerExpired; let error_subcode = 0; let msg = NotificationMsg::new(error_code, error_subcode); - self.session_close(rib, &instance.tx, Some(msg)); + self.session_close(rib, instance.tx, Some(msg)); Some(fsm::State::Idle) } _ => { @@ -450,7 +450,7 @@ impl Neighbor { let error_subcode = FsmErrorSubcode::UnexpectedMessageInEstablished; let msg = NotificationMsg::new(error_code, error_subcode); - self.session_close(rib, &instance.tx, Some(msg)); + self.session_close(rib, instance.tx, Some(msg)); Some(fsm::State::Idle) } }, @@ -620,10 +620,10 @@ impl Neighbor { // as they are sent all at once. pub(crate) fn message_list_send(&mut self, msg_list: Vec) { for msg in &msg_list { - Debug::NbrMsgTx(&self.remote_addr, &msg).log(); + Debug::NbrMsgTx(&self.remote_addr, msg).log(); // Update statistics. - self.statistics.msgs_sent.update(&msg); + self.statistics.msgs_sent.update(msg); // Keep track of the last sent notification. if let Message::Notification(msg) = &msg { @@ -709,7 +709,7 @@ impl Neighbor { } _ => None, }; - self.session_close(&mut instance.state.rib, &instance.tx, msg); + self.session_close(&mut instance.state.rib, instance.tx, msg); // Transition to the Idle state. return fsm::State::Idle; @@ -892,7 +892,7 @@ impl Neighbor { self, table, &routes, - &instance.shared, + instance.shared, &instance.state.policy_apply_tasks, ); } diff --git a/holo-bgp/src/packet/attribute.rs b/holo-bgp/src/packet/attribute.rs index f52b0324..f53ea767 100644 --- a/holo-bgp/src/packet/attribute.rs +++ b/holo-bgp/src/packet/attribute.rs @@ -668,7 +668,7 @@ impl AsPath { .iter() .map(|segment| match segment.seg_type { AsPathSegmentType::Set => 1, - AsPathSegmentType::Sequence => segment.members.iter().count(), + AsPathSegmentType::Sequence => segment.members.len(), // RFC 5065 - Section 5.3: // "When comparing routes using AS_PATH length, CONFED_SEQUENCE // and CONFED_SETs SHOULD NOT be counted". diff --git a/holo-bgp/src/policy.rs b/holo-bgp/src/policy.rs index c04a2fa5..0ce7c87a 100644 --- a/holo-bgp/src/policy.rs +++ b/holo-bgp/src/policy.rs @@ -44,7 +44,7 @@ pub(crate) fn neighbor_apply( nbr_addr: IpAddr, afi_safi: AfiSafi, routes: Vec<(IpNetwork, RoutePolicyInfo)>, - policies: &Vec>, + policies: &[Arc], match_sets: &MatchSets, default_policy: DefaultPolicyType, policy_resultp: &UnboundedSender, @@ -59,7 +59,7 @@ pub(crate) fn neighbor_apply( prefix, rpinfo, policies, - &match_sets, + match_sets, default_policy, ); @@ -85,7 +85,7 @@ fn process_policies( afi_safi: AfiSafi, prefix: IpNetwork, mut rpinfo: RoutePolicyInfo, - policies: &Vec>, + policies: &[Arc], match_sets: &MatchSets, default_policy: DefaultPolicyType, ) -> PolicyResult { @@ -187,7 +187,7 @@ fn process_stmt_condition( BgpPolicyCondition::MatchCommSet { value, match_type } => { if let Some(comm) = &attrs.comm { let set = match_sets.bgp.comms.get(value).unwrap(); - match_type.compare(&set, &comm.0) + match_type.compare(set, &comm.0) } else { false } @@ -196,7 +196,7 @@ fn process_stmt_condition( BgpPolicyCondition::MatchExtCommSet { value, match_type } => { if let Some(ext_comm) = &attrs.ext_comm { let set = match_sets.bgp.ext_comms.get(value).unwrap(); - match_type.compare(&set, &ext_comm.0) + match_type.compare(set, &ext_comm.0) } else { false } @@ -205,7 +205,7 @@ fn process_stmt_condition( BgpPolicyCondition::MatchExtv6CommSet { value, match_type } => { if let Some(extv6_comm) = &attrs.extv6_comm { let set = match_sets.bgp.extv6_comms.get(value).unwrap(); - match_type.compare(&set, &extv6_comm.0) + match_type.compare(set, &extv6_comm.0) } else { false } @@ -214,7 +214,7 @@ fn process_stmt_condition( BgpPolicyCondition::MatchLargeCommSet { value, match_type } => { if let Some(large_comm) = &attrs.large_comm { let set = match_sets.bgp.large_comms.get(value).unwrap(); - match_type.compare(&set, &large_comm.0) + match_type.compare(set, &large_comm.0) } else { false } @@ -223,7 +223,7 @@ fn process_stmt_condition( BgpPolicyCondition::MatchAsPathSet { value, match_type } => { let set = match_sets.bgp.as_paths.get(value).unwrap(); let asns = attrs.base.as_path.iter().collect(); - match_type.compare(&set, &asns) + match_type.compare(set, &asns) } // "match-next-hop-set" BgpPolicyCondition::MatchNexthopSet { value, match_type } => { @@ -232,7 +232,7 @@ fn process_stmt_condition( None => BgpNexthop::NexthopSelf, }; let set = match_sets.bgp.nexthops.get(value).unwrap(); - match_type.compare(&set, &nexthop) + match_type.compare(set, &nexthop) } }, // Ignore unsupported conditions. diff --git a/holo-bgp/src/rib.rs b/holo-bgp/src/rib.rs index 9b978a16..0f43800b 100644 --- a/holo-bgp/src/rib.rs +++ b/holo-bgp/src/rib.rs @@ -321,7 +321,7 @@ impl Route { ) = (&self.origin, &other.origin) { let reason = RouteRejectReason::HigherRouterId; - match a.cmp(&b) { + match a.cmp(b) { Ordering::Less => { return RouteCompare::Preferred(reason); } @@ -341,7 +341,7 @@ impl Route { ) = (&self.origin, &other.origin) { let reason = RouteRejectReason::HigherPeerAddress; - match a.cmp(&b) { + match a.cmp(b) { Ordering::Less => { return RouteCompare::Preferred(reason); } diff --git a/holo-daemon/src/northbound/client/grpc.rs b/holo-daemon/src/northbound/client/grpc.rs index ca44e3a8..8d499034 100644 --- a/holo-daemon/src/northbound/client/grpc.rs +++ b/holo-daemon/src/northbound/client/grpc.rs @@ -4,7 +4,6 @@ // SPDX-License-Identifier: MIT // -use std::convert::TryFrom; use std::pin::Pin; use std::time::SystemTime; diff --git a/holo-utils/src/bgp.rs b/holo-utils/src/bgp.rs index 29aff93a..02b29cca 100644 --- a/holo-utils/src/bgp.rs +++ b/holo-utils/src/bgp.rs @@ -66,6 +66,7 @@ pub struct LargeComm(pub [u8; 12]); #[derive(Clone, Copy, Debug, Eq, PartialEq)] #[derive(FromPrimitive, ToPrimitive)] #[derive(Deserialize, Serialize)] +#[repr(u32)] pub enum WellKnownCommunities { NoExport = 0xFFFFFF01, NoAdvertise = 0xFFFFFF02, diff --git a/holo-utils/src/ip.rs b/holo-utils/src/ip.rs index cb70c0d6..70d8f29b 100644 --- a/holo-utils/src/ip.rs +++ b/holo-utils/src/ip.rs @@ -5,7 +5,6 @@ // use std::borrow::Cow; -use std::convert::TryInto; use std::net::{ IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6, };