Skip to content

Commit

Permalink
routing: implement pub-sub for route redistribution updates
Browse files Browse the repository at this point in the history
This change prevents the default redistribution of all routes to
every protocol instance, which could lead to significant overhead in
certain scenarios.

For holo-ldp, only non-BGP route types are redistributed, as allocating
labels for BGP routes is outside the scope of the LDP protocol.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
  • Loading branch information
rwestphal committed Feb 11, 2025
1 parent 840e8d5 commit 56d3e71
Show file tree
Hide file tree
Showing 37 changed files with 280 additions and 99 deletions.
57 changes: 32 additions & 25 deletions holo-bgp/src/northbound/configuration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ pub enum Event {
NeighborDelete(IpAddr),
NeighborReset(IpAddr, NotificationMsg),
NeighborUpdateAuth(IpAddr),
RedistributeRequest(Protocol, AddressFamily),
RedistributeDelete(Protocol, AfiSafi),
RedistributeIbusSub(Protocol, AddressFamily),
RedistributeDelete(Protocol, AddressFamily, AfiSafi),
}

pub static VALIDATION_CALLBACKS: Lazy<ValidationCallbacks> =
Expand Down Expand Up @@ -476,7 +476,7 @@ fn load_callbacks() -> Callbacks<Instance> {
afi_safi.redistribution.insert(protocol, Default::default());

let event_queue = args.event_queue;
event_queue.insert(Event::RedistributeRequest(protocol, AddressFamily::Ipv4));
event_queue.insert(Event::RedistributeIbusSub(protocol, AddressFamily::Ipv4));
})
.delete_apply(|instance, args| {
let (afi_safi, protocol) = args.list_entry.into_redistribution().unwrap();
Expand All @@ -485,7 +485,7 @@ fn load_callbacks() -> Callbacks<Instance> {
afi_safi.redistribution.remove(&protocol);

let event_queue = args.event_queue;
event_queue.insert(Event::RedistributeDelete(protocol, AfiSafi::Ipv4Unicast));
event_queue.insert(Event::RedistributeDelete(protocol, AddressFamily::Ipv4, AfiSafi::Ipv4Unicast));
})
.lookup(|_instance, list_entry, dnode| {
let afi_safi = list_entry.into_afi_safi().unwrap();
Expand Down Expand Up @@ -562,7 +562,7 @@ fn load_callbacks() -> Callbacks<Instance> {
afi_safi.redistribution.insert(protocol, Default::default());

let event_queue = args.event_queue;
event_queue.insert(Event::RedistributeRequest(protocol, AddressFamily::Ipv6));
event_queue.insert(Event::RedistributeIbusSub(protocol, AddressFamily::Ipv6));
})
.delete_apply(|instance, args| {
let (afi_safi, protocol) = args.list_entry.into_redistribution().unwrap();
Expand All @@ -571,7 +571,7 @@ fn load_callbacks() -> Callbacks<Instance> {
afi_safi.redistribution.remove(&protocol);

let event_queue = args.event_queue;
event_queue.insert(Event::RedistributeDelete(protocol, AfiSafi::Ipv6Unicast));
event_queue.insert(Event::RedistributeDelete(protocol, AddressFamily::Ipv6, AfiSafi::Ipv6Unicast));
})
.lookup(|_instance, list_entry, dnode| {
let afi_safi = list_entry.into_afi_safi().unwrap();
Expand Down Expand Up @@ -1362,30 +1362,37 @@ impl Provider for Instance {
);
}
}
Event::RedistributeRequest(protocol, af) => {
Event::RedistributeIbusSub(protocol, af) => {
let _ =
self.tx.ibus.routing.send(IbusMsg::RouteRedistributeDump {
self.tx.ibus.routing.send(IbusMsg::RouteRedistributeSub {
subscriber: self.tx.ibus.subscriber.clone(),
protocol,
af: Some(af),
});
}
Event::RedistributeDelete(protocol, afi_safi) => {
let Some((mut instance, _)) = self.as_up() else {
return;
};

match afi_safi {
AfiSafi::Ipv4Unicast => {
redistribute_delete::<Ipv4Unicast>(
&mut instance,
protocol,
);
}
AfiSafi::Ipv6Unicast => {
redistribute_delete::<Ipv6Unicast>(
&mut instance,
protocol,
);
Event::RedistributeDelete(protocol, af, afi_safi) => {
let _ = self.tx.ibus.routing.send(
IbusMsg::RouteRedistributeUnsub {
subscriber: self.tx.ibus.subscriber.clone(),
protocol,
af: Some(af),
},
);

if let Some((mut instance, _)) = self.as_up() {
match afi_safi {
AfiSafi::Ipv4Unicast => {
redistribute_delete::<Ipv4Unicast>(
&mut instance,
protocol,
);
}
AfiSafi::Ipv6Unicast => {
redistribute_delete::<Ipv6Unicast>(
&mut instance,
protocol,
);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
{"Ibus":{"PolicyUpd":{"name":"REDIST","stmts":{"1":{"name":"1","prefix_set_match_type":"Any","tag_set_match_type":"Any","conditions":[["MatchPrefixSet",{"MatchPrefixSet":"LOOPBACK"}]],"actions":[["Accept",{"Accept":true}]]}}}}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Ibus":{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"1.1.1.1/32","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":1}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.1.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":3}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.2.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":5}}]}}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{"RouterIdSub":{}}
{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}
{"NexthopTrack":"10.0.1.2"}
{"RouteIpAdd":{"protocol":"bgp","prefix":"2.2.2.2/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.1.2","labels":[],"resolved":[]}}]}}
{"NexthopTrack":"10.0.2.3"}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
{"Protocol":{"TcpConnect":{"conn_info":{"local_addr":"10.0.1.2","local_port":39674,"remote_addr":"10.0.1.1","remote_port":179}}}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Ibus":{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"2.2.2.2/32","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":1}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.1.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":2}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.3.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":4}}]}}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{"RouterIdSub":{}}
{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}
{"NexthopTrack":"10.0.1.1"}
{"RouteIpAdd":{"protocol":"bgp","prefix":"1.1.1.1/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.1.1","labels":[],"resolved":[]}}]}}
{"RouteIpAdd":{"protocol":"bgp","prefix":"3.3.3.3/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.1.1","labels":[],"resolved":[]}}]}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
{"Protocol":{"TcpConnect":{"conn_info":{"local_addr":"10.0.2.3","local_port":43240,"remote_addr":"10.0.2.1","remote_port":179}}}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Ibus":{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"3.3.3.3/32","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":1}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.2.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":4}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"172.16.1.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":3}}]}}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{"RouterIdSub":{}}
{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}
{"NexthopTrack":"10.0.2.1"}
{"RouteIpAdd":{"protocol":"bgp","prefix":"1.1.1.1/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.2.1","labels":[],"resolved":[]}}]}}
{"RouteIpAdd":{"protocol":"bgp","prefix":"2.2.2.2/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.2.1","labels":[],"resolved":[]}}]}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
{"Protocol":{"TcpConnect":{"conn_info":{"local_addr":"10.0.3.4","local_port":45164,"remote_addr":"10.0.3.2","remote_port":179}}}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Ibus":{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"4.4.4.4/32","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":1}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.3.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":3}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"172.16.1.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":2}}]}}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{"RouterIdSub":{}}
{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}
{"NexthopTrack":"10.0.3.2"}
{"RouteIpAdd":{"protocol":"bgp","prefix":"1.1.1.1/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.3.2","labels":[],"resolved":[]}}]}}
{"RouteIpAdd":{"protocol":"bgp","prefix":"2.2.2.2/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.3.2","labels":[],"resolved":[]}}]}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
{"Protocol":{"TriggerDecisionProcess":null}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Ibus":{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"1.1.1.1/32","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":1}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.1.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":3}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.2.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":5}}]}}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{"RouterIdSub":{}}
{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}
{"NexthopTrack":"10.0.1.2"}
{"RouteIpAdd":{"protocol":"bgp","prefix":"2.2.2.2/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.1.2","labels":[],"resolved":[]}}]}}
{"RouteIpAdd":{"protocol":"bgp","prefix":"3.3.3.3/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.1.2","labels":[],"resolved":[]}}]}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
{"Protocol":{"TcpConnect":{"conn_info":{"local_addr":"10.0.1.2","local_port":37086,"remote_addr":"10.0.1.1","remote_port":179}}}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Ibus":{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"2.2.2.2/32","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":1}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.1.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":2}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.4.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":4}}]}}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{"RouterIdSub":{}}
{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}
{"NexthopTrack":"10.0.1.1"}
{"RouteIpAdd":{"protocol":"bgp","prefix":"1.1.1.1/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.1.1","labels":[],"resolved":[]}}]}}
{"NexthopTrack":"10.0.4.3"}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
{"Protocol":{"TcpConnect":{"conn_info":{"local_addr":"10.0.4.3","local_port":41756,"remote_addr":"10.0.4.2","remote_port":179}}}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Ibus":{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"3.3.3.3/32","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":1}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.4.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":3}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.5.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":4}}]}}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{"RouterIdSub":{}}
{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}
{"NexthopTrack":"10.0.4.2"}
{"RouteIpAdd":{"protocol":"bgp","prefix":"1.1.1.1/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.4.2","labels":[],"resolved":[]}}]}}
{"RouteIpAdd":{"protocol":"bgp","prefix":"2.2.2.2/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.4.2","labels":[],"resolved":[]}}]}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
{"Protocol":{"TcpConnect":{"conn_info":{"local_addr":"10.0.2.4","local_port":44236,"remote_addr":"10.0.2.1","remote_port":179}}}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Ibus":{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"4.4.4.4/32","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":1}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.2.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":4}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.6.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":3}}]}}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{"RouterIdSub":{}}
{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}
{"NexthopTrack":"10.0.2.1"}
{"RouteIpAdd":{"protocol":"bgp","prefix":"1.1.1.1/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.2.1","labels":[],"resolved":[]}}]}}
{"RouteIpAdd":{"protocol":"bgp","prefix":"2.2.2.2/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.2.1","labels":[],"resolved":[]}}]}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{"Ibus":{"RouterIdUpdate":"5.5.5.5"}}
{"Ibus":{"PolicyMatchSetsUpd":{"prefixes":[[["LOOPBACK","Ipv4"],{"name":"LOOPBACK","mode":"Ipv4","prefixes":[{"prefix":"5.5.5.5/32","masklen_lower":32,"masklen_upper":32}]}]],"neighbors":{},"tags":{},"bgp":{"as_paths":{},"comms":{},"ext_comms":{},"extv6_comms":{},"large_comms":{},"nexthops":{}}}}}
{"Ibus":{"PolicyUpd":{"name":"REDIST","stmts":{"1":{"name":"1","prefix_set_match_type":"Any","tag_set_match_type":"Any","conditions":[["MatchPrefixSet",{"MatchPrefixSet":"LOOPBACK"}]],"actions":[["Accept",{"Accept":true}]]}}}}}
{"Ibus":{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"5.5.5.5/32","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":1}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.3.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":6}}]}}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{"RouterIdSub":{}}
{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}
{"NexthopTrack":"10.0.3.1"}
{"RouteIpAdd":{"protocol":"bgp","prefix":"1.1.1.1/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.3.1","labels":[],"resolved":[]}}]}}
{"RouteIpAdd":{"protocol":"bgp","prefix":"2.2.2.2/32","distance":20,"metric":0,"tag":null,"nexthops":[{"Recursive":{"addr":"10.0.3.1","labels":[],"resolved":[]}}]}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
{"Protocol":{"TcpConnect":{"conn_info":{"local_addr":"10.0.7.6","local_port":53478,"remote_addr":"10.0.7.5","remote_port":179}}}}
{"Protocol":{"TcpAccept":{"conn_info":{"local_addr":"10.0.7.6","local_port":179,"remote_addr":"10.0.7.5","remote_port":38170}}}}
{"Protocol":{"TriggerDecisionProcess":null}}
{"Ibus":{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"6.6.6.6/32","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":1}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.5.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":2}}]}}}
{"Ibus":{"RouteRedistributeAdd":{"protocol":"direct","prefix":"10.0.6.0/24","distance":0,"metric":0,"tag":null,"nexthops":[{"Interface":{"ifindex":3}}]}}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{"RouterIdSub":{}}
{"RouteRedistributeDump":{"protocol":"direct","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}
{"NexthopTrack":"10.0.7.5"}
{"NexthopTrack":"10.0.5.3"}
{"NexthopTrack":"10.0.6.4"}
Expand Down
3 changes: 3 additions & 0 deletions holo-ldp/src/instance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,9 @@ impl ProtocolInstance for Instance {
async fn init(&mut self) {
// Request information about the system Router ID.
southbound::tx::router_id_sub(&self.tx.ibus);

// Subscribe for the redistribution of all non-BGP routes.
southbound::tx::route_redistribute_sub(&self.tx.ibus);
}

async fn shutdown(mut self) {
Expand Down
13 changes: 13 additions & 0 deletions holo-ldp/src/southbound/tx.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
//

use holo_utils::ibus::{IbusChannelsTx, IbusMsg};
use holo_utils::ip::AddressFamily;
use holo_utils::protocol::Protocol;
use holo_utils::southbound::{self, LabelInstallMsg, LabelUninstallMsg};

Expand All @@ -18,6 +19,18 @@ pub(crate) fn router_id_sub(ibus_tx: &IbusChannelsTx) {
});
}

pub(crate) fn route_redistribute_sub(ibus_tx: &IbusChannelsTx) {
for protocol in
Protocol::route_types().filter(|protocol| *protocol != Protocol::BGP)
{
let _ = ibus_tx.routing.send(IbusMsg::RouteRedistributeSub {
subscriber: ibus_tx.subscriber.clone(),
protocol,
af: Some(AddressFamily::Ipv4),
});
}
}

pub(crate) fn label_install(
ibus_tx: &IbusChannelsTx,
fec: &FecInner,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
{"RouteRedistributeSub":{"protocol":"direct","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"isis","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"ldp","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"ospfv2","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"ospfv3","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"ripv2","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"ripng","af":"Ipv4"}}
{"RouteRedistributeSub":{"protocol":"static","af":"Ipv4"}}
{"RouterIdSub":{}}
{"InterfaceSub":{"ifname":"eth-rt2","af":"Ipv4"}}
{"InterfaceSub":{"ifname":"eth-rt3","af":"Ipv4"}}
Expand Down
Loading

0 comments on commit 56d3e71

Please sign in to comment.