diff options
| author | Sharath Ramamurthy <sramamurthy@nvidia.com> | 2021-08-04 12:16:25 +0530 |
|---|---|---|
| committer | Stephen Worley <sworley@nvidia.com> | 2023-02-13 18:12:04 -0500 |
| commit | 9c21cf68bf84aa1e9d505377bbfae51a20f67174 (patch) | |
| tree | 184afa0c40b28f1519d6e49d9cb6ea3ee4936371 /zebra/interface.c | |
| parent | 9464e5b865a2995e436ce2986f5722921cb83394 (diff) | |
zebra: Add ifdump vty json extension for vxlan/vni
This patch adds dump for vxlan/vni for vxlan devices in if_dump_vty_json
Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
Diffstat (limited to 'zebra/interface.c')
| -rw-r--r-- | zebra/interface.c | 125 |
1 files changed, 59 insertions, 66 deletions
diff --git a/zebra/interface.c b/zebra/interface.c index dfac8ed2ec..5e63a7bb5a 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -1904,44 +1904,20 @@ static void zebra_vxlan_if_vni_dump_vty(struct vty *vty, inet_ntop(AF_INET, &vni->mcast_grp, str, sizeof(str))); } -static void zebra_vxlan_if_vni_dump_vty_json(struct zebra_vxlan_vni *vni, - json_object *json_if) -{ - json_object_int_add(json_if, "vxlanId", vni->vni); - if (vni->access_vlan) - json_object_int_add(json_if, "accessVlanId", vni->access_vlan); - - if (vni->mcast_grp.s_addr != INADDR_ANY) - json_object_string_addf(json_if, "mcastGroup", "%pI4", - &vni->mcast_grp); -} - -struct vxlan_if_dump_ctx { - struct vty *vty; - json_object *json_if; -}; - static void zebra_vxlan_if_vni_hash_dump_vty(struct hash_bucket *bucket, void *ctxt) { struct vty *vty; - struct json_object *json_if; struct zebra_vxlan_vni *vni; vni = (struct zebra_vxlan_vni *)bucket->data; - vty = ((struct vxlan_if_dump_ctx *)ctxt)->vty; - json_if = ((struct vxlan_if_dump_ctx *)ctxt)->json_if; + vty = (struct vty *) ctxt; - if (json_if) - zebra_vxlan_if_vni_dump_vty_json(vni, json_if); - else - zebra_vxlan_if_vni_dump_vty(vty, vni); + zebra_vxlan_if_vni_dump_vty(vty, vni); } static void zebra_vxlan_if_dump_vty(struct vty *vty, struct zebra_if *zebra_if) { - struct vxlan_if_dump_ctx dump_ctx; - char str[INET6_ADDRSTRLEN]; struct zebra_l2info_vxlan *vxlan_info; struct zebra_vxlan_vni_info *vni_info; @@ -1949,9 +1925,7 @@ static void zebra_vxlan_if_dump_vty(struct vty *vty, struct zebra_if *zebra_if) vni_info = &vxlan_info->vni_info; if (vxlan_info->vtep_ip.s_addr != INADDR_ANY) - vty_out(vty, " VTEP IP: %s", - inet_ntop(AF_INET, &vxlan_info->vtep_ip, str, - sizeof(str))); + vty_out(vty, " VTEP IP: %pI4", &vxlan_info->vtep_ip); if (vxlan_info->ifindex_link && (vxlan_info->link_nsid != NS_UNKNOWN)) { struct interface *ifp; @@ -1966,48 +1940,13 @@ static void zebra_vxlan_if_dump_vty(struct vty *vty, struct zebra_if *zebra_if) if (IS_ZEBRA_VXLAN_IF_VNI(zebra_if)) { zebra_vxlan_if_vni_dump_vty(vty, &vni_info->vni); } else { - dump_ctx.json_if = NULL; - dump_ctx.vty = vty; hash_iterate(vni_info->vni_table, - zebra_vxlan_if_vni_hash_dump_vty, &dump_ctx); + zebra_vxlan_if_vni_hash_dump_vty, vty); } vty_out(vty, "\n"); } -static void zebra_vxlan_if_dump_vty_json(struct zebra_if *zebra_if, - json_object *json_if) -{ - struct vxlan_if_dump_ctx dump_ctx; - struct zebra_l2info_vxlan *vxlan_info; - struct zebra_vxlan_vni_info *vni_info; - - vxlan_info = &zebra_if->l2info.vxl; - vni_info = &vxlan_info->vni_info; - - if (vxlan_info->vtep_ip.s_addr != INADDR_ANY) - json_object_string_addf(json_if, "vtepIp", "%pI4", - &vxlan_info->vtep_ip); - - if (vxlan_info->ifindex_link && (vxlan_info->link_nsid != NS_UNKNOWN)) { - struct interface *ifp; - - ifp = if_lookup_by_index_per_ns( - zebra_ns_lookup(vxlan_info->link_nsid), - vxlan_info->ifindex_link); - json_object_string_add(json_if, "linkInterface", - ifp == NULL ? "Unknown" : ifp->name); - } - - if (IS_ZEBRA_VXLAN_IF_VNI(zebra_if)) { - zebra_vxlan_if_vni_dump_vty_json(&vni_info->vni, json_if); - } else { - dump_ctx.json_if = json_if; - hash_iterate(vni_info->vni_table, - zebra_vxlan_if_vni_hash_dump_vty, &dump_ctx); - } -} - /* Interface's information print out to vty interface. */ static void if_dump_vty(struct vty *vty, struct interface *ifp) { @@ -2317,6 +2256,59 @@ static void if_dump_vty(struct vty *vty, struct interface *ifp) #endif /* HAVE_NET_RT_IFLIST */ } +static void zebra_vxlan_if_vni_dump_vty_json(json_object *json_if, + struct zebra_vxlan_vni *vni) +{ + json_object_int_add(json_if, "vxlanId", vni->vni); + if (vni->access_vlan) + json_object_int_add(json_if, "accessVlanId", vni->access_vlan); + if (vni->mcast_grp.s_addr != INADDR_ANY) + json_object_string_addf(json_if, "mcastGroup", "%pI4", + &vni->mcast_grp); +} + +static void zebra_vxlan_if_vni_hash_dump_vty_json(struct hash_bucket *bucket, + void *ctxt) +{ + json_object *json_if; + struct zebra_vxlan_vni *vni; + + vni = (struct zebra_vxlan_vni *)bucket->data; + json_if = (json_object *)ctxt; + + zebra_vxlan_if_vni_dump_vty_json(json_if, vni); +} + +static void zebra_vxlan_if_dump_vty_json(json_object *json_if, + struct zebra_if *zebra_if) +{ + struct zebra_l2info_vxlan *vxlan_info; + struct zebra_vxlan_vni_info *vni_info; + + vxlan_info = &zebra_if->l2info.vxl; + vni_info = &vxlan_info->vni_info; + + if (vxlan_info->vtep_ip.s_addr != INADDR_ANY) + json_object_string_addf(json_if, "vtepIp", "%pI4", + &vxlan_info->vtep_ip); + + if (vxlan_info->ifindex_link && (vxlan_info->link_nsid != NS_UNKNOWN)) { + struct interface *ifp; + + ifp = if_lookup_by_index_per_ns( + zebra_ns_lookup(vxlan_info->link_nsid), + vxlan_info->ifindex_link); + json_object_string_add(json_if, "linkInterface", + ifp == NULL ? "Unknown" : ifp->name); + } + if (IS_ZEBRA_VXLAN_IF_VNI(zebra_if)) { + zebra_vxlan_if_vni_dump_vty_json(json_if, &vni_info->vni); + } else { + hash_iterate(vni_info->vni_table, + zebra_vxlan_if_vni_hash_dump_vty_json, json_if); + } +} + static void if_dump_vty_json(struct vty *vty, struct interface *ifp, json_object *json) { @@ -2451,7 +2443,8 @@ static void if_dump_vty_json(struct vty *vty, struct interface *ifp, vlan_info = &zebra_if->l2info.vl; json_object_int_add(json_if, "vlanId", vlan_info->vid); } else if (IS_ZEBRA_IF_VXLAN(ifp)) { - zebra_vxlan_if_dump_vty_json(zebra_if, json_if); + zebra_vxlan_if_dump_vty_json(json_if, zebra_if); + } else if (IS_ZEBRA_IF_GRE(ifp)) { struct zebra_l2info_gre *gre_info; |
