def get_tenant_data():
return {
- "tenant": [
- {
- "id": "tenant-dobre",
- "l2-flood-domain": [
- {
- "id": "flood-domain-1",
- "parent": "bridge-domain1"
- },
- {
- "id": "flood-domain-2",
- "parent": "bridge-domain1"
- }
- ],
- "name": "DockerTenant",
- "l3-context": [
+ "tenant": [
{
- "id": "l3-context-vrf-red"
- }
- ],
- "l2-bridge-domain": [
- {
- "id": "bridge-domain1",
- "parent": "l3-context-vrf-red"
- }
- ],
- "subnet": [
- {
- "id": "subnet-10.0.36.0/24",
- "virtual-router-ip": "10.0.36.1",
- "parent": "flood-domain-2",
- "ip-prefix": "10.0.36.1/24"
- },
- {
- "id": "subnet-10.0.35.0/24",
- "virtual-router-ip": "10.0.35.1",
- "parent": "flood-domain-1",
- "ip-prefix": "10.0.35.1/24"
- }
- ],
- "endpoint-group": [
- {
- "id": "webservers",
- "name" : "webservers",
- "provider-named-selector": [
- {
- "name": "webservers-clients-icmp-http-contract",
- "contract": [
- "icmp-http-contract"
- ]
- }
- ]
- },
- {
- "id": "clients",
- "name" : "clients",
- "consumer-named-selector": [
- {
- "name": "webservers-clients-icmp-http-contract",
- "contract": [
- "icmp-http-contract"
- ]
- }
- ]
- }
- ],
- "subject-feature-instances": {
- "classifier-instance": [
- {
- "name": "icmp",
- "classifier-definition-id": "Classifier-IP-Protocol",
- "parameter-value": [
+ "id": "tenant-dobre",
+ "name": "DockerTenant",
+ "forwarding-context": {
+ "l2-flood-domain": [
{
- "name": "proto",
- "int-value": 1
+ "id": "flood-domain-1",
+ "parent": "bridge-domain1"
+ },
+ {
+ "id": "flood-domain-2",
+ "parent": "bridge-domain1"
}
- ]
- },
- {
- "name": "http-dest",
- "classifier-definition-id": "Classifier-L4",
- "parameter-value": [
+ ],
+ "l3-context": [
{
- "int-value": "6",
- "name": "proto"
- },
+ "id": "l3-context-vrf-red"
+ }
+ ],
+ "l2-bridge-domain": [
{
- "int-value": "80",
- "name": "destport"
+ "id": "bridge-domain1",
+ "parent": "l3-context-vrf-red"
}
- ]
- },
- {
- "name": "http-src",
- "classifier-definition-id": "Classifier-L4",
- "parameter-value": [
+ ],
+ "subnet": [
{
- "int-value": "6",
- "name": "proto"
+ "id": "subnet-10.0.36.0/24",
+ "virtual-router-ip": "10.0.36.1",
+ "parent": "flood-domain-2",
+ "ip-prefix": "10.0.36.1/24"
},
{
- "int-value": "80",
- "name": "sourceport"
+ "id": "subnet-10.0.35.0/24",
+ "virtual-router-ip": "10.0.35.1",
+ "parent": "flood-domain-1",
+ "ip-prefix": "10.0.35.1/24"
}
]
- }
- ],
- "action-instance": [
- {
- "name": "chain1",
- "action-definition-id": "Action-Chain",
- "parameter-value": [
+ },
+ "policy": {
+ "endpoint-group": [
{
- "name": "sfc-chain-name",
- "string-value": "SFCGBP"
+ "id": "webservers",
+ "name": "webservers",
+ "provider-named-selector": [
+ {
+ "name": "webservers-clients-icmp-http-contract",
+ "contract": [
+ "icmp-http-contract"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "clients",
+ "name": "clients",
+ "consumer-named-selector": [
+ {
+ "name": "webservers-clients-icmp-http-contract",
+ "contract": [
+ "icmp-http-contract"
+ ]
+ }
+ ]
}
- ]
- },
- {
- "name": "allow1",
- "action-definition-id": "Action-Allow"
- }
- ]
- },
- "contract": [
- {
- "id": "icmp-http-contract",
- "subject": [
- {
- "name": "icmp-subject",
- "rule": [
+ ],
+ "subject-feature-instances": {
+ "classifier-instance": [
{
- "name": "allow-icmp-rule",
- "order" : 0,
- "classifier-ref": [
+ "name": "icmp",
+ "classifier-definition-id": "Classifier-IP-Protocol",
+ "parameter-value": [
{
- "name": "icmp",
- "instance-name" : "icmp"
- }
- ],
- "action-ref": [
- {
- "name": "allow1",
- "order": 0
+ "name": "proto",
+ "int-value": 1
}
]
- }
- ]
- },
- {
- "name": "http-subject",
- "rule": [
+ },
{
- "name": "http-chain-rule",
- "classifier-ref": [
+ "name": "http-dest",
+ "classifier-definition-id": "Classifier-L4",
+ "parameter-value": [
{
- "name": "http-dest",
- "instance-name" : "http-dest",
- "direction": "in"
- }
- ],
- "action-ref": [
+ "int-value": "6",
+ "name": "proto"
+ },
{
- "name": "chain1",
- "order": 0
+ "int-value": "80",
+ "name": "destport"
}
]
},
{
- "name": "http-out-rule",
- "classifier-ref": [
+ "name": "http-src",
+ "classifier-definition-id": "Classifier-L4",
+ "parameter-value": [
+ {
+ "int-value": "6",
+ "name": "proto"
+ },
{
- "name": "http-src",
- "instance-name" : "http-src",
- "direction": "out"
+ "int-value": "80",
+ "name": "sourceport"
}
- ],
- "action-ref": [
+ ]
+ }
+ ],
+ "action-instance": [
+ {
+ "name": "chain1",
+ "action-definition-id": "Action-Chain",
+ "parameter-value": [
{
- "name": "allow1",
- "order": 0
+ "name": "sfc-chain-name",
+ "string-value": "SFCGBP"
}
]
+ },
+ {
+ "name": "allow1",
+ "action-definition-id": "Action-Allow"
}
]
- }
- ],
- "clause": [
- {
- "name": "icmp-http-clause",
- "subject-refs": [
- "icmp-subject",
- "http-subject"
- ]
- }
- ]
+ },
+ "contract": [
+ {
+ "id": "icmp-http-contract",
+ "subject": [
+ {
+ "name": "icmp-subject",
+ "rule": [
+ {
+ "name": "allow-icmp-rule",
+ "order": 0,
+ "classifier-ref": [
+ {
+ "name": "icmp",
+ "instance-name": "icmp"
+ }
+ ],
+ "action-ref": [
+ {
+ "name": "allow1",
+ "order": 0
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "http-subject",
+ "rule": [
+ {
+ "name": "http-chain-rule",
+ "classifier-ref": [
+ {
+ "name": "http-dest",
+ "instance-name": "http-dest",
+ "direction": "in"
+ }
+ ],
+ "action-ref": [
+ {
+ "name": "chain1",
+ "order": 0
+ }
+ ]
+ },
+ {
+ "name": "http-out-rule",
+ "classifier-ref": [
+ {
+ "name": "http-src",
+ "instance-name": "http-src",
+ "direction": "out"
+ }
+ ],
+ "action-ref": [
+ {
+ "name": "allow1",
+ "order": 0
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "clause": [
+ {
+ "name": "icmp-http-clause",
+ "subject-refs": [
+ "icmp-subject",
+ "http-subject"
+ ]
+ }
+ ]
+ }
+ ]
+ }
}
]
- }
- ]
-}
+ }
# Main definition - constants
def get_tenant_data():
return {
- "policy:tenant": {
- "contract": [
- {
+ "policy:tenant": {
+ "id": "tenant-dobre",
+ "name": "GBPPOC",
+ "forwarding-context": {
+ "l2-bridge-domain": [
+ {
+ "id": "bridge-domain1",
+ "parent": "l3-context-vrf-red"
+ }
+ ],
+ "l2-flood-domain": [
+ {
+ "id": "flood-domain-1",
+ "parent": "bridge-domain1"
+ },
+ {
+ "id": "flood-domain1",
+ "parent": "bridge-domain1"
+ }
+ ],
+ "l3-context": [
+ {
+ "id": "l3-context-vrf-red"
+ }
+ ],
+ "subnet": [
+ {
+ "id": "subnet-10.0.35.0/24",
+ "ip-prefix": "10.0.35.1/24",
+ "parent": "flood-domain-1",
+ "virtual-router-ip": "10.0.35.1"
+ },
+ {
+ "id": "subnet-10.0.36.0/24",
+ "ip-prefix": "10.0.36.1/24",
+ "parent": "flood-domain1",
+ "virtual-router-ip": "10.0.36.1"
+ }
+ ]
+ },
+ "policy": {
+ "contract": [
+ {
"clause": [
- {
- "name": "allow-http-clause",
- "subject-refs": [
- "allow-http-subject",
- "allow-icmp-subject"
- ]
- }
- ],
- "id": "icmp-http-contract",
+ {
+ "name": "allow-http-clause",
+ "subject-refs": [
+ "allow-http-subject",
+ "allow-icmp-subject"
+ ]
+ }
+ ],
+ "id": "icmp-http-contract",
"subject": [
- {
- "name": "allow-http-subject",
- "rule": [
- {
- "classifier-ref": [
- {
- "direction": "in",
- "name": "http-dest",
- "instance-name" : "http-dest",
- },
- {
- "direction": "out",
- "name": "http-src",
- "instance-name" : "http-src"
- }
- ],
- "action-ref": [
+ {
+ "name": "allow-http-subject",
+ "rule": [
{
- "name": "allow1",
- "order": 0
+ "classifier-ref": [
+ {
+ "direction": "in",
+ "name": "http-dest",
+ "instance-name": "http-dest"
+ },
+ {
+ "direction": "out",
+ "name": "http-src",
+ "instance-name": "http-src"
+ }
+ ],
+ "action-ref": [
+ {
+ "name": "allow1",
+ "order": 0
+ }
+ ],
+ "name": "allow-http-rule"
}
- ],
-
- "name": "allow-http-rule"
- }
- ]
- },
- {
- "name": "allow-icmp-subject",
- "rule": [
- {
- "classifier-ref": [
- {
- "name": "icmp",
- "instance-name" : "icmp"
- }
- ],
- "action-ref": [
+ ]
+ },
+ {
+ "name": "allow-icmp-subject",
+ "rule": [
{
- "name": "allow1",
- "order": 0
+ "classifier-ref": [
+ {
+ "name": "icmp",
+ "instance-name": "icmp"
+ }
+ ],
+ "action-ref": [
+ {
+ "name": "allow1",
+ "order": 0
+ }
+ ],
+ "name": "allow-icmp-rule"
}
- ],
-
- "name": "allow-icmp-rule"
- }
- ]
- }
+ ]
+ }
]
- }
- ],
- "endpoint-group": [
- {
+ }
+ ],
+ "endpoint-group": [
+ {
"consumer-named-selector": [
- {
- "contract": [
- "icmp-http-contract"
- ],
- "name": "webservers-clients-icmp-http-contract"
- }
- ],
- "id": "clients",
+ {
+ "contract": [
+ "icmp-http-contract"
+ ],
+ "name": "webservers-clients-icmp-http-contract"
+ }
+ ],
+ "id": "clients",
"provider-named-selector": []
- },
- {
- "consumer-named-selector": [],
- "id": "webservers",
+ },
+ {
+ "consumer-named-selector": [],
+ "id": "webservers",
"provider-named-selector": [
+ {
+ "contract": [
+ "icmp-http-contract"
+ ],
+ "name": "webservers-clients-icmp-http-contract"
+ }
+ ]
+ }
+ ],
+ "subject-feature-instances": {
+ "classifier-instance": [
+ {
+ "classifier-definition-id": "Classifier-L4",
+ "name": "http-dest",
+ "parameter-value": [
+ {
+ "int-value": "6",
+ "name": "proto"
+ },
{
- "contract": [
- "icmp-http-contract"
- ],
- "name": "webservers-clients-icmp-http-contract"
+ "int-value": "80",
+ "name": "destport"
}
- ]
- }
- ],
- "id": "tenant-dobre",
- "l2-bridge-domain": [
- {
- "id": "bridge-domain1",
- "parent": "l3-context-vrf-red"
- }
- ],
- "l2-flood-domain": [
- {
- "id": "flood-domain-1",
- "parent": "bridge-domain1"
- },
- {
- "id": "flood-domain1",
- "parent": "bridge-domain1"
- }
- ],
- "l3-context": [
- {
- "id": "l3-context-vrf-red"
- }
- ],
- "name": "GBPPOC",
- "subject-feature-instances": {
- "classifier-instance": [
+ ]
+ },
{
- "classifier-definition-id": "Classifier-L4",
- "name": "http-dest",
- "parameter-value": [
- {
- "int-value": "6",
- "name": "proto"
- },
- {
- "int-value": "80",
- "name": "destport"
- }
- ]
- },
+ "classifier-definition-id": "Classifier-L4",
+ "name": "http-src",
+ "parameter-value": [
+ {
+ "int-value": "6",
+ "name": "proto"
+ },
+ {
+ "int-value": "80",
+ "name": "sourceport"
+ }
+ ]
+ },
{
- "classifier-definition-id": "Classifier-L4",
- "name": "http-src",
- "parameter-value": [
- {
- "int-value": "6",
- "name": "proto"
- },
- {
- "int-value": "80",
- "name": "sourceport"
- }
- ]
- },
+ "classifier-definition-id": "Classifier-IP-Protocol",
+ "name": "icmp",
+ "parameter-value": [
+ {
+ "int-value": "1",
+ "name": "proto"
+ }
+ ]
+ }
+ ],
+ "action-instance": [
{
- "classifier-definition-id": "Classifier-IP-Protocol",
- "name": "icmp",
- "parameter-value": [
- {
- "int-value": "1",
- "name": "proto"
- }
- ]
+ "name": "allow1",
+ "action-definition-id": "Action-Allow"
}
- ],
- "action-instance": [
- {
- "name": "allow1",
- "action-definition-id": "Action-Allow"
+ ]
}
- ]
- },
- "subnet": [
- {
- "id": "subnet-10.0.35.0/24",
- "ip-prefix": "10.0.35.1/24",
- "parent": "flood-domain-1",
- "virtual-router-ip": "10.0.35.1"
- },
- {
- "id": "subnet-10.0.36.0/24",
- "ip-prefix": "10.0.36.1/24",
- "parent": "flood-domain1",
- "virtual-router-ip": "10.0.36.1"
- }
- ]
+ }
+ }
}
- }
# Main definition - constants
def get_tenant_data():
return {
- "tenant": [
- {
- "id": "tenant-dobre",
- "l2-flood-domain": [
- {
- "id": "flood-domain-1",
- "parent": "bridge-domain1"
- },
- {
- "id": "flood-domain-2",
- "parent": "bridge-domain1"
- }
- ],
- "name": "DockerTenant",
- "l3-context": [
- {
- "id": "l3-context-vrf-red"
- }
- ],
- "l2-bridge-domain": [
- {
- "id": "bridge-domain1",
- "parent": "l3-context-vrf-red"
- }
- ],
- "subnet": [
- {
- "id": "subnet-10.0.36.0/24",
- "virtual-router-ip": "10.0.36.1",
- "parent": "flood-domain-2",
- "ip-prefix": "10.0.36.1/24"
- },
- {
- "id": "subnet-10.0.35.0/24",
- "virtual-router-ip": "10.0.35.1",
- "parent": "flood-domain-1",
- "ip-prefix": "10.0.35.1/24"
- }
- ],
- "endpoint-group": [
- {
- "id": "webservers",
- "name" : "webservers",
- "provider-named-selector": [
- {
- "name": "webservers-clients-icmp-http-contract",
- "contract": [
- "icmp-http-contract"
- ]
- }
- ]
- },
+ "tenant": [
{
- "id": "clients",
- "name" : "clients",
- "consumer-named-selector": [
- {
- "name": "webservers-clients-icmp-http-contract",
- "contract": [
- "icmp-http-contract"
- ]
- }
- ]
- }
- ],
- "subject-feature-instances": {
- "classifier-instance": [
- {
- "name": "icmp",
- "classifier-definition-id": "Classifier-IP-Protocol",
- "parameter-value": [
+ "id": "tenant-dobre",
+ "name": "DockerTenant",
+ "forwarding-context": {
+ "l2-flood-domain": [
{
- "name": "proto",
- "int-value": 1
+ "id": "flood-domain-1",
+ "parent": "bridge-domain1"
+ },
+ {
+ "id": "flood-domain-2",
+ "parent": "bridge-domain1"
}
- ]
- },
- {
- "name": "http-dest",
- "classifier-definition-id": "Classifier-L4",
- "parameter-value": [
+ ],
+ "l3-context": [
{
- "int-value": "6",
- "name": "proto"
- },
+ "id": "l3-context-vrf-red"
+ }
+ ],
+ "l2-bridge-domain": [
{
- "int-value": "80",
- "name": "destport"
+ "id": "bridge-domain1",
+ "parent": "l3-context-vrf-red"
}
- ]
- },
- {
- "name": "http-src",
- "classifier-definition-id": "Classifier-L4",
- "parameter-value": [
+ ],
+ "subnet": [
{
- "int-value": "6",
- "name": "proto"
+ "id": "subnet-10.0.36.0/24",
+ "virtual-router-ip": "10.0.36.1",
+ "parent": "flood-domain-2",
+ "ip-prefix": "10.0.36.1/24"
},
{
- "int-value": "80",
- "name": "sourceport"
+ "id": "subnet-10.0.35.0/24",
+ "virtual-router-ip": "10.0.35.1",
+ "parent": "flood-domain-1",
+ "ip-prefix": "10.0.35.1/24"
}
]
- }
- ],
- "action-instance": [
- {
- "name": "chain1",
- "action-definition-id": "Action-Chain",
- "parameter-value": [
+ },
+ "policy": {
+ "endpoint-group": [
{
- "name": "sfc-chain-name",
- "string-value": "SFCGBP"
+ "id": "webservers",
+ "name": "webservers",
+ "provider-named-selector": [
+ {
+ "name": "webservers-clients-icmp-http-contract",
+ "contract": [
+ "icmp-http-contract"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "clients",
+ "name": "clients",
+ "consumer-named-selector": [
+ {
+ "name": "webservers-clients-icmp-http-contract",
+ "contract": [
+ "icmp-http-contract"
+ ]
+ }
+ ]
}
- ]
- },
- {
- "name": "allow1",
- "action-definition-id": "Action-Allow"
- }
- ]
- },
- "contract": [
- {
- "id": "icmp-http-contract",
- "subject": [
- {
- "name": "icmp-subject",
- "rule": [
+ ],
+ "subject-feature-instances": {
+ "classifier-instance": [
{
- "name": "allow-icmp-rule",
- "order" : 0,
- "classifier-ref": [
- {
- "name": "icmp",
- "instance-name" : "icmp"
- }
- ],
- "action-ref": [
+ "name": "icmp",
+ "classifier-definition-id": "Classifier-IP-Protocol",
+ "parameter-value": [
{
- "name": "allow1",
- "order": 0
+ "name": "proto",
+ "int-value": 1
}
]
- }
-
- ]
- },
- {
- "name": "http-subject",
- "rule": [
+ },
{
- "name": "http-chain-rule-in",
- "classifier-ref": [
+ "name": "http-dest",
+ "classifier-definition-id": "Classifier-L4",
+ "parameter-value": [
{
- "name" : "http-dest",
- "instance-name": "http-dest",
- "direction": "in"
- }
- ],
- "action-ref": [
+ "int-value": "6",
+ "name": "proto"
+ },
{
- "name": "chain1",
- "order": 0
+ "int-value": "80",
+ "name": "destport"
}
]
},
{
- "name": "http-chain-rule-out",
- "classifier-ref": [
+ "name": "http-src",
+ "classifier-definition-id": "Classifier-L4",
+ "parameter-value": [
+ {
+ "int-value": "6",
+ "name": "proto"
+ },
{
- "name" : "http-src",
- "instance-name": "http-src",
- "direction": "out"
+ "int-value": "80",
+ "name": "sourceport"
}
- ],
- "action-ref": [
+ ]
+ }
+ ],
+ "action-instance": [
+ {
+ "name": "chain1",
+ "action-definition-id": "Action-Chain",
+ "parameter-value": [
{
- "name": "chain1",
- "order": 0
+ "name": "sfc-chain-name",
+ "string-value": "SFCGBP"
}
]
+ },
+ {
+ "name": "allow1",
+ "action-definition-id": "Action-Allow"
}
]
- }
- ],
- "clause": [
- {
- "name": "icmp-http-clause",
- "subject-refs": [
- "icmp-subject",
- "http-subject"
- ]
- }
- ]
+ },
+ "contract": [
+ {
+ "id": "icmp-http-contract",
+ "subject": [
+ {
+ "name": "icmp-subject",
+ "rule": [
+ {
+ "name": "allow-icmp-rule",
+ "order": 0,
+ "classifier-ref": [
+ {
+ "name": "icmp",
+ "instance-name": "icmp"
+ }
+ ],
+ "action-ref": [
+ {
+ "name": "allow1",
+ "order": 0
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "http-subject",
+ "rule": [
+ {
+ "name": "http-chain-rule-in",
+ "classifier-ref": [
+ {
+ "name": "http-dest",
+ "instance-name": "http-dest",
+ "direction": "in"
+ }
+ ],
+ "action-ref": [
+ {
+ "name": "chain1",
+ "order": 0
+ }
+ ]
+ },
+ {
+ "name": "http-chain-rule-out",
+ "classifier-ref": [
+ {
+ "name": "http-src",
+ "instance-name": "http-src",
+ "direction": "out"
+ }
+ ],
+ "action-ref": [
+ {
+ "name": "chain1",
+ "order": 0
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "clause": [
+ {
+ "name": "icmp-http-clause",
+ "subject-refs": [
+ "icmp-subject",
+ "http-subject"
+ ]
+ }
+ ]
+ }
+ ]
+ }
}
]
- }
- ]
-}
+ }
# Main definition - constants
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionDefinitionId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierDefinitionId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
public interface PolicyValidatorRegistrar {
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.NetworkDomain;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3Context;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubjectFeatureInstances;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Subnet;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContext;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstances;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
private final Map<ActionName, ActionInstance> actions =
new HashMap<>();
private final Map<String, Set<SubnetId>> subnetMap = new HashMap<>();
-
+
public IndexedTenant(Tenant tenant) {
- super();
this.tenant = tenant;
this.hashCode = tenant.hashCode();
-
- if (tenant.getEndpointGroup() != null) {
- for (EndpointGroup eg : tenant.getEndpointGroup()) {
+ if (tenant.getPolicy() != null) {
+ processPolicy(tenant.getPolicy());
+ }
+ if (tenant.getForwardingContext() != null) {
+ processForwardingContext(tenant.getForwardingContext());
+ }
+ }
+
+ private void processPolicy(Policy policy) {
+ if (policy.getEndpointGroup() != null) {
+ for (EndpointGroup eg : policy.getEndpointGroup()) {
endpointGroups.put(eg.getId(), eg);
}
}
- if (tenant.getContract() != null) {
- for (Contract c : tenant.getContract()) {
+ if (policy.getContract() != null) {
+ for (Contract c : policy.getContract()) {
contracts.put(c.getId(), c);
}
}
- if (tenant.getL3Context() != null) {
- for (L3Context c : tenant.getL3Context()) {
+ if (policy.getSubjectFeatureInstances() != null) {
+ SubjectFeatureInstances sfi = policy.getSubjectFeatureInstances();
+ if (sfi.getClassifierInstance() != null) {
+ for (ClassifierInstance ci : sfi.getClassifierInstance()) {
+ classifiers.put(ci.getName(), ci);
+ }
+ }
+ if (sfi.getActionInstance() != null) {
+ for (ActionInstance action : sfi.getActionInstance()) {
+ actions.put(action.getName(), action);
+ }
+ }
+ }
+ }
+
+ private void processForwardingContext(ForwardingContext fwCtx) {
+ if (fwCtx.getL3Context() != null) {
+ for (L3Context c : fwCtx.getL3Context()) {
networkDomains.put(c.getId().getValue(), c);
}
}
- if (tenant.getL2BridgeDomain() != null) {
- for (L2BridgeDomain c : tenant.getL2BridgeDomain()) {
+ if (fwCtx.getL2BridgeDomain() != null) {
+ for (L2BridgeDomain c : fwCtx.getL2BridgeDomain()) {
networkDomains.put(c.getId().getValue(), c);
}
}
- if (tenant.getL2FloodDomain() != null) {
- for (L2FloodDomain c : tenant.getL2FloodDomain()) {
+ if (fwCtx.getL2FloodDomain() != null) {
+ for (L2FloodDomain c : fwCtx.getL2FloodDomain()) {
networkDomains.put(c.getId().getValue(), c);
}
}
- if (tenant.getSubnet() != null) {
- for (Subnet s : tenant.getSubnet()) {
+ if (fwCtx.getSubnet() != null) {
+ for (Subnet s : fwCtx.getSubnet()) {
networkDomains.put(s.getId().getValue(), s);
Set<SubnetId> sset = subnetMap.get(s.getParent().getValue());
if (sset == null) {
- subnetMap.put(s.getParent().getValue(),
- sset = new HashSet<SubnetId>());
+ subnetMap.put(s.getParent().getValue(), sset = new HashSet<SubnetId>());
}
sset.add(s.getId());
}
}
- if (tenant.getSubjectFeatureInstances() != null) {
- SubjectFeatureInstances sfi = tenant.getSubjectFeatureInstances();
- if (sfi.getClassifierInstance() != null) {
- for (ClassifierInstance ci : sfi.getClassifierInstance()) {
- classifiers.put(ci.getName(), ci);
- }
- }
- if (sfi.getActionInstance() != null) {
- for (ActionInstance action : sfi.getActionInstance()) {
- actions.put(action.getName(), action);
- }
- }
- }
}
/**
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.l3.endpoint.identification.constraints.PrefixConstraint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
import com.google.common.collect.ImmutableTable;
import com.google.common.collect.Table;
import org.opendaylight.groupbasedpolicy.util.TenantUtils;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-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.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Ordering;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierDefinitionId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubjectFeatureInstances;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstances;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.ResolvedPolicies;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.ResolvedPoliciesBuilder;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
}
LOG.debug("Resolving of tenant inheritance and policy triggered by a change in tenant {}", tenantId);
Tenant t = InheritanceUtils.resolveTenant(result.get());
- SubjectFeatureInstances subjectFeatureInstances = t.getSubjectFeatureInstances();
- if (subjectFeatureInstances != null) {
+ if (t.getPolicy() != null && t.getPolicy().getSubjectFeatureInstances() != null) {
+ SubjectFeatureInstances subjectFeatureInstances = t.getPolicy().getSubjectFeatureInstances();
// TODO log and remove invalid action instances
if (actionInstancesAreValid(subjectFeatureInstances.getActionInstance())
&& classifierInstancesAreValid(subjectFeatureInstances.getClassifierInstance())) {
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.parameter.value.RangeValue;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.ParameterType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.Int;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.Range;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.ProviderSelectionRelator;
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.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-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.endpoint.group.ConsumerNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Target;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerTargetSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderTargetSelector;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
Table<EgKey, EgKey, List<ContractMatch>> contractMatches, Tenant tenant) {
// For each endpoint group, match consumer selectors
// against contracts to get a set of matching consumer selectors
- if (tenant.getEndpointGroup() == null)
+ Policy policy = tenant.getPolicy();
+ if (policy == null || policy.getEndpointGroup() == null) {
return;
- for (EndpointGroup group : tenant.getEndpointGroup()) {
+ }
+ for (EndpointGroup group : policy.getEndpointGroup()) {
List<ConsumerContractMatch> r = matchConsumerContracts(tenant, group);
for (ConsumerContractMatch ccm : r) {
List<ConsumerContractMatch> cms = consumerMatches.get(tenant.getId(), ccm.contract.getId());
// Match provider selectors, and check each match for a corresponding
// consumer selector match.
- for (EndpointGroup group : tenant.getEndpointGroup()) {
+ for (EndpointGroup group : policy.getEndpointGroup()) {
List<ContractMatch> matches = matchProviderContracts(tenant, group, consumerMatches);
for (ContractMatch cm : matches) {
EgKey consumerKey = new EgKey(cm.consumerTenant.getId(), cm.consumer.getId());
private static List<ConsumerContractMatch> matchConsumerContracts(Tenant tenant,
EndpointGroup consumer) {
List<ConsumerContractMatch> matches = new ArrayList<>();
+ Policy policy = tenant.getPolicy();
+ if (policy == null || policy.getContract() == null) {
+ return matches;
+ }
if (consumer.getConsumerNamedSelector() != null) {
for (ConsumerNamedSelector cns : consumer.getConsumerNamedSelector()) {
- if (cns.getContract() == null)
+ if (cns.getContract() == null) {
continue;
+ }
for (ContractId contractId : cns.getContract()) {
Contract contract =
TenantUtils.findContract(tenant, contractId);
- if (contract == null)
+ if (contract == null) {
continue;
+ }
matches.add(new ConsumerContractMatch(tenant, contract,
tenant, consumer,
cns));
}
if (consumer.getConsumerTargetSelector() != null) {
for (ConsumerTargetSelector cts : consumer.getConsumerTargetSelector()) {
- if (tenant.getContract() == null)
- continue;
- for (Contract contract : tenant.getContract()) {
- if (contract.getTarget() == null)
+ for (Contract contract : policy.getContract()) {
+ if (contract.getTarget() == null) {
continue;
+ }
for (Target t : contract.getTarget()) {
boolean match = true;
if (cts.getQualityMatcher() != null) {
private static List<ContractMatch> matchProviderContracts(Tenant tenant, EndpointGroup provider,
Table<TenantId, ContractId, List<ConsumerContractMatch>> consumerMatches) {
List<ContractMatch> matches = new ArrayList<>();
+ Policy policy = tenant.getPolicy();
+ if (policy == null || policy.getContract() == null) {
+ return matches;
+ }
if (provider.getProviderNamedSelector() != null) {
for (ProviderNamedSelector pns : provider.getProviderNamedSelector()) {
- if (pns.getContract() == null)
+ if (pns.getContract() == null) {
continue;
+ }
for (ContractId contractId : pns.getContract()) {
Contract c = TenantUtils.findContract(tenant, contractId);
if (c == null)
}
if (provider.getProviderTargetSelector() != null) {
for (ProviderTargetSelector pts : provider.getProviderTargetSelector()) {
- if (tenant.getContract() == null)
- continue;
- for (Contract c : tenant.getContract()) {
+ for (Contract c : policy.getContract()) {
if (c.getTarget() == null)
continue;
for (Target t : c.getTarget()) {
List<ConsumerContractMatch> cMatches,
Tenant tenant, EndpointGroup provider,
ProviderSelectionRelator relator) {
- if (cMatches == null)
+ if (cMatches == null) {
return;
+ }
for (ConsumerContractMatch cMatch : cMatches) {
matches.add(new ContractMatch(cMatch, tenant, provider, relator));
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinitionKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomainKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomainKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3Context;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3ContextKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubjectFeatureInstances;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Subnet;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubnetKey;
-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.ClauseKey;
-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.SubjectKey;
-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.RuleKey;
-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.ConsumerNamedSelectorKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstanceKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstanceKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContext;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstances;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.SubjectKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.RendererName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.Renderers;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.Renderer;
public static InstanceIdentifier<EndpointGroup> endpointGroupIid(TenantId tenantId, EndpointGroupId epgId) {
return InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class, new TenantKey(tenantId))
+ .child(Policy.class)
.child(EndpointGroup.class, new EndpointGroupKey(epgId))
.build();
}
public static InstanceIdentifier<Contract> contractIid(TenantId tenantId, ContractId contractId) {
return InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class, new TenantKey(tenantId))
+ .child(Policy.class)
.child(Contract.class, new ContractKey(contractId))
.build();
}
SubjectName subjectName) {
return InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class, new TenantKey(tenantId))
+ .child(Policy.class)
.child(Contract.class, new ContractKey(contractId))
.child(Subject.class, new SubjectKey(subjectName))
.build();
EndpointGroupId epgId, SelectorName providerSelectorName) {
return InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class, new TenantKey(tenantId))
+ .child(Policy.class)
.child(EndpointGroup.class, new EndpointGroupKey(epgId))
.child(ProviderNamedSelector.class, new ProviderNamedSelectorKey(providerSelectorName))
.build();
EndpointGroupId epgId, SelectorName consumerSelectorName) {
return InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class, new TenantKey(tenantId))
+ .child(Policy.class)
.child(EndpointGroup.class, new EndpointGroupKey(epgId))
.child(ConsumerNamedSelector.class, new ConsumerNamedSelectorKey(consumerSelectorName))
.build();
public static InstanceIdentifier<Clause> clauseIid(TenantId tenantId, ContractId contractId, ClauseName clauseName) {
return InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class, new TenantKey(tenantId))
+ .child(Policy.class)
.child(Contract.class, new ContractKey(contractId))
.child(Clause.class, new ClauseKey(clauseName))
.build();
RuleName ruleName) {
return InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class, new TenantKey(tenantId))
+ .child(Policy.class)
.child(Contract.class, new ContractKey(contractId))
.child(Subject.class, new SubjectKey(subjectName))
.child(Rule.class, new RuleKey(ruleName))
public static InstanceIdentifier<ActionInstance> actionInstanceIid(TenantId tenantId, ActionName actionName) {
return InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class, new TenantKey(tenantId))
+ .child(Policy.class)
.child(SubjectFeatureInstances.class)
.child(ActionInstance.class, new ActionInstanceKey(actionName))
.build();
ClassifierName classifierName) {
return InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class, new TenantKey(tenantId))
+ .child(Policy.class)
.child(SubjectFeatureInstances.class)
.child(ClassifierInstance.class, new ClassifierInstanceKey(classifierName))
.build();
SubjectName subjectName, RuleName ruleName, ClassifierName classifierRefName) {
return InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class, new TenantKey(tenantId))
+ .child(Policy.class)
.child(Contract.class, new ContractKey(contractId))
.child(Subject.class, new SubjectKey(subjectName))
.child(Rule.class, new RuleKey(ruleName))
public static InstanceIdentifier<L2FloodDomain> l2FloodDomainIid(TenantId tenantId, L2FloodDomainId l2FloodDomainId) {
return InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class, new TenantKey(tenantId))
+ .child(ForwardingContext.class)
.child(L2FloodDomain.class, new L2FloodDomainKey(l2FloodDomainId))
.build();
}
L2BridgeDomainId l2BridgeDomainId) {
return InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class, new TenantKey(tenantId))
+ .child(ForwardingContext.class)
.child(L2BridgeDomain.class, new L2BridgeDomainKey(l2BridgeDomainId))
.build();
}
public static InstanceIdentifier<L3Context> l3ContextIid(TenantId tenantId, L3ContextId l3ContextId) {
return InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class, new TenantKey(tenantId))
+ .child(ForwardingContext.class)
.child(L3Context.class, new L3ContextKey(l3ContextId))
.build();
}
public static InstanceIdentifier<Subnet> subnetIid(TenantId tenantId, SubnetId subnetId) {
return InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class, new TenantKey(tenantId))
+ .child(ForwardingContext.class)
.child(Subnet.class, new SubnetKey(subnetId))
.build();
}
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;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup.IntraGroupPolicy;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;
-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.ClauseBuilder;
-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.SubjectBuilder;
-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.ConsumerMatchers;
-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.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;
-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 org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelectorBuilder;
-
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup.IntraGroupPolicy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.SubjectBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Target;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.TargetBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchers;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ProviderMatchers;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ProviderMatchersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.consumer.matchers.GroupIdentificationConstraints;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.consumer.matchers.group.identification.constraints.GroupRequirementConstraintCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.consumer.matchers.group.identification.constraints.GroupRequirementConstraintCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.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.policy.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.policy.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.policy.contract.clause.provider.matchers.group.identification.constraints.GroupCapabilityConstraintCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.provider.matchers.group.identification.constraints.GroupCapabilityConstraintCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.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.policy.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.policy.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.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerTargetSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerTargetSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderTargetSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderTargetSelectorBuilder;
+
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
/**
* @param unresolvedTenant
* the {@link Tenant} unresolved tenant to resolve
* @return the fully-resolved {@link Tenant}
+ * @throws NullPointerException if parameter {@code unresolvedTenant} is {@code null}
*/
public static Tenant resolveTenant(Tenant unresolvedTenant) {
+ Preconditions.checkNotNull(unresolvedTenant);
HashMap<EndpointGroupId, EndpointGroup> resolvedEgs = new HashMap<>();
HashMap<ContractId, Contract> resolvedContracts = new HashMap<>();
+ TenantBuilder resolvedTenantBuilder = new TenantBuilder().setId(unresolvedTenant.getId())
+ .setName(unresolvedTenant.getName())
+ .setDescription(unresolvedTenant.getDescription());
- if (unresolvedTenant.getEndpointGroup() != null) {
- for (EndpointGroup eg : unresolvedTenant.getEndpointGroup()) {
- resolveEndpointGroup(unresolvedTenant, eg, resolvedEgs);
+ Policy unresolvedPolicy = unresolvedTenant.getPolicy();
+ if (unresolvedPolicy != null) {
+ if (unresolvedPolicy.getEndpointGroup() != null) {
+ for (EndpointGroup eg : unresolvedPolicy.getEndpointGroup()) {
+ resolveEndpointGroup(unresolvedTenant, eg, resolvedEgs);
+ }
}
- }
- if (unresolvedTenant.getContract() != null) {
- for (Contract c : unresolvedTenant.getContract()) {
- resolveContract(unresolvedTenant, c, resolvedContracts);
+ if (unresolvedPolicy.getContract() != null) {
+ for (Contract c : unresolvedPolicy.getContract()) {
+ resolveContract(unresolvedTenant, c, resolvedContracts);
+ }
}
+ resolvedTenantBuilder
+ .setPolicy(new PolicyBuilder().setEndpointGroup(ImmutableList.copyOf(resolvedEgs.values()))
+ .setContract(ImmutableList.copyOf(resolvedContracts.values()))
+ .setContractRef(unresolvedPolicy.getContractRef())
+ .setSubjectFeatureInstances(unresolvedPolicy.getSubjectFeatureInstances())
+ .build());
}
// XXX TODO - inherit from common tenant
- return new TenantBuilder()
- .setId(unresolvedTenant.getId())
- .setName(unresolvedTenant.getName())
- .setDescription(unresolvedTenant.getDescription())
- .setEndpointGroup(ImmutableList.copyOf(resolvedEgs.values()))
- .setContract(ImmutableList.copyOf(resolvedContracts.values()))
- .setContractRef(unresolvedTenant.getContractRef())
- .setSubjectFeatureInstances(unresolvedTenant.getSubjectFeatureInstances())
- .setL3Context(unresolvedTenant.getL3Context())
- .setL2BridgeDomain(unresolvedTenant.getL2BridgeDomain())
- .setL2FloodDomain(unresolvedTenant.getL2FloodDomain())
- .setSubnet(unresolvedTenant.getSubnet())
- .build();
+ resolvedTenantBuilder.setForwardingContext(unresolvedTenant.getForwardingContext());
+ return resolvedTenantBuilder.build();
}
// ****************
if (unresolvedClause.getProviderMatchers() != null) {
ProviderMatchers pms = unresolvedClause.getProviderMatchers();
- org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.GroupIdentificationConstraints groupIdentificationConstraintsProvider = pms
+ org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.provider.matchers.GroupIdentificationConstraints groupIdentificationConstraintsProvider = pms
.getGroupIdentificationConstraints();
if (groupIdentificationConstraintsProvider instanceof GroupCapabilityConstraintCase) {
resolveCapabilityMatcher(
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.Requirement;
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.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;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Target;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.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.policy.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.policy.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.policy.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.has.endpoint.identification.constraints.endpoint.identification.constraints.L3EndpointIdentificationConstraintsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.l3.endpoint.identification.constraints.PrefixConstraint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-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.subject.feature.instances.ActionInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.actions.Action;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.actions.ActionBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.actions.ActionKey;
}
private static ClassifierInstance readClassifierInstance(Tenant tenant, ClassifierName instanceName) {
- for (ClassifierInstance instance : tenant.getSubjectFeatureInstances().getClassifierInstance()) {
+ if (tenant.getPolicy() == null || tenant.getPolicy().getSubjectFeatureInstances() == null
+ || tenant.getPolicy().getSubjectFeatureInstances().getClassifierInstance() == null) {
+ return null;
+ }
+ for (ClassifierInstance instance : tenant.getPolicy().getSubjectFeatureInstances().getClassifierInstance()) {
if (instance.getName().equals(instanceName)) {
return instance;
}
}
private static ActionInstance readActionInstance(Tenant tenant, ActionName instanceName) {
- for (ActionInstance instance : tenant.getSubjectFeatureInstances().getActionInstance()) {
+ if (tenant.getPolicy() == null || tenant.getPolicy().getSubjectFeatureInstances() == null
+ || tenant.getPolicy().getSubjectFeatureInstances().getActionInstance() == null) {
+ return null;
+ }
+ for (ActionInstance instance : tenant.getPolicy().getSubjectFeatureInstances().getActionInstance()) {
if (instance.getName().equals(instanceName)) {
return instance;
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.condition.matchers.ConditionMatcher;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.conditions.Condition;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-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.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.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.consumer.matchers.GroupIdentificationConstraints;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.consumer.matchers.group.identification.constraints.GroupRequirementConstraintCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.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.policy.contract.clause.provider.matchers.group.identification.constraints.GroupCapabilityConstraintCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcher;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.ImmutableSet;
}
}
if (clause.getProviderMatchers() != null) {
- org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.GroupIdentificationConstraints groupIdentificationConstraintsProvider = clause
+ org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.provider.matchers.GroupIdentificationConstraints groupIdentificationConstraintsProvider = clause
.getProviderMatchers().getGroupIdentificationConstraints();
if (groupIdentificationConstraintsProvider instanceof GroupCapabilityConstraintCase) {
List<CapabilityMatcher> capMatchers = ((GroupCapabilityConstraintCase) groupIdentificationConstraintsProvider)
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Tenants;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-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.subject.Rule;
-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.ConsumerTargetSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Target;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerTargetSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderTargetSelector;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import com.google.common.collect.ComparisonChain;
public static InstanceIdentifier<Tenant> tenantIid(TenantId tenantId) {
return tenantIid(new TenantKey(tenantId));
}
-
+
/**
* Find a contract with a specified ID within a tenant
* @param tenant the {@link Tenant} to search
*/
public static Contract findContract(Tenant tenant,
ContractId contractId) {
- if (tenant.getContract() != null) {
- for (Contract c : tenant.getContract()) {
+ if (tenant.getPolicy() != null && tenant.getPolicy().getContract() != null) {
+ for (Contract c : tenant.getPolicy().getContract()) {
if (contractId.equals(c.getId())) {
return c;
}
}
return null;
}
-
+
/**
* Find an endpoint group with a specified ID within a tenant
* @param tenant the {@link Tenant} to search
*/
public static EndpointGroup findEndpointGroup(Tenant tenant,
EndpointGroupId egId) {
- if (tenant.getEndpointGroup() != null) {
- for (EndpointGroup eg : tenant.getEndpointGroup()) {
+ if (tenant.getPolicy() != null && tenant.getPolicy().getEndpointGroup() != null) {
+ for (EndpointGroup eg : tenant.getPolicy().getEndpointGroup()) {
if (egId.equals(eg.getId())) {
return eg;
}
}
return null;
}
-
+
/**
* Find a consumer target selector in an endpoint group
* @param eg the {@link EndpointGroup} to search
}
return null;
}
-
+
/**
* Find a provider target selector in an endpoint group
* @param eg the {@link EndpointGroup} to search
}
}
return null;
- }
+ }
}
namespace "urn:opendaylight:groupbasedpolicy:policy";
prefix "gbp-policy";
- import gbp-common {prefix gbp-common;}
- import ietf-inet-types {
- prefix inet;
- revision-date 2010-09-24;
- }
+ import gbp-common { prefix gbp-common; revision-date 2014-04-21; }
+ import ietf-inet-types { prefix inet; revision-date 2010-09-24; }
description
"This module defines the group-based policy configuration
leaf-list contract {
description "Specific contracts to select.";
type leafref {
- path "/tenants/tenant/contract/id";
+ path "/tenants/tenant/policy/contract/id";
}
}
}
leaf instance-name {
description "The name of the classifier instance";
type leafref {
- path "/tenants/tenant/subject-feature-instances/classifier-instance/name";
+ path "/tenants/tenant/policy/subject-feature-instances/classifier-instance/name";
}
mandatory true;
}
leaf name {
description "The name of the action instance";
type leafref {
- path "/tenants/tenant/subject-feature-instances/action-instance/name";
+ path "/tenants/tenant/policy/subject-feature-instances/action-instance/name";
}
mandatory true;
}
// Network domains
// ***************
- list l3-context {
- description
- "A layer 3 context represents a namespace for layer 3
- addresses. It represents a domain inside which endpoints
- can communicate with requiring any address translation.";
-
- key "id";
- uses forwarding-context;
-
- leaf id {
+ container forwarding-context {
+ list l3-context {
description
- "A unique ID for the layer 3 context";
- type gbp-common:l3-context-id;
- }
- }
+ "A layer 3 context represents a namespace for layer 3
+ addresses. It represents a domain inside which endpoints
+ can communicate with requiring any address translation.";
- list l2-bridge-domain {
- description
- "A layer 2 bridge domain represents a domain in which
- layer 2 communication is possible when allowed by policy.";
- key "id";
- uses l2-context;
-
- leaf id {
- description "A unique ID for the bridge domain";
- type gbp-common:l2-bridge-domain-id;
+ key "id";
+ uses forwarding-context;
+
+ leaf id {
+ description
+ "A unique ID for the layer 3 context";
+ type gbp-common:l3-context-id;
+ }
}
- leaf parent {
+ list l2-bridge-domain {
description
- "The layer 3 context that contains this bridge domain";
- type leafref {
- path "/tenants/tenant/l3-context/id";
+ "A layer 2 bridge domain represents a domain in which
+ layer 2 communication is possible when allowed by policy.";
+ key "id";
+ uses l2-context;
+
+ leaf id {
+ description "A unique ID for the bridge domain";
+ type gbp-common:l2-bridge-domain-id;
}
- }
- }
- list l2-flood-domain {
- description
- "A layer 2 flood domain represents a domain in which
- layer 2 broadcast and multicast is allowed.";
- key "id";
- uses l2-context;
-
- leaf id {
- description "A unique ID for the flood domain";
- type gbp-common:l2-flood-domain-id;
+ leaf parent {
+ description
+ "The layer 3 context that contains this bridge domain";
+ type leafref {
+ path "/tenants/tenant/forwarding-context/l3-context/id";
+ }
+ }
}
- leaf parent {
+ list l2-flood-domain {
description
- "The bridge domain that contains this flood domain";
- type leafref {
- path "/tenants/tenant/l2-bridge-domain/id";
+ "A layer 2 flood domain represents a domain in which
+ layer 2 broadcast and multicast is allowed.";
+ key "id";
+ uses l2-context;
+
+ leaf id {
+ description "A unique ID for the flood domain";
+ type gbp-common:l2-flood-domain-id;
}
- }
- }
- list subnet {
- description
- "An IP subnet associated with a layer 2 or layer 3
- context.";
- key "id";
- uses network-domain;
-
- leaf id {
- description "A unique ID for the subnet";
- type gbp-common:subnet-id;
+ leaf parent {
+ description
+ "The bridge domain that contains this flood domain";
+ type leafref {
+ path "/tenants/tenant/forwarding-context/l2-bridge-domain/id";
+ }
+ }
}
- leaf parent {
+ list subnet {
description
- "The forwarding context that contains this subnet";
- type gbp-common:context-id;
- }
+ "An IP subnet associated with a layer 2 or layer 3
+ context.";
+ key "id";
+ uses network-domain;
+
+ leaf id {
+ description "A unique ID for the subnet";
+ type gbp-common:subnet-id;
+ }
- leaf ip-prefix {
- description "The IP prefix that defines the subnet";
- type inet:ip-prefix;
- }
- leaf virtual-router-ip {
- description
- "IP address to use for a virtual gateway router
- for the subnet, if desired.";
- type inet:ip-address;
- }
- list gateways {
- description
- "External gateways for subnets we serve,
- includes prefixes for static routing";
- key "gateway";
- leaf gateway {
+ leaf parent {
+ description
+ "The forwarding context that contains this subnet";
+ type gbp-common:context-id;
+ }
+
+ leaf ip-prefix {
+ description "The IP prefix that defines the subnet";
+ type inet:ip-prefix;
+ }
+ leaf virtual-router-ip {
+ description
+ "IP address to use for a virtual gateway router
+ for the subnet, if desired.";
type inet:ip-address;
}
- list prefixes {
- key "prefix";
- leaf prefix {
- type inet:ip-prefix;
+ list gateways {
+ description
+ "External gateways for subnets we serve,
+ includes prefixes for static routing";
+ key "gateway";
+ leaf gateway {
+ type inet:ip-address;
+ }
+ list prefixes {
+ key "prefix";
+ leaf prefix {
+ type inet:ip-prefix;
+ }
}
}
-
}
}
- // ***************
- // Endpoint groups
- // ***************
+ container policy {
- list endpoint-group {
- description
- "Endpoint groups are sets of endpoints that share a
- common set of policies. Endpoint groups are
- matched to contracts using selectors, contracts
- determine which endpoints can communicate and in
- what way.
-
- Endpoint groups have both requirements and
- capabilities, which represent specific pieces of
- functionality that are exposed at the boundary of
- those groups. Requirements represent some
- specific functionality that is needed for the
- endpoints in the endpoint group to function.
- Correspondingly, capabilities are pieces of
- functionality that the endpoints in the endpoint
- group can provide to other endpoints.
-
- Contracts can be selected through either a named
- selector, which matches specific contracts by
- name, or by a target selector which will match
- contracts by matching its list of qualities to
- the list of qualities for a target on the
- contract. The contract selectors choose which
- contracts are in scope. Note that requirements
- and capabilities are not used when choosing which
- contracts are in scope; these are used to
- determine how a contract will be interpreted.
-
- There are two broad category of selectors:
- provider selectors and consumer selectors. The
- provider selectors allow selecting contracts that
- allow the endpoint group to expose its
- capabilities. The consumer selectors allow
- selecting contracts which allow the endpoint
- group to meet its requirements.";
-
- key "id";
-
- leaf id {
- mandatory true;
- type gbp-common:endpoint-group-id;
- }
+ // ***************
+ // Endpoint groups
+ // ***************
- leaf name {
+ list endpoint-group {
description
- "A user-visible name for the endpoint group";
- type gbp-common:name;
- }
- leaf description {
- description
- "A human-readable description for the endpoint
- group.";
- type gbp-common:description;
- }
- uses has-requirements;
- uses has-capabilities;
+ "Endpoint groups are sets of endpoints that share a
+ common set of policies. Endpoint groups are
+ matched to contracts using selectors, contracts
+ determine which endpoints can communicate and in
+ what way.
+
+ Endpoint groups have both requirements and
+ capabilities, which represent specific pieces of
+ functionality that are exposed at the boundary of
+ those groups. Requirements represent some
+ specific functionality that is needed for the
+ endpoints in the endpoint group to function.
+ Correspondingly, capabilities are pieces of
+ functionality that the endpoints in the endpoint
+ group can provide to other endpoints.
+
+ Contracts can be selected through either a named
+ selector, which matches specific contracts by
+ name, or by a target selector which will match
+ contracts by matching its list of qualities to
+ the list of qualities for a target on the
+ contract. The contract selectors choose which
+ contracts are in scope. Note that requirements
+ and capabilities are not used when choosing which
+ contracts are in scope; these are used to
+ determine how a contract will be interpreted.
+
+ There are two broad category of selectors:
+ provider selectors and consumer selectors. The
+ provider selectors allow selecting contracts that
+ allow the endpoint group to expose its
+ capabilities. The consumer selectors allow
+ selecting contracts which allow the endpoint
+ group to meet its requirements.";
+
+ key "id";
+
+ leaf id {
+ mandatory true;
+ type gbp-common:endpoint-group-id;
+ }
- leaf intra-group-policy {
- description
- "Governs how traffic within the endpoint group
- should be handled.";
- default allow;
- type enumeration {
- enum allow {
- description
- "Traffic between two endpoints in the group
- is always allowed";
- }
- enum require-contract {
- description
- "Traffic between two endpoints in the group
- is allowed only when a contract exists to
- allow it explicitly";
- }
+ leaf name {
+ description
+ "A user-visible name for the endpoint group";
+ type gbp-common:name;
}
- }
+ leaf description {
+ description
+ "A human-readable description for the endpoint
+ group.";
+ type gbp-common:description;
+ }
+ uses has-requirements;
+ uses has-capabilities;
- list consumer-named-selector {
- description
- "Consumer named selectors are named selectors
- that select contracts to meet the
- requirements of the endpoint group.
-
- The consumer named selector selects a
- contract based on the name of the contract.
- Once the contract is selected, the
- requirements are used to select specific
- subjects within that contract.";
-
- key "name";
- uses named-selector;
- uses consumer-selection-relator;
- }
+ leaf intra-group-policy {
+ description
+ "Governs how traffic within the endpoint group
+ should be handled.";
+ default allow;
+ type enumeration {
+ enum allow {
+ description
+ "Traffic between two endpoints in the group
+ is always allowed";
+ }
+ enum require-contract {
+ description
+ "Traffic between two endpoints in the group
+ is allowed only when a contract exists to
+ allow it explicitly";
+ }
+ }
+ }
- list provider-named-selector {
- description
- "Provider named selectors are named selectors
- that select contracts to provide capabilties
- to other endpoint group.
-
- The provider named selector selects a
- contract based on the name of the contract.
- Once the contract is selected, the capabilies
- are used to select specific subjects within
- that contract.";
-
- key "name";
- uses named-selector;
- uses provider-selection-relator;
- }
+ list consumer-named-selector {
+ description
+ "Consumer named selectors are named selectors
+ that select contracts to meet the
+ requirements of the endpoint group.
- list consumer-target-selector {
- description
- "Consumer target selectors are target selectors
- that select contracts to meet the requirements
- of the endpoint group.
-
- The consumer target selector selects a
- contract using the quality matchers to match
- against the qualities specified on the
- contract targets. Once the contract is
- selected, the requirements are used to select
- specific subjects within that contract.";
-
- key "name";
- uses target-selector;
- uses consumer-selection-relator;
- }
+ The consumer named selector selects a
+ contract based on the name of the contract.
+ Once the contract is selected, the
+ requirements are used to select specific
+ subjects within that contract.";
- list provider-target-selector {
- description
- "Provider target selectors are target selectors
- that select contracts to provide capabilties
- to other endpoint group.
-
- The provider target selector selects a
- contract using the quality matchers to match
- against the qualities specified on the
- contract targets. Once the contract is
- selected, the capabilities are used to select
- specific subjects within that contract.";
-
- key "name";
- uses target-selector;
- uses provider-selection-relator;
- }
+ key "name";
+ uses named-selector;
+ uses consumer-selection-relator;
+ }
- leaf network-domain {
- description
- "The network domain associated with this endpoint
- group. The network domain controls which endpoints
- are addressible by the endpoints in the group.";
- type gbp-common:network-domain-id;
- }
+ list provider-named-selector {
+ description
+ "Provider named selectors are named selectors
+ that select contracts to provide capabilties
+ to other endpoint group.
- leaf parent {
- description
- "Parent endpoint group from which we inherit";
+ The provider named selector selects a
+ contract based on the name of the contract.
+ Once the contract is selected, the capabilies
+ are used to select specific subjects within
+ that contract.";
- type leafref {
- path "/tenants/tenant/endpoint-group/id";
+ key "name";
+ uses named-selector;
+ uses provider-selection-relator;
}
- }
- }
- list external-implicit-group {
- description
- ".";
+ list consumer-target-selector {
+ description
+ "Consumer target selectors are target selectors
+ that select contracts to meet the requirements
+ of the endpoint group.
- key "id";
+ The consumer target selector selects a
+ contract using the quality matchers to match
+ against the qualities specified on the
+ contract targets. Once the contract is
+ selected, the requirements are used to select
+ specific subjects within that contract.";
- leaf id {
- mandatory true;
- type gbp-common:endpoint-group-id;
- }
- // Fields to be determined and completed before Code Freeze
+ key "name";
+ uses target-selector;
+ uses consumer-selection-relator;
+ }
- }
- // *************************
- // Subject feature instances
- // *************************
+ list provider-target-selector {
+ description
+ "Provider target selectors are target selectors
+ that select contracts to provide capabilties
+ to other endpoint group.
- container subject-feature-instances {
- description
- "Contains instances of subject features. Subject
- feature instances reference a subject feature
- definition but fill in the required parameters so
- that they can be easily references elsewhere.";
+ The provider target selector selects a
+ contract using the quality matchers to match
+ against the qualities specified on the
+ contract targets. Once the contract is
+ selected, the capabilities are used to select
+ specific subjects within that contract.";
- list classifier-instance {
- description "XXX";
+ key "name";
+ uses target-selector;
+ uses provider-selection-relator;
+ }
- key "name";
- leaf name {
- description "A name for the classifier instance";
- type gbp-common:classifier-name;
- mandatory true;
+ leaf network-domain {
+ description
+ "The network domain associated with this endpoint
+ group. The network domain controls which endpoints
+ are addressible by the endpoints in the group.";
+ type gbp-common:network-domain-id;
}
- leaf classifier-definition-id {
+
+ leaf parent {
+ description
+ "Parent endpoint group from which we inherit";
+
type leafref {
- path "/subject-feature-definitions/classifier-definition/id";
+ path "/tenants/tenant/policy/endpoint-group/id";
}
}
- uses subject-feature-instance;
}
- list action-instance {
- description "XXX";
+ list external-implicit-group {
+ description
+ ".";
+
+ key "id";
- key "name";
- leaf name {
- description "A name for the action instance";
- type gbp-common:action-name;
+ leaf id {
mandatory true;
+ type gbp-common:endpoint-group-id;
}
- leaf action-definition-id {
- type leafref {
- path "/subject-feature-definitions/action-definition/id";
- }
- }
- uses subject-feature-instance;
- }
- }
+ // Fields to be determined and completed before Code Freeze
- // *********
- // Contracts
- // *********
-
- list contract {
- description
- "Contracts contain a set of subjects that describe
- the communication allowed between endpoints in
- endpoint groups. Contracts are matched to endpoint
- groups by selectors.";
-
- key "id";
- leaf id {
- description "A unique ID for the contract";
- type gbp-common:contract-id;
- mandatory true;
}
+ // *************************
+ // Subject feature instances
+ // *************************
- leaf description {
+ container subject-feature-instances {
description
- "A human-readable description for the contract.";
- type gbp-common:description;
- }
+ "Contains instances of subject features. Subject
+ feature instances reference a subject feature
+ definition but fill in the required parameters so
+ that they can be easily references elsewhere.";
- // *******
- // Relator
- // *******
+ list classifier-instance {
+ description "XXX";
- uses has-qualities;
+ key "name";
+ leaf name {
+ description "A name for the classifier instance";
+ type gbp-common:classifier-name;
+ mandatory true;
+ }
+ leaf classifier-definition-id {
+ type leafref {
+ path "/subject-feature-definitions/classifier-definition/id";
+ }
+ }
+ uses subject-feature-instance;
+ }
- list target {
- description
- "Targets on a contract allow grouping sets of qualities
- together, as well as providing a namespace for
- the qualities that are matched.";
+ list action-instance {
+ description "XXX";
- key "name";
- leaf name {
- description
- "The name for this target. This can also be used
- by quality matchers as a namespace for qualities.";
- type gbp-common:target-name;
- mandatory true;
+ key "name";
+ leaf name {
+ description "A name for the action instance";
+ type gbp-common:action-name;
+ mandatory true;
+ }
+ leaf action-definition-id {
+ type leafref {
+ path "/subject-feature-definitions/action-definition/id";
+ }
+ }
+ uses subject-feature-instance;
}
-
- uses relator;
- uses has-qualities;
}
- // ********************
- // Clauses and subjects
- // ********************
+ // *********
+ // Contracts
+ // *********
- list subject {
+ list contract {
description
- "Subjects define rules to allow traffic to flow
- between endpoints in different endpoint
- groups. No communication is allowed unless a
- subject allows that communication.
-
- After a contract has been selected, clauses
- in that contract match against the
- requirements, capabilities, and conditions
- that apply to the endpoints or endpoint
- groups that are participating in the
- contract. Clauses that match each point to a
- subject which then becomes active.
-
- An active subject can then apply its rules to
- the traffic between the endpoints.";
-
- key "name";
- leaf name {
- description "A name for the subject";
- type gbp-common:subject-name;
+ "Contracts contain a set of subjects that describe
+ the communication allowed between endpoints in
+ endpoint groups. Contracts are matched to endpoint
+ groups by selectors.";
+
+ key "id";
+ leaf id {
+ description "A unique ID for the contract";
+ type gbp-common:contract-id;
mandatory true;
}
- list rule {
+ leaf description {
+ description
+ "A human-readable description for the contract.";
+ type gbp-common:description;
+ }
+
+ // *******
+ // Relator
+ // *******
+
+ uses has-qualities;
+
+ list target {
description
- "A rule is applied to traffic between
- endpoints in different endpoint groups.
- Rules match against the traffic using
- classifiers, and then apply actions to
- the traffic for matching rules.
-
- Rules are applied in order according to
- their order parameter. Only the first
- matching rule will apply. When multiple
- subjects are active, the order on each
- subject will determine which subjects are
- applied first, and all their rules will
- take effect before the rules of any
- subjects with a higher order value. When
- subjects have the same order value, then
- they will apply in lexicographic order by
- subject name.";
+ "Targets on a contract allow grouping sets of qualities
+ together, as well as providing a namespace for
+ the qualities that are matched.";
key "name";
leaf name {
- description "A name for the rule";
- type gbp-common:rule-name;
+ description
+ "The name for this target. This can also be used
+ by quality matchers as a namespace for qualities.";
+ type gbp-common:target-name;
mandatory true;
}
- uses has-classifier-refs;
- uses has-action-refs;
- uses has-order;
+ uses relator;
+ uses has-qualities;
}
- uses has-order;
- }
+ // ********************
+ // Clauses and subjects
+ // ********************
- list clause {
- description
- "Clauses are used to determine which subjects are
- active once a contract is selected using the
- contract selectors.
-
- Clauses are activated by matching against
- requirements on the consumer endpoint group,
- capabilities on the provider endpoint group, and
- conditions on the individual endpoints in the
- endpoint group.";
- key "name";
- leaf name {
- type gbp-common:clause-name;
- mandatory true;
+ list subject {
+ description
+ "Subjects define rules to allow traffic to flow
+ between endpoints in different endpoint
+ groups. No communication is allowed unless a
+ subject allows that communication.
+
+ After a contract has been selected, clauses
+ in that contract match against the
+ requirements, capabilities, and conditions
+ that apply to the endpoints or endpoint
+ groups that are participating in the
+ contract. Clauses that match each point to a
+ subject which then becomes active.
+
+ An active subject can then apply its rules to
+ the traffic between the endpoints.";
+
+ key "name";
+ leaf name {
+ description "A name for the subject";
+ type gbp-common:subject-name;
+ mandatory true;
+ }
+
+ list rule {
+ description
+ "A rule is applied to traffic between
+ endpoints in different endpoint groups.
+ Rules match against the traffic using
+ classifiers, and then apply actions to
+ the traffic for matching rules.
+
+ Rules are applied in order according to
+ their order parameter. Only the first
+ matching rule will apply. When multiple
+ subjects are active, the order on each
+ subject will determine which subjects are
+ applied first, and all their rules will
+ take effect before the rules of any
+ subjects with a higher order value. When
+ subjects have the same order value, then
+ they will apply in lexicographic order by
+ subject name.";
+
+ key "name";
+ leaf name {
+ description "A name for the rule";
+ type gbp-common:rule-name;
+ mandatory true;
+ }
+
+ uses has-classifier-refs;
+ uses has-action-refs;
+ uses has-order;
+ }
+
+ uses has-order;
}
- // ********
- // Matchers
- // ********
- container consumer-matchers {
+ list clause {
description
- "Matchers that apply to the consumer endpoint
- group.";
-
- // GIC mutually OR'd within role
- choice group-identification-constraints {
- description "Returns Groups which match, MUTALLY OR within role. Must be Either/Or";
+ "Clauses are used to determine which subjects are
+ active once a contract is selected using the
+ contract selectors.
+
+ Clauses are activated by matching against
+ requirements on the consumer endpoint group,
+ capabilities on the provider endpoint group, and
+ conditions on the individual endpoints in the
+ endpoint group.";
+ key "name";
+ leaf name {
+ type gbp-common:clause-name;
+ mandatory true;
+ }
+ // ********
+ // Matchers
+ // ********
- case group-name-constraint-case {
- list group-name-constraint {
- key endpoint-group-name;
- leaf endpoint-group-name {
- type gbp-common:name;
+ container consumer-matchers {
+ description
+ "Matchers that apply to the consumer endpoint
+ group.";
+
+ // 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;
+ }
}
}
- }
- case group-requirement-constraint-case {
- list requirement-matcher {
- description
- "Match against requirements in the consumer
- endpoint group.";
-
- key "name";
- leaf name {
+ case group-requirement-constraint-case {
+ list requirement-matcher {
description
- "A name for the requirement matcher";
- type gbp-common:requirement-matcher-name;
- mandatory true;
- }
+ "Match against requirements in the consumer
+ endpoint group.";
- 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 {
+ 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
- "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;
+ "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 {
+ 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";
+ 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;
+ uses has-endpoint-identification-constraints;
+ }
- uses has-condition-matchers;
-
- uses has-endpoint-identification-constraints;
- }
-
- container provider-matchers {
- description
- "Matchers that apply to the provider endpoint
- group";
-
- // 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;
+ container provider-matchers {
+ description
+ "Matchers that apply to the provider endpoint
+ group";
+
+ // 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;
+ }
}
}
- }
- case group-capability-constraint-case {
- list capability-matcher {
- description
- "Match against capabilities in the provider
- endpoint group.";
-
- key "name";
- leaf name {
+ case group-capability-constraint-case {
+ list capability-matcher {
description
- "A name for the capability matcher";
- type gbp-common:capability-matcher-name;
- mandatory true;
- }
+ "Match against capabilities in the provider
+ endpoint group.";
- uses matcher;
+ key "name";
+ leaf name {
+ description
+ "A name for the capability matcher";
+ type gbp-common:capability-matcher-name;
+ mandatory true;
+ }
- 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 {
+ uses matcher;
+
+ list matcher-capability {
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;
+ "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";
+ case group-any-case {
+ container group-any {
+ presence "any";
+ }
}
}
- }
- uses has-condition-matchers;
+ uses has-condition-matchers;
- uses has-endpoint-identification-constraints;
- }
+ uses has-endpoint-identification-constraints;
+ }
- 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.
- }
+ 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
- // ******************
+ // ******************
+ // Subject References
+ // ******************
- leaf-list subject-refs {
- description
- "The subjects that will be activated if this
- clause matches.";
+ leaf-list subject-refs {
+ description
+ "The subjects that will be activated if this
+ clause matches.";
- type leafref {
- path "/tenants/tenant/contract/subject/name";
+ type leafref {
+ path "/tenants/tenant/policy/contract/subject/name";
+ }
}
}
- }
- // ***********
- // Inheritance
- // ***********
+ // ***********
+ // Inheritance
+ // ***********
- leaf parent {
- description "Parent contract from which we inherit";
+ leaf parent {
+ description "Parent contract from which we inherit";
- type leafref {
- path "/tenants/tenant/contract/id";
+ type leafref {
+ path "/tenants/tenant/policy/contract/id";
+ }
}
}
- }
- list contract-ref {
- description
- "Contract references allow forming contracts
- between endpoint groups in different tenants.
- Once the contract reference is created, it is
- then possible to match against the contract using
- selectors as though it were a local tenant.
-
- Endpoint groups in the local tenant can serve
- only as consumers of the contract. Once the
- contract is matched, consumer matchers will apply
- to requirements and conditions in the local
- tenant, and provider matchers will apply against
- capabilities and conditions in the referenced
- tenant.";
-
- key contract-id;
-
- leaf tenant-id {
+ list contract-ref {
description
- "The tenant ID of the tenant containing the
- contract.";
- type leafref {
- path "/tenants/tenant/id";
+ "Contract references allow forming contracts
+ between endpoint groups in different tenants.
+ Once the contract reference is created, it is
+ then possible to match against the contract using
+ selectors as though it were a local tenant.
+
+ Endpoint groups in the local tenant can serve
+ only as consumers of the contract. Once the
+ contract is matched, consumer matchers will apply
+ to requirements and conditions in the local
+ tenant, and provider matchers will apply against
+ capabilities and conditions in the referenced
+ tenant.";
+
+ key contract-id;
+
+ leaf tenant-id {
+ description
+ "The tenant ID of the tenant containing the
+ contract.";
+ type leafref {
+ path "/tenants/tenant/id";
+ }
}
- }
- leaf contract-id {
- description "The contract ID of the contract.";
+ leaf contract-id {
+ description "The contract ID of the contract.";
- type leafref {
- path "/tenants/tenant/contract/id";
+ type leafref {
+ path "/tenants/tenant/policy/contract/id";
+ }
}
}
}
container resolved-policies {
config false;
list resolved-policy {
- description "Policies between consumer endpoint groups and provider
- endpoint groups";
- key "consumer-tenant-id consumer-epg-id provider-tenant-id provider-epg-id";
- uses has-consumer-epg-key;
- uses has-provider-epg-key;
+ description "Policies between consumer endpoint groups and provider
+ endpoint groups";
+ key "consumer-tenant-id consumer-epg-id provider-tenant-id provider-epg-id";
+ uses has-consumer-epg-key;
+ uses has-provider-epg-key;
+
+ leaf external-implicit-group {
+ description "If present, denotes which EPG in key is an external implicit group.";
+ type enumeration {
+ enum consumer-epg;
+ enum provider-epg;
+ }
+ }
list policy-rule-group-with-endpoint-constraints {
description "The policy rule groups that apply to a single pair of endpoint
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;
-import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentation;
import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentation;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomainBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomainBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3Context;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3ContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubjectFeatureInstances;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Subnet;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubnetBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContext;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstances;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
import com.google.common.collect.ImmutableList;
public class IndexedTenantTest {
private Tenant tenant;
+ private Policy policy;
+ private ForwardingContext fwCtx;
@Before
public void before() {
tenant = mock(Tenant.class);
+ policy = mock(Policy.class);
+ fwCtx = mock(ForwardingContext.class);
+ when(tenant.getPolicy()).thenReturn(policy);
+ when(tenant.getForwardingContext()).thenReturn(fwCtx);
}
@Test
L2FloodDomain fd = new L2FloodDomainBuilder().setParent(bdid).setId(fdid).build();
Subnet s = new SubnetBuilder().setParent(fdid).setId(sid).build();
Subnet s2 = new SubnetBuilder().setParent(bdid).setId(sid2).build();
- Tenant t = new TenantBuilder().setSubnet(ImmutableList.of(s, s2))
- .setL2BridgeDomain(ImmutableList.of(bd))
- .setL3Context(ImmutableList.of(l3c))
- .setL2FloodDomain(ImmutableList.of(fd))
+ Tenant t = new TenantBuilder()
+ .setForwardingContext(new ForwardingContextBuilder().setSubnet(ImmutableList.of(s, s2))
+ .setL2BridgeDomain(ImmutableList.of(bd))
+ .setL3Context(ImmutableList.of(l3c))
+ .setL2FloodDomain(ImmutableList.of(fd))
+ .build())
.build();
IndexedTenant it = new IndexedTenant(t);
public void constructorTest() {
EndpointGroup eg = mock(EndpointGroup.class);
List<EndpointGroup> egList = Arrays.asList(eg);
- when(tenant.getEndpointGroup()).thenReturn(egList);
+ when(policy.getEndpointGroup()).thenReturn(egList);
EndpointGroupId egId = mock(EndpointGroupId.class);
when(eg.getId()).thenReturn(egId);
Contract contract = mock(Contract.class);
List<Contract> contractList = Arrays.asList(contract);
- when(tenant.getContract()).thenReturn(contractList);
+ when(policy.getContract()).thenReturn(contractList);
ContractId contractId = mock(ContractId.class);
when(contract.getId()).thenReturn(contractId);
L3Context l3Context = mock(L3Context.class);
List<L3Context> l3ContextList = Arrays.asList(l3Context);
- when(tenant.getL3Context()).thenReturn(l3ContextList);
+ when(fwCtx.getL3Context()).thenReturn(l3ContextList);
L3ContextId l3ContextId = mock(L3ContextId.class);
when(l3Context.getId()).thenReturn(l3ContextId);
String l3ContextValue = "contextID";
L2BridgeDomain l2BridgeDomain = mock(L2BridgeDomain.class);
List<L2BridgeDomain> l2BridgeDomainList = Arrays.asList(l2BridgeDomain);
- when(tenant.getL2BridgeDomain()).thenReturn(l2BridgeDomainList);
+ when(fwCtx.getL2BridgeDomain()).thenReturn(l2BridgeDomainList);
L2BridgeDomainId l2BridgeDomainId = mock(L2BridgeDomainId.class);
when(l2BridgeDomain.getId()).thenReturn(l2BridgeDomainId);
String l2BridgeDomainIdValue = "bridgeDomainID";
L2FloodDomain l2FloodDomain = mock(L2FloodDomain.class);
List<L2FloodDomain> l2FloodDomainList = Arrays.asList(l2FloodDomain);
- when(tenant.getL2FloodDomain()).thenReturn(l2FloodDomainList);
+ when(fwCtx.getL2FloodDomain()).thenReturn(l2FloodDomainList);
L2FloodDomainId l2FloodDomainId = mock(L2FloodDomainId.class);
when(l2FloodDomain.getId()).thenReturn(l2FloodDomainId);
String cValue = "floodDomainID";
Subnet subnet = mock(Subnet.class);
List<Subnet> subnetList = Arrays.asList(subnet);
- when(tenant.getSubnet()).thenReturn(subnetList);
+ when(fwCtx.getSubnet()).thenReturn(subnetList);
SubnetId subnetId = mock(SubnetId.class);
when(subnet.getId()).thenReturn(subnetId);
String subnetIdValue = "subnetID";
when(sParent.getValue()).thenReturn(sParentValue);
SubjectFeatureInstances sfi = mock(SubjectFeatureInstances.class);
- when(tenant.getSubjectFeatureInstances()).thenReturn(sfi);
+ when(policy.getSubjectFeatureInstances()).thenReturn(sfi);
ClassifierInstance ci = mock(ClassifierInstance.class);
List<ClassifierInstance> ciList = Arrays.asList(ci);
@Test
public void constructorTestNullValues() {
- when(tenant.getL3Context()).thenReturn(null);
- when(tenant.getL2BridgeDomain()).thenReturn(null);
- when(tenant.getL2FloodDomain()).thenReturn(null);
- when(tenant.getSubnet()).thenReturn(null);
+ when(fwCtx.getL3Context()).thenReturn(null);
+ when(fwCtx.getL2BridgeDomain()).thenReturn(null);
+ when(fwCtx.getL2FloodDomain()).thenReturn(null);
+ when(fwCtx.getSubnet()).thenReturn(null);
SubjectFeatureInstances sfi = mock(SubjectFeatureInstances.class);
- when(tenant.getSubjectFeatureInstances()).thenReturn(sfi);
+ when(policy.getSubjectFeatureInstances()).thenReturn(sfi);
when(sfi.getClassifierInstance()).thenReturn(null);
when(sfi.getActionInstance()).thenReturn(null);
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;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;
-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.ClauseBuilder;
-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.SubjectBuilder;
-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.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.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 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 org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.SubjectBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Target;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.TargetBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ProviderMatchersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.consumer.matchers.group.identification.constraints.GroupRequirementConstraintCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.consumer.matchers.group.identification.constraints.GroupRequirementConstraintCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.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.policy.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.policy.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.policy.contract.clause.provider.matchers.group.identification.constraints.GroupCapabilityConstraintCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.provider.matchers.group.identification.constraints.GroupCapabilityConstraintCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.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.policy.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.policy.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.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerTargetSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerTargetSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderTargetSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderTargetSelectorBuilder;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
// *******
TenantId tenantId1 = new TenantId("0ac5d219-979c-4cca-8f90-83b69bc414ad");
- Tenant tenant1 = new TenantBuilder()
- .setId(tenantId1)
- .setEndpointGroup(ImmutableList.of(eg1, eg2))
- .setContract(ImmutableList.of(contract1, contract2,contract3))
+ Tenant tenant1 = new TenantBuilder().setId(tenantId1)
+ .setPolicy(new PolicyBuilder().setEndpointGroup(ImmutableList.of(eg1, eg2))
+ .setContract(ImmutableList.of(contract1, contract2, contract3))
+ .build())
.build();
- Tenant malformed = new TenantBuilder()
- .setId(new TenantId("b26e6b18-8e74-4062-a7d2-e8437132030d"))
- .setContract(ImmutableList.of(cloop1, cloop2, cselfloop, corphan))
- .setEndpointGroup(ImmutableList.of(egloop1, egloop2, egselfloop, egorphan))
+ Tenant malformed = new TenantBuilder().setId(new TenantId("b26e6b18-8e74-4062-a7d2-e8437132030d"))
+ .setPolicy(new PolicyBuilder().setContract(ImmutableList.of(cloop1, cloop2, cselfloop, corphan))
+ .setEndpointGroup(ImmutableList.of(egloop1, egloop2, egselfloop, egorphan))
+ .build())
.build();
// ****************
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcherBuilder;
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.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.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 org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Target;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.TargetBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.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.policy.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.policy.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.policy.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.policy.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.policy.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.policy.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.policy.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.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerTargetSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerTargetSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderTargetSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderTargetSelectorBuilder;
import com.google.common.collect.ImmutableList;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-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.endpoint.group.ConsumerNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Target;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerTargetSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderTargetSelector;
import com.google.common.collect.Table;
HashSet<IndexedTenant> tenants = new HashSet<IndexedTenant>();
tenants.add(indexedTenant);
Tenant tenant = mock(Tenant.class);
+ org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy policy =
+ mock(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy.class);
+ when(tenant.getPolicy()).thenReturn(policy);
when(indexedTenant.getTenant()).thenReturn(tenant);
EndpointGroup endpointGroup = mock(EndpointGroup.class);
- when(tenant.getEndpointGroup()).thenReturn(Arrays.asList(endpointGroup));
+ when(policy.getEndpointGroup()).thenReturn(Arrays.asList(endpointGroup));
ConsumerNamedSelector cns = mock(ConsumerNamedSelector.class);
when(endpointGroup.getConsumerNamedSelector()).thenReturn(Arrays.asList(cns));
ContractId contractId = mock(ContractId.class);
when(cns.getContract()).thenReturn(Arrays.asList(contractId));
Contract contract = mock(Contract.class);
- when(tenant.getContract()).thenReturn(Arrays.asList(contract));
+ when(policy.getContract()).thenReturn(Arrays.asList(contract));
when(contract.getId()).thenReturn(contractId);
TenantId tenantId = mock(TenantId.class);
when(tenant.getId()).thenReturn(tenantId);
import org.opendaylight.groupbasedpolicy.dto.RuleGroup;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-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.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
public class RuleGroupTest {
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Prefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3Context;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Subnet;
-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.subject.Rule;
-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.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
public class IidFactoryTest {
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;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;
-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.ClauseBuilder;
-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.SubjectBuilder;
-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.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.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 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 org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.SubjectBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Target;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.TargetBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ProviderMatchersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.consumer.matchers.group.identification.constraints.GroupRequirementConstraintCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.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.policy.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.policy.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.policy.contract.clause.provider.matchers.group.identification.constraints.GroupCapabilityConstraintCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.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.policy.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.policy.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.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerTargetSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerTargetSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderTargetSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderTargetSelectorBuilder;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
.build();
Tenant tenant1 = new TenantBuilder().setId(new TenantId("144b9aec-ef06-44f1-a50c-2fe5be456feb"))
- .setContract(ImmutableList.of(contract1, contract2))
- .setEndpointGroup(ImmutableList.of(eg1, eg2))
+ .setPolicy(new PolicyBuilder().setContract(ImmutableList.of(contract1, contract2))
+ .setEndpointGroup(ImmutableList.of(eg1, eg2))
+ .build())
.build();
Tenant tenant2 = new TenantBuilder().setId(new TenantId("138a2bc3-d3cb-4588-ad7a-63c9f19ce3e5"))
- .setContract(ImmutableList.of(contract1, contract2))
- .setEndpointGroup(ImmutableList.of(eg1, eg2, eg3))
+ .setPolicy(new PolicyBuilder().setContract(ImmutableList.of(contract1, contract2))
+ .setEndpointGroup(ImmutableList.of(eg1, eg2, eg3))
+ .build())
.build();
Tenant tenant3 = new TenantBuilder().setId(new TenantId("d1feede4-c31f-4232-ace2-93fcd065af1d"))
- .setContract(ImmutableList.of(contract1, contract2))
- .setEndpointGroup(ImmutableList.of(eg4, eg5))
+ .setPolicy(new PolicyBuilder().setContract(ImmutableList.of(contract1, contract2))
+ .setEndpointGroup(ImmutableList.of(eg4, eg5))
+ .build())
.build();
Tenant tenant0 = new TenantBuilder().build();
- Tenant tenant00 = new TenantBuilder().setContract(ImmutableList.of(contract0, contract00))
- .setEndpointGroup(ImmutableList.of(eg0))
- .build();
+ Tenant tenant00 = new TenantBuilder().setPolicy(new PolicyBuilder()
+ .setContract(ImmutableList.of(contract0, contract00)).setEndpointGroup(ImmutableList.of(eg0)).build()).build();
public void verifyMatches(List<ContractId> contrids, List<TenantId> contrtids, List<ContractMatch> matches) {
HashSet<ContractMatchKey> v = new HashSet<>();
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Name;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup.IntraGroupPolicy;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;
-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.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup.IntraGroupPolicy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
import com.google.common.base.Preconditions;
import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;
import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
import org.opendaylight.groupbasedpolicy.neutron.mapper.util.Utils;
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.EtherTypeClassifier;
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.L4Classifier;
import org.opendaylight.groupbasedpolicy.util.IidFactory;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.l3.endpoint.identification.constraints.PrefixConstraintBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup.IntraGroupPolicy;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;
-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.ClauseBuilder;
-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.SubjectBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ConsumerMatchers;
-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.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 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.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstanceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup.IntraGroupPolicy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.SubjectBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchers;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ProviderMatchers;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ProviderMatchersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder;
import com.google.common.collect.ImmutableList;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.l3.endpoint.identification.constraints.PrefixConstraintBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup.IntraGroupPolicy;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;
-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.ClauseBuilder;
-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.SubjectBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ConsumerMatchers;
-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.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 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.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstanceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup.IntraGroupPolicy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.SubjectBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchers;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ProviderMatchers;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ProviderMatchersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder;
import com.google.common.collect.ImmutableList;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.neutron.by.gbp.mappings.external.networks.by.l2.flood.domains.ExternalNetworkByL2FloodDomainBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.mapper.rev150223.mappings.network.mappings.NetworkMapping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.mapper.rev150223.mappings.network.mappings.NetworkMappingBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomainBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomainBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3Context;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3ContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.EndpointLocation.LocationType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.slf4j.Logger;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L3;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L3Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.mapper.rev150223.mappings.network.mappings.NetworkMapping;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomainBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3Context;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3ContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Subnet;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubnetBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.neutron.by.gbp.mappings.external.networks.by.l2.flood.domains.ExternalNetworkByL2FloodDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Subnet;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubnetBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetBuilder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Name;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup.IntraGroupPolicy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup.IntraGroupPolicy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-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.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;\r
import org.opendaylight.groupbasedpolicy.neutron.mapper.util.NeutronUtils;\r
import org.opendaylight.groupbasedpolicy.neutron.mapper.util.Utils;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.EtherTypeClassifier;\r
import org.opendaylight.neutron.spi.NeutronSecurityRule;\r
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.parameter.value.RangeValueBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Clause;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.ClauseBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ConsumerMatchers;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ConsumerMatchersBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstanceBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchers;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchersBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder;\r
\r
import com.google.common.base.Strings;\r
import com.google.common.collect.ImmutableList;\r
import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
import org.opendaylight.neutron.spi.NeutronSecurityRule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
-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.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
import com.google.common.collect.ImmutableList;
import org.opendaylight.neutron.spi.NeutronSecurityRule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Description;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder;
-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.SubjectBuilder;
-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.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.SubjectBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
import com.google.common.collect.ImmutableList;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRefBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3Context;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstanceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import static org.junit.Assert.assertNotNull;
-import java.util.concurrent.ExecutionException;
-
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
-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.ConsumerNamedSelectorKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorKey;
public class NetworkClientTest extends GbpDataBrokerTest {
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
public class NetworkServiceTest extends GbpDataBrokerTest {
import static org.junit.Assert.assertNotNull;
import java.util.Set;
-import java.util.concurrent.ExecutionException;
import org.junit.Test;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
public class RouterTest extends GbpDataBrokerTest {
import org.opendaylight.neutron.spi.NeutronSecurityGroup;
import org.opendaylight.neutron.spi.NeutronSecurityRule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup.IntraGroupPolicy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup.IntraGroupPolicy;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.group.NeutronSecurityGroupAware;
import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.group.SecGroupDao;
import org.opendaylight.groupbasedpolicy.neutron.mapper.test.ConfigDataStoreReader;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.test.GbpDataBrokerTest;
import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronEntityFactory;
import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.test.GbpDataBrokerTest;
import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
import org.opendaylight.groupbasedpolicy.neutron.mapper.util.NeutronUtils;
import org.opendaylight.groupbasedpolicy.util.IidFactory;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableSet;
import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
import org.opendaylight.neutron.spi.NeutronSecurityRule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
public class NeutronSecurityRuleAwareTest extends GbpDataBrokerTest {
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.l3.endpoint.identification.constraints.PrefixConstraint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.parameter.value.RangeValue;
-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.clause.ConsumerMatchers;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchers;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
public class SecRuleEntityDecoderTest {
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
-
import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronEntityFactory;
import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
import org.opendaylight.groupbasedpolicy.neutron.mapper.util.NeutronUtils;
import org.opendaylight.neutron.spi.NeutronSecurityRule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
-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.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
public class SingleClassifierRuleTest {
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule.SingleRuleContract;
import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronEntityFactory;
import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
import org.opendaylight.groupbasedpolicy.neutron.mapper.util.NeutronUtils;
import org.opendaylight.neutron.spi.NeutronSecurityRule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Description;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-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.subject.Rule;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
public class SingleRuleContractTest {
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-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.endpoint.group.ConsumerNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import com.google.common.base.Optional;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup.IntraGroupPolicy;
-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.subject.Rule;
-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.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup.IntraGroupPolicy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
public static void assertContractCount(DataBroker dataBroker, String tenantId, int expectedCount) throws Exception {
Optional<Tenant> tenant = ConfigDataStoreReader.readTenant(dataBroker, tenantId);
assertTrue(tenant.isPresent());
- List<Contract> contracts = tenant.get().getContract();
- if (contracts != null) {
- assertEquals(expectedCount, tenant.get().getContract().size());
- } else {
+ Policy policy = tenant.get().getPolicy();
+ if (policy == null) {
assertEquals(expectedCount, 0);
+ } else {
+ List<Contract> contracts = policy.getContract();
+ if (contracts != null) {
+ assertEquals(expectedCount, policy.getContract().size());
+ } else {
+ assertEquals(expectedCount, 0);
+ }
}
}
throws Exception {
Optional<Tenant> tenant = ConfigDataStoreReader.readTenant(dataBroker, tenantId);
assertTrue(tenant.isPresent());
- List<EndpointGroup> endpointGroups = tenant.get().getEndpointGroup();
- if (endpointGroups != null) {
- assertEquals(expectedCount, endpointGroups.size());
- } else {
+ Policy policy = tenant.get().getPolicy();
+ if (policy == null) {
assertEquals(expectedCount, 0);
+ } else {
+ List<EndpointGroup> endpointGroups = policy.getEndpointGroup();
+ if (endpointGroups != null) {
+ assertEquals(expectedCount, endpointGroups.size());
+ } else {
+ assertEquals(expectedCount, 0);
+ }
}
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Name;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomainBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomainKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomainBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomainKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3Context;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3ContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3ContextKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextKey;
public class MappingUtilsTest extends GbpDataBrokerTest {
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>sal-binding-broker-impl</artifactId>
- <version>${mdsal.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
in the test directory aren't packaged in bundles, and instead of keeping
separate copies, we just copy the file(s) needed in order to run the test). -->
<plugins>
- <plugin>
- <artifactId>maven-resources-plugin</artifactId>
- <executions>
- <execution>
- <id>copy-resources</id>
- <!-- here the phase you need -->
- <phase>validate</phase>
- <goals>
- <goal>copy-resources</goal>
- </goals>
- <configuration>
- <outputDirectory>src/test/java/org/opendaylight/groupbasedpolicy/resolver</outputDirectory>
- <resources>
- <resource>
- <directory>../../groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/resolver</directory>
- <filtering>true</filtering>
- </resource>
- </resources>
- </configuration>
- </execution>
- </executions>
- </plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Export-Package>
- org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf,
org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.*
</Export-Package>
</instructions>
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinitionKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubjectFeatureInstances;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstances;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
allActionInstancesIid =
InstanceIdentifier.builder(Tenants.class)
.child(Tenant.class)
+ .child(Policy.class)
.child(SubjectFeatureInstances.class)
.child(ActionInstance.class)
.build();
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayL3Context;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayNodeConfig;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.ExternalInterfaces;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Subnet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayL3Nat;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.napt.translations.fields.napt.translations.NaptTranslation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.slf4j.Logger;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.EndpointLocation.LocationType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3Context;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Subnet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContext;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
return null;
}
- List<Subnet> subnets = tenantInfo.get().getSubnet();
- if (subnets == null) {
+ ForwardingContext fwCtx = tenantInfo.get().getForwardingContext();
+ if (fwCtx == null || fwCtx.getSubnet() == null) {
return new HashSet<>();
}
- return new HashSet<>(subnets);
+ return new HashSet<>(fwCtx.getSubnet());
}
// Need a method to get subnets for EPs attached to the node locally
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.UniqueId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup.IntraGroupPolicy;
-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.subject.feature.instances.ActionInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup.IntraGroupPolicy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer3Match;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionDefinitionId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinition;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.action.definition.SupportedParameterValues;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
/**
* Represent an action definition, and provide tools for generating
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionDefinitionId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinition;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.action.definition.SupportedParameterValues;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg7;
import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils.SfcNshHeader;
import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils.SfcNshHeader.SfcNshHeaderBuilder;
import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.PolicyEnforcer.PolicyPair;
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils.SfcIidFactory;
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils.SfcNshHeader;
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils.SfcNshHeader.SfcNshHeaderBuilder;
-import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
import org.opendaylight.sfc.provider.api.SfcProviderRenderedPathAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServiceChainAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServicePathAPI;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinition;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.action.definition.SupportedParameterValues;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.action.definition.SupportedParameterValuesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.napt.translations.fields.NaptTranslations;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.napt.translations.fields.napt.translations.NaptTranslation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContext;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
Optional<Tenant> optional = mock(Optional.class);
when(checkedFuture.checkedGet()).thenReturn(optional);
Tenant tenant = mock(Tenant.class);
+ ForwardingContext fwCtx = mock(ForwardingContext.class);
+ when(tenant.getForwardingContext()).thenReturn(fwCtx);
when(optional.isPresent()).thenReturn(true);
when(optional.get()).thenReturn(tenant);
L2BridgeDomain l2BridgeDomain = mock(L2BridgeDomain.class);
- when(tenant.getL2BridgeDomain()).thenReturn(Collections.singletonList(l2BridgeDomain));
+ when(fwCtx.getL2BridgeDomain()).thenReturn(Collections.singletonList(l2BridgeDomain));
L2BridgeDomainId l2BridgeDomainId = mock(L2BridgeDomainId.class);
when(l2BridgeDomain.getId()).thenReturn(l2BridgeDomainId);
String l2bdValue = UUID.randomUUID().toString();
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayNodeConfigBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.TunnelBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;\r
endpointManager.addEndpoint(remoteEp);\r
\r
\r
- ctx.addTenant(baseTenant().setContract(\r
- ImmutableList.<Contract> of(baseContract(null).build())).build());\r
+ ctx.addTenant(baseTenant().setPolicy(new PolicyBuilder(baseTenant().getPolicy()).setContract(\r
+ ImmutableList.<Contract> of(baseContract(null).build())).build()).build());\r
verifyDMap(remoteEp, localEp);\r
}\r
\r
.build();\r
endpointManager.addEndpoint(remoteEp);\r
\r
- ctx.addTenant(baseTenant().setContract(\r
- ImmutableList.<Contract> of(baseContract(null).build())).build());\r
+ ctx.addTenant(baseTenant().setPolicy(new PolicyBuilder(baseTenant().getPolicy()).setContract(\r
+ ImmutableList.<Contract> of(baseContract(null).build())).build()).build());\r
verifyDMap(remoteEp, localEp);\r
}\r
\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRefBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomainBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomainBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3ContextBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubjectFeatureInstancesBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubnetBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.ClauseBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Subject;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.SubjectBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.Rule;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.RuleBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelectorBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstanceBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstanceBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContextBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstancesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.SubjectBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;\r
\r
}\r
\r
protected TenantBuilder baseTenant() {\r
- return new TenantBuilder()\r
- .setId(tid)\r
- .setEndpointGroup(ImmutableList.of(new EndpointGroupBuilder()\r
- .setId(eg)\r
- .setNetworkDomain(sub)\r
- .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder()\r
- .setName(new SelectorName("cns1"))\r
- .setContract(ImmutableList.of(cid))\r
- .build()))\r
- .build(),\r
- new EndpointGroupBuilder()\r
- .setId(eg2)\r
- .setNetworkDomain(sub2)\r
- .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder()\r
- .setName(new SelectorName("pns1"))\r
- .setContract(ImmutableList.of(cid))\r
- .build()))\r
- .build()))\r
- .setL3Context(ImmutableList.of(new L3ContextBuilder()\r
- .setId(l3c)\r
- .build()))\r
- .setL2BridgeDomain(ImmutableList.of(new L2BridgeDomainBuilder()\r
- .setId(bd)\r
- .setParent(l3c)\r
- .build()))\r
- .setL2FloodDomain(ImmutableList.of(new L2FloodDomainBuilder()\r
- .setId(fd)\r
- .setParent(bd)\r
- .build()))\r
- .setSubnet(ImmutableList.of(new SubnetBuilder()\r
- .setId(sub2)\r
- .setParent(fd)\r
- .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.0/24")))\r
- .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1")))\r
- .build(),\r
- new SubnetBuilder()\r
- .setId(sub)\r
- .setParent(fd)\r
- .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.0/24")))\r
- .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1")))\r
- .build(),\r
- new SubnetBuilder()\r
- .setId(sub3)\r
- .setParent(bd)\r
- .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.0/24")))\r
- .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1")))\r
- .build()))\r
- .setSubjectFeatureInstances(new SubjectFeatureInstancesBuilder()\r
- .setClassifierInstance(ImmutableList.of(new ClassifierInstanceBuilder()\r
- .setName(new ClassifierName("tcp_dst_80"))\r
- .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())\r
- .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
- .setName(new ParameterName("destport"))\r
- .setIntValue(Long.valueOf(80))\r
- .build(),\r
- new ParameterValueBuilder()\r
- .setName(new ParameterName("proto"))\r
- .setIntValue(Long.valueOf(6))\r
- .build()))\r
- .build(),\r
- new ClassifierInstanceBuilder()\r
- .setName(new ClassifierName("tcp_src_80"))\r
- .setClassifierDefinitionId(Classifier.L4_CL.getId())\r
- .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
- .setName(new ParameterName("sourceport"))\r
- .setIntValue(Long.valueOf(80))\r
- .build(),\r
- new ParameterValueBuilder()\r
- .setName(new ParameterName("proto"))\r
- .setIntValue(Long.valueOf(6))\r
- .build()))\r
- .build(),\r
- new ClassifierInstanceBuilder()\r
- .setName(new ClassifierName("ether_type"))\r
- .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())\r
- .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
- .setName(new ParameterName("ethertype"))\r
- .setIntValue(Long.valueOf(FlowUtils.IPv4))\r
- .build()))\r
- .build()))\r
- .setActionInstance(ImmutableList.of(new ActionInstanceBuilder()\r
- .setName(new ActionName("allow"))\r
- .setActionDefinitionId(new AllowAction().getId())\r
- .build()))\r
- .build());\r
+ return new TenantBuilder().setId(tid)\r
+ .setPolicy(new PolicyBuilder()\r
+ .setEndpointGroup(ImmutableList.of(\r
+ new EndpointGroupBuilder().setId(eg)\r
+ .setNetworkDomain(sub)\r
+ .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder()\r
+ .setName(new SelectorName("cns1")).setContract(ImmutableList.of(cid)).build()))\r
+ .build(),\r
+ new EndpointGroupBuilder().setId(eg2)\r
+ .setNetworkDomain(sub2)\r
+ .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder()\r
+ .setName(new SelectorName("pns1")).setContract(ImmutableList.of(cid)).build()))\r
+ .build()))\r
+ .setSubjectFeatureInstances(\r
+ new SubjectFeatureInstancesBuilder()\r
+ .setClassifierInstance(\r
+ ImmutableList\r
+ .of(new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80"))\r
+ .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())\r
+ .setParameterValue(ImmutableList.of(\r
+ new ParameterValueBuilder().setName(new ParameterName("destport"))\r
+ .setIntValue(Long.valueOf(80))\r
+ .build(),\r
+ new ParameterValueBuilder().setName(new ParameterName("proto"))\r
+ .setIntValue(Long.valueOf(6))\r
+ .build()))\r
+ .build(), new ClassifierInstanceBuilder()\r
+ .setName(new ClassifierName("tcp_src_80"))\r
+ .setClassifierDefinitionId(Classifier.L4_CL.getId())\r
+ .setParameterValue(ImmutableList.of(\r
+ new ParameterValueBuilder()\r
+ .setName(new ParameterName("sourceport"))\r
+ .setIntValue(Long.valueOf(80))\r
+ .build(),\r
+ new ParameterValueBuilder().setName(new ParameterName("proto"))\r
+ .setIntValue(Long.valueOf(6))\r
+ .build()))\r
+ .build(),\r
+ new ClassifierInstanceBuilder()\r
+ .setName(new ClassifierName("ether_type"))\r
+ .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())\r
+ .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
+ .setName(new ParameterName("ethertype"))\r
+ .setIntValue(Long.valueOf(FlowUtils.IPv4))\r
+ .build()))\r
+ .build()))\r
+ .setActionInstance(\r
+ ImmutableList.of(new ActionInstanceBuilder().setName(new ActionName("allow"))\r
+ .setActionDefinitionId(new AllowAction().getId())\r
+ .build()))\r
+ .build())\r
+ .build())\r
+ .setForwardingContext(\r
+ new ForwardingContextBuilder()\r
+ .setL3Context(ImmutableList.of(new L3ContextBuilder().setId(l3c).build()))\r
+ .setL2BridgeDomain(\r
+ ImmutableList.of(new L2BridgeDomainBuilder().setId(bd).setParent(l3c).build()))\r
+ .setL2FloodDomain(ImmutableList.of(new L2FloodDomainBuilder().setId(fd).setParent(bd).build()))\r
+ .setSubnet(ImmutableList.of(\r
+ new SubnetBuilder().setId(sub2)\r
+ .setParent(fd)\r
+ .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.0/24")))\r
+ .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1")))\r
+ .build(),\r
+ new SubnetBuilder().setId(sub)\r
+ .setParent(fd)\r
+ .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.0/24")))\r
+ .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1")))\r
+ .build(),\r
+ new SubnetBuilder().setId(sub3)\r
+ .setParent(bd)\r
+ .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.0/24")))\r
+ .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1")))\r
+ .build()))\r
+ .build());\r
}\r
\r
protected ContractBuilder baseContract(List<Subject> subjects) {\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.conditions.Condition;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.conditions.ConditionBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.ClauseBuilder;
-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.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.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.PolicyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ProviderMatchersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatch;
endpointManager.addEndpoint(ep1);
Endpoint ep2 = localEP().setMacAddress(new MacAddress("00:00:00:00:00:02")).build();
endpointManager.addEndpoint(ep2);
- ctx.addTenant(baseTenant().setContract(ImmutableList.<Contract>of(baseContract(null).build()))
- .build());
+ ctx.addTenant(baseTenant().setPolicy(new PolicyBuilder(baseTenant().getPolicy())
+ .setContract(ImmutableList.<Contract>of(baseContract(null).build())).build()).build());
OfWriter fm = dosync(null);
assertNotEquals(0, fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_POLICY_ENFORCER())
endpointManager.addEndpoint(ep1);
Endpoint ep2 = localEP().setMacAddress(new MacAddress("00:00:00:00:00:02")).setEndpointGroup(eg2).build();
endpointManager.addEndpoint(ep2);
- ctx.addTenant(baseTenant().setContract(ImmutableList.<Contract>of(baseContract(subjects).build()))
- .build());
+ ctx.addTenant(baseTenant().setPolicy(new PolicyBuilder(baseTenant().getPolicy())
+ .setContract(ImmutableList.<Contract>of(baseContract(subjects).build())).build()).build());
OfWriter fm = dosync(null);
assertNotEquals(0, fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_POLICY_ENFORCER())
.build();
endpointManager.addEndpoint(ep2);
- TenantBuilder tb = baseTenant().setContract(
+ TenantBuilder tb = baseTenant().setPolicy(new PolicyBuilder(baseTenant().getPolicy()).setContract(
ImmutableList.of(new ContractBuilder().setId(cid)
.setSubject(ImmutableList.of(baseSubject(Direction.Out).build()))
.setClause(
.setMatchType(MatchType.All)
.build())).build())
.build()))
- .build()));
+ .build())).build());
ctx.addTenant(tb.build());
PolicyInfo policy = ctx.getCurrentPolicy();
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.EndpointLocation.LocationType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Tenants;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantKey;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.Rule;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ui.backend.rev150511.GetEndpointsFromEndpointGroupInput;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ui.backend.rev150511.GetEndpointsFromEndpointGroupOutput;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ui.backend.rev150511.GetEndpointsFromEndpointGroupOutputBuilder;\r
}\r
leaf consumer-endpoint-group-id {\r
type leafref {\r
- path "/gbp-policy:tenants/gbp-policy:tenant/gbp-policy:endpoint-group/gbp-policy:id";\r
+ path "/gbp-policy:tenants/gbp-policy:tenant/gbp-policy:policy/gbp-policy:endpoint-group/gbp-policy:id";\r
}\r
}\r
}\r
}\r
leaf provider-endpoint-group-id {\r
type leafref {\r
- path "/gbp-policy:tenants/gbp-policy:tenant/gbp-policy:endpoint-group/gbp-policy:id";\r
+ path "/gbp-policy:tenants/gbp-policy:tenant/gbp-policy:policy/gbp-policy:endpoint-group/gbp-policy:id";\r
}\r
}\r
}\r