@@ -34,6 +34,7 @@ import (
3434 "github.com/projectcalico/vpp-dataplane/v3/calico-vpp-agent/felix/connectivity"
3535 "github.com/projectcalico/vpp-dataplane/v3/calico-vpp-agent/felix/policies"
3636 "github.com/projectcalico/vpp-dataplane/v3/calico-vpp-agent/felix/services"
37+ "github.com/projectcalico/vpp-dataplane/v3/calico-vpp-agent/routing"
3738 "github.com/projectcalico/vpp-dataplane/v3/config"
3839 "github.com/projectcalico/vpp-dataplane/v3/vpplink"
3940 "github.com/projectcalico/vpp-dataplane/v3/vpplink/types"
@@ -59,6 +60,7 @@ type Server struct {
5960 cniHandler * cni.CNIHandler
6061 connectivityHandler * connectivity.ConnectivityHandler
6162 serviceHandler * services.ServiceHandler
63+ peerHandler * routing.PeerHandler
6264}
6365
6466// NewFelixServer creates a felix server
@@ -77,6 +79,7 @@ func NewFelixServer(vpp *vpplink.VppLink, clientv3 calicov3cli.Interface, log *l
7779 cniHandler : cni .NewCNIHandler (vpp , cache , log ),
7880 connectivityHandler : connectivity .NewConnectivityHandler (vpp , cache , clientv3 , log ),
7981 serviceHandler : services .NewServiceHandler (vpp , cache , log ),
82+ peerHandler : routing .NewPeerHandler (cache , log ),
8083 }
8184
8285 reg := common .RegisterHandler (server .felixServerEventChan , "felix server events" )
@@ -91,6 +94,13 @@ func NewFelixServer(vpp *vpplink.VppLink, clientv3 calicov3cli.Interface, log *l
9194 common .ConnectivityDeleted ,
9295 common .SRv6PolicyAdded ,
9396 common .SRv6PolicyDeleted ,
97+ common .PeersChanged ,
98+ common .PeerAdded ,
99+ common .PeerUpdated ,
100+ common .PeerDeleted ,
101+ common .SecretAdded ,
102+ common .SecretChanged ,
103+ common .SecretDeleted ,
94104 )
95105
96106 return server
@@ -104,6 +114,10 @@ func (s *Server) GetCache() *cache.Cache {
104114 return s .cache
105115}
106116
117+ func (s * Server ) GetPeerHandler () * routing.PeerHandler {
118+ return s .peerHandler
119+ }
120+
107121func (s * Server ) SetBGPConf (bgpConf * calicov3.BGPConfigurationSpec ) {
108122 s .cache .BGPConf = bgpConf
109123}
@@ -404,6 +418,60 @@ func (s *Server) handleFelixServerEvents(msg interface{}) (err error) {
404418 if err != nil {
405419 s .log .Errorf ("Error while deleting SRv6 Policy %s" , err )
406420 }
421+ case common .PeersChanged :
422+ peersEvent , ok := evt .New .(* common.PeersChangedEvent )
423+ if ! ok {
424+ return fmt .Errorf ("evt.New is not a (*common.PeersChangedEvent) %v" , evt .New )
425+ }
426+ err := s .peerHandler .ProcessPeers (peersEvent .Peers )
427+ if err != nil {
428+ s .log .Errorf ("Error processing peers: %v" , err )
429+ }
430+ case common .PeerAdded :
431+ peerEvent , ok := evt .New .(* common.PeerAddedEvent )
432+ if ! ok {
433+ return fmt .Errorf ("evt.New is not a (*common.PeerAddedEvent) %v" , evt .New )
434+ }
435+ err := s .peerHandler .OnPeerAdded (& peerEvent .Peer )
436+ if err != nil {
437+ s .log .Errorf ("Error adding peer: %v" , err )
438+ }
439+ case common .PeerUpdated :
440+ peerEvent , ok := evt .New .(* common.PeerUpdatedEvent )
441+ if ! ok {
442+ return fmt .Errorf ("evt.New is not a (*common.PeerUpdatedEvent) %v" , evt .New )
443+ }
444+ err := s .peerHandler .OnPeerUpdated (& peerEvent .Old , & peerEvent .New )
445+ if err != nil {
446+ s .log .Errorf ("Error updating peer: %v" , err )
447+ }
448+ case common .PeerDeleted :
449+ peerEvent , ok := evt .New .(* common.PeerDeletedEvent )
450+ if ! ok {
451+ return fmt .Errorf ("evt.New is not a (*common.PeerDeletedEvent) %v" , evt .New )
452+ }
453+ err := s .peerHandler .OnPeerDeleted (& peerEvent .Peer )
454+ if err != nil {
455+ s .log .Errorf ("Error deleting peer: %v" , err )
456+ }
457+ case common .SecretAdded :
458+ secretEvent , ok := evt .New .(* common.SecretAddedEvent )
459+ if ! ok {
460+ return fmt .Errorf ("evt.New is not a (*common.SecretAddedEvent) %v" , evt .New )
461+ }
462+ s .peerHandler .OnSecretAdded (secretEvent .Secret )
463+ case common .SecretChanged :
464+ secretEvent , ok := evt .New .(* common.SecretChangedEvent )
465+ if ! ok {
466+ return fmt .Errorf ("evt.New is not a (*common.SecretChangedEvent) %v" , evt .New )
467+ }
468+ s .peerHandler .OnSecretChanged (secretEvent .SecretName )
469+ case common .SecretDeleted :
470+ secretEvent , ok := evt .New .(* common.SecretDeletedEvent )
471+ if ! ok {
472+ return fmt .Errorf ("evt.New is not a (*common.SecretDeletedEvent) %v" , evt .New )
473+ }
474+ s .peerHandler .OnSecretDeleted (secretEvent .SecretName )
407475 default :
408476 s .log .Warnf ("Unhandled CalicoVppEvent.Type: %s" , evt .Type )
409477 }
0 commit comments