HONEYCOMB-71: Add VxLAN-GPE feature 18/1318/3
authorHongjun Ni <hongjun.ni@intel.com>
Tue, 31 May 2016 17:23:46 +0000 (01:23 +0800)
committerHongjun Ni <hongjun.ni@intel.com>
Wed, 1 Jun 2016 16:56:11 +0000 (00:56 +0800)
Patchset 3: Add Vxlan-gpe requests in postman_rest_collection.json

Patchset 2: Fix the indent issue.

Change-Id: If42b667f60a3591efc4b79353d78935277f8fb4d
Signed-off-by: Hongjun Ni <hongjun.ni@intel.com>
v3po/api/src/main/yang/v3po.yang
v3po/postman_rest_collection.json
v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/initializers/InterfacesInitializer.java
v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/interfaces/VxlanGpeCustomizer.java [new file with mode: 0644]
v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/interfacesstate/VxlanGpeCustomizer.java [new file with mode: 0644]
v3po/v3po2vpp/src/main/java/org/opendaylight/yang/gen/v1/urn/honeycomb/params/xml/ns/yang/v3po2vpp/rev160406/InterfacesHoneycombWriterModule.java
v3po/v3po2vpp/src/main/java/org/opendaylight/yang/gen/v1/urn/honeycomb/params/xml/ns/yang/v3po2vpp/rev160406/InterfacesStateHoneycombReaderModule.java

index 2ebb24f..c1210a9 100644 (file)
@@ -100,6 +100,26 @@ module v3po {
     }
   }
 
+  identity vxlan-gpe-tunnel {
+    base if:interface-type;
+  }
+
+  typedef vxlan-gpe-vni {
+    description "VNI used in a VXLAN-GPE tunnel";
+    type uint32 {
+      range "0..16777215";
+    }
+  }
+
+  typedef vxlan-gpe-next-protocol {
+    type enumeration {
+      enum ipv4;
+      enum ipv6;
+      enum ethernet;
+      enum nsh;
+    }
+  }
+
   grouping bridge-domain-attributes {
     leaf flood {
       type boolean;
@@ -261,6 +281,30 @@ module v3po {
     }
   }
 
+  grouping vxlan-gpe-base-attributes {
+    leaf local {
+      /*mandatory true;*/
+      type inet:ip-address;
+    }
+    leaf remote {
+      /*mandatory true;*/
+      type inet:ip-address;
+    }
+    leaf vni {
+      /*mandatory true;*/
+      type vxlan-gpe-vni;
+    }
+    leaf next-protocol {
+      type vxlan-gpe-next-protocol;
+    }
+    leaf encap-vrf-id {
+      type uint32;
+    }
+    leaf decap-vrf-id {
+      type uint32;
+    }
+  }
+
   grouping vlan-tag-rewrite-attributes {
     leaf rewrite-operation {
       type tag-rewrite-operation;
@@ -376,6 +420,12 @@ module v3po {
 
       uses l2-attributes;
     }
+
+    container vxlan-gpe {
+      when "../if:type = 'v3po:vxlan-gpe-tunnel'";
+
+      uses vxlan-gpe-base-attributes;
+    }
   }
 
   container vpp {
@@ -451,6 +501,11 @@ module v3po {
       when "../if:type = 'v3po:vxlan-tunnel'";
       uses vxlan-base-attributes;
     }
+    container vxlan-gpe {
+      when "../if:type = 'v3po:vxlan-gpe-tunnel'";
+
+      uses vxlan-gpe-base-attributes;
+    }
 
     container l2 {
       must "(not (../if:ipv4[if:enabled = 'true']/if:address/if:ip) and " +
index 39661ed..6ad3a02 100644 (file)
 {
-       "id": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+       "id": "61475d83-1808-fa49-7ca6-32f701e38b19",
        "name": "Honeycomb RESTCONF calls",
        "description": "Common mgmt operations on VPP using Honeycomb REST interface",
        "order": [
-               "3db63169-6861-2620-c219-4c342a2bbcc7",
-               "c8d329d3-1fc3-af2b-48f5-0cf385d809f7",
-               "9d4e619c-6a09-5b83-5f9a-a753d83ab34a",
-               "f3822b78-f031-d4db-5f9a-1a15e1b69e82",
-               "6ffdf6e3-5ec5-ecf0-3da0-74c3969124f1",
-               "e3f9de11-4c5b-bc82-ca10-e7aed4832831",
-               "d40b0462-07ff-6a9b-4784-759d04d4bae3",
-               "b33405c7-38c2-c3d8-72b5-02098d95e5f5",
-               "d29faea5-ca20-7de0-b67b-f20bac4340a2",
-               "98f82cf8-fd6d-67bd-3894-e435663b34c4"
+               "1ff26126-1cfe-898f-f068-cbeecd0c3366",
+               "c2b623b7-7110-3f81-1f73-482eca7bb41e",
+               "eeeb8b70-d222-6d9a-6521-1e16bf8db401",
+               "f19bf50c-b847-a7a0-cabe-31b2cf23b745",
+               "fce0239b-0d55-5578-e216-51a7a0f57cc4",
+               "0405ec33-82d8-4183-fcd7-6201d8eeb48f",
+               "7b848cbb-b41b-8855-8d8a-8438a415e5ad",
+               "bc3ade2a-51de-cb6d-f2c1-ee0598a8cb8a",
+               "be7a6dc3-144e-be00-76e5-34395f8eb76f",
+               "84f9c4e9-f5d9-7e73-a95d-b657c7c9b24f"
        ],
        "folders": [
                {
-                       "id": "a23b89ae-1545-01a6-519a-5705b001691f",
+                       "id": "4ff8ebe4-bd44-681a-7093-9422424099b1",
                        "name": "TAP",
                        "description": "",
                        "order": [
-                               "b5f2de6a-458a-353f-ff06-b54a11dab564",
-                               "e0c0b5c9-dabd-3440-c402-037e99a9a292",
-                               "79bb5b9c-a369-1af2-3402-0a39f2e0f983",
-                               "56b1e071-4a09-3994-451f-5b9c8aab5400"
+                               "7d71e781-31a9-3274-659d-474bdf74ed70",
+                               "56f60295-995b-1ea3-9934-b81fe23545f7",
+                               "77360902-d830-f4df-684a-c6c2f28111ec",
+                               "d46e1911-cf84-3805-a085-2219a49a7557"
                        ],
-                       "owner": "45557"
+                       "owner": "652751"
                },
                {
-                       "id": "d188f806-127a-9383-5d63-49d7b79c6986",
+                       "id": "0bca9dad-0798-f750-91ba-cc6ff8f277d5",
                        "name": "VHOST",
                        "description": "",
                        "order": [
-                               "a22ce9b1-777b-cbcf-4e42-55b850d7e5a1",
-                               "4be9909c-f2e1-a5f3-36e5-f98d34be86d3",
-                               "ca3fd773-8d38-7017-cee8-4688bc08f8ba"
+                               "95a948ed-5345-939b-280c-74f97920343e",
+                               "d14a1086-43f2-f595-5c20-cba8b8f6a992",
+                               "2e8634e0-4272-9b06-e237-7748437be978"
                        ],
-                       "owner": "45557"
+                       "owner": "652751"
                },
                {
-                       "id": "c9d44561-8ad1-b987-31b5-5545a259ca14",
+                       "id": "ba52e764-f1ec-b1cc-747f-54681ed93859",
                        "name": "VLAN",
                        "description": "",
                        "order": [
-                               "c546e0f5-e18f-f6b5-9dfc-de6bc0da785f",
-                               "5d423f40-847d-dc07-0c5b-6036fe190c85",
-                               "adc51817-69b3-5d40-6060-696b5ebda2a8",
-                               "ac9d34bc-b4fe-8cf3-a30c-3507e86d8b96",
-                               "3102a92d-4091-217e-31c9-868c905b6ec0"
+                               "a4d647b9-b951-c775-2cf4-d193cd5f2c04",
+                               "c543d2d7-6e40-e8a3-ee37-330a9335b002",
+                               "2e550aeb-f33b-b947-f2e1-807062bd0271",
+                               "65f944f8-e9a8-c418-7eaf-b5efa8923efe",
+                               "4d88cf6f-8cfd-f101-9b98-0bec8f1531a1"
                        ],
-                       "owner": "45557",
+                       "owner": "652751",
                        "collectionId": "e9ba4e80-fb4d-1eae-07e7-97b323164130"
                },
                {
-                       "id": "fc251f0e-7d4a-83f5-7af2-95d21873e7cb",
+                       "id": "e89467a0-a016-7da6-0adf-2fbc1f45687e",
+                       "name": "VXLAN-GPE-TUNNEL",
+                       "description": "",
+                       "order": [
+                               "a7a7c0f3-4dea-09f5-8c28-be3d7e084331",
+                               "6cc428c7-72c2-35c5-5232-3d378d906557"
+                       ],
+                       "owner": "652751"
+               },
+               {
+                       "id": "f8061658-c931-5f3c-c119-857c8b1508b1",
                        "name": "VXLAN-TUNNEL",
                        "description": "",
                        "order": [
-                               "2081bf9a-d623-f209-8984-6e11c0a57e85",
-                               "02debd5e-6603-edf3-9c95-f6bde5070ba8"
+                               "2b2b62dc-5530-971e-c6d5-03afd3fcbf0a",
+                               "f0faabc8-eab8-bb4d-1042-b45716ecb155"
                        ],
-                       "owner": "45557"
+                       "owner": "652751"
                }
        ],
        "timestamp": 1460119141419,
-       "owner": "45557",
-       "remoteLink": "https://www.getpostman.com/collections/2395f06a7925d901710a",
+       "owner": "652751",
+       "remoteLink": "",
        "public": false,
        "requests": [
                {
-                       "id": "02debd5e-6603-edf3-9c95-f6bde5070ba8",
+                       "id": "0405ec33-82d8-4183-fcd7-6201d8eeb48f",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/vxlanTun1",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/local0",
                        "preRequestScript": "",
                        "pathVariables": {},
-                       "method": "DELETE",
+                       "method": "PUT",
                        "data": [],
                        "dataMode": "raw",
                        "version": 2,
                        "tests": "",
                        "currentHelper": "normal",
-                       "helperAttributes": "{}",
-                       "time": 1462892071867,
-                       "name": "Delete virtual ifc - cfg",
+                       "helperAttributes": {},
+                       "time": 1460540047356,
+                       "name": "Enable local0 interface - cfg",
                        "description": "",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "folder": "fc251f0e-7d4a-83f5-7af2-95d21873e7cb",
-                       "timestamp": null,
-                       "rawModeData": ""
+                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"local0\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"iana-if-type:ethernetCsmacd\",\r\n                \"enabled\": \"true\",\r\n                \"v3po:ethernet\": {\r\n                  \"mtu\": 64\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
+               },
+               {
+                       "id": "1ff26126-1cfe-898f-f068-cbeecd0c3366",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/",
+                       "preRequestScript": "",
+                       "pathVariables": {},
+                       "method": "GET",
+                       "data": [],
+                       "dataMode": "raw",
+                       "version": 2,
+                       "tests": "",
+                       "currentHelper": "normal",
+                       "helperAttributes": {},
+                       "time": 1460539962712,
+                       "name": "List ifcs - cfg",
+                       "description": "List ifcs - cfg",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
+                       "responses": [],
+                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"testInterface\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"iana-if-type:ethernetCsmacd\",\r\n                \"enabled\": \"true\",\r\n                \"link-up-down-trap-enable\": \"enabled\",\r\n                \"ietf-ip:ipv4\": {\r\n                    \"enabled\": \"true\",\r\n                    \"mtu\": \"1500\",\r\n                    \"address\": [\r\n                        {\r\n                            \"ip\": \"1.2.3.0\",\r\n                            \"netmask\": \"255.255.255.0\"\r\n                        }\r\n                    ]\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
                },
                {
-                       "id": "2081bf9a-d623-f209-8984-6e11c0a57e85",
+                       "id": "2b2b62dc-5530-971e-c6d5-03afd3fcbf0a",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
                        "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/vxlanTun1",
                        "preRequestScript": "",
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1462891972310,
+                       "time": 1464767860505,
                        "name": "Add virtual ifc - cfg",
                        "description": "",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"vxlanTun1\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"v3po:vxlan-tunnel\",\r\n                \"enabled\": \"true\",\r\n                \"link-up-down-trap-enable\": \"enabled\",\r\n                \"routing\" : {\r\n                    \"vrf-id\" : \"0\"\r\n                },\r\n                \"vxlan\" : {\r\n                    \"src\" : \"192.168.1.6\",\r\n                    \"dst\" : \"192.168.1.9\",\r\n                    \"vni\" : \"88\",\r\n                    \"encap-vrf-id\" : \"0\"\r\n                }\r\n            }\r\n        ]\r\n    \r\n}",
-                       "folder": "fc251f0e-7d4a-83f5-7af2-95d21873e7cb"
+                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"vxlanTun1\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"v3po:vxlan-tunnel\",\r\n                \"enabled\": \"true\",\r\n                \"link-up-down-trap-enable\": \"enabled\",\r\n                \"routing\" : {\r\n                    \"vrf-id\" : \"0\"\r\n                },\r\n                \"vxlan\" : {\r\n                    \"src\" : \"192.168.1.6\",\r\n                    \"dst\" : \"192.168.1.9\",\r\n                    \"vni\" : \"88\",\r\n                    \"encap-vrf-id\" : \"0\"\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
                },
                {
-                       "id": "3102a92d-4091-217e-31c9-868c905b6ec0",
+                       "id": "2e550aeb-f33b-b947-f2e1-807062bd0271",
                        "headers": "Content-Type: application/json\nAuthorization: Basic YWRtaW46YWRtaW4=\n",
-                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/GigabitEthernet0%2F9%2F0.10/v3po:l2/vlan-tag-rewrite",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/GigabitEthernet0%2F9%2F0.10",
                        "preRequestScript": "",
                        "pathVariables": {},
-                       "method": "DELETE",
+                       "method": "PUT",
                        "data": [],
                        "dataMode": "raw",
                        "version": 2,
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1463400417797,
-                       "name": "Disable tag rewrite - cfg",
-                       "description": "Corresponds to invoking:\n\nvppctl set interface l2 tag-rewrite GigabitEthernet0/9/0.10 disable\n\nTo verify invoke:\n\nvppctl show bridge-domain [bd_id] detail",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "time": 1463140928036,
+                       "name": "Add vlan to bridge domain eth - cfg",
+                       "description": "Adds l2 interconnection of bridge-based type to GigabitEthernet0/9/0.10 interface\n\nTo verify invoke:\n\nvppctl show bridge-domain [bd_id] detail",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "rawModeData": "",
-                       "folder": "c9d44561-8ad1-b987-31b5-5545a259ca14"
+                       "folder": "ba52e764-f1ec-b1cc-747f-54681ed93859",
+                       "rawModeData": "{\n  \"interface\": [\n    {\n      \"name\": \"GigabitEthernet0/9/0.10\",\n      \"description\": \"sub interface for testing purposes\",\n      \"type\": \"v3po:sub-interface\",\n      \"enabled\": \"false\",\n      \"sub-interface\" : {\n        \"super-interface\": \"GigabitEthernet0/9/0\",\n        \"identifier\": \"10\",\n        \"exact-match\": {}\n      },\n      \"v3po:l2\": {\n        \"bridge-domain\": \"testBD\",\n        \"split-horizon-group\": \"0\",\n        \"bridged-virtual-interface\": \"false\"\n      }\n    }\n  ]\n}"
                },
                {
-                       "id": "3db63169-6861-2620-c219-4c342a2bbcc7",
+                       "id": "2e8634e0-4272-9b06-e237-7748437be978",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/vhost1",
                        "preRequestScript": "",
                        "pathVariables": {},
-                       "method": "GET",
+                       "method": "DELETE",
                        "data": [],
                        "dataMode": "raw",
                        "version": 2,
                        "tests": "",
                        "currentHelper": "normal",
-                       "helperAttributes": {},
-                       "time": 1460539962712,
-                       "name": "List ifcs - cfg",
-                       "description": "List ifcs - cfg",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "helperAttributes": "{}",
+                       "time": 1462891488523,
+                       "name": "Delete vhost user ifc - cfg",
+                       "description": "Deletes vhost user interface.\nCorresponding vpp CLI command:\n\nvppctl delete vhost-user sw_if_index [index]\n\nTo verify invoke:\n\nvppctl show vhost-user\n\nor\n\nvppctl show int",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"testInterface\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"iana-if-type:ethernetCsmacd\",\r\n                \"enabled\": \"true\",\r\n                \"link-up-down-trap-enable\": \"enabled\",\r\n                \"ietf-ip:ipv4\": {\r\n                    \"enabled\": \"true\",\r\n                    \"mtu\": \"1500\",\r\n                    \"address\": [\r\n                        {\r\n                            \"ip\": \"1.2.3.0\",\r\n                            \"netmask\": \"255.255.255.0\"\r\n                        }\r\n                    ]\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
+                       "folder": "0bca9dad-0798-f750-91ba-cc6ff8f277d5",
+                       "rawModeData": "",
+                       "descriptionFormat": null
                },
                {
-                       "id": "4be9909c-f2e1-a5f3-36e5-f98d34be86d3",
-                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/vhost1",
+                       "id": "4d88cf6f-8cfd-f101-9b98-0bec8f1531a1",
+                       "headers": "Content-Type: application/json\nAuthorization: Basic YWRtaW46YWRtaW4=\n",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/GigabitEthernet0%2F9%2F0.10/v3po:l2/vlan-tag-rewrite",
                        "preRequestScript": "",
                        "pathVariables": {},
-                       "method": "PUT",
+                       "method": "DELETE",
                        "data": [],
                        "dataMode": "raw",
                        "version": 2,
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1462891483790,
-                       "name": "Modify vhost user ifc - cfg",
-                       "description": "Modifies vhost-user interface socket.\nTo verify invoke:\n\nvppctl show vhost-user",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "time": 1463400417797,
+                       "name": "Disable tag rewrite - cfg",
+                       "description": "Corresponds to invoking:\n\nvppctl set interface l2 tag-rewrite GigabitEthernet0/9/0.10 disable\n\nTo verify invoke:\n\nvppctl show bridge-domain [bd_id] detail",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"vhost1\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"v3po:vhost-user\",\r\n                \"enabled\": \"true\",\r\n                \"vhost-user\" : {\r\n                    \"socket\": \"/tmp/soc2\",\r\n                    \"role\": \"server\"\r\n                }\r\n            }\r\n        ]\r\n    \r\n}",
-                       "folder": "d188f806-127a-9383-5d63-49d7b79c6986"
+                       "rawModeData": "",
+                       "folder": "ba52e764-f1ec-b1cc-747f-54681ed93859"
                },
                {
-                       "id": "56b1e071-4a09-3994-451f-5b9c8aab5400",
+                       "id": "56f60295-995b-1ea3-9934-b81fe23545f7",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
                        "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/tapp2",
                        "preRequestScript": "",
                        "pathVariables": {},
-                       "method": "DELETE",
+                       "method": "PUT",
                        "data": [],
                        "dataMode": "raw",
                        "version": 2,
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1462796994090,
-                       "name": "Delete complex tap ifc - cfg",
+                       "time": 1462796722186,
+                       "name": "Add complex tap ifc - cfg",
                        "description": "",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "rawModeData": "",
-                       "folder": "a23b89ae-1545-01a6-519a-5705b001691f"
+                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"tapp2\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"v3po:tap\",\r\n                \"tap\" :{\r\n                    \"tap-name\" : \"tapp2\",\r\n                    \"mac\" : \"00:ff:ff:ff:ff:ff\",\r\n                    \"device-instance\" : 55\r\n                }\r\n            }\r\n        ]\r\n    \r\n}",
+                       "folder": "4ff8ebe4-bd44-681a-7093-9422424099b1"
                },
                {
-                       "id": "5d423f40-847d-dc07-0c5b-6036fe190c85",
-                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
+                       "id": "65f944f8-e9a8-c418-7eaf-b5efa8923efe",
+                       "headers": "Content-Type: application/json\nAuthorization: Basic YWRtaW46YWRtaW4=\n",
                        "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/GigabitEthernet0%2F9%2F0.10",
-                       "pathVariables": {},
                        "preRequestScript": "",
-                       "method": "GET",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "pathVariables": {},
+                       "method": "PUT",
                        "data": [],
                        "dataMode": "raw",
-                       "name": "Get sub interface - cfg",
-                       "description": "",
-                       "descriptionFormat": "html",
-                       "time": 1463139741935,
                        "version": 2,
-                       "responses": [],
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "folder": "c9d44561-8ad1-b987-31b5-5545a259ca14",
-                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"GigabitEthernet0/9/0.10\",\r\n                \"description\": \"sub interface for testing purposes\",\r\n                \"type\": \"v3po:sub-interface\",\r\n                \"enabled\": \"false\",\r\n                \"sub-interface\" : {\r\n                    \"super-interface\": \"GigabitEthernet0/9/0\",\r\n                    \"identifier\": \"10\",\r\n                    \"exact-match\": {}\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
+                       "time": 1463140942520,
+                       "name": "Set tag rewrite pop 1 - cfg",
+                       "description": "Corresponds to invoking:\n\nvppctl set interface l2 tag-rewrite GigabitEthernet0/9/0.10 pop 1\n\nTo verify invoke:\n\nvppctl show bridge-domain [bd_id] detail",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
+                       "responses": [],
+                       "folder": "ba52e764-f1ec-b1cc-747f-54681ed93859",
+                       "rawModeData": "{\n  \"interface\": [\n    {\n      \"name\": \"GigabitEthernet0/9/0.10\",\n      \"description\": \"sub interface for testing purposes\",\n      \"type\": \"v3po:sub-interface\",\n      \"enabled\": \"false\",\n      \"sub-interface\" : {\n        \"super-interface\": \"GigabitEthernet0/9/0\",\n        \"identifier\": \"10\",\n        \"exact-match\": {}\n      },\n      \"v3po:l2\": {\n        \"bridge-domain\": \"testBD\",\n        \"split-horizon-group\": \"0\",\n        \"bridged-virtual-interface\": \"false\",\n        \"vlan-tag-rewrite\" : {\n          \"rewrite-operation\": \"pop-1\"\n        }\n      }\n    }\n  ]\n}"
                },
                {
-                       "id": "6ffdf6e3-5ec5-ecf0-3da0-74c3969124f1",
+                       "id": "6cc428c7-72c2-35c5-5232-3d378d906557",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "url": "http://localhost:8181/restconf/operational/naming-context:contexts",
-                       "pathVariables": {},
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/vxlanGpeTun3",
                        "preRequestScript": "",
-                       "method": "GET",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "pathVariables": {},
+                       "method": "DELETE",
                        "data": [],
                        "dataMode": "raw",
-                       "name": "List naming contexts - context",
-                       "description": "List mapping context stored in context datastore",
-                       "descriptionFormat": "html",
-                       "time": 1463556756647,
                        "version": 2,
-                       "responses": [],
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"testInterface\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"iana-if-type:ethernetCsmacd\",\r\n                \"enabled\": \"true\",\r\n                \"link-up-down-trap-enable\": \"enabled\",\r\n                \"ietf-ip:ipv4\": {\r\n                    \"enabled\": \"true\",\r\n                    \"mtu\": \"1500\",\r\n                    \"address\": [\r\n                        {\r\n                            \"ip\": \"1.2.3.0\",\r\n                            \"netmask\": \"255.255.255.0\"\r\n                        }\r\n                    ]\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
+                       "time": 1464764638498,
+                       "name": "Delete vxlan-gpe - cfg",
+                       "description": "",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
+                       "responses": [],
+                       "rawModeData": ""
                },
                {
-                       "id": "79bb5b9c-a369-1af2-3402-0a39f2e0f983",
+                       "id": "77360902-d830-f4df-684a-c6c2f28111ec",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
                        "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/tapp2",
                        "preRequestScript": "",
                        "time": 1462796801468,
                        "name": "Modify complex tap ifc - cfg",
                        "description": "",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
                        "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"tapp2\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"v3po:tap\",\r\n                \"tap\" :{\r\n                    \"tap-name\" : \"tapp2\",\r\n                    \"mac\" : \"00:ff:ff:ff:ff:ae\",\r\n                    \"device-instance\" : 77\r\n                }\r\n            }\r\n        ]\r\n    \r\n}",
-                       "folder": "a23b89ae-1545-01a6-519a-5705b001691f"
+                       "folder": "4ff8ebe4-bd44-681a-7093-9422424099b1"
                },
                {
-                       "id": "98f82cf8-fd6d-67bd-3894-e435663b34c4",
-                       "headers": "Content-Type: application/json\nAuthorization: Basic YWRtaW46YWRtaW4=\n",
-                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/local0",
+                       "id": "7b848cbb-b41b-8855-8d8a-8438a415e5ad",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces",
                        "preRequestScript": "",
                        "pathVariables": {},
                        "method": "PUT",
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1462534221488,
-                       "name": "Add local0 to bridge domain",
-                       "description": "Adds l2 interconnection of bridge-based type to local0 interface\n\nTo verify invoke:\n\nvppctl show bridge-domain [bd_id] detail",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "time": 1460636113690,
+                       "name": "Set interfaces bulk edit - cfg",
+                       "description": "",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "rawModeData": "{\n  \"interface\": [\n    {\n      \"name\": \"local0\",\n      \"description\": \"for testing purposes\",\n      \"type\": \"iana-if-type:ethernetCsmacd\",\n      \"v3po:routing\": {\n        \"vrf-id\": 7\n      },\n      \"v3po:ethernet\": {\n        \"mtu\": 64\n      },\n      \"enabled\": true,\n      \"v3po:l2\": {\n        \"bridge-domain\": \"testBD\",\n        \"split-horizon-group\": \"0\",\n        \"bridged-virtual-interface\": \"false\"\n      }\n    }\n  ]\n}"
+                       "rawModeData": "{\n  \"interfaces\": {\n    \"interface\": [\n      {\n        \"name\": \"pg/stream-2\",\n        \"enabled\": true,\n        \"type\": \"iana-if-type:ethernetCsmacd\"\n      },\n      {\n        \"name\": \"pg/stream-3\",\n        \"enabled\": true,\n        \"type\": \"iana-if-type:ethernetCsmacd\"\n      },\n      {\n        \"name\": \"pg/stream-0\",\n        \"enabled\": true,\n        \"type\": \"iana-if-type:ethernetCsmacd\"\n      },\n      {\n        \"name\": \"local0\",\n        \"description\": \"for testing purposes\",\n        \"type\": \"iana-if-type:ethernetCsmacd\",\n        \"enabled\": true\n      },\n      {\n        \"name\": \"pg/stream-1\",\n        \"enabled\": true,\n        \"type\": \"iana-if-type:ethernetCsmacd\"\n      }\n    ]\n  }\n}"
                },
                {
-                       "id": "9d4e619c-6a09-5b83-5f9a-a753d83ab34a",
+                       "id": "7d71e781-31a9-3274-659d-474bdf74ed70",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "url": "http://localhost:8181/restconf/operational/v3po:vpp-state",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/tapp",
                        "preRequestScript": "",
                        "pathVariables": {},
-                       "method": "GET",
+                       "method": "PUT",
                        "data": [],
                        "dataMode": "raw",
                        "version": 2,
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1460539994330,
-                       "name": "Read vpp-state - oper",
+                       "time": 1462535811974,
+                       "name": "Add simple tap ifc -cfg",
                        "description": "",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"testInterface\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"iana-if-type:ethernetCsmacd\",\r\n                \"enabled\": \"true\",\r\n                \"link-up-down-trap-enable\": \"enabled\",\r\n                \"ietf-ip:ipv4\": {\r\n                    \"enabled\": \"true\",\r\n                    \"mtu\": \"1500\",\r\n                    \"address\": [\r\n                        {\r\n                            \"ip\": \"1.2.3.0\",\r\n                            \"netmask\": \"255.255.255.0\"\r\n                        }\r\n                    ]\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
+                       "folder": "4ff8ebe4-bd44-681a-7093-9422424099b1",
+                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"tapp\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"v3po:tap\",\r\n                \"tap\" :{\r\n                    \"tap-name\" : \"tapp\"\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
                },
                {
-                       "id": "a22ce9b1-777b-cbcf-4e42-55b850d7e5a1",
-                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/vhost1",
+                       "id": "84f9c4e9-f5d9-7e73-a95d-b657c7c9b24f",
+                       "headers": "Content-Type: application/json\nAuthorization: Basic YWRtaW46YWRtaW4=\n",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/local0",
                        "preRequestScript": "",
                        "pathVariables": {},
                        "method": "PUT",
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1462891472552,
-                       "name": "Add vhost user ifc - cfg",
-                       "description": "Adds vhost-user interface.\nCorresponsing vpp cli command:\n\ncreate vhost-user socket /tmp/soc1 server\n\nTo verify invoke:\n\nvppctl show vhost-user\n\nor\n\nvppctl show int",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "time": 1462534221488,
+                       "name": "Add local0 to bridge domain",
+                       "description": "Adds l2 interconnection of bridge-based type to local0 interface\n\nTo verify invoke:\n\nvppctl show bridge-domain [bd_id] detail",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"vhost1\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"v3po:vhost-user\",\r\n                \"enabled\": \"true\",\r\n                \"vhost-user\" : {\r\n                    \"socket\": \"/tmp/soc1\",\r\n                    \"role\": \"server\"\r\n                }\r\n            }\r\n        ]\r\n    \r\n}",
-                       "folder": "d188f806-127a-9383-5d63-49d7b79c6986"
+                       "rawModeData": "{\n  \"interface\": [\n    {\n      \"name\": \"local0\",\n      \"description\": \"for testing purposes\",\n      \"type\": \"iana-if-type:ethernetCsmacd\",\n      \"v3po:routing\": {\n        \"vrf-id\": 7\n      },\n      \"v3po:ethernet\": {\n        \"mtu\": 64\n      },\n      \"enabled\": true,\n      \"v3po:l2\": {\n        \"bridge-domain\": \"testBD\",\n        \"split-horizon-group\": \"0\",\n        \"bridged-virtual-interface\": \"false\"\n      }\n    }\n  ]\n}"
                },
                {
-                       "id": "ac9d34bc-b4fe-8cf3-a30c-3507e86d8b96",
-                       "headers": "Content-Type: application/json\nAuthorization: Basic YWRtaW46YWRtaW4=\n",
-                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/GigabitEthernet0%2F9%2F0.10",
+                       "id": "95a948ed-5345-939b-280c-74f97920343e",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/vhost1",
                        "preRequestScript": "",
                        "pathVariables": {},
                        "method": "PUT",
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1463140942520,
-                       "name": "Set tag rewrite pop 1 - cfg",
-                       "description": "Corresponds to invoking:\n\nvppctl set interface l2 tag-rewrite GigabitEthernet0/9/0.10 pop 1\n\nTo verify invoke:\n\nvppctl show bridge-domain [bd_id] detail",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "time": 1462891472552,
+                       "name": "Add vhost user ifc - cfg",
+                       "description": "Adds vhost-user interface.\nCorresponsing vpp cli command:\n\ncreate vhost-user socket /tmp/soc1 server\n\nTo verify invoke:\n\nvppctl show vhost-user\n\nor\n\nvppctl show int",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "folder": "c9d44561-8ad1-b987-31b5-5545a259ca14",
-                       "rawModeData": "{\n  \"interface\": [\n    {\n      \"name\": \"GigabitEthernet0/9/0.10\",\n      \"description\": \"sub interface for testing purposes\",\n      \"type\": \"v3po:sub-interface\",\n      \"enabled\": \"false\",\n      \"sub-interface\" : {\n        \"super-interface\": \"GigabitEthernet0/9/0\",\n        \"identifier\": \"10\",\n        \"exact-match\": {}\n      },\n      \"v3po:l2\": {\n        \"bridge-domain\": \"testBD\",\n        \"split-horizon-group\": \"0\",\n        \"bridged-virtual-interface\": \"false\",\n        \"vlan-tag-rewrite\" : {\n          \"rewrite-operation\": \"pop-1\"\n        }\n      }\n    }\n  ]\n}"
+                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"vhost1\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"v3po:vhost-user\",\r\n                \"enabled\": \"true\",\r\n                \"vhost-user\" : {\r\n                    \"socket\": \"/tmp/soc1\",\r\n                    \"role\": \"server\"\r\n                }\r\n            }\r\n        ]\r\n    \r\n}",
+                       "folder": "0bca9dad-0798-f750-91ba-cc6ff8f277d5"
                },
                {
-                       "id": "adc51817-69b3-5d40-6060-696b5ebda2a8",
-                       "headers": "Content-Type: application/json\nAuthorization: Basic YWRtaW46YWRtaW4=\n",
+                       "id": "a4d647b9-b951-c775-2cf4-d193cd5f2c04",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
                        "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/GigabitEthernet0%2F9%2F0.10",
                        "preRequestScript": "",
                        "pathVariables": {},
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1463140928036,
-                       "name": "Add vlan to bridge domain eth - cfg",
-                       "description": "Adds l2 interconnection of bridge-based type to GigabitEthernet0/9/0.10 interface\n\nTo verify invoke:\n\nvppctl show bridge-domain [bd_id] detail",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "time": 1463139460244,
+                       "name": "Add sub interface - cfg",
+                       "description": "Adds sub interface\nCorresponsing vpp cli command:\n\ncreate sub GigabitEthernet0/9/0 10\n\nTo verify invoke:\n\nvppctl show int",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "folder": "c9d44561-8ad1-b987-31b5-5545a259ca14",
-                       "rawModeData": "{\n  \"interface\": [\n    {\n      \"name\": \"GigabitEthernet0/9/0.10\",\n      \"description\": \"sub interface for testing purposes\",\n      \"type\": \"v3po:sub-interface\",\n      \"enabled\": \"false\",\n      \"sub-interface\" : {\n        \"super-interface\": \"GigabitEthernet0/9/0\",\n        \"identifier\": \"10\",\n        \"exact-match\": {}\n      },\n      \"v3po:l2\": {\n        \"bridge-domain\": \"testBD\",\n        \"split-horizon-group\": \"0\",\n        \"bridged-virtual-interface\": \"false\"\n      }\n    }\n  ]\n}"
+                       "folder": "ba52e764-f1ec-b1cc-747f-54681ed93859",
+                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"GigabitEthernet0/9/0.10\",\r\n                \"description\": \"sub interface for testing purposes\",\r\n                \"type\": \"v3po:sub-interface\",\r\n                \"enabled\": \"false\",\r\n                \"sub-interface\" : {\r\n                    \"super-interface\": \"GigabitEthernet0/9/0\",\r\n                    \"identifier\": \"10\",\r\n                    \"exact-match\": {}\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
                },
                {
-                       "id": "b33405c7-38c2-c3d8-72b5-02098d95e5f5",
+                       "id": "a7a7c0f3-4dea-09f5-8c28-be3d7e084331",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/local0",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/vxlanGpeTun3",
                        "preRequestScript": "",
                        "pathVariables": {},
                        "method": "PUT",
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1460640004531,
-                       "name": "Set vrf id for local0 - cfg",
+                       "time": 1464768006369,
+                       "name": "Add vxlan-gpe - cfg",
                        "description": "",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"local0\",\r\n                \"description\": \"for testing purposes only\",\r\n                \"type\": \"iana-if-type:ethernetCsmacd\",\r\n                \"enabled\": \"true\",\r\n                \"routing\" : {\r\n                    \"vrf-id\" : \"7\"\r\n                },\r\n                \"v3po:ethernet\": {\r\n                  \"mtu\": 64\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
+                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"vxlanGpeTun3\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"v3po:vxlan-gpe-tunnel\",\r\n                \"enabled\": \"true\",\r\n                \"link-up-down-trap-enable\": \"enabled\",\r\n                \"routing\" : {\r\n                    \"vrf-id\" : \"0\"\r\n                },\r\n                \"vxlan-gpe\" : {\r\n                    \"local\" : \"192.168.50.76\",\r\n                    \"remote\" : \"192.168.50.71\",\r\n                    \"vni\" : \"9\",\r\n                    \"next-protocol\" : \"ethernet\",\r\n                    \"encap-vrf-id\" : \"0\",\r\n                    \"decap-vrf-id\" : \"0\"\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
                },
                {
-                       "id": "b5f2de6a-458a-353f-ff06-b54a11dab564",
+                       "id": "bc3ade2a-51de-cb6d-f2c1-ee0598a8cb8a",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/tapp",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/local0",
                        "preRequestScript": "",
                        "pathVariables": {},
                        "method": "PUT",
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1462535811974,
-                       "name": "Add simple tap ifc -cfg",
+                       "time": 1460640004531,
+                       "name": "Set vrf id for local0 - cfg",
                        "description": "",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "folder": "a23b89ae-1545-01a6-519a-5705b001691f",
-                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"tapp\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"v3po:tap\",\r\n                \"tap\" :{\r\n                    \"tap-name\" : \"tapp\"\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
+                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"local0\",\r\n                \"description\": \"for testing purposes only\",\r\n                \"type\": \"iana-if-type:ethernetCsmacd\",\r\n                \"enabled\": \"true\",\r\n                \"routing\" : {\r\n                    \"vrf-id\" : \"7\"\r\n                },\r\n                \"v3po:ethernet\": {\r\n                  \"mtu\": 64\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
                },
                {
-                       "id": "c546e0f5-e18f-f6b5-9dfc-de6bc0da785f",
-                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/GigabitEthernet0%2F9%2F0.10",
+                       "id": "be7a6dc3-144e-be00-76e5-34395f8eb76f",
+                       "headers": "Content-Type: application/json\nAuthorization: Basic YWRtaW46YWRtaW4=\n",
+                       "url": "http://localhost:8181/restconf/config/v3po:vpp/bridge-domains/bridge-domain/testBD",
                        "preRequestScript": "",
                        "pathVariables": {},
                        "method": "PUT",
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1463139460244,
-                       "name": "Add sub interface - cfg",
-                       "description": "Adds sub interface\nCorresponsing vpp cli command:\n\ncreate sub GigabitEthernet0/9/0 10\n\nTo verify invoke:\n\nvppctl show int",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "time": 1460540096743,
+                       "name": "Add bridge domain - cfg",
+                       "description": "",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "folder": "c9d44561-8ad1-b987-31b5-5545a259ca14",
-                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"GigabitEthernet0/9/0.10\",\r\n                \"description\": \"sub interface for testing purposes\",\r\n                \"type\": \"v3po:sub-interface\",\r\n                \"enabled\": \"false\",\r\n                \"sub-interface\" : {\r\n                    \"super-interface\": \"GigabitEthernet0/9/0\",\r\n                    \"identifier\": \"10\",\r\n                    \"exact-match\": {}\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
+                       "rawModeData": "{\r\n    \"bridge-domain\": [\r\n        {\r\n            \"name\": \"testBD\",\r\n            \"flood\": \"true\",\r\n            \"forward\": \"false\",\r\n            \"learn\": \"false\",\r\n            \"unknown-unicast-flood\": \"false\",\r\n            \"arp-termination\": \"false\"\r\n        }\r\n    ]\r\n}"
                },
                {
-                       "id": "c8d329d3-1fc3-af2b-48f5-0cf385d809f7",
+                       "id": "c2b623b7-7110-3f81-1f73-482eca7bb41e",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
                        "url": "http://localhost:8181/restconf/operational/ietf-interfaces:interfaces-state/",
                        "preRequestScript": "",
                        "time": 1460539972177,
                        "name": "List ifcs - oper",
                        "description": "",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
                        "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"testInterface\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"iana-if-type:ethernetCsmacd\",\r\n                \"enabled\": \"true\",\r\n                \"link-up-down-trap-enable\": \"enabled\",\r\n                \"ietf-ip:ipv4\": {\r\n                    \"enabled\": \"true\",\r\n                    \"mtu\": \"1500\",\r\n                    \"address\": [\r\n                        {\r\n                            \"ip\": \"1.2.3.0\",\r\n                            \"netmask\": \"255.255.255.0\"\r\n                        }\r\n                    ]\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
                },
                {
-                       "id": "ca3fd773-8d38-7017-cee8-4688bc08f8ba",
+                       "id": "c543d2d7-6e40-e8a3-ee37-330a9335b002",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/vhost1",
-                       "preRequestScript": "",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/GigabitEthernet0%2F9%2F0.10",
                        "pathVariables": {},
-                       "method": "DELETE",
+                       "preRequestScript": "",
+                       "method": "GET",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "data": [],
                        "dataMode": "raw",
+                       "name": "Get sub interface - cfg",
+                       "description": "",
+                       "descriptionFormat": "html",
+                       "time": 1463139741935,
                        "version": 2,
+                       "responses": [],
                        "tests": "",
                        "currentHelper": "normal",
-                       "helperAttributes": "{}",
-                       "time": 1462891488523,
-                       "name": "Delete vhost user ifc - cfg",
-                       "description": "Deletes vhost user interface.\nCorresponding vpp CLI command:\n\nvppctl delete vhost-user sw_if_index [index]\n\nTo verify invoke:\n\nvppctl show vhost-user\n\nor\n\nvppctl show int",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
-                       "responses": [],
-                       "folder": "d188f806-127a-9383-5d63-49d7b79c6986",
-                       "rawModeData": "",
-                       "descriptionFormat": null
+                       "helperAttributes": {},
+                       "folder": "ba52e764-f1ec-b1cc-747f-54681ed93859",
+                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"GigabitEthernet0/9/0.10\",\r\n                \"description\": \"sub interface for testing purposes\",\r\n                \"type\": \"v3po:sub-interface\",\r\n                \"enabled\": \"false\",\r\n                \"sub-interface\" : {\r\n                    \"super-interface\": \"GigabitEthernet0/9/0\",\r\n                    \"identifier\": \"10\",\r\n                    \"exact-match\": {}\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
                },
                {
-                       "id": "d29faea5-ca20-7de0-b67b-f20bac4340a2",
-                       "headers": "Content-Type: application/json\nAuthorization: Basic YWRtaW46YWRtaW4=\n",
-                       "url": "http://localhost:8181/restconf/config/v3po:vpp/bridge-domains/bridge-domain/testBD",
+                       "id": "d14a1086-43f2-f595-5c20-cba8b8f6a992",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/vhost1",
                        "preRequestScript": "",
                        "pathVariables": {},
                        "method": "PUT",
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1460540096743,
-                       "name": "Add bridge domain - cfg",
-                       "description": "",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "time": 1462891483790,
+                       "name": "Modify vhost user ifc - cfg",
+                       "description": "Modifies vhost-user interface socket.\nTo verify invoke:\n\nvppctl show vhost-user",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "rawModeData": "{\r\n    \"bridge-domain\": [\r\n        {\r\n            \"name\": \"testBD\",\r\n            \"flood\": \"true\",\r\n            \"forward\": \"false\",\r\n            \"learn\": \"false\",\r\n            \"unknown-unicast-flood\": \"false\",\r\n            \"arp-termination\": \"false\"\r\n        }\r\n    ]\r\n}"
+                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"vhost1\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"v3po:vhost-user\",\r\n                \"enabled\": \"true\",\r\n                \"vhost-user\" : {\r\n                    \"socket\": \"/tmp/soc2\",\r\n                    \"role\": \"server\"\r\n                }\r\n            }\r\n        ]\r\n    \r\n}",
+                       "folder": "0bca9dad-0798-f750-91ba-cc6ff8f277d5"
                },
                {
-                       "id": "d40b0462-07ff-6a9b-4784-759d04d4bae3",
+                       "id": "d46e1911-cf84-3805-a085-2219a49a7557",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/tapp2",
                        "preRequestScript": "",
                        "pathVariables": {},
-                       "method": "PUT",
+                       "method": "DELETE",
                        "data": [],
                        "dataMode": "raw",
                        "version": 2,
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1460636113690,
-                       "name": "Set interfaces bulk edit - cfg",
+                       "time": 1462796994090,
+                       "name": "Delete complex tap ifc - cfg",
                        "description": "",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "rawModeData": "{\n  \"interfaces\": {\n    \"interface\": [\n      {\n        \"name\": \"pg/stream-2\",\n        \"enabled\": true,\n        \"type\": \"iana-if-type:ethernetCsmacd\"\n      },\n      {\n        \"name\": \"pg/stream-3\",\n        \"enabled\": true,\n        \"type\": \"iana-if-type:ethernetCsmacd\"\n      },\n      {\n        \"name\": \"pg/stream-0\",\n        \"enabled\": true,\n        \"type\": \"iana-if-type:ethernetCsmacd\"\n      },\n      {\n        \"name\": \"local0\",\n        \"description\": \"for testing purposes\",\n        \"type\": \"iana-if-type:ethernetCsmacd\",\n        \"enabled\": true\n      },\n      {\n        \"name\": \"pg/stream-1\",\n        \"enabled\": true,\n        \"type\": \"iana-if-type:ethernetCsmacd\"\n      }\n    ]\n  }\n}"
+                       "rawModeData": "",
+                       "folder": "4ff8ebe4-bd44-681a-7093-9422424099b1"
                },
                {
-                       "id": "e0c0b5c9-dabd-3440-c402-037e99a9a292",
+                       "id": "eeeb8b70-d222-6d9a-6521-1e16bf8db401",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/tapp2",
+                       "url": "http://localhost:8181/restconf/operational/v3po:vpp-state",
                        "preRequestScript": "",
                        "pathVariables": {},
-                       "method": "PUT",
+                       "method": "GET",
                        "data": [],
                        "dataMode": "raw",
                        "version": 2,
                        "tests": "",
                        "currentHelper": "normal",
                        "helperAttributes": {},
-                       "time": 1462796722186,
-                       "name": "Add complex tap ifc - cfg",
+                       "time": 1460539994330,
+                       "name": "Read vpp-state - oper",
                        "description": "",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"tapp2\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"v3po:tap\",\r\n                \"tap\" :{\r\n                    \"tap-name\" : \"tapp2\",\r\n                    \"mac\" : \"00:ff:ff:ff:ff:ff\",\r\n                    \"device-instance\" : 55\r\n                }\r\n            }\r\n        ]\r\n    \r\n}",
-                       "folder": "a23b89ae-1545-01a6-519a-5705b001691f"
+                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"testInterface\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"iana-if-type:ethernetCsmacd\",\r\n                \"enabled\": \"true\",\r\n                \"link-up-down-trap-enable\": \"enabled\",\r\n                \"ietf-ip:ipv4\": {\r\n                    \"enabled\": \"true\",\r\n                    \"mtu\": \"1500\",\r\n                    \"address\": [\r\n                        {\r\n                            \"ip\": \"1.2.3.0\",\r\n                            \"netmask\": \"255.255.255.0\"\r\n                        }\r\n                    ]\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
                },
                {
-                       "id": "e3f9de11-4c5b-bc82-ca10-e7aed4832831",
+                       "id": "f0faabc8-eab8-bb4d-1042-b45716ecb155",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/local0",
+                       "url": "http://localhost:8181/restconf/config/ietf-interfaces:interfaces/interface/vxlanTun1",
                        "preRequestScript": "",
                        "pathVariables": {},
-                       "method": "PUT",
+                       "method": "DELETE",
                        "data": [],
                        "dataMode": "raw",
                        "version": 2,
                        "tests": "",
                        "currentHelper": "normal",
-                       "helperAttributes": {},
-                       "time": 1460540047356,
-                       "name": "Enable local0 interface - cfg",
+                       "helperAttributes": "{}",
+                       "time": 1462892071867,
+                       "name": "Delete virtual ifc - cfg",
                        "description": "",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
-                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"local0\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"iana-if-type:ethernetCsmacd\",\r\n                \"enabled\": \"true\",\r\n                \"v3po:ethernet\": {\r\n                  \"mtu\": 64\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
+                       "folder": "f8061658-c931-5f3c-c119-857c8b1508b1",
+                       "timestamp": null,
+                       "rawModeData": ""
                },
                {
-                       "id": "f3822b78-f031-d4db-5f9a-1a15e1b69e82",
+                       "id": "f19bf50c-b847-a7a0-cabe-31b2cf23b745",
                        "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
                        "url": "http://localhost:8181/restconf/config/v3po:vpp",
                        "preRequestScript": "",
                        "time": 1460540006597,
                        "name": "Read vpp - cfg",
                        "description": "",
-                       "collectionId": "9a250d84-57ff-11a7-d034-97dc21a7c35c",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
                        "responses": [],
                        "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"testInterface\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"iana-if-type:ethernetCsmacd\",\r\n                \"enabled\": \"true\",\r\n                \"link-up-down-trap-enable\": \"enabled\",\r\n                \"ietf-ip:ipv4\": {\r\n                    \"enabled\": \"true\",\r\n                    \"mtu\": \"1500\",\r\n                    \"address\": [\r\n                        {\r\n                            \"ip\": \"1.2.3.0\",\r\n                            \"netmask\": \"255.255.255.0\"\r\n                        }\r\n                    ]\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
+               },
+               {
+                       "id": "fce0239b-0d55-5578-e216-51a7a0f57cc4",
+                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
+                       "url": "http://localhost:8181/restconf/operational/naming-context:contexts",
+                       "pathVariables": {},
+                       "preRequestScript": "",
+                       "method": "GET",
+                       "collectionId": "61475d83-1808-fa49-7ca6-32f701e38b19",
+                       "data": [],
+                       "dataMode": "raw",
+                       "name": "List naming contexts - context",
+                       "description": "List mapping context stored in context datastore",
+                       "descriptionFormat": "html",
+                       "time": 1463556756647,
+                       "version": 2,
+                       "responses": [],
+                       "tests": "",
+                       "currentHelper": "normal",
+                       "helperAttributes": {},
+                       "rawModeData": "{\r\n    \r\n        \"interface\": [\r\n            {\r\n                \"name\": \"testInterface\",\r\n                \"description\": \"for testing purposes\",\r\n                \"type\": \"iana-if-type:ethernetCsmacd\",\r\n                \"enabled\": \"true\",\r\n                \"link-up-down-trap-enable\": \"enabled\",\r\n                \"ietf-ip:ipv4\": {\r\n                    \"enabled\": \"true\",\r\n                    \"mtu\": \"1500\",\r\n                    \"address\": [\r\n                        {\r\n                            \"ip\": \"1.2.3.0\",\r\n                            \"netmask\": \"255.255.255.0\"\r\n                        }\r\n                    ]\r\n                }\r\n            }\r\n        ]\r\n    \r\n}"
                }
        ]
 }
\ No newline at end of file
index 3571fbc..38ab58a 100644 (file)
@@ -31,18 +31,21 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentationBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceStateAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VxlanVni;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VxlanGpeVni;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.EthernetBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.L2Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.SubInterfaceBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.TapBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.VhostUserBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.VxlanBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.VxlanGpeBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.Ethernet;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.L2;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.SubInterface;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.Tap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.VhostUser;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.Vxlan;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.VxlanGpe;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.l2.attributes.Interconnection;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.l2.attributes.VlanTagRewrite;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.l2.attributes.VlanTagRewriteBuilder;
@@ -99,6 +102,11 @@ public class InterfacesInitializer extends AbstractDataTreeConverter<InterfacesS
                 setVxlan(augmentBuilder, vxlan);
             }
 
+            final VxlanGpe vxlanGpe = vppIfcAugmentation.getVxlanGpe();
+            if(vxlanGpe != null) {
+                setVxlanGpe(augmentBuilder, vxlanGpe);
+            }
+
             final Tap tap = vppIfcAugmentation.getTap();
             if(tap != null) {
                 setTap(input, augmentBuilder, tap);
@@ -224,4 +232,15 @@ public class InterfacesInitializer extends AbstractDataTreeConverter<InterfacesS
         vxlanBuilder.setVni(new VxlanVni(vxlan.getVni()));
         augmentBuilder.setVxlan(vxlanBuilder.build());
     }
+
+    private static void setVxlanGpe(final VppInterfaceAugmentationBuilder augmentBuilder, final VxlanGpe vxlanGpe) {
+        final VxlanGpeBuilder vxlanGpeBuilder = new VxlanGpeBuilder();
+        vxlanGpeBuilder.setLocal(vxlanGpe.getLocal());
+        vxlanGpeBuilder.setRemote(vxlanGpe.getRemote());
+        vxlanGpeBuilder.setVni(new VxlanGpeVni(vxlanGpe.getVni()));
+        vxlanGpeBuilder.setNextProtocol(vxlanGpe.getNextProtocol());
+        vxlanGpeBuilder.setEncapVrfId(vxlanGpe.getEncapVrfId());
+        vxlanGpeBuilder.setDecapVrfId(vxlanGpe.getDecapVrfId());
+        augmentBuilder.setVxlanGpe(vxlanGpeBuilder.build());
+    }
 }
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/interfaces/VxlanGpeCustomizer.java b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/interfaces/VxlanGpeCustomizer.java
new file mode 100644 (file)
index 0000000..7d96411
--- /dev/null
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 2016 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.
+ */
+
+package io.fd.honeycomb.v3po.translate.v3po.interfaces;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.base.Optional;
+import com.google.common.net.InetAddresses;
+import io.fd.honeycomb.v3po.translate.v3po.util.AbstractInterfaceTypeCustomizer;
+import io.fd.honeycomb.v3po.translate.v3po.util.NamingContext;
+import io.fd.honeycomb.v3po.translate.v3po.util.VppApiInvocationException;
+import io.fd.honeycomb.v3po.translate.v3po.util.TranslateUtils;
+import io.fd.honeycomb.v3po.translate.write.WriteContext;
+import io.fd.honeycomb.v3po.translate.write.WriteFailedException;
+import java.net.InetAddress;
+import java.util.concurrent.CompletionStage;
+import javax.annotation.Nonnull;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfaceType;
+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.v3po.rev150105.VppInterfaceAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VxlanGpeTunnel;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.VxlanGpe;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.openvpp.jvpp.dto.VxlanGpeAddDelTunnel;
+import org.openvpp.jvpp.dto.VxlanGpeAddDelTunnelReply;
+import org.openvpp.jvpp.future.FutureJVpp;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// TODO extract common code from all Interface type specific writer customizers into a superclass
+public class VxlanGpeCustomizer extends AbstractInterfaceTypeCustomizer<VxlanGpe> {
+
+    private static final Logger LOG = LoggerFactory.getLogger(VxlanGpeCustomizer.class);
+    private final NamingContext interfaceContext;
+
+    public VxlanGpeCustomizer(final FutureJVpp vppApi, final NamingContext interfaceContext) {
+        super(vppApi);
+        this.interfaceContext = interfaceContext;
+    }
+
+    @Nonnull
+    @Override
+    public Optional<VxlanGpe> extract(@Nonnull final InstanceIdentifier<VxlanGpe> currentId,
+                                   @Nonnull final DataObject parentData) {
+        return Optional.fromNullable(((VppInterfaceAugmentation) parentData).getVxlanGpe());
+    }
+
+    @Override
+    protected Class<? extends InterfaceType> getExpectedInterfaceType() {
+        return VxlanGpeTunnel.class;
+    }
+
+    @Override
+    protected final void writeInterface(@Nonnull final InstanceIdentifier<VxlanGpe> id, @Nonnull final VxlanGpe dataAfter,
+                                       @Nonnull final WriteContext writeContext)
+            throws WriteFailedException.CreateFailedException {
+        try {
+            createVxlanGpeTunnel(id.firstKeyOf(Interface.class).getName(), dataAfter, writeContext);
+        } catch (VppApiInvocationException | IllegalInterfaceTypeException e) {
+            LOG.warn("Write of VxlanGpe failed", e);
+            throw new WriteFailedException.CreateFailedException(id, dataAfter, e);
+        }
+    }
+
+    @Override
+    public void updateCurrentAttributes(@Nonnull final InstanceIdentifier<VxlanGpe> id, @Nonnull final VxlanGpe dataBefore,
+                                        @Nonnull final VxlanGpe dataAfter, @Nonnull final WriteContext writeContext)
+            throws WriteFailedException.UpdateFailedException {
+        throw new WriteFailedException.UpdateFailedException(id, dataBefore, dataAfter,
+                new UnsupportedOperationException("VxlanGpe tunnel update is not supported"));
+    }
+
+    @Override
+    public void deleteCurrentAttributes(@Nonnull final InstanceIdentifier<VxlanGpe> id, @Nonnull final VxlanGpe dataBefore,
+                                        @Nonnull final WriteContext writeContext)
+            throws WriteFailedException.DeleteFailedException {
+        try {
+            deleteVxlanGpeTunnel(id.firstKeyOf(Interface.class).getName(), dataBefore, writeContext);
+        } catch (VppApiInvocationException e) {
+            LOG.warn("Delete of VxlanGpe tunnel failed", e);
+            throw new WriteFailedException.DeleteFailedException(id, e);
+        }
+    }
+
+    private void createVxlanGpeTunnel(final String swIfName, final VxlanGpe VxlanGpe, final WriteContext writeContext) throws VppApiInvocationException {
+        final byte isIpv6 = (byte) (isIpv6(VxlanGpe) ? 1 : 0);
+        final InetAddress Local = InetAddresses.forString(getAddressString(VxlanGpe.getLocal()));
+        final InetAddress Remote = InetAddresses.forString(getAddressString(VxlanGpe.getRemote()));
+
+        int vni = VxlanGpe.getVni().getValue().intValue();
+        byte protocol = (byte) VxlanGpe.getNextProtocol().getIntValue();
+        int encapVrfId = VxlanGpe.getEncapVrfId().intValue();
+        int decapVrfId = VxlanGpe.getDecapVrfId().intValue();
+
+        LOG.debug("Setting VxlanGpe tunnel for interface: {}. VxlanGpe: {}", swIfName, VxlanGpe);
+        final CompletionStage<VxlanGpeAddDelTunnelReply> VxlanGpeAddDelTunnelReplyCompletionStage =
+                getFutureJVpp().vxlanGpeAddDelTunnel(getVxlanGpeTunnelRequest((byte) 1 /* is add */, Local.getAddress(),
+                    Remote.getAddress(), vni, protocol, encapVrfId, decapVrfId, isIpv6));
+
+        final VxlanGpeAddDelTunnelReply reply =
+                TranslateUtils.getReply(VxlanGpeAddDelTunnelReplyCompletionStage.toCompletableFuture());
+        if (reply.retval < 0) {
+            LOG.debug("Failed to set VxlanGpe tunnel for interface: {}, VxlanGpe: {}", swIfName, VxlanGpe);
+            throw new VppApiInvocationException("VxlanGpeAddDelTunnel", reply.context, reply.retval);
+        } else {
+            LOG.debug("VxlanGpe tunnel set successfully for: {}, VxlanGpe: {}", swIfName, VxlanGpe);
+            if(interfaceContext.containsName(reply.swIfIndex, writeContext.getMappingContext())) {
+                final String formerName = interfaceContext.getName(reply.swIfIndex, writeContext.getMappingContext());
+                LOG.debug("Removing updated mapping of a vxlan-gpe tunnel, id: {}, former name: {}, new name: {}",
+                    reply.swIfIndex, formerName, swIfName);
+                interfaceContext.removeName(formerName, writeContext.getMappingContext());
+            }
+            // Add new interface to our interface context
+            interfaceContext.addName(reply.swIfIndex, swIfName, writeContext.getMappingContext());
+        }
+    }
+
+    private boolean isIpv6(final VxlanGpe VxlanGpe) {
+        if (VxlanGpe.getLocal().getIpv4Address() == null) {
+            checkArgument(VxlanGpe.getRemote().getIpv4Address() == null, "Inconsistent ip addresses: %s, %s", VxlanGpe.getLocal(),
+                VxlanGpe.getRemote());
+            return true;
+        } else {
+            checkArgument(VxlanGpe.getRemote().getIpv6Address() == null, "Inconsistent ip addresses: %s, %s", VxlanGpe.getLocal(),
+                VxlanGpe.getRemote());
+            return false;
+        }
+    }
+
+    private String getAddressString(final IpAddress addr) {
+        return addr.getIpv4Address() == null ? addr.getIpv6Address().getValue() : addr.getIpv4Address().getValue();
+    }
+
+    private void deleteVxlanGpeTunnel(final String swIfName, final VxlanGpe VxlanGpe, final WriteContext writeContext) throws VppApiInvocationException {
+        final byte isIpv6 = (byte) (isIpv6(VxlanGpe) ? 1 : 0);
+        final InetAddress local = InetAddresses.forString(getAddressString(VxlanGpe.getLocal()));
+        final InetAddress remote = InetAddresses.forString(getAddressString(VxlanGpe.getRemote()));
+
+        int vni = VxlanGpe.getVni().getValue().intValue();
+        byte protocol = (byte) VxlanGpe.getNextProtocol().getIntValue();
+        int encapVrfId = VxlanGpe.getEncapVrfId().intValue();
+        int decapVrfId = VxlanGpe.getDecapVrfId().intValue();
+
+        LOG.debug("Deleting VxlanGpe tunnel for interface: {}. VxlanGpe: {}", swIfName, VxlanGpe);
+        final CompletionStage<VxlanGpeAddDelTunnelReply> VxlanGpeAddDelTunnelReplyCompletionStage =
+                getFutureJVpp().vxlanGpeAddDelTunnel(getVxlanGpeTunnelRequest((byte) 0 /* is delete */, local.getAddress(),
+                    remote.getAddress(), vni, protocol, encapVrfId, decapVrfId, isIpv6));
+
+        final VxlanGpeAddDelTunnelReply reply =
+                TranslateUtils.getReply(VxlanGpeAddDelTunnelReplyCompletionStage.toCompletableFuture());
+        if (reply.retval < 0) {
+            LOG.debug("Failed to delete VxlanGpe tunnel for interface: {}, VxlanGpe: {}", swIfName, VxlanGpe);
+            throw new VppApiInvocationException("VxlanGpeAddDelTunnel", reply.context, reply.retval);
+        } else {
+            LOG.debug("VxlanGpe tunnel deleted successfully for: {}, VxlanGpe: {}", swIfName, VxlanGpe);
+            // Remove interface from our interface context
+            interfaceContext.removeName(swIfName, writeContext.getMappingContext());
+        }
+    }
+
+    private static VxlanGpeAddDelTunnel getVxlanGpeTunnelRequest(final byte isAdd, final byte[] local, final byte[] remote,
+                                        final int vni, final byte protocol, final int encapVrfId, final int decapVrfId, 
+                                        final byte isIpv6) {
+        final VxlanGpeAddDelTunnel VxlanGpeAddDelTunnel = new VxlanGpeAddDelTunnel();
+        VxlanGpeAddDelTunnel.isAdd = isAdd;
+        VxlanGpeAddDelTunnel.local = local;
+        VxlanGpeAddDelTunnel.remote = remote;
+        VxlanGpeAddDelTunnel.vni = vni;
+        VxlanGpeAddDelTunnel.protocol = protocol;
+        VxlanGpeAddDelTunnel.encapVrfId = encapVrfId;
+        VxlanGpeAddDelTunnel.decapVrfId = decapVrfId;
+        VxlanGpeAddDelTunnel.isIpv6 = isIpv6;
+        return VxlanGpeAddDelTunnel;
+    }
+}
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/interfacesstate/VxlanGpeCustomizer.java b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/interfacesstate/VxlanGpeCustomizer.java
new file mode 100644 (file)
index 0000000..64a5b89
--- /dev/null
@@ -0,0 +1,141 @@
+/*
+ * Copyright (c) 2016 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.
+ */
+
+package io.fd.honeycomb.v3po.translate.v3po.interfacesstate;
+
+import static com.google.common.base.Preconditions.checkState;
+
+import io.fd.honeycomb.v3po.translate.read.ReadContext;
+import io.fd.honeycomb.v3po.translate.read.ReadFailedException;
+import io.fd.honeycomb.v3po.translate.spi.read.ChildReaderCustomizer;
+import io.fd.honeycomb.v3po.translate.v3po.util.FutureJVppCustomizer;
+import io.fd.honeycomb.v3po.translate.v3po.util.NamingContext;
+import io.fd.honeycomb.v3po.translate.v3po.util.TranslateUtils;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Arrays;
+import java.util.concurrent.CompletionStage;
+import javax.annotation.Nonnull;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+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.Ipv6Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceStateAugmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VxlanGpeTunnel;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VxlanGpeVni;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.VxlanGpe;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.VxlanGpeBuilder;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.openvpp.jvpp.dto.VxlanGpeTunnelDetails;
+import org.openvpp.jvpp.dto.VxlanGpeTunnelDetailsReplyDump;
+import org.openvpp.jvpp.dto.VxlanGpeTunnelDump;
+import org.openvpp.jvpp.future.FutureJVpp;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class VxlanGpeCustomizer extends FutureJVppCustomizer
+        implements ChildReaderCustomizer<VxlanGpe, VxlanGpeBuilder> {
+
+    private static final Logger LOG = LoggerFactory.getLogger(VxlanGpeCustomizer.class);
+    private NamingContext interfaceContext;
+
+    public VxlanGpeCustomizer(@Nonnull final FutureJVpp jvpp, @Nonnull final NamingContext interfaceContext) {
+        super(jvpp);
+        this.interfaceContext = interfaceContext;
+    }
+
+    @Override
+    public void merge(@Nonnull Builder<? extends DataObject> parentBuilder,
+                      @Nonnull VxlanGpe readValue) {
+        ((VppInterfaceStateAugmentationBuilder) parentBuilder).setVxlanGpe(readValue);
+    }
+
+    @Nonnull
+    @Override
+    public VxlanGpeBuilder getBuilder(@Nonnull InstanceIdentifier<VxlanGpe> id) {
+        return new VxlanGpeBuilder();
+    }
+
+    @Override
+    public void readCurrentAttributes(@Nonnull final InstanceIdentifier<VxlanGpe> id,
+                                      @Nonnull final VxlanGpeBuilder builder,
+                                      @Nonnull final ReadContext ctx) throws ReadFailedException {
+        final InterfaceKey key = id.firstKeyOf(Interface.class);
+        // Relying here that parent InterfaceCustomizer was invoked first (PREORDER)
+        // to fill in the context with initial ifc mapping
+        final int index = interfaceContext.getIndex(key.getName(), ctx.getMappingContext());
+        if (!InterfaceUtils.isInterfaceOfType(ctx.getModificationCache(), index, VxlanGpeTunnel.class)) {
+            return;
+        }
+
+        LOG.debug("Reading attributes for VxlanGpe tunnel: {}", key.getName());
+        // Dump just a single
+        final VxlanGpeTunnelDump request = new VxlanGpeTunnelDump();
+        request.swIfIndex = index;
+
+        final CompletionStage<VxlanGpeTunnelDetailsReplyDump> swInterfaceVxlanGpeDetailsReplyDumpCompletionStage =
+            getFutureJVpp().vxlanGpeTunnelDump(request);
+        final VxlanGpeTunnelDetailsReplyDump reply =
+            TranslateUtils.getReply(swInterfaceVxlanGpeDetailsReplyDumpCompletionStage.toCompletableFuture());
+
+        // VPP keeps VxlanGpe tunnel interfaces even after they were deleted (optimization)
+        // However there are no longer any VxlanGpe tunnel specific fields assigned to it and this call
+        // returns nothing
+        if (reply == null || reply.vxlanGpeTunnelDetails == null || reply.vxlanGpeTunnelDetails.isEmpty()) {
+            LOG.debug(
+                "VxlanGpe tunnel {}, id {} has no attributes assigned in VPP. Probably is a leftover interface placeholder" +
+                    "after delete", key.getName(), index);
+            return;
+        }
+
+        checkState(reply.vxlanGpeTunnelDetails.size() == 1,
+            "Unexpected number of returned VxlanGpe tunnels: {} for tunnel: {}", reply.vxlanGpeTunnelDetails, key.getName());
+        LOG.trace("VxlanGpe tunnel: {} attributes returned from VPP: {}", key.getName(), reply);
+
+        final VxlanGpeTunnelDetails swInterfaceVxlanGpeDetails = reply.vxlanGpeTunnelDetails.get(0);
+        if (swInterfaceVxlanGpeDetails.isIpv6 == 1) {
+            final Ipv6Address remote6 =
+                new Ipv6Address(parseAddress(swInterfaceVxlanGpeDetails.remote).getHostAddress());
+            builder.setRemote(new IpAddress(remote6));
+            final Ipv6Address local6 =
+                new Ipv6Address(parseAddress(swInterfaceVxlanGpeDetails.local).getHostAddress());
+            builder.setLocal(new IpAddress(local6));
+        } else {
+            final byte[] dstBytes = Arrays.copyOfRange(swInterfaceVxlanGpeDetails.remote, 0, 4);
+            final Ipv4Address remote4 = new Ipv4Address(parseAddress(dstBytes).getHostAddress());
+            builder.setRemote(new IpAddress(remote4));
+            final byte[] srcBytes = Arrays.copyOfRange(swInterfaceVxlanGpeDetails.local, 0, 4);
+            final Ipv4Address local4 = new Ipv4Address(parseAddress(srcBytes).getHostAddress());
+            builder.setLocal(new IpAddress(local4));
+        }
+        builder.setVni(new VxlanGpeVni((long) swInterfaceVxlanGpeDetails.vni));
+        builder.setEncapVrfId((long) swInterfaceVxlanGpeDetails.encapVrfId);
+        builder.setDecapVrfId((long) swInterfaceVxlanGpeDetails.decapVrfId);
+        LOG.debug("VxlanGpe tunnel: {}, id: {} attributes read as: {}", key.getName(), index, builder);
+    }
+
+    @Nonnull
+    private static InetAddress parseAddress(@Nonnull final byte[] addr) {
+        try {
+            return InetAddress.getByAddress(addr);
+        } catch (UnknownHostException e) {
+            throw new IllegalArgumentException("Cannot create InetAddress from " + Arrays.toString(addr), e);
+        }
+    }
+}
index d8b5b65..4a1e7f0 100644 (file)
@@ -18,6 +18,7 @@ import io.fd.honeycomb.v3po.translate.v3po.interfaces.TapCustomizer;
 import io.fd.honeycomb.v3po.translate.v3po.interfaces.VhostUserCustomizer;
 import io.fd.honeycomb.v3po.translate.v3po.interfaces.VlanTagRewriteCustomizer;
 import io.fd.honeycomb.v3po.translate.v3po.interfaces.VxlanCustomizer;
+import io.fd.honeycomb.v3po.translate.v3po.interfaces.VxlanGpeCustomizer;
 import io.fd.honeycomb.v3po.translate.v3po.interfaces.ip.Ipv4Customizer;
 import io.fd.honeycomb.v3po.translate.v3po.interfaces.ip.Ipv6Customizer;
 import io.fd.honeycomb.v3po.translate.write.ChildWriter;
@@ -37,6 +38,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.Tap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.VhostUser;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.Vxlan;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.VxlanGpe;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.l2.attributes.VlanTagRewrite;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.ChildOf;
@@ -105,6 +107,9 @@ public class InterfacesHoneycombWriterModule extends org.opendaylight.yang.gen.v
         final ChildWriter<Vxlan> vxlanWriter = new CompositeChildWriter<>(Vxlan.class,
                 new VxlanCustomizer(getVppJvppIfcDependency(), getInterfaceContextDependency()));
 
+        final ChildWriter<VxlanGpe> vxlanGpeWriter = new CompositeChildWriter<>(VxlanGpe.class,
+                new VxlanGpeCustomizer(getVppJvppIfcDependency(), getInterfaceContextDependency()));
+
         final ChildWriter<VhostUser> vhostUserWriter = new CompositeChildWriter<>(VhostUser.class,
                 new VhostUserCustomizer(getVppJvppIfcDependency(), getInterfaceContextDependency()));
 
@@ -133,6 +138,7 @@ public class InterfacesHoneycombWriterModule extends org.opendaylight.yang.gen.v
         final List<ChildWriter<? extends ChildOf<VppInterfaceAugmentation>>> vppIfcChildWriters = Lists.newArrayList();
         vppIfcChildWriters.add(vhostUserWriter);
         vppIfcChildWriters.add(vxlanWriter);
+        vppIfcChildWriters.add(vxlanGpeWriter);
         vppIfcChildWriters.add(tapWriter);
         vppIfcChildWriters.add(ethernetWriter);
         vppIfcChildWriters.add(subIfWriter);
index 4c8202c..7c97abf 100644 (file)
@@ -23,6 +23,7 @@ import io.fd.honeycomb.v3po.translate.v3po.interfacesstate.TapCustomizer;
 import io.fd.honeycomb.v3po.translate.v3po.interfacesstate.VhostUserCustomizer;
 import io.fd.honeycomb.v3po.translate.v3po.interfacesstate.VlanTagRewriteCustomizer;
 import io.fd.honeycomb.v3po.translate.v3po.interfacesstate.VxlanCustomizer;
+import io.fd.honeycomb.v3po.translate.v3po.interfacesstate.VxlanGpeCustomizer;
 import java.util.Collections;
 import java.util.List;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState;
@@ -38,6 +39,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.Tap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.VhostUser;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.Vxlan;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.VxlanGpe;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.l2.attributes.VlanTagRewrite;
 import org.opendaylight.yangtools.yang.binding.ChildOf;
 
@@ -79,6 +81,10 @@ public class InterfacesStateHoneycombReaderModule extends
                 new CompositeChildReader<>(Vxlan.class,
                         new VxlanCustomizer(getVppJvppDependency(), getInterfaceContextIfcStateDependency()));
 
+        final ChildReader<? extends ChildOf<VppInterfaceStateAugmentation>> vxlanGpeReader =
+                new CompositeChildReader<>(VxlanGpe.class,
+                        new VxlanGpeCustomizer(getVppJvppDependency(), getInterfaceContextIfcStateDependency()));
+
         final ChildReader<? extends ChildOf<VppInterfaceStateAugmentation>> subInterfaceReader =
                 new CompositeChildReader<>(SubInterface.class,
                         new SubInterfaceCustomizer(getVppJvppDependency(), getInterfaceContextIfcStateDependency()));
@@ -101,6 +107,7 @@ public class InterfacesStateHoneycombReaderModule extends
         childReaders.add(tapReader);
         childReaders.add(vhostUserReader);
         childReaders.add(vxlanReader);
+        childReaders.add(vxlanGpeReader);
         childReaders.add(subInterfaceReader);
         childReaders.add(l2Reader);