@@ -305,104 +305,57 @@ impl<Cnx: BgpConnection + 'static> Router<Cnx> {
305305 }
306306 }
307307
308+ #[ allow( clippy:: too_many_arguments) ]
308309 pub fn ensure_session (
309310 self : & Arc < Self > ,
310311 peer : PeerConfig ,
311312 bind_addr : Option < SocketAddr > ,
312313 event_tx : Sender < FsmEvent < Cnx > > ,
313314 event_rx : Receiver < FsmEvent < Cnx > > ,
314315 info : SessionInfo ,
316+ unnumbered_manager : Option < Arc < dyn BgpUnnumbered > > ,
315317 ) -> Result < EnsureSessionResult < Cnx > , Error > {
316318 let sessions = lock ! ( self . sessions) ;
317- let key = PeerId :: Ip ( peer. host . ip ( ) ) ;
318- if sessions. contains_key ( & key) {
319+ if sessions. contains_key ( & peer. id ) {
319320 drop ( sessions) ;
320321 Ok ( EnsureSessionResult :: Updated (
321322 self . update_session ( peer, info) ?,
322323 ) )
323- } else {
324- Ok ( EnsureSessionResult :: New ( self . new_session_locked (
325- sessions, key, peer, bind_addr, event_tx, event_rx, info, None ,
326- ) ?) )
327- }
328- }
329-
330- #[ allow( clippy:: too_many_arguments) ]
331- pub fn ensure_unnumbered_session (
332- self : & Arc < Self > ,
333- interface : String ,
334- peer : PeerConfig ,
335- bind_addr : Option < SocketAddr > ,
336- event_tx : Sender < FsmEvent < Cnx > > ,
337- event_rx : Receiver < FsmEvent < Cnx > > ,
338- info : SessionInfo ,
339- unnumbered_manager : Arc < dyn BgpUnnumbered > ,
340- ) -> Result < EnsureSessionResult < Cnx > , Error > {
341- let sessions = lock ! ( self . sessions) ;
342- let key = PeerId :: Interface ( interface. clone ( ) ) ;
343- if sessions. contains_key ( & key) {
344- drop ( sessions) ;
345- Ok ( EnsureSessionResult :: Updated (
346- self . update_unnumbered_session ( & interface, peer, info) ?,
347- ) )
348324 } else {
349325 Ok ( EnsureSessionResult :: New ( self . new_session_locked (
350326 sessions,
351- key,
352327 peer,
353328 bind_addr,
354329 event_tx,
355330 event_rx,
356331 info,
357- Some ( unnumbered_manager) ,
332+ unnumbered_manager,
358333 ) ?) )
359334 }
360335 }
361336
362- pub fn new_session (
363- self : & Arc < Self > ,
364- peer : PeerConfig ,
365- bind_addr : Option < SocketAddr > ,
366- event_tx : Sender < FsmEvent < Cnx > > ,
367- event_rx : Receiver < FsmEvent < Cnx > > ,
368- info : SessionInfo ,
369- ) -> Result < Arc < SessionRunner < Cnx > > , Error > {
370- let sessions = lock ! ( self . sessions) ;
371- let key = PeerId :: Ip ( peer. host . ip ( ) ) ;
372- if sessions. contains_key ( & key) {
373- Err ( Error :: PeerExists )
374- } else {
375- self . new_session_locked (
376- sessions, key, peer, bind_addr, event_tx, event_rx, info, None ,
377- )
378- }
379- }
380-
381337 #[ allow( clippy:: too_many_arguments) ]
382- pub fn new_unnumbered_session (
338+ pub fn new_session (
383339 self : & Arc < Self > ,
384- interface : String ,
385340 peer : PeerConfig ,
386341 bind_addr : Option < SocketAddr > ,
387342 event_tx : Sender < FsmEvent < Cnx > > ,
388343 event_rx : Receiver < FsmEvent < Cnx > > ,
389344 info : SessionInfo ,
390- unnumbered_manager : Arc < dyn BgpUnnumbered > ,
345+ unnumbered_manager : Option < Arc < dyn BgpUnnumbered > > ,
391346 ) -> Result < Arc < SessionRunner < Cnx > > , Error > {
392347 let sessions = lock ! ( self . sessions) ;
393- let key = PeerId :: Interface ( interface) ;
394- if sessions. contains_key ( & key) {
348+ if sessions. contains_key ( & peer. id ) {
395349 Err ( Error :: PeerExists )
396350 } else {
397351 self . new_session_locked (
398352 sessions,
399- key,
400353 peer,
401354 bind_addr,
402355 event_tx,
403356 event_rx,
404357 info,
405- Some ( unnumbered_manager) ,
358+ unnumbered_manager,
406359 )
407360 }
408361 }
@@ -411,7 +364,6 @@ impl<Cnx: BgpConnection + 'static> Router<Cnx> {
411364 fn new_session_locked (
412365 self : & Arc < Self > ,
413366 mut sessions : MutexGuard < SessionMap < Cnx > > ,
414- peer_id : PeerId ,
415367 peer : PeerConfig ,
416368 bind_addr : Option < SocketAddr > ,
417369 event_tx : Sender < FsmEvent < Cnx > > ,
@@ -434,8 +386,8 @@ impl<Cnx: BgpConnection + 'static> Router<Cnx> {
434386 let neighbor = NeighborInfo {
435387 name : Arc :: new ( Mutex :: new ( peer. name . clone ( ) ) ) ,
436388 peer_group : peer. group . clone ( ) ,
437- peer : peer_id ,
438- port : peer. host . port ( ) ,
389+ peer : peer . id . clone ( ) ,
390+ port : peer. port ,
439391 } ;
440392
441393 let runner = Arc :: new ( SessionRunner :: new (
@@ -460,33 +412,9 @@ impl<Cnx: BgpConnection + 'static> Router<Cnx> {
460412 peer : PeerConfig ,
461413 info : SessionInfo ,
462414 ) -> Result < Arc < SessionRunner < Cnx > > , Error > {
463- // Use PeerId::Ip for numbered sessions
464- let key = PeerId :: Ip ( peer. host . ip ( ) ) ;
465- let session = match lock ! ( self . sessions) . get ( & key) {
466- None => return Err ( Error :: UnknownPeer ( peer. host . ip ( ) ) ) ,
467- Some ( s) => s. clone ( ) ,
468- } ;
469-
470- session. update_session_parameters ( peer, info) ?;
471-
472- Ok ( session)
473- }
474-
475- pub fn update_unnumbered_session (
476- self : & Arc < Self > ,
477- interface : & str ,
478- peer : PeerConfig ,
479- info : SessionInfo ,
480- ) -> Result < Arc < SessionRunner < Cnx > > , Error > {
481- // Use PeerId::Interface for unnumbered sessions
482- let key = PeerId :: Interface ( interface. to_string ( ) ) ;
415+ let key = peer. id . clone ( ) ;
483416 let session = match lock ! ( self . sessions) . get ( & key) {
484- None => {
485- return Err ( Error :: InternalCommunication ( format ! (
486- "unnumbered session not found for interface: {}" ,
487- interface
488- ) ) ) ;
489- }
417+ None => return Err ( Error :: UnknownPeer ( key) ) ,
490418 Some ( s) => s. clone ( ) ,
491419 } ;
492420
0 commit comments