0

I copied some code from the openflow samples (learning switch) to get notified when a switch connects but now, alas, I get many notifications. Here's my code to register a listener:

    WakeupOnNode wakeupListener = new WakeupOnNode(s);


    final InstanceIdentifier<Table> instanceIdentifier = InstanceIdentifier.builder(Nodes.class).child(Node.class).
        augmentation(FlowCapableNode.class).child(Table.class).build();


    final DataTreeIdentifier<Table> dataTreeIdentifier = 
            new DataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, instanceIdentifier);

    this.dataTreeChangeListenerRegistration = this.dataBroker.registerDataTreeChangeListener(dataTreeIdentifier, wakeupListener);

I see multiple notifications in the listener. Not sure why this happens. Perhaps I need to listen on some other identifier (?)

Thanks in advance for any help.

Ranga

  • This seems to happen with about a 1 second regularity. Perhaps there is a heartbeat mechanism inherent to openflow that is seen by the controller as a switch re-connect. How can I suppress this? – LostInTheFrequencyDomain Sep 07 '17 at 21:33

1 Answers1

0

You are listening for OpenFlow table updates, which will get you a notification every time an openflow event affects a table on a switch. So you are not listening to the right kind of class.

If you had stopped at InstanceIdentifier.builder(Nodes.class).child(Node.class) you would have had a notification for every time a switch was updated, added or deleted. This sounds like the kind of notification you are looking for. Personally, this is the class I use to listen for new nodes on the topology.

Note, though, that you will still get many notifications.

Since this notification (Node.class) is more generic, you will probably have to ignore a lot of 'Update' notifications; this is normal, since this will include all 'Update' notifications from the class you are currently listening to (Table is contained within Node).

Tama Yoshi
  • 303
  • 2
  • 15