import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.Endpoints;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.EndpointsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.SetEndpointGroupConditionsInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnregisterEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnsetEndpointGroupConditionsInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Key;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Prefix;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3PrefixBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3PrefixKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.has.endpoint.group.conditions.EndpointGroupCondition;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.has.endpoint.group.conditions.EndpointGroupConditionKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L2;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L3;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
import org.slf4j.Logger;
return eb;
}
+ /**
+ * Construct an L3 endpoint with the appropriate augmentations from the
+ * endpoint input. Each concrete implementation can provides its specifics earlier.
+ * @param input the input object
+ */
+ private EndpointL3PrefixBuilder buildL3PrefixEndpoint(RegisterL3PrefixEndpointInput input) {
+ EndpointL3PrefixBuilder eb = new EndpointL3PrefixBuilder(input);
+ for (Entry<String, EpRendererAugmentation> entry : registeredRenderers
+ .entrySet()) {
+ try {
+ entry.getValue().buildL3PrefixEndpointAugmentation(eb, input);
+ } catch (Throwable t) {
+ LOG.warn("L3 endpoint Augmentation error while processing "
+ + entry.getKey() + ". Reason: ", t);
+ }
+ }
+ return eb;
+ }
+
@Override
public Future<RpcResult<Void>>
registerEndpoint(RegisterEndpointInput input) {
long timestamp = System.currentTimeMillis();
-
+
+ //TODO: Replicate RPC feedback implemented in L3Prefix register for unmet requirements.
WriteTransaction t = dataProvider.newWriteOnlyTransaction();
if (input.getL2Context() != null &&
return Futures.transform(r, futureTrans, executor);
}
+ @Override
+ public Future<RpcResult<Void>> registerL3PrefixEndpoint(RegisterL3PrefixEndpointInput input) {
+
+ if (input.getL3Context() == null) {
+ return Futures.immediateFuture(RpcResultBuilder.<Void> failed()
+ .withError(ErrorType.RPC, "L3 Prefix Endpoint must have L3Context.").build());
+ }
+ if (input.getIpPrefix() == null) {
+ return Futures.immediateFuture(RpcResultBuilder.<Void> failed()
+ .withError(ErrorType.RPC, "L3 Prefix Endpoint must have ip-prefix.").build());
+ }
+
+ if (input.getTenant() == null) {
+ return Futures.immediateFuture(RpcResultBuilder.<Void> failed()
+ .withError(ErrorType.RPC, "L3 Prefix Endpoint must have tenant.").build());
+ }
+
+
+ WriteTransaction t = dataProvider.newWriteOnlyTransaction();
+
+ long timestamp = System.currentTimeMillis();
+
+ //TODO: Convert IPPrefix into it's IPv4/IPv6 canonical form.
+ // See org.apache.commons.net.util.SubnetUtils.SubnetInfo
+
+ EndpointL3PrefixKey epL3PrefixKey = new EndpointL3PrefixKey(input.getIpPrefix(),input.getL3Context());
+
+ EndpointL3Prefix epL3Prefix = buildL3PrefixEndpoint(input).setTimestamp(timestamp).build();
+ InstanceIdentifier<EndpointL3Prefix> iid_l3prefix =
+ InstanceIdentifier.builder(Endpoints.class)
+ .child(EndpointL3Prefix.class, epL3PrefixKey)
+ .build();
+ t.put(LogicalDatastoreType.OPERATIONAL, iid_l3prefix, epL3Prefix);
+
+ ListenableFuture<Void> r = t.submit();
+ return Futures.transform(r, futureTrans, executor);
+ }
+
@Override
public Future<RpcResult<Void>>
unregisterEndpoint(UnregisterEndpointInput input) {
t.delete(LogicalDatastoreType.OPERATIONAL, iid_l3);
}
}
+ //TODO: Implement L3Prefix
ListenableFuture<Void> r = t.submit();
return Futures.transform(r, futureTrans, executor);
return RpcResultBuilder.<Void>success().build();
}
};
+
+
+
}
package org.opendaylight.groupbasedpolicy.endpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3PrefixBuilder;
/**
*
void buildEndpointL3Augmentation(EndpointL3Builder eb,
RegisterEndpointInput input);
+ void buildL3PrefixEndpointAugmentation(EndpointL3PrefixBuilder eb,
+ RegisterL3PrefixEndpointInput input);
+
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ConsumerMatchersBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ProviderMatchers;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ProviderMatchersBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcher;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcherBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.requirement.matcher.MatcherRequirement;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcher;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcherBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.capability.matcher.MatcherCapability;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.GroupIdentificationConstraints;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.GroupRequirementConstraintCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.GroupRequirementConstraintCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.RequirementMatcher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.RequirementMatcherBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.requirement.matcher.MatcherRequirement;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.GroupCapabilityConstraintCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.GroupCapabilityConstraintCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcherBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.capability.matcher.MatcherCapability;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.Rule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.RuleBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelector;
HashSet<SubjectName> subjectRefs = new HashSet<>();
HashSet<ContractId> visited = new HashSet<>();
+ //TODO: Add GIC choices GroupNameConstraint and GroupAny
+ //TODO: Add EIC (ie L3Prefix) constraint.
+
resolveClauseAttr(unresolvedTenant, unresolvedContract,
unresolvedClause.getName(), subjectRefs,
capMatchers, provCondMatchers,
reqMatchers, consCondMatchers, visited);
+
Clause resolved = new ClauseBuilder()
.setName(unresolvedClause.getName())
.setSubjectRefs(ImmutableList.copyOf(subjectRefs))
.setProviderMatchers(new ProviderMatchersBuilder()
- .setCapabilityMatcher(ImmutableList.copyOf(capMatchers.values()))
+ .setGroupIdentificationConstraints(new GroupCapabilityConstraintCaseBuilder()
+ .setCapabilityMatcher(ImmutableList.copyOf(capMatchers.values())).build())
.setConditionMatcher(ImmutableList.copyOf(provCondMatchers.values()))
.build())
.setConsumerMatchers(new ConsumerMatchersBuilder()
- .setRequirementMatcher(ImmutableList.copyOf(reqMatchers.values()))
+ .setGroupIdentificationConstraints(new GroupRequirementConstraintCaseBuilder()
+ .setRequirementMatcher(ImmutableList.copyOf(reqMatchers.values())).build())
.setConditionMatcher(ImmutableList.copyOf(consCondMatchers.values()))
.build())
.build();
if (unresolvedClause.getProviderMatchers() != null) {
ProviderMatchers pms = unresolvedClause.getProviderMatchers();
- resolveCapabilityMatcher(pms.getCapabilityMatcher(), capMatchers);
+ org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.GroupIdentificationConstraints groupIdentificationConstraintsProvider = pms.getGroupIdentificationConstraints();
+ if (groupIdentificationConstraintsProvider instanceof GroupCapabilityConstraintCase) {
+ resolveCapabilityMatcher(((GroupCapabilityConstraintCase)groupIdentificationConstraintsProvider).getCapabilityMatcher(), capMatchers);
+ }
resolveConditionMatcher(pms.getConditionMatcher(), provCondMatchers);
}
+
if (unresolvedClause.getConsumerMatchers() != null) {
ConsumerMatchers cms = unresolvedClause.getConsumerMatchers();
- resolveRequirementMatcher(cms.getRequirementMatcher(), reqMatchers);
+ GroupIdentificationConstraints groupIdentificiationConstrainsConsumer = cms.getGroupIdentificationConstraints();
+ if (groupIdentificiationConstrainsConsumer instanceof GroupRequirementConstraintCase) {
+ resolveRequirementMatcher(((GroupRequirementConstraintCase) groupIdentificiationConstrainsConsumer).getRequirementMatcher(), reqMatchers);
+ }
resolveConditionMatcher(cms.getConditionMatcher(), consCondMatchers);
+
}
if (unresolvedClause.getSubjectRefs() != null)
subjectRefs.addAll(unresolvedClause.getSubjectRefs());
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcher;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.quality.matcher.MatcherQuality;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Target;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcher;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.requirement.matcher.MatcherRequirement;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcher;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.capability.matcher.MatcherCapability;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.RequirementMatcher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.requirement.matcher.MatcherRequirement;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.capability.matcher.MatcherCapability;
/**
* Utilities related to matchers and labels
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Clause;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Subject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Target;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcher;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.GroupIdentificationConstraints;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.GroupRequirementConstraintCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.RequirementMatcher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.GroupCapabilityConstraintCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcher;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.Rule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.RuleBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelector;
private boolean clauseMatches(Clause clause, ContractMatch match) {
if (clause.getConsumerMatchers() != null) {
- List<RequirementMatcher> reqMatchers =
- clause.getConsumerMatchers().getRequirementMatcher();
- if (reqMatchers != null) {
- for (RequirementMatcher reqMatcher : reqMatchers) {
- if (!MatcherUtils.applyReqMatcher(reqMatcher,
- match.consumerRelator)) {
- return false;
+ GroupIdentificationConstraints groupIdentificationConstraintsConsumer = clause.getConsumerMatchers()
+ .getGroupIdentificationConstraints();
+ if (groupIdentificationConstraintsConsumer instanceof GroupRequirementConstraintCase) {
+ List<RequirementMatcher> reqMatchers = ((GroupRequirementConstraintCase) groupIdentificationConstraintsConsumer)
+ .getRequirementMatcher();
+ if (reqMatchers != null) {
+ for (RequirementMatcher reqMatcher : reqMatchers) {
+ if (!MatcherUtils.applyReqMatcher(reqMatcher,
+ match.consumerRelator)) {
+ return false;
+ }
}
}
}
}
if (clause.getProviderMatchers() != null) {
- List<CapabilityMatcher> capMatchers =
- clause.getProviderMatchers().getCapabilityMatcher();
- if (capMatchers != null) {
- for (CapabilityMatcher capMatcher : capMatchers) {
- if (!MatcherUtils.applyCapMatcher(capMatcher,
- match.providerRelator)) {
- return false;
+ org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.GroupIdentificationConstraints groupIdentificationConstraintsProvider = clause
+ .getProviderMatchers().getGroupIdentificationConstraints();
+ if (groupIdentificationConstraintsProvider instanceof GroupCapabilityConstraintCase) {
+ List<CapabilityMatcher> capMatchers = ((GroupCapabilityConstraintCase) groupIdentificationConstraintsProvider)
+ .getCapabilityMatcher();
+
+ if (capMatchers != null) {
+ for (CapabilityMatcher capMatcher : capMatchers) {
+ if (!MatcherUtils.applyCapMatcher(capMatcher,
+ match.providerRelator)) {
+ return false;
+ }
}
}
}
type name;
description "A name for a parameter.";
}
-}
\ No newline at end of file
+}
}
}
+ grouping l3-prefix-key {
+ description
+ "The fields that identify an endpoint by a layer 3 prefix";
+ leaf l3-context {
+ type gbp-common:l3-context-id;
+ mandatory true;
+ description
+ "The context for this layer 3 prefix";
+ }
+ leaf ip-prefix {
+ type inet:ip-prefix;
+ mandatory true;
+ description
+ "The IP prefix for the endpoint";
+ }
+ }
+
// A base type for an end point
grouping endpoint-fields {
description "An endpoint and its associated metadata";
}
uses l2-key;
-
+
+ leaf network-containment {
+ description
+ "The network domain associated with this endpoint's fowarding
+ context.";
+ type gbp-common:network-domain-id;
+ }
list l3-address {
description
"All the layer 3 addresses associated with this endpoint";
description
"The group associated with this endpoint";
}
+ leaf-list endpoint-groups {
+ type gbp-common:endpoint-group-id;
+ description
+ "The groups associated with this endpoint";
+ ordered-by user;
+ }
leaf-list condition {
type gbp-common:condition-name;
description
"The conditions associated with this endpoint";
}
+ // This was a mistake and now it's an abomination.
leaf port-name {
type gbp-common:name;
description
"Port name";
+ } // end the abomination.
+ leaf timestamp {
+ type int64;
+ description
+ "The last timestamp associated with this endpoint record.
+ This will be used for aging data in the registry.";
+ }
+ }
+
+ // L3 Prefix EndPointFields
+ grouping endpoint-l3-prefix-fields {
+ description "An l3 prefix endpoint and its associated metadata";
+ uses l3-prefix-key;
+ leaf tenant {
+ type gbp-common:tenant-id;
+ mandatory true;
+ description
+ "The tenant with which this endpoint is associated";
+ }
+ leaf endpoint-group {
+ type gbp-common:endpoint-group-id;
+ description
+ "The group associated with this endpoint";
+ }
+ leaf-list endpoint-groups {
+ type gbp-common:endpoint-group-id;
+ description
+ "The groups associated with this endpoint";
+ ordered-by user;
+ }
+ leaf-list condition {
+ type gbp-common:condition-name;
+ description
+ "The conditions associated with this endpoint";
+ }
+ list endpoint-l2-gateways {
+ key "l2-context mac-address";
+ uses l2-key;
+ }
+ list endpoint-l3-gateways {
+ key "l3-context ip-address";
+ uses l3-key;
}
leaf timestamp {
type int64;
"Endpoints indexed by layer 3 addreses. When modifying
data here, you must also modify data in the endpoints
list as well.";
-
key "l3-context ip-address";
uses l3-key;
-
uses endpoint-fields;
}
+ list endpoint-l3-prefix {
+ key "l3-context ip-prefix";
+ uses endpoint-l3-prefix-fields;
+ }
+
list condition-mapping {
description
"A list mapping conditions to entire endpoint groups.
}
}
+ rpc register-l3-prefix-endpoint {
+ description
+ "Register an L3 Prefix Endpoint to the endpoint registery. If there
+ is already an existing endpoint with the same keys, they
+ will be overwritten with the new information.";
+
+ input {
+ uses endpoint-l3-prefix-fields;
+ }
+ }
+
rpc unregister-endpoint {
description "Unregister an endpoint or endpoints from the registry.";
key "l3-context ip-address";
uses l3-key;
}
+ list l3-prefix {
+ key "l3-context ip-prefix";
+ uses l3-prefix-key;
+ }
}
}
}
}
+ list external-implicit-group {
+ description
+ ".";
+
+ key "id";
+
+ leaf id {
+ mandatory true;
+ type gbp-common:endpoint-group-id;
+ }
+ // Fields to be determined and completed before Code Freeze
+
+ }
// *************************
// Subject feature instances
// *************************
requirements on the consumer endpoint group,
capabilities on the provider endpoint group, and
conditions on the individual endpoints in the
- endpoint group.";
-
+ endpoint group.";
key "name";
leaf name {
type gbp-common:clause-name;
mandatory true;
- }
-
+ }
// ********
// Matchers
// ********
description
"Matchers that apply to the consumer endpoint
group.";
- list requirement-matcher {
- description
- "Match against requirements in the consumer
- endpoint group.";
-
- key "name";
- leaf name {
- description
- "A name for the requirement matcher";
- type gbp-common:requirement-matcher-name;
- mandatory true;
+
+ // GIC mutually OR'd within role
+ choice group-identification-constraints {
+ description "Returns Groups which match, MUTALLY OR within role. Must be Either/Or";
+
+ case group-name-constraint-case {
+ list group-name-constraint {
+ key endpoint-group-name;
+ leaf endpoint-group-name {
+ type gbp-common:name;
+ }
+ }
}
-
- uses matcher;
- list matcher-requirement {
- description
- "A matcher requirement is a
- requirement with a selector name
- field used in requirement
- matchers. The name of the
- matcher requirement matches
- against requirements in endpoint
- groups.";
-
- key name;
- uses requirement-base;
-
- leaf selector-namespace {
+ case group-requirement-constraint-case {
+ list requirement-matcher {
description
- "The name of the selector to
- match. This allows us to
- specify that we want to match
- only requirements scoped to a
- particular selector name.
-
- This parameter is optional;
- if not specified, use an
- inherited selector namespace
- if it exists, or match
- against any selector name.";
-
- type gbp-common:selector-name;
+ "Match against requirements in the consumer
+ endpoint group.";
+
+ key "name";
+ leaf name {
+ description
+ "A name for the requirement matcher";
+ type gbp-common:requirement-matcher-name;
+ mandatory true;
+ }
+
+ uses matcher;
+ list matcher-requirement {
+ description
+ "A matcher requirement is a
+ requirement with a selector name
+ field used in requirement
+ matchers. The name of the
+ matcher requirement matches
+ against requirements in endpoint
+ groups.";
+
+ key name;
+ uses requirement-base;
+
+ leaf selector-namespace {
+ description
+ "The name of the selector to
+ match. This allows us to
+ specify that we want to match
+ only requirements scoped to a
+ particular selector name.
+
+ This parameter is optional;
+ if not specified, use an
+ inherited selector namespace
+ if it exists, or match
+ against any selector name.";
+
+ type gbp-common:selector-name;
+ }
+ }
+ }
+ }
+
+ case group-any-case {
+ container group-any {
+
+ description
+ "A presence container stating that, if this exists,
+ the role matcher will match on any group.";
+ presence "This matches any group";
}
}
}
+
+
+
uses has-condition-matchers;
+
+ container endpoint-identification-constraints {
+ description
+ "Identify endpoints via other attributes other than conditions.
+ These can be things such as ip-prefix, vlan, mpls label etc. These
+ things are intended to be explicity stated, and should not contain
+ references to other objects like endpointsIDs.";
+ container l3-endpoint-identification-constraints {
+ list prefix-constraint {
+ key ip-prefix;
+ leaf ip-prefix {
+ type inet:ip-prefix;
+ }
+ }
+ }
+ }
}
-
+
container provider-matchers {
- description
- "Matchers that apply to the provider endpoint
+ description
+ "Matchers that apply to the provider endpoint
group";
-
- list capability-matcher {
- description
- "Match against capabilities in the provider
- endpoint group.";
-
- key "name";
- leaf name {
- description
- "A name for the capability matcher";
- type gbp-common:capability-matcher-name;
- mandatory true;
+
+ // GIC mutually OR'd within role
+ choice group-identification-constraints {
+ description "Returns Groups which match, MUTALLY OR within role. Must be Either/Or";
+
+ case group-name-constraint-case {
+ list group-name-constraint {
+ key endpoint-group-name;
+ leaf endpoint-group-name {
+ type gbp-common:name;
+ }
+ }
}
-
- uses matcher;
-
- list matcher-capability {
- description
- "A matcher capability is a
- capability with a selector
- name field used in capability
- mat chers. The name of the
- matcher capability matches
- against capabilities in
- endpoint groups.";
-
- key name;
- uses capability-base;
-
- leaf selector-namespace {
+ case group-capability-constraint-case {
+ list capability-matcher {
description
- "The name of the selector to
- match. This allows us to
- specify that we want to match
- only capabilities scoped to a
- particular selector name.
-
- This parameter is optional;
- if not specified, use an
- inherited selector namespace
- if it exists, or match
- against any selector name.";
-
- type gbp-common:selector-name;
+ "Match against capabilities in the provider
+ endpoint group.";
+
+ key "name";
+ leaf name {
+ description
+ "A name for the capability matcher";
+ type gbp-common:capability-matcher-name;
+ mandatory true;
+ }
+
+ uses matcher;
+
+ list matcher-capability {
+ description
+ "A matcher capability is a
+ capability with a selector
+ name field used in capability
+ mat chers. The name of the
+ matcher capability matches
+ against capabilities in
+ endpoint groups.";
+
+ key name;
+ uses capability-base;
+
+ leaf selector-namespace {
+ description
+ "The name of the selector to
+ match. This allows us to
+ specify that we want to match
+ only capabilities scoped to a
+ particular selector name.
+
+ This parameter is optional;
+ if not specified, use an
+ inherited selector namespace
+ if it exists, or match
+ against any selector name.";
+
+ type gbp-common:selector-name;
+ }
+ }
+ }
+ }
+ case group-any-case {
+ container group-any {
+ presence "any";
}
}
}
+
uses has-condition-matchers;
+
+ container endpoint-identification-constraints {
+ description
+ "Identify endpoints via other attributes other than conditions.
+ These can be things such as ip-prefix, vlan, mpls label etc. These
+ things are intended to be explicity stated, and should not contain
+ references to other objects like endpointsIDs.";
+ container l3-endpoint-identification-constraints {
+ list prefix-constraint {
+ key ip-prefix;
+ leaf ip-prefix {
+ type inet:ip-prefix;
+ }
+ }
+ }
+ }
}
+ container any-matchers {
+ description
+ "Matchers that apply to either provider endpoint group or consumer endpoint group.";
+ // TODO fill this out, may need additional groupings so as to not confuse capability or requirement.
+ }
+
// ******************
// Subject References
// ******************
package org.opendaylight.groupbasedpolicy.resolver;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
import java.util.HashSet;
import java.util.List;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.TargetBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ConsumerMatchersBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ProviderMatchersBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcher;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcherBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.requirement.matcher.MatcherRequirementBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcher;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcherBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.capability.matcher.MatcherCapabilityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.GroupRequirementConstraintCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.GroupRequirementConstraintCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.RequirementMatcher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.RequirementMatcherBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.requirement.matcher.MatcherRequirementBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.GroupCapabilityConstraintCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.GroupCapabilityConstraintCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcherBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.capability.matcher.MatcherCapabilityBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.Rule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.RuleBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelector;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
-import static org.junit.Assert.*;
-
public class InheritanceUtilsTest {
// ******
// Labels
.setName(clauseName1)
.setSubjectRefs(ImmutableList.of(subject1))
.setProviderMatchers(new ProviderMatchersBuilder()
- .setCapabilityMatcher(ImmutableList.of(capm_c1))
+ .setGroupIdentificationConstraints(new GroupCapabilityConstraintCaseBuilder()
+ .setCapabilityMatcher(ImmutableList.of(capm_c1)).build())
.setConditionMatcher(ImmutableList.of(cm_c1))
.build())
.setConsumerMatchers(new ConsumerMatchersBuilder()
- .setRequirementMatcher(ImmutableList.of(rm_r1))
+ .setGroupIdentificationConstraints(new GroupRequirementConstraintCaseBuilder()
+ .setRequirementMatcher(ImmutableList.of(rm_r1)).build())
.setConditionMatcher(ImmutableList.of(cm_c2))
.build())
.build();
.setName(clauseName1)
.setSubjectRefs(ImmutableList.of(subject2))
.setConsumerMatchers(new ConsumerMatchersBuilder()
- .setRequirementMatcher(ImmutableList.of(rm_r1_plus))
+ .setGroupIdentificationConstraints(new GroupRequirementConstraintCaseBuilder()
+ .setRequirementMatcher(ImmutableList.of(rm_r1_plus)).build())
.setConditionMatcher(ImmutableList.of(cm_c2_plus))
.build())
.build();
.setName(clauseName1)
.setSubjectRefs(ImmutableList.of(subject3))
.setProviderMatchers(new ProviderMatchersBuilder()
- .setCapabilityMatcher(ImmutableList.of(capm_c1))
+ .setGroupIdentificationConstraints(new GroupCapabilityConstraintCaseBuilder()
+ .setCapabilityMatcher(ImmutableList.of(capm_c1)).build())
.setConditionMatcher(ImmutableList.of(cm_c2_plus))
.build())
.build();
assertEquals(1, cm.get(0).getCondition().size());
assertTrue(containsCondition(cm.get(0).getCondition(), cond1));
+
List<CapabilityMatcher> capm =
- result.getProviderMatchers().getCapabilityMatcher();
+ ((GroupCapabilityConstraintCase)result.getProviderMatchers().getGroupIdentificationConstraints()).getCapabilityMatcher();
assertEquals(1, capm.size());
assertEquals(1, capm.get(0).getMatcherCapability().size());
assertTrue(containsCapability(capm.get(0).getMatcherCapability(), c1));
assertTrue(containsCondition(cm.get(0).getCondition(), cond2));
List<RequirementMatcher> pm =
- result.getConsumerMatchers().getRequirementMatcher();
+ ((GroupRequirementConstraintCase)result.getConsumerMatchers().getGroupIdentificationConstraints()).getRequirementMatcher();
assertEquals(1, pm.size());
assertEquals(1, pm.get(0).getMatcherRequirement().size());
assertTrue(containsRequirement(pm.get(0).getMatcherRequirement(), r1));
assertTrue(containsCondition(cm.get(0).getCondition(), cond1));
List<CapabilityMatcher> capm =
- result.getProviderMatchers().getCapabilityMatcher();
+ ((GroupCapabilityConstraintCase)result.getProviderMatchers().getGroupIdentificationConstraints()).getCapabilityMatcher();
assertEquals(1, capm.size());
assertEquals(1, capm.get(0).getMatcherCapability().size());
assertTrue(containsCapability(capm.get(0).getMatcherCapability(), c1));
assertEquals(0, cm.get(0).getCondition().size());
List<RequirementMatcher> pm =
- result.getConsumerMatchers().getRequirementMatcher();
+ ((GroupRequirementConstraintCase)result.getConsumerMatchers().getGroupIdentificationConstraints()).getRequirementMatcher();
assertEquals(1, pm.size());
assertEquals(2, pm.get(0).getMatcherRequirement().size());
assertTrue(containsRequirement(pm.get(0).getMatcherRequirement(), r1));
assertEquals(1, c.getClause().size());
Clause clause = c.getClause().get(0);
assertEquals(1, clause.getConsumerMatchers().getConditionMatcher().size());
- assertEquals(1, clause.getConsumerMatchers().getRequirementMatcher().size());
+ assertEquals(1, ((GroupRequirementConstraintCase)clause.getConsumerMatchers().getGroupIdentificationConstraints()).getRequirementMatcher().size());
assertEquals(1, clause.getProviderMatchers().getConditionMatcher().size());
- assertEquals(1, clause.getProviderMatchers().getCapabilityMatcher().size());
+ assertEquals(1, ((GroupCapabilityConstraintCase)clause.getProviderMatchers().getGroupIdentificationConstraints()).getCapabilityMatcher().size());
assertEquals(2, c.getSubject().size());
EndpointGroup eg = TenantUtils.findEndpointGroup(tenant, egloop2Id);
package org.opendaylight.groupbasedpolicy.resolver;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
import org.junit.Test;
-import org.opendaylight.groupbasedpolicy.resolver.MatcherUtils;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.CapabilityName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.QualityName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RequirementName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.quality.matcher.MatcherQualityBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Target;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.TargetBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcher;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcherBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.requirement.matcher.MatcherRequirement;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.requirement.matcher.MatcherRequirementBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcher;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcherBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.capability.matcher.MatcherCapability;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.capability.matcher.MatcherCapabilityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.RequirementMatcher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.RequirementMatcherBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.requirement.matcher.MatcherRequirement;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.requirement.matcher.MatcherRequirementBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcherBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.capability.matcher.MatcherCapability;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.capability.matcher.MatcherCapabilityBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelectorBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelector;
import com.google.common.collect.ImmutableList;
-import static org.junit.Assert.*;
-
public class MatcherUtilsTest {
@Test
package org.opendaylight.groupbasedpolicy.resolver;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import org.junit.Before;
import org.junit.Test;
-import org.opendaylight.groupbasedpolicy.resolver.PolicyResolver;
-import org.opendaylight.groupbasedpolicy.resolver.ConditionSet;
import org.opendaylight.groupbasedpolicy.resolver.PolicyResolver.ContractMatch;
import org.opendaylight.groupbasedpolicy.resolver.PolicyResolver.TenantContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.CapabilityMatcherName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.TargetBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ConsumerMatchersBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ProviderMatchersBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcher;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcherBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.requirement.matcher.MatcherRequirementBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcher;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcherBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.capability.matcher.MatcherCapabilityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.GroupRequirementConstraintCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.RequirementMatcher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.RequirementMatcherBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.requirement.matcher.MatcherRequirementBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.GroupCapabilityConstraintCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcherBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.capability.matcher.MatcherCapabilityBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.Rule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.RuleBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelector;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Table;
-import static org.junit.Assert.*;
-
public class PolicyResolverTest {
Quality q1 = new QualityBuilder()
.setName(new QualityName("q1"))
Clause clause1 = new ClauseBuilder()
.setName(new ClauseName("clause1"))
.setConsumerMatchers(new ConsumerMatchersBuilder()
- .setRequirementMatcher(ImmutableList.of(rm1))
+ .setGroupIdentificationConstraints(new GroupRequirementConstraintCaseBuilder()
+ .setRequirementMatcher(ImmutableList.of(rm1)).build())
.setConditionMatcher(ImmutableList.of(condm1, condm2, condm3))
.build())
.setProviderMatchers(new ProviderMatchersBuilder()
- .setCapabilityMatcher(ImmutableList.of(capm1))
+ .setGroupIdentificationConstraints(new GroupCapabilityConstraintCaseBuilder()
+ .setCapabilityMatcher(ImmutableList.of(capm1)).build())
.build())
.setSubjectRefs(ImmutableList.of(s1.getName()))
.build();
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.Endpoints;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3Address;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3PrefixBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayConfig.LearningMode;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder;
public void buildEndpointL3Augmentation(EndpointL3Builder eb,
RegisterEndpointInput input) {
}
+
+ @Override
+ public void buildL3PrefixEndpointAugmentation(EndpointL3PrefixBuilder eb, RegisterL3PrefixEndpointInput input) {
+ // TODO Auto-generated method stub
+
+ }
}
// *************
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
import org.opendaylight.groupbasedpolicy.resolver.PolicyResolver;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.SfcManager;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayConfig;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.DataObject;
this.dataBroker = dataProvider;
int numCPU = Runtime.getRuntime().availableProcessors();
+ //TODO: Consider moving to groupbasedpolicy-ofoverlay-config so as to be user configurable in distribution.
executor = Executors.newScheduledThreadPool(numCPU * 2);
switchManager = new SwitchManager(dataProvider, executor);
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.Endpoints;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3PrefixBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.opflex.rev140528.OpflexOverlayContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.opflex.rev140528.OpflexOverlayContextBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.opflex.rev140528.OpflexOverlayContextInput;
eb.addAugmentation(OpflexOverlayContextL3.class,
new OpflexOverlayContextL3Builder(ictx).build());
}
+
+ @Override
+ public void buildL3PrefixEndpointAugmentation(EndpointL3PrefixBuilder eb, RegisterL3PrefixEndpointInput input) {
+ // TODO These methods will be replaced by getAugmentation and augmentation applied at caller.
+
+ }
}
// *************