<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<configConfMo
  dn=""
  cookie="%cookie%"
  inHierarchical="false">
    <inConfig>
      <policyRuleBasedPolicy
        descr=""
        dn="%aclpolicydn%"
        name="%aclpolicyname%"
        status="created"/>
    </inConfig>
</configConfMo>

<!--
    aclpolicydn="org-root/org-vlan-123/org-VDC-vlan-123/pol-test_policy"
    aclpolicyname="test_policy"
-->