]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib: add interface operational northbound callback
authorChirag Shah <chirag@cumulusnetworks.com>
Wed, 19 Feb 2020 21:26:41 +0000 (13:26 -0800)
committerSantosh P K <sapk@vmware.com>
Thu, 16 Apr 2020 15:26:36 +0000 (08:26 -0700)
Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
lib/if.c
lib/if.h

index cc964106d04c587307a249aac56724791d641c7c..f557d7a1dd6d3cd20d86136402b293a09d09846a 100644 (file)
--- a/lib/if.c
+++ b/lib/if.c
@@ -1667,6 +1667,96 @@ static int lib_interface_description_destroy(enum nb_event event,
        return NB_OK;
 }
 
+/*
+ * XPath: /frr-interface:lib/interface/state/if-index
+ */
+struct yang_data *lib_interface_state_if_index_get_elem(const char *xpath,
+                                                       const void *list_entry)
+{
+       const struct interface *ifp = list_entry;
+
+       return yang_data_new_int32(xpath, ifp->ifindex);
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/state/mtu
+ */
+struct yang_data *lib_interface_state_mtu_get_elem(const char *xpath,
+                                                  const void *list_entry)
+{
+       const struct interface *ifp = list_entry;
+
+       return yang_data_new_uint16(xpath, ifp->mtu);
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/state/mtu6
+ */
+struct yang_data *lib_interface_state_mtu6_get_elem(const char *xpath,
+                                                   const void *list_entry)
+{
+       const struct interface *ifp = list_entry;
+
+       return yang_data_new_uint32(xpath, ifp->mtu6);
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/state/speed
+ */
+struct yang_data *lib_interface_state_speed_get_elem(const char *xpath,
+                                                    const void *list_entry)
+{
+       const struct interface *ifp = list_entry;
+
+       return yang_data_new_uint32(xpath, ifp->speed);
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/state/metric
+ */
+struct yang_data *lib_interface_state_metric_get_elem(const char *xpath,
+                                                     const void *list_entry)
+{
+       const struct interface *ifp = list_entry;
+
+       return yang_data_new_uint32(xpath, ifp->metric);
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/state/flags
+ */
+struct yang_data *lib_interface_state_flags_get_elem(const char *xpath,
+                                                    const void *list_entry)
+{
+       /* TODO: implement me. */
+       return NULL;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/state/type
+ */
+struct yang_data *lib_interface_state_type_get_elem(const char *xpath,
+                                                   const void *list_entry)
+{
+       /* TODO: implement me. */
+       return NULL;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/state/phy-address
+ */
+struct yang_data *
+lib_interface_state_phy_address_get_elem(const char *xpath,
+                                        const void *list_entry)
+{
+       const struct interface *ifp = list_entry;
+       struct ethaddr macaddr;
+
+       memcpy(&macaddr.octet, ifp->hw_addr, ETH_ALEN);
+
+       return yang_data_new_mac(xpath, &macaddr);
+}
+
 /* clang-format off */
 
 const struct frr_yang_module_info frr_interface_info = {
@@ -1691,6 +1781,54 @@ const struct frr_yang_module_info frr_interface_info = {
                                .cli_show = cli_show_interface_desc,
                        },
                },
+               {
+                       .xpath = "/frr-interface:lib/interface/state/if-index",
+                       .cbs = {
+                               .get_elem = lib_interface_state_if_index_get_elem,
+                       }
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/state/mtu",
+                       .cbs = {
+                               .get_elem = lib_interface_state_mtu_get_elem,
+                       }
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/state/mtu6",
+                       .cbs = {
+                               .get_elem = lib_interface_state_mtu6_get_elem,
+                       }
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/state/speed",
+                       .cbs = {
+                               .get_elem = lib_interface_state_speed_get_elem,
+                       }
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/state/metric",
+                       .cbs = {
+                               .get_elem = lib_interface_state_metric_get_elem,
+                       }
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/state/flags",
+                       .cbs = {
+                               .get_elem = lib_interface_state_flags_get_elem,
+                       }
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/state/type",
+                       .cbs = {
+                               .get_elem = lib_interface_state_type_get_elem,
+                       }
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/state/phy-address",
+                       .cbs = {
+                               .get_elem = lib_interface_state_phy_address_get_elem,
+                       }
+               },
                {
                        .xpath = NULL,
                },
index ac8d8e70ba2f024388017fab9abd2709a4d1414b..9afbb5acc8f64f558f090d432c29de8eeaac9f6a 100644 (file)
--- a/lib/if.h
+++ b/lib/if.h
@@ -602,6 +602,24 @@ extern void if_destroy_via_zapi(struct interface *ifp);
 
 extern const struct frr_yang_module_info frr_interface_info;
 
+struct yang_data *lib_interface_state_if_index_get_elem(const char *xpath,
+                                                       const void *list_entry);
+struct yang_data *lib_interface_state_mtu_get_elem(const char *xpath,
+                                                  const void *list_entry);
+struct yang_data *lib_interface_state_mtu6_get_elem(const char *xpath,
+                                                   const void *list_entry);
+struct yang_data *lib_interface_state_speed_get_elem(const char *xpath,
+                                                    const void *list_entry);
+struct yang_data *lib_interface_state_metric_get_elem(const char *xpath,
+                                                     const void *list_entry);
+struct yang_data *lib_interface_state_flags_get_elem(const char *xpath,
+                                                    const void *list_entry);
+struct yang_data *lib_interface_state_type_get_elem(const char *xpath,
+                                                   const void *list_entry);
+struct yang_data *
+lib_interface_state_phy_address_get_elem(const char *xpath,
+                                        const void *list_entry);
+
 #ifdef __cplusplus
 }
 #endif