Bug 4724 added containers to tenant 01/30901/8
authorMartin Sunal <msunal@cisco.com>
Mon, 7 Dec 2015 10:24:11 +0000 (11:24 +0100)
committerMartin Sunal <msunal@cisco.com>
Tue, 8 Dec 2015 12:34:22 +0000 (13:34 +0100)
Change-Id: Ibec940580f8ef9f741cdc4b4adf3f01bbf477e51
Signed-off-by: Martin Sunal <msunal@cisco.com>
71 files changed:
demos/gbpsfc-env/demo-asymmetric-chain/rest.py
demos/gbpsfc-env/demo-gbp1/rest.py
demos/gbpsfc-env/demo-symmetric-chain/rest.py
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/api/PolicyValidatorRegistrar.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/dto/IndexedTenant.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/dto/Policy.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/dto/RuleGroup.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/resolver/PolicyResolver.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/sf/ClassifierInstanceValidator.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/util/ContractResolverUtils.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/util/IidFactory.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/util/InheritanceUtils.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/util/MatcherUtils.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/util/PolicyInfoUtils.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/util/SubjectResolverUtils.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/util/TenantUtils.java
groupbasedpolicy/src/main/yang/model/policy.yang
groupbasedpolicy/src/main/yang/renderermanager/resolved-policy.yang
groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/endpoint/EndPointRpcRegistryTest.java
groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/resolver/IndexedTenantTest.java
groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/resolver/InheritanceUtilsTest.java
groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/resolver/MatcherUtilsTest.java
groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/resolver/PolicyResolverUtilsTest.java
groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/resolver/RuleGroupTest.java
groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/util/IidFactoryTest.java
groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/util/PolicyResolutionTest.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/infrastructure/NetworkClient.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/infrastructure/NetworkService.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/infrastructure/Router.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/NeutronNetworkAware.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/NeutronPortAware.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/NeutronRouterAware.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/NeutronSubnetAware.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/group/NeutronSecurityGroupAware.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/NeutronSecurityRuleAware.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/SecRuleEntityDecoder.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/SingleClassifierRule.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/SingleRuleContract.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/util/MappingUtils.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/infrastructure/NetworkClientTest.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/infrastructure/NetworkServiceTest.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/infrastructure/RouterTest.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/group/NeutronSecurityGroupAwareDataStoreTest.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/NeutronSecurityRuleAwareDataStoreTest.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/NeutronSecurityRuleAwareTest.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/SecRuleEntityDecoderTest.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/SingleClassifierRuleTest.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/SingleRuleContractTest.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/test/ConfigDataStoreReader.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/test/PolicyAssert.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/util/MappingUtilsTest.java
renderers/ofoverlay/pom.xml
renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/SfcManager.java
renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/arp/ArpTasker.java
renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/endpoint/EndpointManager.java
renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapper.java
renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OrdinalFactory.java
renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcer.java
renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/Action.java
renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/AllowAction.java
renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/ChainAction.java
renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/SfcManagerTest.java
renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/endpoint/EndpointManagerTest.java
renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapperTest.java
renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTableTest.java
renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTableTest.java
renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcerTest.java
renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapperTest.java
renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/ChainActionTest.java
ui-backend/src/main/java/org/opendaylight/groupbasedpolicy/ui/backend/UiBackendServiceImpl.java
ui-backend/src/main/yang/ui-backend.yang

index 8042637d710e37f65250cb2d06f6816b29431329..6a41d89d4bab1a90f1eca4068ca6eeb701185a62 100644 (file)
@@ -237,206 +237,210 @@ def get_service_function_paths_data():
 
 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
 
index 9b5ef3277e9a838dd39c29ad959da8f76f335339..b0188ae1d9233d2ce7b2047de4a16d902e33b5cb 100644 (file)
@@ -57,184 +57,186 @@ def post(host, port, uri, data, debug=False):
 
 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
  
index 5eb35bc7f993fe223a04981e818170dfabdbfcf0..17d98670b90b3919a270bc238fd392813780678c 100644 (file)
@@ -239,207 +239,210 @@ def get_service_function_paths_data():
 
 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
 
index c59bdd9a6018dd6728dfc29914b7c8c4f06b8f4b..dfffe21b3a0f52f89d3f350eae8bcd069a8622fb 100644 (file)
@@ -10,8 +10,8 @@ package org.opendaylight.groupbasedpolicy.api;
 
 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 {
 
index 44dfcfe0d2ccbbb7d66ad8d0c61aff5809f5fe91..bed1133acac5812bbd47bd07ff37c39df43471aa 100644 (file)
@@ -24,15 +24,17 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
@@ -57,61 +59,70 @@ public class IndexedTenant {
     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);
-                }
-            }
-        }
     }
 
     /**
index f9bdc0ebfbfce45cb9cf40a82c71e82d5d191602..e3facede8dbc4cb200a3ae48541df878d78dd6d5 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 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;
index 4d231ad2125c8b1046bb98a6e2168c5dc0d2ad74..5da5c669a9b8511b59387a405d35e5a21d705463 100644 (file)
@@ -15,8 +15,8 @@ import javax.annotation.concurrent.Immutable;
 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;
index bf4387f6ddc90ecba3b29425f5f458a100ed9307..573bf024c09e7cac0c1c74d5360dc8be4aac1bef 100755 (executable)
@@ -40,9 +40,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
@@ -213,8 +213,8 @@ public class PolicyResolver implements PolicyValidatorRegistrar, AutoCloseable {
                 }
                 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())) {
index 47c2d78a6254fa58540af60538c6f9374d53bd66..d54d46c55fe51f8de7b49dd1293a65659eadfb26 100755 (executable)
@@ -18,7 +18,7 @@ import java.util.Set;
 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;
index 965734cb0f3b7b50ec09cd5551d502414ffe0be4..f6b08a2aab522a8db9422269015dd5fc97a90abe 100644 (file)
@@ -22,13 +22,14 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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;
@@ -58,9 +59,11 @@ class ContractResolverUtils {
             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());
@@ -74,7 +77,7 @@ class ContractResolverUtils {
 
         // 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());
@@ -93,15 +96,21 @@ class ContractResolverUtils {
     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));
@@ -110,11 +119,10 @@ class ContractResolverUtils {
         }
         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) {
@@ -150,10 +158,15 @@ class ContractResolverUtils {
     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)
@@ -165,9 +178,7 @@ class ContractResolverUtils {
         }
         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()) {
@@ -196,8 +207,9 @@ class ContractResolverUtils {
             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));
         }
index 4f417f1042ab6e0e7cfd009542b2a94fa9c84312..95d49509ae1dedcfc625caa3552ec7303dd31941 100644 (file)
@@ -43,33 +43,35 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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;
@@ -97,6 +99,7 @@ public class IidFactory {
     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();
     }
@@ -104,6 +107,7 @@ public class IidFactory {
     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();
     }
@@ -112,6 +116,7 @@ public class IidFactory {
             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();
@@ -121,6 +126,7 @@ public class IidFactory {
             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();
@@ -130,6 +136,7 @@ public class IidFactory {
             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();
@@ -138,6 +145,7 @@ public class IidFactory {
     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();
@@ -147,6 +155,7 @@ public class IidFactory {
             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))
@@ -156,6 +165,7 @@ public class IidFactory {
     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();
@@ -165,6 +175,7 @@ public class IidFactory {
             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();
@@ -187,6 +198,7 @@ public class IidFactory {
             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))
@@ -197,6 +209,7 @@ public class IidFactory {
     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();
     }
@@ -205,6 +218,7 @@ public class IidFactory {
             L2BridgeDomainId l2BridgeDomainId) {
         return InstanceIdentifier.builder(Tenants.class)
             .child(Tenant.class, new TenantKey(tenantId))
+            .child(ForwardingContext.class)
             .child(L2BridgeDomain.class, new L2BridgeDomainKey(l2BridgeDomainId))
             .build();
     }
@@ -212,6 +226,7 @@ public class IidFactory {
     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();
     }
@@ -254,6 +269,7 @@ public class IidFactory {
     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();
     }
index 3d1dff851982072e4b507be341652287c160ecba..5bf27a6a2ecb6af1036ba455b1c2f6a477272cf7 100644 (file)
@@ -44,43 +44,46 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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;
 
 /**
@@ -105,37 +108,40 @@ public class InheritanceUtils {
      * @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();
     }
 
     // ****************
@@ -767,7 +773,7 @@ public class InheritanceUtils {
 
         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(
index 47cd8cf7ad52e4ecf86e9c65e3edd487fa63559f..1a5e641a9f2be05b18e7947619bb2ef44798bbb3 100644 (file)
@@ -35,11 +35,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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
index 35c57aee722141a39cbd39097b138d0dcfc75de0..94e2c678039e05d48a1b9b1bb5c4d5dcfe0fec17 100644 (file)
@@ -29,9 +29,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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;
@@ -205,7 +205,11 @@ public class PolicyInfoUtils {
     }
 
     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;
             }
@@ -214,7 +218,11 @@ public class PolicyInfoUtils {
     }
 
     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;
             }
index c6ba80d4ef07ec76a06d94dbf85cfebdcfb0c622..117c7bcabee7353131973eb426c8a22ff93441e7 100644 (file)
@@ -28,14 +28,14 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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;
@@ -143,7 +143,7 @@ class SubjectResolverUtils {
             }
         }
         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)
index 89ea41ed7fa359fe7041f289ed90d82c8a1e62e0..34aaa9fcfad30bc7e1c8eb0f0320d7d107100c1f 100644 (file)
@@ -21,16 +21,16 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
@@ -88,7 +88,7 @@ public class TenantUtils {
     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
@@ -97,8 +97,8 @@ public class TenantUtils {
      */
     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;
                 }
@@ -160,7 +160,7 @@ public class TenantUtils {
         }
         return null;
     }
-    
+
     /**
      * Find an endpoint group with a specified ID within a tenant
      * @param tenant the {@link Tenant} to search
@@ -169,8 +169,8 @@ public class TenantUtils {
      */
     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;
                 }
@@ -195,7 +195,7 @@ public class TenantUtils {
         }
         return null;
     }
-    
+
     /**
      * Find a consumer target selector in an endpoint group
      * @param eg the {@link EndpointGroup} to search
@@ -229,7 +229,7 @@ public class TenantUtils {
         }
         return null;
     }
-    
+
     /**
      * Find a provider target selector in an endpoint group
      * @param eg the {@link EndpointGroup} to search
@@ -245,5 +245,5 @@ public class TenantUtils {
             }
         }
         return null;
-    }    
+    }
 }
index a9b90bc57d775fe6fcb9db64e5afc2998195dbd1..2830fc39e7e90f80b1fd612de557780994e1657e 100755 (executable)
@@ -12,11 +12,8 @@ module policy {
     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
@@ -354,7 +351,7 @@ module policy {
         leaf-list contract {
             description "Specific contracts to select.";
             type leafref {
-                path "/tenants/tenant/contract/id";
+                path "/tenants/tenant/policy/contract/id";
             }
         }
     }
@@ -504,7 +501,7 @@ module policy {
             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;
             }
@@ -549,7 +546,7 @@ module policy {
             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;
             }
@@ -747,697 +744,699 @@ module policy {
             // 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";
+                        }
                     }
                 }
             }
index ef543bf9e1e80b54e40fe83fcc52489b1a430c7b..4e9775cd51a4c7dc6f1d8b8a4fb442346e682ee8 100644 (file)
@@ -187,11 +187,19 @@ module resolved-policy {
     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
index 155f3f30d7a0b884ec313ff6c34014a0cfcfd116..a80182980360a27466e6613f824b0bbaa109f28a 100644 (file)
@@ -20,8 +20,8 @@ import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 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;
index 0fece90e6f7895bc8060789f7f5538a68855d730..7efbe1a1f1e208edb00da0a2be0285ee29212979 100644 (file)
@@ -33,29 +33,38 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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
@@ -71,10 +80,12 @@ public class IndexedTenantTest {
         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);
 
@@ -91,19 +102,19 @@ public class IndexedTenantTest {
     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";
@@ -111,7 +122,7 @@ public class IndexedTenantTest {
 
         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";
@@ -119,7 +130,7 @@ public class IndexedTenantTest {
 
         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";
@@ -127,7 +138,7 @@ public class IndexedTenantTest {
 
         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";
@@ -138,7 +149,7 @@ public class IndexedTenantTest {
         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);
@@ -167,13 +178,13 @@ public class IndexedTenantTest {
 
     @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);
 
index 8e6afbf9c6553995dbf081ae895b738cc15772f6..011160157c7549d05e7d050045a11d66dde4e0f9 100644 (file)
@@ -64,38 +64,39 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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;
@@ -533,16 +534,16 @@ public class InheritanceUtilsTest {
     // *******
 
     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();
 
     // ****************
index 02dfcd8ba5cea370a2eb91f9f13338f328807aa0..8a4df7f694c95831c2f0ab93292037e2dad32b14 100644 (file)
@@ -29,24 +29,24 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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;
 
index 0b8eed9fee4c1500858ce6d7615d5f345561b4d3..30ea18547cd995844eebb3e620f9ca0caa8214a8 100644 (file)
@@ -23,13 +23,13 @@ import org.opendaylight.groupbasedpolicy.util.PolicyResolverUtils;
 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;
 
@@ -41,16 +41,19 @@ public class PolicyResolverUtilsTest {
         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);
index 445a8155edcede87fefbe39db9301a7430c0cfb5..216bccae0d51d7ded87501d18c6d8ff5ab3a0a81 100644 (file)
@@ -12,8 +12,8 @@ import org.junit.Test;
 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 {
 
index b3604cc720bfdc6efcd0643f2ba460fe72b0e496..ef11a29cc34aaf9c1d15e372abcb215d469beac0 100644 (file)
@@ -36,19 +36,19 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.r
 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 {
index 2c2ee0a38e7d0d01e2cc42f3ace20b099c684d94..2cc305b8b5246605efb5a7f42c772b0a7e740d19 100644 (file)
@@ -58,36 +58,37 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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;
@@ -227,21 +228,23 @@ public class PolicyResolutionTest {
         .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<>();
index 93e231d69aae9a1803140d165d6fcbaa4c984640..0ac5cf05e860c9ba5bf5ec8fb4616db7660ef80c 100644 (file)
@@ -15,10 +15,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
 
index a6852bc670f510b18d7da6a990127bbfb09cdba3..1a6a633ae497ae9362e674f5743d80b46356dd2c 100755 (executable)
@@ -22,8 +22,6 @@ import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition;
 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;
@@ -46,27 +44,27 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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;
 
index 0c0616b496c1b548a8d4dcd3c411f43cd5729790..2c8389f1f3ee9b97cd8010073662161aa17814d4 100644 (file)
@@ -42,27 +42,27 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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;
 
index db00f2dbc099227df015c4bae49fff5cba7a6e99..1439150b570dac8e0eb944306156eecd0017799a 100644 (file)
@@ -37,14 +37,14 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gb
 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;
index 56f7c87f3e8b8e390b5abd034dc33aebaf477dfc..f647032f4df2270420c16c9999067c6f2bc0b51a 100644 (file)
@@ -82,7 +82,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gb
 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;
index e77afb031ff0b7fa196d5c494259d23c9a38e4c4..b1af45a5ef97dc8f00e519fb59fea817328174b1 100644 (file)
@@ -52,13 +52,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.r
 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;
index 9793efea337757f24a549eebc36364d22e2132c2..25af8b489a5bb62795f2e5f580a2cb8a595e0f83 100644 (file)
@@ -28,8 +28,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
index ae05df544af54e5eeb223d48a92cd5d6ac1b2f42..02e03cb441f5e8fd328f8ebbad684f1d16e68577 100644 (file)
@@ -29,9 +29,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
index fab92740b8b23abc477a8620876c8376bd4af95f..5f6885c38a3b27c998a744e85bba6185a3cb4b06 100644 (file)
@@ -31,13 +31,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
index ad63fcb255ca8435301c28a6bb72199f869f8268..ea3550dab6e006c3555dbf42fd79919012938d8b 100755 (executable)
@@ -20,7 +20,6 @@ import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition;
 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
@@ -41,12 +40,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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
index 8abe476e608b3f3d72c92bd98e7a6409abaaf810..1aa77f4a1f7de3a3de8b369e10a28f265e7b139c 100644 (file)
@@ -13,9 +13,9 @@ import javax.annotation.concurrent.Immutable;
 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;
 
index 394c7b27b4e0d94fcad678f5daa91ba6f6c1beb5..4cd013ad45fa665e10d82c2081f4c65868f5e8e9 100644 (file)
@@ -15,12 +15,12 @@ import javax.annotation.concurrent.Immutable;
 
 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;
 
index 163897821ee76d2593e4bcfb15bf888ef282919c..9ce5f647cf276a83ba2c6ad50f587132187e7b29 100644 (file)
@@ -25,11 +25,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
index 35e4a599a6beb7031838ef6e50bcc8a79d585390..819c083d8e5f9b867ba33215d0806c459eb2009a 100644 (file)
@@ -2,8 +2,6 @@ package org.opendaylight.groupbasedpolicy.neutron.mapper.infrastructure;
 
 import static org.junit.Assert.assertNotNull;
 
-import java.util.concurrent.ExecutionException;
-
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -13,8 +11,8 @@ import org.opendaylight.groupbasedpolicy.neutron.mapper.test.GbpDataBrokerTest;
 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 {
 
index 0fcd02762f39902b3d83e22a3e85869cd4ff1aa2..625c1f81c9a8a18cff103d770e39c9feb4459341 100644 (file)
@@ -17,7 +17,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 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 {
 
index 6dbf4f6c45bc0f1dc2aca7f45aaab1c1e71fc4d2..38039f9cf85c6d7a3c30dd575e710e9ebf6c1d9f 100644 (file)
@@ -5,7 +5,6 @@ import static org.junit.Assert.assertFalse;
 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;
@@ -18,7 +17,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 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 {
 
index 2e25bc296c9afcc443d1b89b3cf8b44f224af0e9..f9d1c7eb5b04096c15d9048b1a7edf876312976a 100644 (file)
@@ -15,9 +15,9 @@ import org.opendaylight.groupbasedpolicy.neutron.mapper.util.NeutronUtils;
 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;
index 86bb176290c17cea38277c2e9988425bbc5ef5dc..c16b79620bcc9d92b0425052118d529564f04d6d 100644 (file)
@@ -7,12 +7,11 @@ import org.junit.Test;
 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;
@@ -21,8 +20,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
index ad9ca3fb4c9cc73f45af1c2075c9ca13fecbebdc..53c9560b38f8c4e3f737b5297849902aee1bff9a 100644 (file)
@@ -14,7 +14,7 @@ import org.opendaylight.groupbasedpolicy.neutron.mapper.test.GbpDataBrokerTest;
 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 {
 
index 69c8d223ff360e797384c83aef88992d154580d5..8060bc9b098a13968f759c478f93fdb91e9e7781 100644 (file)
@@ -29,9 +29,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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 {
 
index 38ced30bd9690f97161e75bd3754f901a62f35d9..e78b9dcf1092ee3dcdb8f44b22376a8c0b14bf91 100644 (file)
@@ -4,14 +4,13 @@ import static org.junit.Assert.assertEquals;
 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 {
 
index 5fa3ad60e5de6ac74cc9ffcc55b617b007571bf3..4510c816cbd47e0c0e1554cdce82e55a84d9128a 100644 (file)
@@ -4,18 +4,17 @@ import static org.junit.Assert.assertEquals;
 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 {
 
index 820b1fe37f4556ac68e4d9a8d607f2edde608d91..2f306d3c87cbc7f296d04f43a2f34e4fed39aa40 100644 (file)
@@ -13,12 +13,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
index eafec5ec7946f827972f879ede7394042d66e551..6b8752eb916ae99c58b80ec291183ea652b37dac 100644 (file)
@@ -25,16 +25,17 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
@@ -74,11 +75,16 @@ public final class PolicyAssert {
     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);
+            }
         }
     }
 
@@ -148,11 +154,16 @@ public final class PolicyAssert {
             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);
+            }
         }
     }
 
index 03a7b325a73477d8ffa8baa024a2a65ddec6e40d..25633f1c379baa5e6fa4a11a0f4a6163384ecdd5 100644 (file)
@@ -22,15 +22,15 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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 {
 
index b774aeec569f7a5b5404e5a77e17e0f21270863a..b0a48315dd95636bf38046e232a10718de7b1e2c 100755 (executable)
@@ -66,7 +66,6 @@
     <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>
index 708e6367a59aba973bbbcf198f5ce5f5180371c7..78cfc84055e7672fd996ab74c2c881283b4dee92 100644 (file)
@@ -43,8 +43,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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;
@@ -123,6 +124,7 @@ public class SfcManager implements AutoCloseable, DataChangeListener {
         allActionInstancesIid =
                 InstanceIdentifier.builder(Tenants.class)
                     .child(Tenant.class)
+                    .child(Policy.class)
                     .child(SubjectFeatureInstances.class)
                     .child(ActionInstance.class)
                     .build();
index c881db5bd740b6f5748c3d14ada033f0f8965d23..3fc2a00e6e0562860bd68884d95f3bea557bb874 100644 (file)
@@ -75,9 +75,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.
 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;
index 724bc3521b3fe6cac88946c75b7172354e674025..1bd972f5fe1f659dcb4e0b457f1eb7f5fc1f7d64 100644 (file)
@@ -59,8 +59,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.
 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;
index 4286b51b973edbaa357435150c68b1ec57c709b0..51f7c2cd6074b3725b69300304c53f7fac74a54d 100755 (executable)
@@ -83,8 +83,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.r
 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;
@@ -1137,11 +1138,11 @@ public class DestinationMapper extends FlowTable {
             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
index 9754bd5d0636ecb3365c844ba531fe7add1ece1a..875e74f5125ecf119b90d931b705e485a96eabd6 100755 (executable)
@@ -25,10 +25,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
index 152666395cb12634753f17c8bced6d7e13a31328..1d2b9f8c07d9519e5a39da91717b3e191989a5ca 100755 (executable)
@@ -57,11 +57,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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;
index 224d53a6eb6113fd57fee6948b6ae61c25e7face..d3760eac756f8c667296d2c0cbea8a451b600063 100755 (executable)
@@ -20,8 +20,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 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
index 4b547d4efb1aa42619184135b4294339a3c0cc3a..6ee11c20bd62337a1ba52a6c3b5eb9007c6e9966 100755 (executable)
@@ -25,7 +25,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 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;
 
index e02cc0288f92d5a48481c03d508a9860ddb8cff6..ffe6e3cf6f2c7df5b1cb23d5c6456b0ae54c1b60 100755 (executable)
@@ -28,11 +28,6 @@ import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils.SfcIidFacto
 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;
@@ -53,7 +48,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
index c45ef9e50480cf69f6142f9cdef6902717d971b9..3a17c318775936ac9e59c3e993f287cad41f3044 100644 (file)
@@ -27,7 +27,7 @@ import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataCh
 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;
index 629c95d784180db5030d219742ddc35f3b90b893..70af322c795ec9e754927c33c614927fb8c6a0fb 100644 (file)
@@ -71,7 +71,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.
 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;
@@ -571,11 +572,13 @@ public class EndpointManagerTest {
         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();
index adba97c38c06759ad9fbe33507d1e0580935399e..817585cb9584d744cf518901720a11b19675dd8b 100755 (executable)
@@ -50,7 +50,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.r
 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
@@ -289,8 +290,8 @@ public class DestinationMapperTest extends FlowTableTest {
         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
@@ -304,8 +305,8 @@ public class DestinationMapperTest extends FlowTableTest {
                 .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
index bd3a7ee4e98cb1a48d44f5517405c45202d1c1b6..75080e0b63f96c4f30771a63b2fa8760de8b618f 100755 (executable)
@@ -47,7 +47,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
index 405b78b1b60521da3c8ec903a4dfbdc75ad7a36f..13bf771333967c3dfadcfd9929914b056ff9b108 100755 (executable)
@@ -46,22 +46,24 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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
@@ -104,91 +106,81 @@ public class OfTableTest {
     }\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
index 583762cc04f7cdbd37df69959de6853d5a00b868..360b1927566f7fed3c8fd0b5ba63f776d8cf7fb8 100755 (executable)
@@ -55,14 +55,15 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 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;
@@ -121,8 +122,8 @@ public class PolicyEnforcerTest extends FlowTableTest {
         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())
@@ -196,8 +197,8 @@ public class PolicyEnforcerTest extends FlowTableTest {
         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())
@@ -260,7 +261,7 @@ public class PolicyEnforcerTest extends FlowTableTest {
             .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(
@@ -281,7 +282,7 @@ public class PolicyEnforcerTest extends FlowTableTest {
                                                     .setMatchType(MatchType.All)
                                                     .build())).build())
                                 .build()))
-                    .build()));
+                    .build())).build());
         ctx.addTenant(tb.build());
 
         PolicyInfo policy = ctx.getCurrentPolicy();
index 59aef635fceebc5766a89a05b891985e0dce38c9..a5d6e8bc8eb78a8cf9a1bae30a29ecc9412d1f2e 100755 (executable)
@@ -36,7 +36,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 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;
index 8430641c398132b36766aeaad02f3f7772020b13..4ad69b266c39fc653384ad9cae6e1afd4ec5f100 100755 (executable)
@@ -44,7 +44,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 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;
 
index 501994e58572a0b784d8dd304bca60b568cff6a3..50164c9ecbbbbae2978638cb2462765f3aba530d 100755 (executable)
@@ -33,7 +33,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.r
 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
index e2e0edd0cf177e4774a05e8ed2a80c53eead6528..128c78f9971a5e5eb567b2adca78661924d43aed 100755 (executable)
@@ -30,7 +30,7 @@ module ui-backend {
         }\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
@@ -43,7 +43,7 @@ module ui-backend {
         }\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