Add RFC8520 models 99/81899/1
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 5 May 2019 19:42:58 +0000 (21:42 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 5 May 2019 19:51:19 +0000 (21:51 +0200)
This adds the models defined in RFC8520.

JIRA: MDSAL-430
Change-Id: I5a0100d63ee8d69934748c508ab46f16f828809d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
artifacts/pom.xml
docs/pom.xml
features/features-mdsal/pom.xml
features/odl-mdsal-model-rfc8520/pom.xml [new file with mode: 0644]
features/pom.xml
model/ietf/pom.xml
model/ietf/rfc8520-ietf-acldns/pom.xml [new file with mode: 0644]
model/ietf/rfc8520-ietf-acldns/src/main/yang/ietf-acldns@2019-01-28.yang [new file with mode: 0644]
model/ietf/rfc8520-ietf-mud/pom.xml [new file with mode: 0644]
model/ietf/rfc8520-ietf-mud/src/main/yang/ietf-mud@2019-01-28.yang [new file with mode: 0644]
model/ietf/rfc8520/pom.xml [new file with mode: 0644]

index b2da9227ca562cd79b68abb7e4636ab43bd8fc86..c642db8a4784cb35a0dc5fe51206d6125e0e7f7b 100644 (file)
                 <version>2.0.1-SNAPSHOT</version>
             </dependency>
 
+            <!-- RFC8520 -->
+            <dependency>
+                <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+                <artifactId>rfc8520</artifactId>
+                <version>1.0.1-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+                <artifactId>rfc8520-ietf-acldns</artifactId>
+                <version>1.0.1-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+                <artifactId>rfc8520-ietf-mud</artifactId>
+                <version>1.0.1-SNAPSHOT</version>
+            </dependency>
+
             <!-- RFC8528 -->
             <dependency>
                 <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
                 <classifier>features</classifier>
                 <type>xml</type>
             </dependency>
+            <dependency>
+                <groupId>org.opendaylight.mdsal.model</groupId>
+                <artifactId>odl-mdsal-model-rfc8520</artifactId>
+                <version>1.0.1-SNAPSHOT</version>
+                <classifier>features</classifier>
+                <type>xml</type>
+            </dependency>
             <dependency>
                 <groupId>org.opendaylight.mdsal.model</groupId>
                 <artifactId>odl-mdsal-model-rfc8528</artifactId>
index 3921cd84d49b5e5e03c7170abea1dec3f408dd99..766a4fac56653320263b16e045160dc67e4641c4 100644 (file)
             <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
             <artifactId>rfc8519-ietf-packet-fields</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc8520</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc8520-ietf-acldns</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc8520-ietf-mud</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
             <artifactId>rfc8528</artifactId>
index d424801cb46e493f1712bc7e2b1d04d760f0a429..164d7e6e09144177f0a4a73dbbc71a41edb60e53 100644 (file)
             <classifier>features</classifier>
             <type>xml</type>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.model</groupId>
+            <artifactId>odl-mdsal-model-rfc8520</artifactId>
+            <classifier>features</classifier>
+            <type>xml</type>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal.model</groupId>
             <artifactId>odl-mdsal-model-rfc8528</artifactId>
diff --git a/features/odl-mdsal-model-rfc8520/pom.xml b/features/odl-mdsal-model-rfc8520/pom.xml
new file mode 100644 (file)
index 0000000..a23ca37
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright © 2019 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.opendaylight.mdsal</groupId>
+        <artifactId>feature-parent</artifactId>
+        <version>4.0.1-SNAPSHOT</version>
+        <relativePath>../feature-parent</relativePath>
+    </parent>
+
+    <groupId>org.opendaylight.mdsal.model</groupId>
+    <artifactId>odl-mdsal-model-rfc8520</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>feature</packaging>
+    <name>OpenDaylight :: MD-SAL :: Model :: RFC8520</name>
+    <description>Models from RFC8520</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.model</groupId>
+            <artifactId>odl-mdsal-model-rfc8519</artifactId>
+            <classifier>features</classifier>
+            <type>xml</type>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc8520</artifactId>
+        </dependency>
+    </dependencies>
+</project>
index a4f99e04d97491d04c9c9c3bf84634c8624b1250..fadfb6901ed8358e416431b9d9a3590561afc7cf 100644 (file)
@@ -73,6 +73,7 @@
         <module>odl-mdsal-model-rfc8348-non-nmda</module>
         <module>odl-mdsal-model-rfc8349</module>
         <module>odl-mdsal-model-rfc8519</module>
+        <module>odl-mdsal-model-rfc8520</module>
         <module>odl-mdsal-model-rfc8528</module>
         <module>odl-mdsal-model-rfc8529</module>
         <module>odl-mdsal-model-rfc8530</module>
index 640281bca12f90005ce3416cb49d0d0b95ad322c..631b7814781883185198c10193126347d4f0ad46 100644 (file)
         <module>rfc8519-ietf-ethertypes</module>
         <module>rfc8519-ietf-packet-fields</module>
 
+        <!-- RFC8520 Manufacturer Usage Description -->
+        <module>rfc8520</module>
+        <module>rfc8520-ietf-acldns</module>
+        <module>rfc8520-ietf-mud</module>
+
         <!-- RFC8528 YANG Schema Mount -->
         <module>rfc8528</module>
 
diff --git a/model/ietf/rfc8520-ietf-acldns/pom.xml b/model/ietf/rfc8520-ietf-acldns/pom.xml
new file mode 100644 (file)
index 0000000..71a657a
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2019 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.opendaylight.mdsal</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>4.0.1-SNAPSHOT</version>
+        <relativePath>../../../binding/binding-parent</relativePath>
+    </parent>
+
+    <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+    <artifactId>rfc8520-ietf-acldns</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+
+    <name>${project.artifactId}</name>
+    <description>RFC8520 ietf-acldns</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc8519-ietf-access-control-list</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/model/ietf/rfc8520-ietf-acldns/src/main/yang/ietf-acldns@2019-01-28.yang b/model/ietf/rfc8520-ietf-acldns/src/main/yang/ietf-acldns@2019-01-28.yang
new file mode 100644 (file)
index 0000000..44286e7
--- /dev/null
@@ -0,0 +1,78 @@
+module ietf-acldns {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-acldns";
+  prefix ietf-acldns;
+
+  import ietf-access-control-list {
+    prefix acl;
+  }
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  organization
+    "IETF OPSAWG (Operations and Management Area Working Group)";
+  contact
+    "WG Web: <https://datatracker.ietf.org/wg/opsawg/>
+     WG List: opsawg@ietf.org
+
+     Author: Eliot Lear
+             lear@cisco.com
+
+     Author: Ralph Droms
+             rdroms@gmail.com
+
+     Author: Dan Romascanu
+             dromasca@gmail.com
+    ";
+  description
+    "This YANG module defines a component that augments the
+     IETF description of an access list to allow DNS names
+     as matching criteria.
+
+     Copyright (c) 2019 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).";
+
+  revision 2019-01-28 {
+    description
+      "Base version of dnsname extension of the ACL model.";
+    reference
+      "RFC 8520: Manufacturer Usage Description
+       Specification";
+  }
+
+  grouping dns-matches {
+    description
+      "Domain names for matching.";
+    leaf src-dnsname {
+      type inet:host;
+      description
+        "domain name to be matched against.";
+    }
+    leaf dst-dnsname {
+      type inet:host;
+      description
+        "domain name to be matched against.";
+    }
+  }
+
+  augment "/acl:acls/acl:acl/acl:aces/acl:ace/acl:matches"
+        + "/acl:l3/acl:ipv4/acl:ipv4" {
+    description
+      "Adding domain names to matching.";
+    uses dns-matches;
+  }
+  augment "/acl:acls/acl:acl/acl:aces/acl:ace/acl:matches"
+        + "/acl:l3/acl:ipv6/acl:ipv6" {
+    description
+      "Adding domain names to matching.";
+    uses dns-matches;
+  }
+}
diff --git a/model/ietf/rfc8520-ietf-mud/pom.xml b/model/ietf/rfc8520-ietf-mud/pom.xml
new file mode 100644 (file)
index 0000000..fd58c35
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2019 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.opendaylight.mdsal</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>4.0.1-SNAPSHOT</version>
+        <relativePath>../../../binding/binding-parent</relativePath>
+    </parent>
+
+    <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+    <artifactId>rfc8520-ietf-mud</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+
+    <name>${project.artifactId}</name>
+    <description>RFC8520 ietf-mud</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc8519-ietf-access-control-list</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/model/ietf/rfc8520-ietf-mud/src/main/yang/ietf-mud@2019-01-28.yang b/model/ietf/rfc8520-ietf-mud/src/main/yang/ietf-mud@2019-01-28.yang
new file mode 100644 (file)
index 0000000..1842284
--- /dev/null
@@ -0,0 +1,311 @@
+module ietf-mud {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-mud";
+  prefix ietf-mud;
+
+  import ietf-access-control-list {
+    prefix acl;
+  }
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  organization
+    "IETF OPSAWG (Operations and Management Area Working Group)";
+  contact
+    "WG Web: <https://datatracker.ietf.org/wg/opsawg/>
+     WG List: opsawg@ietf.org
+
+     Author: Eliot Lear
+             lear@cisco.com
+
+     Author: Ralph Droms
+             rdroms@gmail.com
+
+     Author: Dan Romascanu
+             dromasca@gmail.com
+    ";
+  description
+    "This YANG module defines a component that augments the
+     IETF description of an access list.  This specific module
+     focuses on additional filters that include local, model,
+     and same-manufacturer.
+
+     This module is intended to be serialized via JSON and stored
+     as a file, as described in RFC 8520.
+
+     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
+     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
+     'MAY', and 'OPTIONAL' in this document are to be interpreted as
+     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
+     they appear in all capitals, as shown here.
+
+     Copyright (c) 2019 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 8520; see
+     the RFC itself for full legal notices.";
+
+  revision 2019-01-28 {
+    description
+      "Initial proposed standard.";
+    reference
+      "RFC 8520: Manufacturer Usage Description
+       Specification";
+  }
+
+  typedef direction {
+    type enumeration {
+      enum to-device {
+        description
+          "packets or flows destined to the target
+           Thing.";
+      }
+      enum from-device {
+        description
+          "packets or flows destined from
+           the target Thing.";
+      }
+    }
+    description
+      "Which way are we talking about?";
+  }
+
+  container mud {
+    presence "Enabled for this particular MUD URL";
+    description
+      "MUD-related information, as specified
+       by RFC 8520.";
+    uses mud-grouping;
+  }
+
+  grouping mud-grouping {
+    description
+      "Information about when support ends (or ended)
+       and when to refresh.";
+    leaf mud-version {
+      type uint8;
+      mandatory true;
+      description
+        "This is the version of the MUD
+         specification.  This memo specifies version 1.";
+    }
+    leaf mud-url {
+      type inet:uri;
+      mandatory true;
+      description
+        "This is the MUD URL associated with the entry found
+         in a MUD file.";
+    }
+    leaf last-update {
+      type yang:date-and-time;
+      mandatory true;
+      description
+        "This is intended to be when the current MUD file
+         was generated.  MUD managers SHOULD NOT check
+         for updates between this time plus cache validity.";
+    }
+    leaf mud-signature {
+      type inet:uri;
+      description
+        "A URI that resolves to a signature as
+         described in this specification.";
+    }
+    leaf cache-validity {
+      type uint8 {
+        range "1..168";
+      }
+      units "hours";
+      default "48";
+      description
+        "The information retrieved from the MUD server is
+         valid for these many hours, after which it should
+         be refreshed.  N.B., MUD manager implementations
+         need not discard MUD files beyond this period.";
+    }
+    leaf is-supported {
+      type boolean;
+      mandatory true;
+      description
+        "This boolean indicates whether or not the Thing is
+         currently supported by the manufacturer.";
+    }
+    leaf systeminfo {
+      type string;
+      description
+        "A UTF-8 description of this Thing.  This
+         should be a brief description that may be
+         displayed to the user to determine whether
+         to allow the Thing on the
+         network.";
+    }
+    leaf mfg-name {
+      type string;
+      description
+        "Manufacturer name, as described in
+         the ietf-hardware YANG module.";
+    }
+    leaf model-name {
+      type string;
+      description
+        "Model name, as described in the
+         ietf-hardware YANG module.";
+    }
+    leaf firmware-rev {
+      type string;
+      description
+        "firmware-rev, as described in the
+         ietf-hardware YANG module.  Note that this field
+         MUST NOT be included when the device can be
+         updated but the MUD URL cannot.";
+    }
+    leaf software-rev {
+      type string;
+      description
+        "software-rev, as described in the
+         ietf-hardware YANG module.  Note that this field
+         MUST NOT be included when the device can be
+         updated but the MUD URL cannot.";
+    }
+    leaf documentation {
+      type inet:uri;
+      description
+        "This URL points to documentation that
+         relates to this device and any classes that it uses
+         in its MUD file.  A caution: MUD managers need
+         not resolve this URL on their own but rather simply
+         provide it to the administrator.  Parsing HTML is
+         not an intended function of a MUD manager.";
+    }
+    leaf-list extensions {
+      type string {
+        length "1..40";
+      }
+      description
+        "A list of extension names that are used in this MUD
+         file.  Each name is registered with the IANA and
+         described in an RFC.";
+    }
+    container from-device-policy {
+      description
+        "The policies that should be enforced on traffic
+         coming from the device.  These policies are not
+         necessarily intended to be enforced at a single
+         point but may be rendered by the controller to any
+         relevant enforcement points in the network or
+         elsewhere.";
+      uses access-lists;
+    }
+    container to-device-policy {
+      description
+        "The policies that should be enforced on traffic
+         going to the device.  These policies are not
+         necessarily intended to be enforced at a single
+         point but may be rendered by the controller to any
+         relevant enforcement points in the network or
+         elsewhere.";
+      uses access-lists;
+    }
+  }
+
+  grouping access-lists {
+    description
+      "A grouping for access lists in the context of device
+       policy.";
+    container access-lists {
+      description
+        "The access lists that should be applied to traffic
+         to or from the device.";
+      list access-list {
+        key "name";
+        description
+          "Each entry on this list refers to an ACL that
+           should be present in the overall access list
+           data model.  Each ACL is identified by name and
+           type.";
+        leaf name {
+          type leafref {
+            path "/acl:acls/acl:acl/acl:name";
+          }
+          description
+            "The name of the ACL for this entry.";
+        }
+      }
+    }
+  }
+
+  augment "/acl:acls/acl:acl/acl:aces/acl:ace/acl:matches" {
+    description
+      "adding abstractions to avoid the need of IP addresses.";
+    container mud {
+      description
+        "MUD-specific matches.";
+      leaf manufacturer {
+        type inet:host;
+        description
+          "A domain that is intended to match the authority
+           section of the MUD URL.  This node is used to specify
+           one or more manufacturers a device should
+           be authorized to access.";
+      }
+      leaf same-manufacturer {
+        type empty;
+        description
+          "This node matches the authority section of the MUD URL
+           of a Thing.  It is intended to grant access to all
+           devices with the same authority section.";
+      }
+      leaf model {
+        type inet:uri;
+        description
+          "Devices of the specified model type will match if
+           they have an identical MUD URL.";
+      }
+      leaf local-networks {
+        type empty;
+        description
+          "IP addresses will match this node if they are
+           considered local addresses.  A local address may be
+           a list of locally defined prefixes and masks
+           that indicate a particular administrative scope.";
+      }
+      leaf controller {
+        type inet:uri;
+        description
+          "This node names a class that has associated with it
+           zero or more IP addresses to match against.  These
+           may be scoped to a manufacturer or via a standard
+           URN.";
+      }
+      leaf my-controller {
+        type empty;
+        description
+          "This node matches one or more network elements that
+           have been configured to be the controller for this
+           Thing, based on its MUD URL.";
+      }
+    }
+  }
+  augment "/acl:acls/acl:acl/acl:aces/acl:ace/acl:matches"
+        + "/acl:l4/acl:tcp/acl:tcp" {
+    description
+      "add direction-initiated";
+    leaf direction-initiated {
+      type direction;
+      description
+        "This node matches based on which direction a
+         connection was initiated.  The means by which that
+         is determined is discussed in this document.";
+    }
+  }
+}
diff --git a/model/ietf/rfc8520/pom.xml b/model/ietf/rfc8520/pom.xml
new file mode 100644 (file)
index 0000000..c45467e
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2019 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.opendaylight.mdsal</groupId>
+        <artifactId>dom-parent</artifactId>
+        <version>4.0.1-SNAPSHOT</version>
+        <relativePath>../../../dom/dom-parent</relativePath>
+    </parent>
+
+    <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+    <artifactId>rfc8520</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+
+    <name>${project.artifactId}</name>
+    <description>RFC8520 Manufacturer Usage Description</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc8520-ietf-acldns</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc8520-ietf-mud</artifactId>
+        </dependency>
+    </dependencies>
+</project>