From b3763355466a46bec4d440909caf23c3cc6007bf Mon Sep 17 00:00:00 2001 From: "Claudio D. Gasparini" Date: Sat, 3 Mar 2018 08:30:32 +0100 Subject: [PATCH] BGPCEP-574: Rework rib config policies by making possible to pass only wanted attribute for condition match. Change-Id: I876fafaba79ed2e4598a1de2db280ff280442d4a Signed-off-by: Claudio D. Gasparini --- .../routing/policy/impl/BGPRibPolicyImpl.java | 28 +- .../BgpConditionsAugmentationPolicy.java | 3 +- .../policy/condition/BgpConditionsPolicy.java | 2 +- .../policy/condition/ConditionsAugPolicy.java | 2 +- .../policy/condition/ConditionsPolicy.java | 16 +- .../spi/registry/ActionsRegistryImpl.java | 311 ++++++++---------- .../spi/registry/BgpConditionsRegistry.java | 52 +-- .../BgpStatementRegistryProvider.java | 8 +- .../spi/registry/ConditionsRegistryImpl.java | 14 +- .../spi/registry/StatementRegistry.java | 8 +- .../conditions/MatchAsPathSetHandler.java | 15 +- .../conditions/MatchClusterIdSetHandler.java | 22 +- .../conditions/MatchCommunitySetHandler.java | 17 +- .../MatchExtCommunitySetHandler.java | 15 +- .../MatchOriginatorIdSetHandler.java | 22 +- .../conditions/MatchRoleSetHandler.java | 13 +- 16 files changed, 284 insertions(+), 264 deletions(-) diff --git a/bgp/openconfig-rp-impl/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/impl/BGPRibPolicyImpl.java b/bgp/openconfig-rp-impl/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/impl/BGPRibPolicyImpl.java index 27234b3002..8ecfb4493b 100644 --- a/bgp/openconfig-rp-impl/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/impl/BGPRibPolicyImpl.java +++ b/bgp/openconfig-rp-impl/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/impl/BGPRibPolicyImpl.java @@ -97,45 +97,37 @@ final class BGPRibPolicyImpl implements BGPRibRoutingPolicy { @Override public Optional applyImportPolicies(final BGPRouteEntryImportParameters policyParameters, final Attributes attributes) { - RouteAttributeContainer finalAttributes = routeAttributeContainerFalse(attributes); + RouteAttributeContainer currentAttributes = routeAttributeContainerFalse(attributes); for (final String policyName : this.importPolicy) { for (final Statement statement : this.statements.getUnchecked(policyName)) { - final Attributes currentAttributes = finalAttributes.getAttributes(); - if (currentAttributes == null) { - return Optional.empty(); - } - finalAttributes = this.policyRegistry - .applyImportStatement(this.ribBaseParameters, policyParameters, finalAttributes, statement); + currentAttributes = this.policyRegistry + .applyImportStatement(this.ribBaseParameters, policyParameters, currentAttributes, statement); } } - if (!finalAttributes.anyConditionSatisfied()) { + if (!currentAttributes.anyConditionSatisfied()) { if (DefaultPolicyType.REJECTROUTE.equals(this.defaultImportPolicy)) { return Optional.empty(); } } - return Optional.ofNullable(finalAttributes.getAttributes()); + return Optional.ofNullable(currentAttributes.getAttributes()); } @Override public Optional applyExportPolicies(final BGPRouteEntryExportParameters policyParameters, final Attributes attributes) { - RouteAttributeContainer finalAttributes = routeAttributeContainerFalse(attributes); + RouteAttributeContainer currentAttributes = routeAttributeContainerFalse(attributes); for (final String policyName : this.exportPolicy) { for (final Statement statement : this.statements.getUnchecked(policyName)) { - final Attributes currentAttributes = finalAttributes.getAttributes(); - if (currentAttributes == null) { - return Optional.empty(); - } - finalAttributes = this.policyRegistry.applyExportStatement( - this.ribBaseParameters, policyParameters, finalAttributes, statement); + currentAttributes = this.policyRegistry.applyExportStatement( + this.ribBaseParameters, policyParameters, currentAttributes, statement); } } - if (!finalAttributes.anyConditionSatisfied()) { + if (!currentAttributes.anyConditionSatisfied()) { if (DefaultPolicyType.REJECTROUTE.equals(this.defaultExportPolicy)) { return Optional.empty(); } } - return Optional.ofNullable(finalAttributes.getAttributes()); + return Optional.ofNullable(currentAttributes.getAttributes()); } } diff --git a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/BgpConditionsAugmentationPolicy.java b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/BgpConditionsAugmentationPolicy.java index 4b0485a5b7..81193c0ab6 100644 --- a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/BgpConditionsAugmentationPolicy.java +++ b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/BgpConditionsAugmentationPolicy.java @@ -14,5 +14,6 @@ import org.opendaylight.yangtools.yang.binding.Augmentation; /** * Condition Policy: Check if route matches defined condition. */ -public interface BgpConditionsAugmentationPolicy> extends ConditionsPolicy { +public interface BgpConditionsAugmentationPolicy + , N> extends ConditionsPolicy { } \ No newline at end of file diff --git a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/BgpConditionsPolicy.java b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/BgpConditionsPolicy.java index 1d245818a6..6eef4c2cc7 100644 --- a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/BgpConditionsPolicy.java +++ b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/BgpConditionsPolicy.java @@ -13,5 +13,5 @@ import org.opendaylight.yangtools.yang.binding.ChildOf; /** * Condition Policy: Check if route matches defined condition. */ -public interface BgpConditionsPolicy> extends ConditionsPolicy { +public interface BgpConditionsPolicy, N> extends ConditionsPolicy { } \ No newline at end of file diff --git a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/ConditionsAugPolicy.java b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/ConditionsAugPolicy.java index 2dff94c507..3441eee8f1 100644 --- a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/ConditionsAugPolicy.java +++ b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/ConditionsAugPolicy.java @@ -14,5 +14,5 @@ import org.opendaylight.yangtools.yang.binding.Augmentation; /** * Condition Policy: Check if route matches defined condition. */ -public interface ConditionsAugPolicy extends ConditionsPolicy> { +public interface ConditionsAugPolicy extends ConditionsPolicy, N> { } diff --git a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/ConditionsPolicy.java b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/ConditionsPolicy.java index 4991c9af7f..71b81af13f 100644 --- a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/ConditionsPolicy.java +++ b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/policy/condition/ConditionsPolicy.java @@ -9,6 +9,7 @@ package org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.condition; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.RouteEntryBaseAttributes; import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRouteEntryExportParameters; import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRouteEntryImportParameters; @@ -17,7 +18,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess /** * Condition Policy: Check if route matches defined condition. */ -public interface ConditionsPolicy { +public interface ConditionsPolicy { /** * Check if route matches defined condition (Import Policy). * @@ -30,7 +31,7 @@ public interface ConditionsPolicy { boolean matchImportCondition( @Nonnull RouteEntryBaseAttributes routeEntryInfo, @Nonnull BGPRouteEntryImportParameters routeEntryImportParameters, - @Nonnull Attributes attributes, + @Nullable N attributes, @Nonnull T conditions); /** @@ -45,6 +46,15 @@ public interface ConditionsPolicy { boolean matchExportCondition( @Nonnull RouteEntryBaseAttributes routeEntryInfo, @Nonnull BGPRouteEntryExportParameters routeEntryExportParameters, - @Nonnull Attributes attributes, + @Nullable N attributes, T conditions); + + /** + * Returns the specific attribute to check if match condition. + * + * @param attributes route attributes + * @return specific attribute + */ + @Nullable + N getConditionParameter(@Nonnull Attributes attributes); } diff --git a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/ActionsRegistryImpl.java b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/ActionsRegistryImpl.java index d8f887cf27..6b10595a1a 100644 --- a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/ActionsRegistryImpl.java +++ b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/ActionsRegistryImpl.java @@ -13,7 +13,6 @@ import static java.util.Objects.requireNonNull; import com.google.common.base.Preconditions; import java.util.HashMap; import java.util.Map; -import javax.annotation.Nonnull; import javax.annotation.concurrent.GuardedBy; import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.RouteEntryBaseAttributes; import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.action.ActionsAugPolicy; @@ -112,6 +111,7 @@ final class ActionsRegistryImpl { } } + @SuppressWarnings("unchecked") Attributes applyExportAction( final RouteEntryBaseAttributes routeEntryInfo, final BGPRouteEntryExportParameters routeEntryExportParameters, @@ -122,29 +122,115 @@ final class ActionsRegistryImpl { return null; } Attributes attributesUpdated = attributes; - attributesUpdated = applyExportBGPActions(routeEntryInfo, routeEntryExportParameters, - attributesUpdated, actions.getAugmentation(Actions1.class)); + final Actions1 augmentation = actions.getAugmentation(Actions1.class); + if (augmentation != null && augmentation.getBgpActions() != null) { + final BgpActions bgpAction = augmentation.getBgpActions(); + + final SetAsPathPrepend asPrependAction = bgpAction.getSetAsPathPrepend(); + final Long localPrefPrependAction = bgpAction.getSetLocalPref(); + final BgpOriginAttrType localOriginAction = bgpAction.getSetRouteOrigin(); + final BgpSetMedType medAction = bgpAction.getSetMed(); + final BgpNextHopType nhAction = bgpAction.getSetNextHop(); + final SetCommunity setCommunityAction = bgpAction.getSetCommunity(); + final SetExtCommunity setExtCommunityAction = bgpAction.getSetExtCommunity(); + + if (asPrependAction != null) { + attributesUpdated = this.bgpActions.get(SetAsPathPrepend.class) + .applyExportAction(routeEntryInfo, routeEntryExportParameters, attributesUpdated, + asPrependAction); + } + + if (attributesUpdated == null) { + return null; + } + + if (setCommunityAction != null) { + attributesUpdated = this.bgpActions.get(SetCommunity.class) + .applyExportAction(routeEntryInfo, routeEntryExportParameters, attributesUpdated, + setCommunityAction); + } + + if (attributesUpdated == null) { + return null; + } + + if (setExtCommunityAction != null) { + attributesUpdated = this.bgpActions.get(SetExtCommunity.class) + .applyExportAction(routeEntryInfo, routeEntryExportParameters, attributesUpdated, + setExtCommunityAction); + } + + boolean updated = false; + if (localPrefPrependAction != null || localOriginAction != null + || medAction != null || nhAction != null) { + updated = true; + } + + if (updated) { + final AttributesBuilder attributesUpdatedBuilder = new AttributesBuilder(attributes); + if (localPrefPrependAction != null) { + attributesUpdatedBuilder.setLocalPref(new LocalPrefBuilder() + .setPref(localPrefPrependAction).build()); + } + + if (localOriginAction != null) { + attributesUpdatedBuilder.setOrigin(new OriginBuilder() + .setValue(BgpOrigin.forValue(localOriginAction.getIntValue())).build()); + } + + if (medAction != null) { + attributesUpdatedBuilder.setMultiExitDisc(new MultiExitDiscBuilder() + .setMed(medAction.getUint32()).build()); + } + + if (nhAction != null) { + final IpAddress address = nhAction.getIpAddress(); + if (address != null) { + CNextHop nhNew; + if (address.getIpv4Address() != null) { + nhNew = new Ipv4NextHopCaseBuilder().setIpv4NextHop(new Ipv4NextHopBuilder() + .setGlobal(address.getIpv4Address()).build()).build(); + } else { + nhNew = new Ipv6NextHopCaseBuilder().setIpv6NextHop(new Ipv6NextHopBuilder() + .setGlobal(address.getIpv6Address()).build()).build(); + } + + attributesUpdatedBuilder.setCNextHop(nhNew); + } + } + attributesUpdated = attributesUpdatedBuilder.build(); + } + + final Map>, Augmentation> bgpConditionsAug = BindingReflections + .getAugmentations(bgpAction); + + if (bgpConditionsAug != null) { + for (final Map.Entry>, Augmentation> entry + : bgpConditionsAug.entrySet()) { + final BgpActionAugPolicy handler = this.bgpAugActionsRegistry.get(entry.getKey()); + if (handler == null) { + continue; + } else if (attributesUpdated == null) { + return null; + } + attributesUpdated = handler.applyExportAction(routeEntryInfo, routeEntryExportParameters, + attributesUpdated, entry.getValue()); + } + } + } + if (attributesUpdated == null) { return null; } - attributesUpdated = applyExportAugActions(routeEntryInfo, routeEntryExportParameters, - attributesUpdated, actions); - return attributesUpdated; - } - @SuppressWarnings("unchecked") - private Attributes applyExportAugActions( - final RouteEntryBaseAttributes routeEntryInfo, - final BGPRouteEntryExportParameters routeEntryExportParameters, - @Nonnull final Attributes attributes, - final Actions actions) { + // Export Actions Aug final Map>, Augmentation> conditionsAug = BindingReflections .getAugmentations(actions); if (conditionsAug == null) { return attributes; } - Attributes attributesUpdated = attributes; + for (final Map.Entry>, Augmentation> entry : conditionsAug.entrySet()) { final ActionsAugPolicy handler = this.actionsRegistry.get(entry.getKey()); if (attributesUpdated == null) { @@ -155,192 +241,85 @@ final class ActionsRegistryImpl { attributesUpdated = handler.applyExportAction(routeEntryInfo, routeEntryExportParameters, attributesUpdated, (Augmentation) entry.getValue()); } + return attributesUpdated; } @SuppressWarnings("unchecked") - private Attributes applyExportBGPActions( + Attributes applyImportAction( final RouteEntryBaseAttributes routeEntryInfo, - final BGPRouteEntryExportParameters routeEntryExportParameters, - @Nonnull final Attributes attributes, - final Actions1 augmentation) { - if (augmentation == null || augmentation.getBgpActions() == null) { - return attributes; + final BGPRouteEntryImportParameters routeParameters, + final Attributes attributes, + final Actions actions) { + if (actions.getRouteDisposition() instanceof RejectRoute) { + return null; } Attributes attributesUpdated = attributes; - final BgpActions actions = augmentation.getBgpActions(); - - final SetAsPathPrepend asPrependAction = actions.getSetAsPathPrepend(); - final Long localPrefPrependAction = actions.getSetLocalPref(); - final BgpOriginAttrType localOriginAction = actions.getSetRouteOrigin(); - final BgpSetMedType medAction = actions.getSetMed(); - final BgpNextHopType nhAction = actions.getSetNextHop(); - final SetCommunity setCommunityAction = actions.getSetCommunity(); - final SetExtCommunity setExtCommunityAction = actions.getSetExtCommunity(); - - if (asPrependAction != null) { - attributesUpdated = this.bgpActions.get(SetAsPathPrepend.class) - .applyExportAction(routeEntryInfo, routeEntryExportParameters, attributesUpdated, asPrependAction); - } - - if (setCommunityAction != null) { - attributesUpdated = this.bgpActions.get(SetCommunity.class) - .applyExportAction(routeEntryInfo, routeEntryExportParameters, attributesUpdated, - setCommunityAction); - } + final Actions1 augmentation = actions.getAugmentation(Actions1.class); - if (setExtCommunityAction != null) { - attributesUpdated = this.bgpActions.get(SetExtCommunity.class) - .applyExportAction(routeEntryInfo, routeEntryExportParameters, attributesUpdated, - setExtCommunityAction); - } + if (augmentation != null && augmentation.getBgpActions() != null) { + final BgpActions bgpAction = augmentation.getBgpActions(); + final SetCommunity setCommunityAction = bgpAction.getSetCommunity(); + final SetExtCommunity setExtCommunityAction = bgpAction.getSetExtCommunity(); + final SetAsPathPrepend asPrependAction = bgpAction.getSetAsPathPrepend(); - boolean updated = false; - if (localPrefPrependAction != null || localOriginAction != null - || medAction != null || nhAction != null) { - updated = true; - } + if (asPrependAction != null) { + attributesUpdated = this.bgpActions.get(asPrependAction.getClass()) + .applyImportAction(routeEntryInfo, routeParameters, attributesUpdated, asPrependAction); + } - if (updated) { - final AttributesBuilder attributesUpdatedBuilder = new AttributesBuilder(attributes); - if (localPrefPrependAction != null) { - attributesUpdatedBuilder.setLocalPref(new LocalPrefBuilder().setPref(localPrefPrependAction).build()); + if (attributesUpdated == null) { + return null; } - if (localOriginAction != null) { - attributesUpdatedBuilder.setOrigin(new OriginBuilder() - .setValue(BgpOrigin.forValue(localOriginAction.getIntValue())).build()); + if (setCommunityAction != null) { + attributesUpdated = this.bgpActions.get(SetCommunity.class) + .applyImportAction(routeEntryInfo, routeParameters, attributesUpdated, + setCommunityAction); } - if (medAction != null) { - attributesUpdatedBuilder.setMultiExitDisc(new MultiExitDiscBuilder() - .setMed(medAction.getUint32()).build()); + if (attributesUpdated == null) { + return null; } - if (nhAction != null) { - final IpAddress address = nhAction.getIpAddress(); - if (address != null) { - CNextHop nhNew; - if (address.getIpv4Address() != null) { - nhNew = new Ipv4NextHopCaseBuilder().setIpv4NextHop(new Ipv4NextHopBuilder() - .setGlobal(address.getIpv4Address()).build()).build(); - } else { - nhNew = new Ipv6NextHopCaseBuilder().setIpv6NextHop(new Ipv6NextHopBuilder() - .setGlobal(address.getIpv6Address()).build()).build(); - } + if (setExtCommunityAction != null) { + attributesUpdated = this.bgpActions.get(SetExtCommunity.class) + .applyImportAction(routeEntryInfo, routeParameters, attributesUpdated, setExtCommunityAction); + } - attributesUpdatedBuilder.setCNextHop(nhNew); - } + if (attributesUpdated == null) { + return null; } - attributesUpdated = attributesUpdatedBuilder.build(); - } - final Map>, Augmentation> conditionsAug = BindingReflections - .getAugmentations(actions); + final Map>, Augmentation> bgpConditionsAug = BindingReflections + .getAugmentations(bgpAction); + + if (bgpConditionsAug == null) { + return attributes; + } - if (conditionsAug != null) { - for (final Map.Entry>, Augmentation> entry : conditionsAug.entrySet()) { + for (final Map.Entry>, Augmentation> entry + : bgpConditionsAug.entrySet()) { final BgpActionAugPolicy handler = this.bgpAugActionsRegistry.get(entry.getKey()); if (handler == null) { continue; } else if (attributesUpdated == null) { return null; } - attributesUpdated = handler.applyExportAction(routeEntryInfo, routeEntryExportParameters, - attributesUpdated, entry.getValue()); + attributesUpdated = handler.applyImportAction(routeEntryInfo, routeParameters, attributesUpdated, + entry.getValue()); } - } - - return attributesUpdated; - } - - Attributes applyImportAction( - final RouteEntryBaseAttributes routeEntryInfo, - final BGPRouteEntryImportParameters routeBaseParameters, - final Attributes attributes, - final Actions actions) { - requireNonNull(attributes); - if (actions.getRouteDisposition() instanceof RejectRoute) { - return null; - } - Attributes attributesUpdated = attributes; - attributesUpdated = applyImportBGPActions(routeEntryInfo, routeBaseParameters, - attributesUpdated, actions.getAugmentation(Actions1.class)); - if (attributesUpdated == null) { - return null; - } - attributesUpdated = applyImportAugActions(routeEntryInfo, routeBaseParameters, attributesUpdated, - actions); - return attributesUpdated; - } - - @SuppressWarnings("unchecked") - private Attributes applyImportBGPActions( - final RouteEntryBaseAttributes routeEntryInfo, - final BGPRouteEntryImportParameters routeParameters, - final Attributes attributes, - final Actions1 augmentation) { - if (augmentation == null || augmentation.getBgpActions() == null) { - return attributes; - } - Attributes attributesUpdated = attributes; - final BgpActions actions = augmentation.getBgpActions(); - final SetCommunity setCommunityAction = actions.getSetCommunity(); - final SetExtCommunity setExtCommunityAction = actions.getSetExtCommunity(); - final SetAsPathPrepend asPrependAction = actions.getSetAsPathPrepend(); - - if (asPrependAction != null) { - attributesUpdated = this.bgpActions.get(asPrependAction.getClass()) - .applyImportAction(routeEntryInfo, routeParameters, attributesUpdated, asPrependAction); - } - - if (setCommunityAction != null) { - attributesUpdated = this.bgpActions.get(SetCommunity.class) - .applyImportAction(routeEntryInfo, routeParameters, attributesUpdated, - setCommunityAction); - } - - if (setExtCommunityAction != null) { - attributesUpdated = this.bgpActions.get(SetExtCommunity.class) - .applyImportAction(routeEntryInfo, routeParameters, attributesUpdated, setExtCommunityAction); - } - - if (attributesUpdated == null) { - return null; - } - - final Map>, Augmentation> conditionsAug = BindingReflections - .getAugmentations(actions); - - if (conditionsAug == null) { - return attributes; - } - - for (final Map.Entry>, Augmentation> entry : conditionsAug.entrySet()) { - final BgpActionAugPolicy handler = this.bgpAugActionsRegistry.get(entry.getKey()); - if (handler == null) { - continue; - } else if (attributesUpdated == null) { + if (attributesUpdated == null) { return null; } - attributesUpdated = handler.applyImportAction(routeEntryInfo, routeParameters, attributesUpdated, - entry.getValue()); } - return attributesUpdated; - } - - @SuppressWarnings("unchecked") - private Attributes applyImportAugActions(final RouteEntryBaseAttributes routeEntryInfo, - final BGPRouteEntryImportParameters routeBaseParameters, - @Nonnull final Attributes attributes, - final Actions actions) { + // Augmented Actions final Map>, Augmentation> conditionsAug = BindingReflections .getAugmentations(actions); if (conditionsAug == null) { - return attributes; + return attributesUpdated; } - Attributes attributesUpdated = attributes; for (final Map.Entry>, Augmentation> entry : conditionsAug.entrySet()) { final ActionsAugPolicy handler = this.actionsRegistry.get(entry.getKey()); if (handler == null) { @@ -348,7 +327,7 @@ final class ActionsRegistryImpl { } else if (attributesUpdated == null) { return null; } - attributesUpdated = handler.applyImportAction(routeEntryInfo, routeBaseParameters, attributesUpdated, + attributesUpdated = handler.applyImportAction(routeEntryInfo, routeParameters, attributesUpdated, (Augmentation) entry.getValue()); } return attributesUpdated; diff --git a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/BgpConditionsRegistry.java b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/BgpConditionsRegistry.java index 029b04f25f..bf82b94925 100644 --- a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/BgpConditionsRegistry.java +++ b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/BgpConditionsRegistry.java @@ -75,9 +75,9 @@ public final class BgpConditionsRegistry { } } - public > AbstractRegistration registerBgpConditionsPolicy( + public , N> AbstractRegistration registerBgpConditionsPolicy( final Class conditionPolicyClass, - final BgpConditionsPolicy conditionPolicy) { + final BgpConditionsPolicy conditionPolicy) { synchronized (this.bgpConditionsRegistry) { final BgpConditionsPolicy prev = this.bgpConditionsRegistry.putIfAbsent(conditionPolicyClass, conditionPolicy); @@ -102,13 +102,11 @@ public final class BgpConditionsRegistry { final Conditions conditions) { final Conditions1 bgpConditionsAug = conditions.getAugmentation(Conditions1.class); if (bgpConditionsAug != null) { - final BgpConditions bgpConditions = bgpConditionsAug.getBgpConditions(); - synchronized (this) { - if (!matchExportCondition(entryInfo, routeEntryExportParameters, attributes, - bgpConditions)) { - return false; - } + final BgpConditions bgpConditions = bgpConditionsAug.getBgpConditions(); + if (!matchExportCondition(entryInfo, routeEntryExportParameters, attributes, + bgpConditions)) { + return false; } final Map>, Augmentation> bgpAug = BindingReflections .getAugmentations(bgpConditions); @@ -117,8 +115,8 @@ public final class BgpConditionsRegistry { if (handler == null) { continue; } - if (!handler.matchExportCondition(entryInfo, routeEntryExportParameters, attributes, - entry.getValue())) { + if (!handler.matchExportCondition(entryInfo, routeEntryExportParameters, + handler.getConditionParameter(attributes), entry.getValue())) { return false; } } @@ -149,8 +147,8 @@ public final class BgpConditionsRegistry { if (handler == null) { continue; } - if (!handler.matchImportCondition(entryInfo, routeEntryImportParameters, attributes, - entry.getValue())) { + if (!handler.matchImportCondition(entryInfo, routeEntryImportParameters, + handler.getConditionParameter(attributes), entry.getValue())) { return false; } } @@ -187,24 +185,27 @@ public final class BgpConditionsRegistry { final MatchCommunitySet matchCond = conditions.getMatchCommunitySet(); if (matchCond != null) { - if (!this.bgpConditionsRegistry.get(MatchCommunitySet.class) - .matchImportCondition(routeEntryInfo, routeEntryImportParameters, attributes, matchCond)) { + final BgpConditionsPolicy handler = this.bgpConditionsRegistry.get(MatchCommunitySet.class); + if (!handler.matchImportCondition(routeEntryInfo, routeEntryImportParameters, + handler.getConditionParameter(attributes), matchCond)) { return false; } } final MatchAsPathSet matchAsPathSet = conditions.getMatchAsPathSet(); if (matchCond != null) { - if (!this.bgpConditionsRegistry.get(MatchAsPathSet.class) - .matchImportCondition(routeEntryInfo, routeEntryImportParameters, attributes, matchAsPathSet)) { + final BgpConditionsPolicy handler = this.bgpConditionsRegistry.get(MatchAsPathSet.class); + if (!handler.matchImportCondition(routeEntryInfo, routeEntryImportParameters, + handler.getConditionParameter(attributes), matchAsPathSet)) { return false; } } final MatchExtCommunitySet matchExtCommSet = conditions.getMatchExtCommunitySet(); if (matchExtCommSet != null) { - if (!this.bgpConditionsRegistry.get(MatchExtCommunitySet.class) - .matchImportCondition(routeEntryInfo, routeEntryImportParameters, attributes, matchExtCommSet)) { + final BgpConditionsPolicy handler = this.bgpConditionsRegistry.get(MatchAsPathSet.class); + if (!handler.matchImportCondition(routeEntryInfo, routeEntryImportParameters, + handler.getConditionParameter(attributes), matchExtCommSet)) { return false; } } @@ -240,24 +241,27 @@ public final class BgpConditionsRegistry { final MatchCommunitySet matchCond = conditions.getMatchCommunitySet(); if (matchCond != null) { - if (!this.bgpConditionsRegistry.get(MatchCommunitySet.class) - .matchExportCondition(routeEntryInfo, routeEntryExportParameters, attributes, matchCond)) { + final BgpConditionsPolicy handler = this.bgpConditionsRegistry.get(MatchCommunitySet.class); + if (!handler.matchExportCondition(routeEntryInfo, routeEntryExportParameters, + handler.getConditionParameter(attributes), matchCond)) { return false; } } final MatchAsPathSet matchAsPathSet = conditions.getMatchAsPathSet(); if (matchAsPathSet != null) { - if (!this.bgpConditionsRegistry.get(MatchAsPathSet.class) - .matchExportCondition(routeEntryInfo, routeEntryExportParameters, attributes, matchAsPathSet)) { + final BgpConditionsPolicy handler = this.bgpConditionsRegistry.get(MatchAsPathSet.class); + if (!handler.matchExportCondition(routeEntryInfo, routeEntryExportParameters, + handler.getConditionParameter(attributes), matchAsPathSet)) { return false; } } final MatchExtCommunitySet matchExtCommSet = conditions.getMatchExtCommunitySet(); if (matchExtCommSet != null) { - if (!this.bgpConditionsRegistry.get(MatchExtCommunitySet.class) - .matchExportCondition(routeEntryInfo, routeEntryExportParameters, attributes, matchExtCommSet)) { + final BgpConditionsPolicy handler = this.bgpConditionsRegistry.get(MatchExtCommunitySet.class); + if (!handler.matchExportCondition(routeEntryInfo, routeEntryExportParameters, + handler.getConditionParameter(attributes), matchExtCommSet)) { return false; } } diff --git a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/BgpStatementRegistryProvider.java b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/BgpStatementRegistryProvider.java index 5c23fbc326..9ed05bb08f 100644 --- a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/BgpStatementRegistryProvider.java +++ b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/BgpStatementRegistryProvider.java @@ -28,9 +28,9 @@ public interface BgpStatementRegistryProvider { * @return registration ticket */ @Nonnull - > AbstractRegistration registerBgpConditionsPolicy( + , N> AbstractRegistration registerBgpConditionsPolicy( @Nonnull Class conditionPolicyClass, - @Nonnull BgpConditionsPolicy conditionPolicy); + @Nonnull BgpConditionsPolicy conditionPolicy); /** * Register BGP Action Policy Augmentation handler. @@ -52,9 +52,9 @@ public interface BgpStatementRegistryProvider { * @return registration ticket */ @Nonnull - > AbstractRegistration registerBgpConditionsAugmentationPolicy( + , N> AbstractRegistration registerBgpConditionsAugmentationPolicy( @Nonnull Class conditionPolicyClass, - @Nonnull BgpConditionsAugmentationPolicy conditionPolicy); + @Nonnull BgpConditionsAugmentationPolicy conditionPolicy); /** * Register BGP Action Policy Augmentation handler. diff --git a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/ConditionsRegistryImpl.java b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/ConditionsRegistryImpl.java index 215cbfb127..444347319c 100644 --- a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/ConditionsRegistryImpl.java +++ b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/ConditionsRegistryImpl.java @@ -65,13 +65,14 @@ final class ConditionsRegistryImpl { .registerBgpConditionsAugmentationPolicy(conditionPolicyClass, conditionPolicy); } - public > AbstractRegistration registerBgpConditionsPolicy( + public , N> AbstractRegistration registerBgpConditionsPolicy( final Class conditionPolicyClass, - final BgpConditionsPolicy conditionPolicy) { + final BgpConditionsPolicy conditionPolicy) { return this.bgpConditionsRegistry .registerBgpConditionsPolicy(conditionPolicyClass, conditionPolicy); } + @SuppressWarnings("unchecked") boolean matchExportConditions( final RouteEntryBaseAttributes entryInfo, final BGPRouteEntryExportParameters routeEntryExportParameters, @@ -96,8 +97,8 @@ final class ConditionsRegistryImpl { if (handler == null) { continue; } - if (!handler.matchExportCondition(entryInfo, routeEntryExportParameters, attributes, - (Augmentation) entry.getValue())) { + if (!handler.matchExportCondition(entryInfo, routeEntryExportParameters, + handler.getConditionParameter(attributes), entry.getValue())) { return false; } } @@ -106,6 +107,7 @@ final class ConditionsRegistryImpl { return true; } + @SuppressWarnings("unchecked") boolean matchImportConditions( final RouteEntryBaseAttributes entryInfo, final BGPRouteEntryImportParameters routeEntryImportParameters, @@ -129,8 +131,8 @@ final class ConditionsRegistryImpl { final ConditionsAugPolicy handler = this.conditionsRegistry.get(entry.getKey()); if (handler != null) { final Augmentation conditionConfig = (Augmentation) entry.getValue(); - if (!handler.matchImportCondition(entryInfo, routeEntryImportParameters, attributes, - conditionConfig)) { + if (!handler.matchImportCondition(entryInfo, routeEntryImportParameters, + handler.getConditionParameter(attributes), conditionConfig)) { return false; } } diff --git a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/StatementRegistry.java b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/StatementRegistry.java index 83273e05cf..34eb75b23c 100644 --- a/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/StatementRegistry.java +++ b/bgp/openconfig-rp-spi/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/spi/registry/StatementRegistry.java @@ -89,9 +89,9 @@ public final class StatementRegistry implements StatementRegistryConsumer, State } @Override - public > AbstractRegistration registerBgpConditionsPolicy( + public , N> AbstractRegistration registerBgpConditionsPolicy( final Class conditionPolicyClass, - final BgpConditionsPolicy conditionPolicy) { + final BgpConditionsPolicy conditionPolicy) { return this.conditionsRegistry.registerBgpConditionsPolicy(conditionPolicyClass, conditionPolicy); } @@ -103,9 +103,9 @@ public final class StatementRegistry implements StatementRegistryConsumer, State } @Override - public > AbstractRegistration registerBgpConditionsAugmentationPolicy( + public , N> AbstractRegistration registerBgpConditionsAugmentationPolicy( final Class conditionPolicyClass, - final BgpConditionsAugmentationPolicy conditionPolicy) { + final BgpConditionsAugmentationPolicy conditionPolicy) { return this.conditionsRegistry.registerBgpConditionsAugmentationPolicy(conditionPolicyClass, conditionPolicy); } diff --git a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchAsPathSetHandler.java b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchAsPathSetHandler.java index d0ed32a992..e5e5b85c89 100644 --- a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchAsPathSetHandler.java +++ b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchAsPathSetHandler.java @@ -48,7 +48,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; /** * Match a set of AS (All, ANY, INVERT). */ -public final class MatchAsPathSetHandler implements BgpConditionsPolicy { +public final class MatchAsPathSetHandler implements BgpConditionsPolicy { private static final InstanceIdentifier AS_PATHS_SETS_IID = InstanceIdentifier.create(RoutingPolicy.class).child(DefinedSets.class) .augmentation(DefinedSets1.class).child(BgpDefinedSets.class) @@ -77,9 +77,9 @@ public final class MatchAsPathSetHandler implements BgpConditionsPolicy { + implements BgpConditionsAugmentationPolicy { private static final InstanceIdentifier CLUSTERS_ID_SETS_IID = InstanceIdentifier.create(RoutingPolicy.class).child(DefinedSets.class) .augmentation(DefinedSets1.class).child(BgpDefinedSets.class) @@ -73,10 +74,10 @@ public final class MatchClusterIdSetHandler public boolean matchImportCondition( final RouteEntryBaseAttributes routeEntryInfo, final BGPRouteEntryImportParameters routeEntryImportParameters, - final Attributes attributes, + final ClusterId clusterId, final MatchClusterIdSetCondition conditions) { - return matchClusterIdCondition(routeEntryInfo.getClusterId(), attributes, + return matchClusterIdCondition(routeEntryInfo.getClusterId(), clusterId, conditions.getMatchClusterIdSetCondition()); } @@ -84,15 +85,20 @@ public final class MatchClusterIdSetHandler public boolean matchExportCondition( final RouteEntryBaseAttributes routeEntryInfo, final BGPRouteEntryExportParameters routeEntryExportParameters, - final Attributes attributes, + final ClusterId clusterId, final MatchClusterIdSetCondition conditions) { - return matchClusterIdCondition(routeEntryInfo.getClusterId(), attributes, + return matchClusterIdCondition(routeEntryInfo.getClusterId(), clusterId, conditions.getMatchClusterIdSetCondition()); } + @Override + public ClusterId getConditionParameter(final Attributes attributes) { + return attributes.getClusterId(); + } + private boolean matchClusterIdCondition( final ClusterIdentifier localClusterId, - final Attributes attributes, final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl + final ClusterId clusterId, final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl .bgp._default.policy.rev180109.match.cluster.id.set.condition.grouping .MatchClusterIdSetCondition matchClusterIdSetCondition) { final ClusterIdSet clusterIdSet = this.sets.getUnchecked(StringUtils @@ -103,7 +109,7 @@ public final class MatchClusterIdSetHandler } final MatchSetOptionsType matchOption = matchClusterIdSetCondition.getMatchSetOptions(); - if (attributes.getClusterId() != null) { + if (clusterId != null) { List newList = new ArrayList<>(); if (clusterIdSet.getClusterId() != null) { newList.addAll(clusterIdSet.getClusterId()); @@ -112,7 +118,7 @@ public final class MatchClusterIdSetHandler newList.add(localClusterId); } - final List matchClusterList = attributes.getClusterId().getCluster(); + final List matchClusterList = clusterId.getCluster(); if (matchOption.equals(MatchSetOptionsType.ALL)) { return matchClusterList.containsAll(newList) && newList.containsAll(matchClusterList); } diff --git a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchCommunitySetHandler.java b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchCommunitySetHandler.java index b419bf1d79..0570010e57 100644 --- a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchCommunitySetHandler.java +++ b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchCommunitySetHandler.java @@ -26,7 +26,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess * Match a set of Communities (ALL, ANY, INVERT). */ public final class MatchCommunitySetHandler - extends AbstractCommunityHandler implements BgpConditionsPolicy { + extends AbstractCommunityHandler implements BgpConditionsPolicy> { public MatchCommunitySetHandler(final DataBroker databroker) { super(databroker); } @@ -36,20 +36,23 @@ public final class MatchCommunitySetHandler public boolean matchImportCondition( final RouteEntryBaseAttributes routeEntryInfo, final BGPRouteEntryImportParameters routeEntryImportParameters, - final Attributes attributes, + final List communities, final MatchCommunitySet conditions) { - return matchCondition(attributes.getCommunities(), conditions.getCommunitySet(), - conditions.getMatchSetOptions()); + return matchCondition(communities, conditions.getCommunitySet(), conditions.getMatchSetOptions()); } @Override public boolean matchExportCondition( final RouteEntryBaseAttributes routeEntryInfo, final BGPRouteEntryExportParameters routeEntryExportParameters, - final Attributes attributes, + final List communities, final MatchCommunitySet conditions) { - return matchCondition(attributes.getCommunities(), conditions.getCommunitySet(), - conditions.getMatchSetOptions()); + return matchCondition(communities, conditions.getCommunitySet(), conditions.getMatchSetOptions()); + } + + @Override + public List getConditionParameter(final Attributes attributes) { + return attributes.getCommunities(); } private boolean matchCondition( diff --git a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchExtCommunitySetHandler.java b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchExtCommunitySetHandler.java index ae87b516a2..bbbfd1a8bf 100644 --- a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchExtCommunitySetHandler.java +++ b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchExtCommunitySetHandler.java @@ -25,7 +25,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess * Math a set of External Communities (ALL, ANY, INVERT). */ public final class MatchExtCommunitySetHandler extends AbstractExtCommunityHandler - implements BgpConditionsPolicy { + implements BgpConditionsPolicy> { public MatchExtCommunitySetHandler(final DataBroker databroker) { super(databroker); @@ -66,9 +66,9 @@ public final class MatchExtCommunitySetHandler extends AbstractExtCommunityHandl public boolean matchImportCondition( final RouteEntryBaseAttributes routeEntryInfo, final BGPRouteEntryImportParameters routeEntryImportParameters, - final Attributes attributes, + final List extendedCommunities, final MatchExtCommunitySet conditions) { - return matchCondition(attributes.getExtendedCommunities(), conditions.getExtCommunitySet(), + return matchCondition(extendedCommunities, conditions.getExtCommunitySet(), conditions.getMatchSetOptions()); } @@ -76,9 +76,14 @@ public final class MatchExtCommunitySetHandler extends AbstractExtCommunityHandl public boolean matchExportCondition( final RouteEntryBaseAttributes routeEntryInfo, final BGPRouteEntryExportParameters routeEntryExportParameters, - final Attributes attributes, + final List extendedCommunities, final MatchExtCommunitySet conditions) { - return matchCondition(attributes.getExtendedCommunities(), conditions.getExtCommunitySet(), + return matchCondition(extendedCommunities, conditions.getExtCommunitySet(), conditions.getMatchSetOptions()); } + + @Override + public List getConditionParameter(final Attributes attributes) { + return attributes.getExtendedCommunities(); + } } diff --git a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchOriginatorIdSetHandler.java b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchOriginatorIdSetHandler.java index 282bc131a9..4c25fca714 100644 --- a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchOriginatorIdSetHandler.java +++ b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchOriginatorIdSetHandler.java @@ -30,6 +30,7 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev1 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev151009.routing.policy.top.routing.policy.DefinedSets; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.Attributes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.attributes.OriginatorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp._default.policy.rev180109.BgpOriginatorIdSets; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp._default.policy.rev180109.MatchOriginatorIdSetCondition; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp._default.policy.rev180109.originator.id.set.OriginatorIdSet; @@ -41,7 +42,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; * Match an Originator Id(ANY, INVERT). */ public final class MatchOriginatorIdSetHandler - implements BgpConditionsAugmentationPolicy { + implements BgpConditionsAugmentationPolicy { private static final InstanceIdentifier ORIGINATOR_ID_SETS_IID = InstanceIdentifier.create(RoutingPolicy.class).child(DefinedSets.class) .augmentation(DefinedSets1.class).child(BgpDefinedSets.class) @@ -70,10 +71,10 @@ public final class MatchOriginatorIdSetHandler public boolean matchImportCondition( final RouteEntryBaseAttributes routeEntryInfo, final BGPRouteEntryImportParameters routeEntryImportParameters, - final Attributes attributes, + final OriginatorId originatorId, final MatchOriginatorIdSetCondition conditions) { - return matchOriginatorCondition(routeEntryInfo.getOriginatorId(), attributes, + return matchOriginatorCondition(routeEntryInfo.getOriginatorId(), originatorId, conditions.getMatchOriginatorIdSetCondition()); } @@ -81,15 +82,20 @@ public final class MatchOriginatorIdSetHandler public boolean matchExportCondition( final RouteEntryBaseAttributes routeEntryInfo, final BGPRouteEntryExportParameters routeEntryExportParameters, - final Attributes attributes, + final OriginatorId originatorId, final MatchOriginatorIdSetCondition conditions) { - return matchOriginatorCondition(routeEntryInfo.getOriginatorId(), attributes, + return matchOriginatorCondition(routeEntryInfo.getOriginatorId(), originatorId, conditions.getMatchOriginatorIdSetCondition()); } + @Override + public OriginatorId getConditionParameter(final Attributes attributes) { + return attributes.getOriginatorId(); + } + private boolean matchOriginatorCondition( final Ipv4Address localOriginatorId, - final Attributes attributes, final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl + final OriginatorId originatorId, final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl .bgp._default.policy.rev180109.match.originator.id.set.condition.grouping .MatchOriginatorIdSetCondition condition) { @@ -100,8 +106,8 @@ public final class MatchOriginatorIdSetHandler return false; } boolean found = false; - if (attributes.getOriginatorId() != null) { - final Ipv4Address remOrigin = attributes.getOriginatorId().getOriginator(); + if (originatorId != null) { + final Ipv4Address remOrigin = originatorId.getOriginator(); if (originatorIdSet.getLocal() != null && localOriginatorId.equals(remOrigin)) { found = true; diff --git a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchRoleSetHandler.java b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchRoleSetHandler.java index efc9226178..eeda4d0a34 100644 --- a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchRoleSetHandler.java +++ b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchRoleSetHandler.java @@ -18,6 +18,7 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.ExecutionException; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.apache.commons.lang3.StringUtils; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; @@ -45,7 +46,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; /** * Match a Peer Role (FROM, TO). */ -public final class MatchRoleSetHandler implements BgpConditionsAugmentationPolicy { +public final class MatchRoleSetHandler implements BgpConditionsAugmentationPolicy { private static final InstanceIdentifier ROLE_SET_IID = InstanceIdentifier.create(RoutingPolicy.class).child(DefinedSets.class) .augmentation(DefinedSets1.class).child(BgpDefinedSets.class) @@ -88,7 +89,7 @@ public final class MatchRoleSetHandler implements BgpConditionsAugmentationPolic public boolean matchImportCondition( final RouteEntryBaseAttributes routeEntryInfo, final BGPRouteEntryImportParameters routeEntryImportParameters, - final Attributes attributes, + final Void attributes, final MatchRoleSetCondition conditions) { final List neighCond = conditions.getMatchRoleSet(); @@ -109,7 +110,7 @@ public final class MatchRoleSetHandler implements BgpConditionsAugmentationPolic public boolean matchExportCondition( final RouteEntryBaseAttributes routeEntryInfo, final BGPRouteEntryExportParameters routeEntryExportParameters, - final Attributes attributes, + final Void attributes, final MatchRoleSetCondition conditions) { final List neighCond = conditions.getMatchRoleSet(); @@ -126,4 +127,10 @@ public final class MatchRoleSetHandler implements BgpConditionsAugmentationPolic } return true; } + + @Nullable + @Override + public Void getConditionParameter(@Nonnull final Attributes attributes) { + return null; + } } -- 2.36.6