X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fopenflow%2Fmd%2Fcore%2Fsal%2Fconvertor%2FGroupConvertor.java;h=5b8fc318b7f258881a882c7ebf4c71115513241c;hb=7eb8bc68860c4ae8624ab671d2f920194a318654;hp=0b0d547077b4c23a046652a3949790044b35f488;hpb=4d8bace720f326d872d43bb58b9a38c242e74b84;p=openflowplugin.git diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertor.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertor.java index 0b0d547077..5b8fc318b7 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertor.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertor.java @@ -4,28 +4,30 @@ * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html - * - * Contributor: hema.gopalkrishnan@ericsson.com */ package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor; import java.math.BigInteger; import java.util.ArrayList; -import java.util.Iterator; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import org.opendaylight.openflowjava.protocol.api.util.BinContent; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.UpdatedGroup; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsList; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupModCommand; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.BucketsList; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.BucketsListBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsListBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,19 +36,25 @@ import org.slf4j.LoggerFactory; * Library for the OFPT_GROUP_MOD Message. Input:SAL Layer Group command data. * Output:GroupModInput Message. * - * @param * */ public final class GroupConvertor { - private static final Logger logger = LoggerFactory.getLogger(GroupConvertor.class); - private static final String PREFIX_SEPARATOR = "/"; + private static final Logger LOG = LoggerFactory.getLogger(GroupConvertor.class); - private static final Integer DEFAULT_WEIGHT = new Integer(0); + private static final Integer DEFAULT_WEIGHT = 0; private static final Long OFPP_ANY = Long.parseLong("ffffffff", 16); private static final Long DEFAULT_WATCH_PORT = OFPP_ANY; private static final Long OFPG_ANY = Long.parseLong("ffffffff", 16); private static final Long DEFAULT_WATCH_GROUP = OFPG_ANY; + private static final Comparator comparator = new Comparator(){ + @Override + public int compare(Bucket bucket1, + Bucket bucket2) { + if(bucket1.getBucketId() == null || bucket2.getBucketId() == null) return 0; + return bucket1.getBucketId().getValue().compareTo(bucket2.getBucketId().getValue()); + } + }; private GroupConvertor() { @@ -57,27 +65,27 @@ public final class GroupConvertor { org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group source, short version,BigInteger datapathid) { List bucketLists = null; GroupModInputBuilder groupModInputBuilder = new GroupModInputBuilder(); - if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInput) { + if (source instanceof AddGroupInput) { groupModInputBuilder.setCommand(GroupModCommand.OFPGCADD); - } else if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInput) { + } else if (source instanceof RemoveGroupInput) { groupModInputBuilder.setCommand(GroupModCommand.OFPGCDELETE); } else if (source instanceof UpdatedGroup) { groupModInputBuilder.setCommand(GroupModCommand.OFPGCMODIFY); } - - if (source.getGroupType().getIntValue() == 0) { + + if (GroupTypes.GroupAll.equals(source.getGroupType())) { groupModInputBuilder.setType(GroupType.OFPGTALL); } - if (source.getGroupType().getIntValue() == 1) { + if (GroupTypes.GroupSelect.equals(source.getGroupType())) { groupModInputBuilder.setType(GroupType.OFPGTSELECT); } - if (source.getGroupType().getIntValue() == 2) { + if (GroupTypes.GroupIndirect.equals(source.getGroupType())) { groupModInputBuilder.setType(GroupType.OFPGTINDIRECT); } - if (source.getGroupType().getIntValue() == 3) { + if (GroupTypes.GroupFf.equals(source.getGroupType())) { groupModInputBuilder.setType(GroupType.OFPGTFF); } @@ -85,8 +93,9 @@ public final class GroupConvertor { // Only if the bucket is configured for the group then add it if ((source.getBuckets() != null) && (source.getBuckets().getBucket().size() != 0)) { - bucketLists = new ArrayList(); - getbucketList(source.getBuckets(), bucketLists, version, source.getGroupType().getIntValue(),datapathid); + Collections.sort(source.getBuckets().getBucket(), comparator); + + bucketLists = salToOFBucketList(source.getBuckets(), version, source.getGroupType().getIntValue(),datapathid); groupModInputBuilder.setBucketsList(bucketLists); } groupModInputBuilder.setVersion(version); @@ -94,58 +103,56 @@ public final class GroupConvertor { } - private static void getbucketList(Buckets buckets, List bucketLists, short version, int groupType,BigInteger datapathid) { - - Iterator groupBucketIterator = buckets - .getBucket().iterator(); - org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket groupBucket; - - while (groupBucketIterator.hasNext()) { - groupBucket = groupBucketIterator.next(); + private static List salToOFBucketList(Buckets buckets, short version, int groupType,BigInteger datapathid) { + final List bucketLists = new ArrayList<>(); + for (org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket groupBucket : buckets + .getBucket()) { BucketsListBuilder bucketBuilder = new BucketsListBuilder(); - if ((groupType == GroupType.OFPGTSELECT.getIntValue()) && (groupBucket.getWeight() == null)) { - - logger.error("Weight value required for this OFPGT_SELECT"); + salToOFBucketListWeight(groupBucket, bucketBuilder, groupType); + salToOFBucketListWatchGroup(groupBucket, bucketBuilder, groupType); + salToOFBucketListWatchPort(groupBucket, bucketBuilder, groupType); - } - - if (null != groupBucket.getWeight()) { - bucketBuilder.setWeight(groupBucket.getWeight().intValue()); - } else { - bucketBuilder.setWeight(DEFAULT_WEIGHT); - } - - if ((groupType == GroupType.OFPGTFF.getIntValue()) && (groupBucket.getWatchGroup() == null)) { + List bucketActionList = ActionConvertor.getActions(groupBucket.getAction(), version, datapathid, null); + bucketBuilder.setAction(bucketActionList); + BucketsList bucket = bucketBuilder.build(); + bucketLists.add(bucket); + } + return bucketLists; - logger.error("WatchGroup required for this OFPGT_FF"); + } + private static void salToOFBucketListWatchPort(Bucket groupBucket, BucketsListBuilder bucketBuilder, int groupType) { + if (null != groupBucket.getWatchPort()) { + bucketBuilder.setWatchPort(new PortNumber(groupBucket.getWatchPort())); + } else { + bucketBuilder.setWatchPort(new PortNumber(BinContent.intToUnsignedLong(DEFAULT_WATCH_PORT.intValue()))); + if (groupType == GroupType.OFPGTFF.getIntValue()) { + LOG.error("WatchPort required for this OFPGT_FF"); } - - if (null != groupBucket.getWatchGroup()) { - bucketBuilder.setWatchGroup(groupBucket.getWatchGroup()); - } else { - bucketBuilder.setWatchGroup(BinContent.intToUnsignedLong(DEFAULT_WATCH_GROUP.intValue())); - } - - if ((groupType == GroupType.OFPGTFF.getIntValue()) && (groupBucket.getWatchPort() == null)) { - - logger.error("WatchPort required for this OFPGT_FF"); + } + } + private static void salToOFBucketListWatchGroup(Bucket groupBucket, BucketsListBuilder bucketBuilder, int groupType) { + if (null != groupBucket.getWatchGroup()) { + bucketBuilder.setWatchGroup(groupBucket.getWatchGroup()); + } else { + bucketBuilder.setWatchGroup(BinContent.intToUnsignedLong(DEFAULT_WATCH_GROUP.intValue())); + if (groupType == GroupType.OFPGTFF.getIntValue()) { + LOG.error("WatchGroup required for this OFPGT_FF"); } + } + } - if (null != groupBucket.getWatchPort()) { - bucketBuilder.setWatchPort(new PortNumber(groupBucket.getWatchPort())); - } else { - bucketBuilder.setWatchPort(new PortNumber(BinContent.intToUnsignedLong(DEFAULT_WATCH_PORT.intValue()))); + private static void salToOFBucketListWeight(Bucket groupBucket, BucketsListBuilder bucketBuilder, int groupType) { + if (null != groupBucket.getWeight()) { + bucketBuilder.setWeight(groupBucket.getWeight().intValue()); + } else { + bucketBuilder.setWeight(DEFAULT_WEIGHT); + if (groupType == GroupType.OFPGTSELECT.getIntValue()) { + LOG.error("Weight value required for this OFPGT_SELECT"); } - - List bucketActionList = ActionConvertor.getActionList(groupBucket.getAction(), version,datapathid); - bucketBuilder.setActionsList(bucketActionList); - BucketsList bucket = bucketBuilder.build(); - bucketLists.add(bucket); } - } }