Saurav Das
Committed by Gerrit Code Review

Currently need to specify handshaker behavior in onos-drivers xml file.

Later this need will be removed as the system will use default behaviors.
Fixed a bug in group checker where it was consulting the wrong map.
Cleaned up some logs

Change-Id: I45d91bc8d4c19474dcf0c37f82763985e5d2c84f
......@@ -366,14 +366,14 @@ public class BgpRouter {
@Override
public void onSuccess(Objective objective) {
log.info("Successfully installed interface based "
+ "filtering objcetives");
+ "filtering objcetives for intf {}", intf);
}
@Override
public void onError(Objective objective,
ObjectiveError error) {
log.error("Failed to install interface filters {}: {}",
objective, error);
log.error("Failed to install interface filters for intf {}: {}",
intf, error);
// TODO something more than just logging
}
}));
......
......@@ -353,14 +353,14 @@ public class OFDPA1Pipeline extends AbstractHandlerBehaviour implements Pipeline
flowRuleService.apply(ops.build(new FlowRuleOperationsContext() {
@Override
public void onSuccess(FlowRuleOperations ops) {
pass(filt);
log.info("Applied filtering rules");
pass(filt);
}
@Override
public void onError(FlowRuleOperations ops) {
fail(filt, ObjectiveError.FLOWINSTALLATIONFAILED);
log.info("Failed to apply filtering rules");
fail(filt, ObjectiveError.FLOWINSTALLATIONFAILED);
}
}));
......@@ -377,7 +377,7 @@ public class OFDPA1Pipeline extends AbstractHandlerBehaviour implements Pipeline
* @param nextObj the nextObjective of type SIMPLE
*/
private void processSimpleNextObjective(NextObjective nextObj) {
// break up next objective to GroupChain objects
// break up simple next objective to GroupChain objects
TrafficTreatment treatment = nextObj.next().iterator().next();
// for the l2interface group, get vlan and port info
// for the l3unicast group, get the src/dst mac and vlan info
......@@ -824,7 +824,7 @@ public class OFDPA1Pipeline extends AbstractHandlerBehaviour implements Pipeline
private class GroupChecker implements Runnable {
@Override
public void run() {
Set<GroupKey> keys = pendingNextObjectives.asMap().keySet().stream()
Set<GroupKey> keys = pendingGroups.keySet().stream()
.filter(key -> groupService.getGroup(deviceId, key) != null)
.collect(Collectors.toSet());
......@@ -832,43 +832,49 @@ public class OFDPA1Pipeline extends AbstractHandlerBehaviour implements Pipeline
//first check for group chain
GroupChainElem gce = pendingGroups.remove(key);
if (gce != null) {
log.info("Heard back from group service. Processing next "
+ "group in group chain with group key {}", gce.getGkey());
log.info("Group service processed group key {}. Processing next "
+ "group in group chain with group key {}",
appKryo.deserialize(key.key()),
appKryo.deserialize(gce.getGkey().key()));
processGroupChain(gce);
} else {
OfdpaGroupChain obj = pendingNextObjectives.getIfPresent(key);
if (obj == null) {
return;
log.info("Group service processed group key {}. Done implementing "
+ "next objective: {}", appKryo.deserialize(key.key()),
obj.nextObjective().id());
if (obj != null) {
pass(obj.nextObjective());
pendingNextObjectives.invalidate(key);
flowObjectiveStore.putNextGroup(obj.nextObjective().id(), obj);
}
pass(obj.nextObjective());
pendingNextObjectives.invalidate(key);
log.info("Heard back from group service. Applying pending "
+ "objectives for nextId {}", obj.nextObjective().id());
flowObjectiveStore.putNextGroup(obj.nextObjective().id(), obj);
}
});
}
}
private class InnerGroupListener implements GroupListener {
@Override
public void event(GroupEvent event) {
log.info("received group event of type {}", event.type());
if (event.type() == GroupEvent.Type.GROUP_ADDED) {
GroupKey key = event.subject().appCookie();
// first check for group chain
GroupChainElem gce = pendingGroups.remove(key);
if (gce != null) {
log.info("group ADDED .. Processing next group in group chain "
+ "with group key {}", gce.getGkey());
log.info("group ADDED with group key {} .. "
+ "Processing next group in group chain with group key {}",
appKryo.deserialize(key.key()),
appKryo.deserialize(gce.getGkey().key()));
processGroupChain(gce);
} else {
OfdpaGroupChain obj = pendingNextObjectives.getIfPresent(key);
log.info("group ADDED .. Applying pending objectives if any");
if (obj != null) {
flowObjectiveStore.putNextGroup(obj.nextObjective().id(), obj);
log.info("group ADDED with key {}.. Done implementing next "
+ "objective: {}",
appKryo.deserialize(key.key()), obj.nextObjective().id());
pass(obj.nextObjective());
pendingNextObjectives.invalidate(key);
flowObjectiveStore.putNextGroup(obj.nextObjective().id(), obj);
}
}
}
......
......@@ -30,10 +30,14 @@
<driver name="spring-open-cpqd" manufacturer="Stanford University, Ericsson Research and CPqD Research" hwVersion="OpenFlow 1.3 Reference Userspace Switch" swVersion=".*">
<behaviour api="org.onosproject.net.behaviour.Pipeliner"
impl="org.onosproject.driver.pipeline.SpringOpenTTP"/>
<behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
impl="org.onosproject.driver.handshaker.DefaultSwitchHandShaker"/>
</driver>
<driver name="spring-open" manufacturer="Dell " hwVersion="OpenFlow switch HW ver. 1.0" swVersion="OpenFlow switch SW ver. 1.0 and 1.3">
<behaviour api="org.onosproject.net.behaviour.Pipeliner"
impl="org.onosproject.driver.pipeline.SpringOpenTTPDell"/>
<behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
impl="org.onosproject.driver.handshaker.DefaultSwitchHandShaker"/>
</driver>
<driver name="cpqd" manufacturer="Stanford University, Ericsson Research and CPqD Research"
hwVersion="OpenFlow 1.3 Reference Userspace Switch" swVersion=".*">
......@@ -58,6 +62,8 @@
<driver name="ofdpa" manufacturer="Broadcom Corp." hwVersion="OF-DPA 1.0" swVersion="OF-DPA 1.0">
<behaviour api="org.onosproject.net.behaviour.Pipeliner"
impl="org.onosproject.driver.pipeline.OFDPA1Pipeline"/>
<behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
impl="org.onosproject.driver.handshaker.DefaultSwitchHandShaker"/>
</driver>
</drivers>
......
......@@ -417,9 +417,9 @@ class OFChannelHandler extends IdleStateAwareChannelHandler {
h.channel.getRemoteAddress());
return;
}
log.info("Received switch description reply from switch at {}",
h.channel.getRemoteAddress());
OFDescStatsReply drep = (OFDescStatsReply) m;
log.info("Received switch description reply {} from switch at {}",
drep, h.channel.getRemoteAddress());
// Here is where we differentiate between different kinds of switches
h.sw = h.controller.getOFSwitchInstance(h.thisdpid, drep, h.ofVersion);
......