From ae927860249b060ed4f9a8e0f3df8df7ec2e269c Mon Sep 17 00:00:00 2001 From: Marek Gradzki Date: Mon, 2 Jul 2018 08:36:39 +0200 Subject: HC2VPP-349: use fib-table-list-ref in the proxy-arp model User is now required to explicitly configure FIB tables using vpp-fib-management module. The patch also adds non-default vrf configuration example to the proxy-arp postman collection. Change-Id: I8cbdf0add8992bfb0a6a8fe0a38d6a466d5951f0 Signed-off-by: Marek Gradzki --- l3/api/pom.xml | 5 ++ l3/api/src/main/yang/proxy-arp@2017-03-15.yang | 71 ------------------- l3/api/src/main/yang/proxy-arp@2018-07-02.yang | 82 ++++++++++++++++++++++ l3/impl/proxy_arp_postman_collection.json | 51 ++++++++++++-- .../l3/write/factory/ProxyArpWriterFactory.java | 8 +-- .../hc2vpp/l3/write/ipv4/ProxyArpCustomizer.java | 2 +- .../hc2vpp/l3/write/ipv4/ProxyRangeCustomizer.java | 6 +- .../fd/hc2vpp/l3/write/ProxyArpCustomizerTest.java | 4 +- .../hc2vpp/l3/write/ProxyRangeCustomizerTest.java | 11 +-- 9 files changed, 148 insertions(+), 92 deletions(-) delete mode 100644 l3/api/src/main/yang/proxy-arp@2017-03-15.yang create mode 100644 l3/api/src/main/yang/proxy-arp@2018-07-02.yang diff --git a/l3/api/pom.xml b/l3/api/pom.xml index 3388ec6d1..188e8ba20 100644 --- a/l3/api/pom.xml +++ b/l3/api/pom.xml @@ -48,5 +48,10 @@ org.opendaylight.mdsal.model yang-ext + + io.fd.hc2vpp.fib.management + fib-management-api + ${project.version} + \ No newline at end of file diff --git a/l3/api/src/main/yang/proxy-arp@2017-03-15.yang b/l3/api/src/main/yang/proxy-arp@2017-03-15.yang deleted file mode 100644 index 3fa15955f..000000000 --- a/l3/api/src/main/yang/proxy-arp@2017-03-15.yang +++ /dev/null @@ -1,71 +0,0 @@ -module proxy-arp { - yang-version 1; - namespace "urn:opendaylight:params:xml:ns:yang:vpp:proxy:arp"; - prefix "proxy-arp"; - - import ietf-inet-types { - prefix "inet"; - } - import ietf-interfaces { - prefix "if"; - } - import yang-ext { - prefix "ext"; - } - - organization - "FD.io - The Fast Data Project"; - - contact - "Hc2vpp Wiki - Mailing List "; - - description - "This module contains a collection of YANG definitions for - managing Proxy ARP in VPP. - - Copyright (c) 2017 Cisco and/or its affiliates. - - Licensed 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."; - - revision "2017-03-15" { - description "Initial revision of proxy ARP model for VPP"; - } - - container proxy-ranges { - list proxy-range { - key "vrf-id low-addr high-addr"; - leaf vrf-id { - type uint32; - } - leaf low-addr { - type inet:ipv4-address; - } - leaf high-addr { - type inet:ipv4-address; - } - description - "Parameters for configuring Proxy ARP on interfaces."; - } - } - - augment /if:interfaces/if:interface { - ext:augment-identifier "proxy-arp-interface-augmentation"; - - container proxy-arp { - presence "Enables proxy ARP on given interface"; - } - } - - // TODO(HC2VPP-86): add interfaces-state augmentation once VPP supports ARP proxy read (VPP-225) -} \ No newline at end of file diff --git a/l3/api/src/main/yang/proxy-arp@2018-07-02.yang b/l3/api/src/main/yang/proxy-arp@2018-07-02.yang new file mode 100644 index 000000000..dc4caf2c8 --- /dev/null +++ b/l3/api/src/main/yang/proxy-arp@2018-07-02.yang @@ -0,0 +1,82 @@ +module proxy-arp { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:vpp:proxy:arp"; + prefix "proxy-arp"; + + import ietf-inet-types { + prefix "inet"; + } + import ietf-interfaces { + prefix "if"; + } + import yang-ext { + prefix "ext"; + } + import vpp-fib-table-management { + prefix fib-management; + revision-date 2018-05-21; + } + + organization + "FD.io - The Fast Data Project"; + + contact + "Hc2vpp Wiki + Mailing List "; + + description + "This module contains a collection of YANG definitions for + managing Proxy ARP in VPP. + + Copyright (c) 2017 Cisco and/or its affiliates. + + Licensed 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."; + + revision "2018-07-02" { + description + "Uses references to vrf-management module insted of table identifiers."; + reference + "https://jira.fd.io/browse/HC2VPP-317"; + } + + revision "2017-03-15" { + description "Initial revision of proxy ARP model for VPP"; + } + + container proxy-ranges { + list proxy-range { + key "vrf-id low-addr high-addr"; + leaf vrf-id { + type fib-management:fib-table-list-ref; + } + leaf low-addr { + type inet:ipv4-address; + } + leaf high-addr { + type inet:ipv4-address; + } + description + "Parameters for configuring Proxy ARP on interfaces."; + } + } + + augment /if:interfaces/if:interface { + ext:augment-identifier "proxy-arp-interface-augmentation"; + + container proxy-arp { + presence "Enables proxy ARP on given interface"; + } + } + + // TODO(HC2VPP-86): add interfaces-state augmentation once VPP supports ARP proxy read (VPP-225) +} \ No newline at end of file diff --git a/l3/impl/proxy_arp_postman_collection.json b/l3/impl/proxy_arp_postman_collection.json index 4b1479954..be64b11ce 100644 --- a/l3/impl/proxy_arp_postman_collection.json +++ b/l3/impl/proxy_arp_postman_collection.json @@ -1,7 +1,7 @@ { "info": { - "_postman_id": "1a5e64fa-9e35-4696-b268-8b96a294d7e4", - "name": "Hc2vpp: proxy Arp", + "_postman_id": "e4d8a86d-b9ff-4d85-b620-c59b513b8b04", + "name": "Hc2vpp: Proxy Arp", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "item": [ @@ -40,7 +40,46 @@ "1.1.1.10" ] }, - "description": "Equivalent of\n\nvppctl set ip arp proxy 1.1.1.1 - 1.1.1.10\n\nCan be verified with\n\nvppctl show ip arp" + "description": "Equivalent of\n\nvppctl set ip arp proxy 1.1.1.1 - 1.1.1.10 fib-id 1\n\nCan be verified with\n\nvppctl show ip arp" + }, + "response": [] + }, + { + "name": "Create IPv4 Table (id=1)", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Authorization", + "value": "Basic YWRtaW46YWRtaW4=" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"vpp-fib-table-management:table\": [\n {\n \"table-id\": 1,\n \"address-family\": \"vpp-fib-table-management:ipv4\"\n }\n ]\n}" + }, + "url": { + "raw": "http://localhost:8183/restconf/config/vpp-fib-table-management:fib-table-management/vpp-fib-table-management:fib-tables/table/1/vpp-fib-table-management:ipv4", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8183", + "path": [ + "restconf", + "config", + "vpp-fib-table-management:fib-table-management", + "vpp-fib-table-management:fib-tables", + "table", + "1", + "vpp-fib-table-management:ipv4" + ] + }, + "description": "Equivalent of\n\nvppctl ip table add 1\n\nCan be verified with\n\nvppctl show ip fib" }, "response": [] }, @@ -60,10 +99,10 @@ ], "body": { "mode": "raw", - "raw": "{\r\n \"proxy-range\":{\r\n \t\"vrf-id\":\"0\",\r\n \t\"low-addr\":\"2.2.2.2\",\r\n \t\"high-addr\":\"2.2.2.42\"\r\n }\r\n}" + "raw": "{\r\n \"proxy-range\":{\r\n \t\"vrf-id\":\"1\",\r\n \t\"low-addr\":\"2.2.2.2\",\r\n \t\"high-addr\":\"2.2.2.42\"\r\n }\r\n}" }, "url": { - "raw": "http://localhost:8183/restconf/config/proxy-arp:proxy-ranges/proxy-range/0/2.2.2.2/2.2.2.42", + "raw": "http://localhost:8183/restconf/config/proxy-arp:proxy-ranges/proxy-range/1/2.2.2.2/2.2.2.42", "protocol": "http", "host": [ "localhost" @@ -74,7 +113,7 @@ "config", "proxy-arp:proxy-ranges", "proxy-range", - "0", + "1", "2.2.2.2", "2.2.2.42" ] diff --git a/l3/impl/src/main/java/io/fd/hc2vpp/l3/write/factory/ProxyArpWriterFactory.java b/l3/impl/src/main/java/io/fd/hc2vpp/l3/write/factory/ProxyArpWriterFactory.java index 14999f873..dd1b5147b 100644 --- a/l3/impl/src/main/java/io/fd/hc2vpp/l3/write/factory/ProxyArpWriterFactory.java +++ b/l3/impl/src/main/java/io/fd/hc2vpp/l3/write/factory/ProxyArpWriterFactory.java @@ -29,10 +29,10 @@ import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; import io.fd.vpp.jvpp.core.future.FutureJVppCore; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.ProxyArpInterfaceAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.ProxyRanges; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.interfaces._interface.ProxyArp; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.proxy.ranges.ProxyRange; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev180702.ProxyArpInterfaceAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev180702.ProxyRanges; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev180702.interfaces._interface.ProxyArp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev180702.proxy.ranges.ProxyRange; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; public final class ProxyArpWriterFactory implements WriterFactory { diff --git a/l3/impl/src/main/java/io/fd/hc2vpp/l3/write/ipv4/ProxyArpCustomizer.java b/l3/impl/src/main/java/io/fd/hc2vpp/l3/write/ipv4/ProxyArpCustomizer.java index 7c506e995..cb1e244ae 100644 --- a/l3/impl/src/main/java/io/fd/hc2vpp/l3/write/ipv4/ProxyArpCustomizer.java +++ b/l3/impl/src/main/java/io/fd/hc2vpp/l3/write/ipv4/ProxyArpCustomizer.java @@ -26,7 +26,7 @@ import io.fd.vpp.jvpp.core.dto.ProxyArpIntfcEnableDisable; import io.fd.vpp.jvpp.core.future.FutureJVppCore; import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.interfaces._interface.ProxyArp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev180702.interfaces._interface.ProxyArp; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/l3/impl/src/main/java/io/fd/hc2vpp/l3/write/ipv4/ProxyRangeCustomizer.java b/l3/impl/src/main/java/io/fd/hc2vpp/l3/write/ipv4/ProxyRangeCustomizer.java index 942dc20eb..c26f2abd2 100644 --- a/l3/impl/src/main/java/io/fd/hc2vpp/l3/write/ipv4/ProxyRangeCustomizer.java +++ b/l3/impl/src/main/java/io/fd/hc2vpp/l3/write/ipv4/ProxyRangeCustomizer.java @@ -29,8 +29,8 @@ import io.fd.vpp.jvpp.core.types.ProxyArp; import java.net.InetAddress; import java.util.concurrent.Future; import javax.annotation.Nonnull; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.proxy.ranges.ProxyRange; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.proxy.ranges.ProxyRangeKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev180702.proxy.ranges.ProxyRange; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev180702.proxy.ranges.ProxyRangeKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,7 +64,7 @@ public class ProxyRangeCustomizer extends FutureJVppCustomizer throws WriteFailedException { final InetAddress srcAddress = InetAddresses.forString(proxyArp.getLowAddr().getValue()); final InetAddress dstAddress = InetAddresses.forString(proxyArp.getHighAddr().getValue()); - final int vrfId = proxyArp.getVrfId().intValue(); + final int vrfId = proxyArp.getVrfId().getValue().intValue(); return getFutureJVpp().proxyArpAddDel( getProxyArpConfRequest(operation, srcAddress.getAddress(), dstAddress.getAddress(), vrfId)) .toCompletableFuture(); diff --git a/l3/impl/src/test/java/io/fd/hc2vpp/l3/write/ProxyArpCustomizerTest.java b/l3/impl/src/test/java/io/fd/hc2vpp/l3/write/ProxyArpCustomizerTest.java index 366d181fe..1ad360f9f 100644 --- a/l3/impl/src/test/java/io/fd/hc2vpp/l3/write/ProxyArpCustomizerTest.java +++ b/l3/impl/src/test/java/io/fd/hc2vpp/l3/write/ProxyArpCustomizerTest.java @@ -32,8 +32,8 @@ import org.junit.Test; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.ProxyArpInterfaceAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.interfaces._interface.ProxyArp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev180702.ProxyArpInterfaceAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev180702.interfaces._interface.ProxyArp; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; public class ProxyArpCustomizerTest extends WriterCustomizerTest implements ByteDataTranslator { diff --git a/l3/impl/src/test/java/io/fd/hc2vpp/l3/write/ProxyRangeCustomizerTest.java b/l3/impl/src/test/java/io/fd/hc2vpp/l3/write/ProxyRangeCustomizerTest.java index 307e9382f..9e8fd6dc8 100644 --- a/l3/impl/src/test/java/io/fd/hc2vpp/l3/write/ProxyRangeCustomizerTest.java +++ b/l3/impl/src/test/java/io/fd/hc2vpp/l3/write/ProxyRangeCustomizerTest.java @@ -30,10 +30,11 @@ import io.fd.vpp.jvpp.core.types.ProxyArp; import org.junit.Test; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.ProxyRanges; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.proxy.ranges.ProxyRange; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.proxy.ranges.ProxyRangeBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.proxy.ranges.ProxyRangeKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.fib.table.management.rev180521.VniReference; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev180702.ProxyRanges; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev180702.proxy.ranges.ProxyRange; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev180702.proxy.ranges.ProxyRangeBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev180702.proxy.ranges.ProxyRangeKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; @@ -47,7 +48,7 @@ public class ProxyRangeCustomizerTest extends WriterCustomizerTest implements By public void setUpTest() throws Exception { final Ipv4Address highAddr = new Ipv4AddressNoZone("10.1.1.2"); final Ipv4Address lowAddr = new Ipv4AddressNoZone("10.1.1.1"); - final long vrfId = 123; + final VniReference vrfId = new VniReference(123L); IID = InstanceIdentifier.create(ProxyRanges.class) .child(ProxyRange.class, new ProxyRangeKey(highAddr, lowAddr, vrfId)); RANGE = new ProxyRangeBuilder().setVrfId(vrfId).setHighAddr(highAddr).setLowAddr(new Ipv4AddressNoZone(lowAddr)) -- cgit 1.2.3-korg