@@ -45,6 +45,7 @@ type NetWatcher struct {
4545 nads map [string ]string
4646 InSync chan interface {}
4747 nodeBGPSpec * common.LocalNodeSpec
48+ routeWatcher common.RouteWatcherEventHandler
4849
4950 currentWatchRevisionNet string
5051 currentWatchRevisionNad string
@@ -65,10 +66,15 @@ func NewNetWatcher(vpp *vpplink.VppLink, log *logrus.Entry) *NetWatcher {
6566 networkDefinitions : make (map [string ]* common.NetworkDefinition ),
6667 nads : make (map [string ]string ),
6768 InSync : make (chan interface {}),
69+ routeWatcher : nil ,
6870 }
6971 return & w
7072}
7173
74+ func (w * NetWatcher ) RegisterRouteWatcher (routeWatcher common.RouteWatcherEventHandler ) {
75+ w .routeWatcher = routeWatcher
76+ }
77+
7278func (w * NetWatcher ) SetOurBGPSpec (nodeBGPSpec * common.LocalNodeSpec ) {
7379 w .nodeBGPSpec = nodeBGPSpec
7480}
@@ -106,7 +112,7 @@ func (w *NetWatcher) resyncAndCreateWatchers() error {
106112 return errors .Wrapf (err , "Listing NetworkAttachmentDefinitions failed" )
107113 }
108114 for _ , nad := range nadList .Items {
109- err = w .onNadAdded (& nad )
115+ err = w .OnNadAdded (& nad )
110116 if err != nil {
111117 return errors .Wrapf (err , "OnNadAdded failed for %v" , nad )
112118 }
@@ -200,7 +206,7 @@ func (w *NetWatcher) WatchNetworks(t *tomb.Tomb) error {
200206 w .log .Errorf ("update.Object is not *NetworkAttachmentDefinition, %v" , update .Object )
201207 continue
202208 }
203- err := w .onNadAdded (nad )
209+ err := w .OnNadAdded (nad )
204210 if err != nil {
205211 w .log .Error (err )
206212 }
@@ -210,7 +216,7 @@ func (w *NetWatcher) WatchNetworks(t *tomb.Tomb) error {
210216 w .log .Errorf ("update.Object is not *NetworkAttachmentDefinition, %v" , update .Object )
211217 continue
212218 }
213- err := w .onNadDeleted (nad )
219+ err := w .OnNadDeleted (nad )
214220 if err != nil {
215221 w .log .Error (err )
216222 }
@@ -230,7 +236,7 @@ func (w *NetWatcher) Stop() {
230236 close (w .stop )
231237}
232238
233- func (w * NetWatcher ) onNadDeleted (nad * netv1.NetworkAttachmentDefinition ) error {
239+ func (w * NetWatcher ) OnNadDeleted (nad * netv1.NetworkAttachmentDefinition ) error {
234240 delete (w .nads , nad .Namespace + "/" + nad .Name )
235241 for key , net := range w .networkDefinitions {
236242 if net .NetAttachDefs == nad .Namespace + "/" + nad .Name {
@@ -239,12 +245,18 @@ func (w *NetWatcher) onNadDeleted(nad *netv1.NetworkAttachmentDefinition) error
239245 Type : common .NetAddedOrUpdated ,
240246 New : w .networkDefinitions [key ],
241247 })
248+ if w .routeWatcher != nil {
249+ err := w .routeWatcher .OnNetAddedOrUpdated (w .networkDefinitions [key ])
250+ if err != nil {
251+ w .log .Errorf ("Failed to handle network update in RouteWatcher: %v" , err )
252+ }
253+ }
242254 }
243255 }
244256 return nil
245257}
246258
247- func (w * NetWatcher ) onNadAdded (nad * netv1.NetworkAttachmentDefinition ) error {
259+ func (w * NetWatcher ) OnNadAdded (nad * netv1.NetworkAttachmentDefinition ) error {
248260 var nadConfig nadv1.NetConfList
249261 err := json .Unmarshal ([]byte (nad .Spec .Config ), & nadConfig )
250262 if err != nil {
@@ -260,6 +272,12 @@ func (w *NetWatcher) onNadAdded(nad *netv1.NetworkAttachmentDefinition) error {
260272 Type : common .NetAddedOrUpdated ,
261273 New : w .networkDefinitions [key ],
262274 })
275+ if w .routeWatcher != nil {
276+ err := w .routeWatcher .OnNetAddedOrUpdated (w .networkDefinitions [key ])
277+ if err != nil {
278+ w .log .Errorf ("Failed to handle network update in RouteWatcher: %v" , err )
279+ }
280+ }
263281 }
264282 }
265283 }
@@ -283,6 +301,12 @@ func (w *NetWatcher) OnNetAdded(net *networkv3.Network) error {
283301 Type : common .NetAddedOrUpdated ,
284302 New : netDef ,
285303 })
304+ if w .routeWatcher != nil {
305+ err := w .routeWatcher .OnNetAddedOrUpdated (netDef )
306+ if err != nil {
307+ w .log .Errorf ("Failed to handle network addition in RouteWatcher: %v" , err )
308+ }
309+ }
286310 return nil
287311}
288312
@@ -300,6 +324,12 @@ func (w *NetWatcher) OnNetDeleted(netName string) error {
300324 Type : common .NetDeleted ,
301325 Old : netDef ,
302326 })
327+ if w .routeWatcher != nil {
328+ err := w .routeWatcher .OnNetDeleted (netDef )
329+ if err != nil {
330+ w .log .Errorf ("Failed to handle network deletion in RouteWatcher: %v" , err )
331+ }
332+ }
303333 return nil
304334}
305335
0 commit comments