opendaylight:如何在不同的交换机上部署不同的应用程序?

时间:2018-01-30 13:21:06

标签: sdn opendaylight

我正在使用Oendaylight(碳)开发一个SDN应用程序,该应用程序由连接到控制器的多个交换机组成。我希望能够在连接时在不同的交换机上部署不同的应用程序。我怎么指定这个?例如,当openflow:1连接时,我想在其上部署L2交换机,当openflow:2连接时,我想在其上部署不同的应用程序。感谢。

1 个答案:

答案 0 :(得分:0)

首先,您不要在交换机上部署应用程序。应用程序在控制器上运行,您可以添加一个逻辑,仅对选定的开关进行编程。

你最本想做的是反应式编程;等待事件并采取相应行动。这可以通过将事件侦听器挂钩到应用程序的YANG模型中的节点来轻松实现。然后,这些节点中的任何更改都会通知您的应用程序,然后可以进行选择性网络编程。

在上述示例中,您需要使用“InstanceIdentifier”对象来标识您有兴趣收听哪些数据模型的事件。

InstanceIdentifier<Node> nodeID = InstanceIdentifier.builder(Nodes.class).child(Node.class, new NodeKey(node.getId()))                        .augmentation(FlowCapableNode.class)
.build();

现在只需使用DataBroker对象的registerDataChangeListener方法向此IID注册一个侦听器。

db.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, nodeID, this, AsyncDataBroker.DataChangeScope.SUBTREE);

此时,您将收到有关您已注册的交换机的任何更新(添加/修改/删除)的通知。

最后要捕获事件使用/覆盖DataChangeListener接口的onDataChanged方法并添加你的花哨逻辑。

类似的逻辑可以很细粒度地监听交换机上特定流表,流规则等的活动。