mapper: Add Associated subtree method definition

Create new mapper function to make subtree call and association call at
the same time. With the association definitition, we will have more
endpoints to fetch and verify that it is actually the resource that we
are looking for. We need to verify that it has the expected interface to
confirm that it is right device. In the current workflow this will take
two dbus calls to the mapper to get the assocation and the subtree.

This change aims to reduce that down to one by combination the two
operations. It will not sigificant performance increase for the daemons,
but it can help reduce the load on the dbus-broker.service.

Tested:
```
Normal Call:
busctl call   "xyz.openbmc_project.ObjectMapper" \
    "/xyz/openbmc_project/object_mapper" \
    "xyz.openbmc_project.ObjectMapper" "GetSubTreePaths" sias \
     "/xyz/openbmc_project/inventory" 0 1 \
     "xyz.openbmc_project.Inventory.Item.Storage"
as 4 "/xyz/openbmc_project/inventory/storage_0" "/xyz/openbmc_project/inventory/storage_1"
     "/xyz/openbmc_project/inventory/storage_4" "/xyz/openbmc_project/inventory/storage_3"

Associated Call: (Only 0 and 1 is associated to the chassis)
busctl call   "xyz.openbmc_project.ObjectMapper" \
    "/xyz/openbmc_project/object_mapper" \
    "xyz.openbmc_project.ObjectMapper" "GetAssociatedSubTreePaths" ssias \
    "/xyz/openbmc_project/inventory/chassis_0/storage" \
     "/xyz/openbmc_project/inventory" 0 1 "xyz.openbmc_project.Inventory.Item.Storage"
as 2 "/xyz/openbmc_project/inventory/storage_0" "/xyz/openbmc_project/inventory/storage_1"
```

Signed-off-by: Willy Tu <wltu@google.com>
Change-Id: I079adf41a5775f80b9c773e8e9e319d46be924ea
diff --git a/yaml/xyz/openbmc_project/ObjectMapper.interface.yaml b/yaml/xyz/openbmc_project/ObjectMapper.interface.yaml
index 02f327a..b87015d 100644
--- a/yaml/xyz/openbmc_project/ObjectMapper.interface.yaml
+++ b/yaml/xyz/openbmc_project/ObjectMapper.interface.yaml
@@ -95,3 +95,62 @@
                 An array of paths.
       errors:
           - xyz.openbmc_project.Common.Error.ResourceNotFound
+    - name: GetAssociatedSubTree
+      description: >
+          Same as GetSubTree, but only return the dbus paths that are
+          an association endpoint on associatedPath
+      parameters:
+          - name: associatedPath
+            type: path
+            description: >
+                The path where the associated endpoint is fetched from.
+          - name: subtree
+            type: path
+            description: >
+                The subtree path for which the result should be fetched.
+          - name: depth
+            type: int32
+            description: >
+                The maximum subtree depth for which results should be fetched.
+                For unconstrained fetches use a depth of zero.
+          - name: interfaces
+            type: array[string]
+            description: >
+                An array of result set constraining interfaces.
+      returns:
+          - name: objects
+            type: dict[path,dict[string,array[string]]]
+            description: >
+                A dictionary of path -> services.
+      errors:
+          - xyz.openbmc_project.Common.Error.ResourceNotFound
+    - name: GetAssociatedSubTreePaths
+      description: >
+          Same as GetSubTreePaths, but only return the dbus paths that are
+          an association endpoint on associatedPath
+      parameters:
+          - name: associatedPath
+            type: path
+            description: >
+                The path where the associated endpoint is fetched from.
+          - name: subtree
+            type: path
+            description: >
+                The subtree path for which the result should be fetched.
+          - name: depth
+            type: int32
+            description: >
+                The maximum subtree depth for which results should be fetched.
+                For unconstrained fetches use a depth of zero.
+          - name: interfaces
+            type: array[string]
+            description: >
+                An array of result set constraining interfaces.
+      returns:
+          - name: paths
+            type: array[path]
+            description: >
+                An array of paths.
+      errors:
+          - xyz.openbmc_project.Common.Error.ResourceNotFound
+