]> git.proxmox.com Git - mirror_frr.git/commitdiff
bgpd: Debug logging updates for EVPN
authorvivek <vivek@cumulusnetworks.com>
Mon, 15 May 2017 21:52:17 +0000 (14:52 -0700)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 12 Jul 2017 18:59:03 +0000 (14:59 -0400)
Ensure VNI and EVPN nexthops are logged in debug logs.

Updates: "bgpd: labeled unicast processing"
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
bgpd/bgp_debug.c
bgpd/bgp_debug.h
bgpd/bgp_evpn.c
bgpd/bgp_evpn.h
bgpd/bgp_route.c
bgpd/bgp_updgrp_packet.c

index 450f68fec4f3ffb30871444824ef8c7bbf1851d8..a48df5c0c8f359c761a03a18535f7c6e5d5ed259 100644 (file)
@@ -40,6 +40,8 @@
 #include "bgpd/bgp_updgrp.h"
 #include "bgpd/bgp_mplsvpn.h"
 #include "bgpd/bgp_ecommunity.h"
+#include "bgpd/bgp_label.h"
+#include "bgpd/bgp_evpn.h"
 
 unsigned long conf_bgp_debug_as4;
 unsigned long conf_bgp_debug_neighbor_events;
@@ -410,6 +412,9 @@ bgp_dump_attr (struct attr *attr, char *buf, size_t size)
         snprintf (buf + strlen (buf), size - strlen (buf), "(%s)",
                   inet_ntop (AF_INET6, &attr->extra->mp_nexthop_local, 
                              addrbuf, BUFSIZ));
+
+      if (attr->extra->mp_nexthop_len == BGP_ATTR_NHLEN_IPV4)
+        snprintf (buf, size, "nexthop %s", inet_ntoa (attr->nexthop));
     }
 
   if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_LOCAL_PREF)))
@@ -2147,12 +2152,14 @@ bgp_debug_zebra (struct prefix *p)
 }
 
 const char *
-bgp_debug_rdpfxpath2str (struct prefix_rd *prd, union prefixconstptr pu,
-                         int addpath_valid, u_int32_t addpath_id,
-                         char *str, int size)
+bgp_debug_rdpfxpath2str (afi_t afi, safi_t safi,
+                         struct prefix_rd *prd, union prefixconstptr pu,
+                         mpls_label_t *label, int addpath_valid,
+                         u_int32_t addpath_id, char *str, int size)
 {
   char rd_buf[RD_ADDRSTRLEN];
   char pfx_buf[PREFIX_STRLEN];
+  char tag_buf[30];
   /* ' with addpath ID '          17
    * max strlen of uint32       + 10
    * +/- (just in case)         +  1
@@ -2168,13 +2175,24 @@ bgp_debug_rdpfxpath2str (struct prefix_rd *prd, union prefixconstptr pu,
   if (addpath_valid)
     snprintf(pathid_buf, sizeof(pathid_buf), " with addpath ID %u", addpath_id);
 
+  tag_buf[0] = '\0';
+  if (bgp_labeled_safi (safi) && label)
+    {
+      u_int32_t label_value;
+
+      label_value = decode_label (label);
+      sprintf (tag_buf, " label %u", label_value);
+    }
+
   if (prd)
-    snprintf (str, size, "RD %s %s%s",
+    snprintf (str, size, "RD %s %s%s%s",
               prefix_rd2str(prd, rd_buf, sizeof (rd_buf)),
-              prefix2str (pu, pfx_buf, sizeof (pfx_buf)), pathid_buf);
+              prefix2str (pu, pfx_buf, sizeof (pfx_buf)),
+              tag_buf, pathid_buf);
   else
-    snprintf (str, size, "%s%s",
-              prefix2str (pu, pfx_buf, sizeof (pfx_buf)), pathid_buf);
+    snprintf (str, size, "%s%s%s",
+              prefix2str (pu, pfx_buf, sizeof (pfx_buf)),
+              tag_buf, pathid_buf);
 
   return str;
 }
index 5ec2eaa7c53d1a41d598fe12fc27651a6db42b9d..11ab4dbd657b83acf600b6a587524dc8fbe4e3f5 100644 (file)
@@ -153,7 +153,8 @@ extern int bgp_debug_bestpath(struct prefix *p);
 extern int bgp_debug_zebra(struct prefix *p);
 
 extern int bgp_debug_count(void);
-extern const char *bgp_debug_rdpfxpath2str (struct prefix_rd *, union prefixconstptr,
+extern const char *bgp_debug_rdpfxpath2str (afi_t, safi_t, struct prefix_rd *,
+                                            union prefixconstptr, mpls_label_t *,
                                             int, u_int32_t, char *, int);
 const char *bgp_notify_admin_message(char *buf, size_t bufsz, u_char *data, size_t datalen);
 
index 130017562eb1f1c7b1f5c6ca0e660dc28c2be975..5bff857236df8b3adf2e5b20e37dde99c00ae26f 100644 (file)
@@ -1968,6 +1968,19 @@ free_vni_entry (struct hash_backet *backet, struct bgp *bgp)
  * Public functions.
  */
 
+/*
+ * Function to display "tag" in route as a VNI.
+ */
+char *
+bgp_evpn_label2str (mpls_label_t *label, char *buf, int len)
+{
+  vni_t vni;
+
+  vni = label2vni (label);
+  snprintf (buf, len, "%u", vni);
+  return buf;
+}
+
 /*
  * Encode EVPN prefix in Update (MP_REACH)
  */
index ed76bc3a4d778f44f1d85f549731bdb6a4cc4cb2..9e471138f5508551beae8184b3ef4bbbc45cf6e3 100644 (file)
@@ -23,6 +23,8 @@
 
 #include "vxlan.h"
 
+extern char *
+bgp_evpn_label2str (mpls_label_t *label, char *buf, int len);
 extern void
 bgp_evpn_encode_prefix (struct stream *s, struct prefix *p,
                         struct prefix_rd *prd, mpls_label_t *label,
index e55cd7b949d4efc999cd619287b142d854d49a55..6a2cc8d4d3eb14389c5e8a254ef044dd00913e02 100644 (file)
@@ -2605,8 +2605,6 @@ bgp_update (struct peer *peer, struct prefix *p, u_int32_t addpath_id,
 
   bgp = peer->bgp;
   rn = bgp_afi_node_get (bgp->rib[afi][safi], afi, safi, p, prd);
-  label_buf[0] = '\0';
-
   has_valid_label = bgp_is_valid_label(label);
 
   if (has_valid_label)
@@ -2721,9 +2719,12 @@ bgp_update (struct peer *peer, struct prefix *p, u_int32_t addpath_id,
              && CHECK_FLAG (ri->flags, BGP_INFO_HISTORY))
            {
              if (bgp_debug_update(peer, p, NULL, 1))
-                zlog_debug ("%s rcvd %s %s", peer->host,
-                            bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
-                                      addpath_id, pfx_buf, sizeof (pfx_buf)), label_buf);
+                {
+                  bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+                                           addpath_id ? 1 : 0, addpath_id,
+                                           pfx_buf, sizeof (pfx_buf));
+                  zlog_debug ("%s rcvd %s", peer->host, pfx_buf);
+                }
 
              if (bgp_damp_update (ri, rn, afi, safi) != BGP_DAMP_SUPPRESSED)
                {
@@ -2741,10 +2742,11 @@ bgp_update (struct peer *peer, struct prefix *p, u_int32_t addpath_id,
                     peer->rcvd_attr_printed = 1;
                   }
 
-                 zlog_debug ("%s rcvd %s %s...duplicate ignored",
-                             peer->host,
-                              bgp_debug_rdpfxpath2str (prd, p, addpath_id ?
-                                1 : 0, addpath_id, pfx_buf, sizeof (pfx_buf)), label_buf);
+                  bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+                                           addpath_id ?  1 : 0, addpath_id,
+                                           pfx_buf, sizeof (pfx_buf));
+                 zlog_debug ("%s rcvd %s...duplicate ignored",
+                             peer->host, pfx_buf);
                 }
 
              /* graceful restart STALE flag unset. */
@@ -2765,18 +2767,25 @@ bgp_update (struct peer *peer, struct prefix *p, u_int32_t addpath_id,
       if (CHECK_FLAG(ri->flags, BGP_INFO_REMOVED))
         {
           if (bgp_debug_update(peer, p, NULL, 1))
-            zlog_debug ("%s rcvd %s %s, flapped quicker than processing",
-                        peer->host,
-                        bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
-                                  addpath_id, pfx_buf, sizeof (pfx_buf)), label_buf);
+            {
+              bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+                                       addpath_id ? 1 : 0, addpath_id,
+                                       pfx_buf, sizeof (pfx_buf));
+              zlog_debug ("%s rcvd %s, flapped quicker than processing",
+                          peer->host, pfx_buf);
+            }
+
           bgp_info_restore (rn, ri);
         }
 
       /* Received Logging. */
       if (bgp_debug_update(peer, p, NULL, 1))
-         zlog_debug ("%s rcvd %s %s", peer->host,
-                      bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
-                                        addpath_id, pfx_buf, sizeof (pfx_buf)), label_buf);
+        {
+          bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+                                   addpath_id ? 1 : 0, addpath_id,
+                                   pfx_buf, sizeof (pfx_buf));
+         zlog_debug ("%s rcvd %s", peer->host, pfx_buf);
+        }
 
       /* graceful restart STALE flag unset. */
       if (CHECK_FLAG (ri->flags, BGP_INFO_STALE))
@@ -2995,9 +3004,10 @@ bgp_update (struct peer *peer, struct prefix *p, u_int32_t addpath_id,
           peer->rcvd_attr_printed = 1;
         }
 
-      zlog_debug ("%s rcvd %s %s ", peer->host,
-                  bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
-                                 addpath_id, pfx_buf, sizeof (pfx_buf)), label_buf);
+      bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+                               addpath_id ? 1 : 0, addpath_id,
+                               pfx_buf, sizeof (pfx_buf));
+      zlog_debug ("%s rcvd %s", peer->host, pfx_buf);
     }
 
   /* Make new BGP info. */
@@ -3117,10 +3127,11 @@ bgp_update (struct peer *peer, struct prefix *p, u_int32_t addpath_id,
           peer->rcvd_attr_printed = 1;
         }
 
-      zlog_debug ("%s rcvd UPDATE about %s %s -- DENIED due to: %s",
-                  peer->host,
-                  bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
-                             addpath_id, pfx_buf, sizeof (pfx_buf)), label_buf, reason);
+      bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+                               addpath_id ? 1 : 0, addpath_id,
+                               pfx_buf, sizeof (pfx_buf));
+      zlog_debug ("%s rcvd UPDATE about %s -- DENIED due to: %s",
+                  peer->host, pfx_buf, reason);
     }
 
   if (ri)
@@ -3184,10 +3195,13 @@ bgp_withdraw (struct peer *peer, struct prefix *p, u_int32_t addpath_id,
     if (!bgp_adj_in_unset (rn, peer, addpath_id))
       {
         if (bgp_debug_update (peer, p, NULL, 1))
-          zlog_debug ("%s withdrawing route %s not in adj-in",
-                      peer->host,
-                      bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
-                                       addpath_id, pfx_buf, sizeof (pfx_buf)));
+          {
+            bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+                                     addpath_id ? 1 : 0, addpath_id,
+                                     pfx_buf, sizeof (pfx_buf));
+            zlog_debug ("%s withdrawing route %s not in adj-in",
+                        peer->host, pfx_buf);
+          }
         bgp_unlock_node (rn);
         return 0;
       }
@@ -3201,20 +3215,24 @@ bgp_withdraw (struct peer *peer, struct prefix *p, u_int32_t addpath_id,
   /* Logging. */
   if (bgp_debug_update(peer, p, NULL, 1))
     {
+      bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+                               addpath_id ? 1 : 0, addpath_id,
+                               pfx_buf, sizeof (pfx_buf));
       zlog_debug ("%s rcvd UPDATE about %s -- withdrawn",
-                  peer->host,
-                  bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
-                                   addpath_id, pfx_buf, sizeof (pfx_buf)));
+                  peer->host, pfx_buf);
     }
 
   /* Withdraw specified route from routing table. */
   if (ri && ! CHECK_FLAG (ri->flags, BGP_INFO_HISTORY))
     bgp_rib_withdraw (rn, ri, peer, afi, safi, prd);
   else if (bgp_debug_update(peer, p, NULL, 1))
-    zlog_debug ("%s Can't find the route %s",
-                peer->host,
-                bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
-                                    addpath_id, pfx_buf, sizeof (pfx_buf)));
+    {
+      bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+                               addpath_id ? 1 : 0, addpath_id,
+                               pfx_buf, sizeof (pfx_buf));
+      zlog_debug ("%s Can't find the route %s",
+                  peer->host, pfx_buf);
+    }
 
   /* Unlock bgp_node_get() lock. */
   bgp_unlock_node (rn);
index 872ead000c17354e9f7cead9166a0f7dee716ac0..df1bb1eab2f61b3b0a30a3731a17b174c7ce5369 100644 (file)
@@ -703,7 +703,7 @@ subgroup_update_packet (struct update_subgroup *subgrp)
   int addpath_encode = 0;
   u_int32_t addpath_tx_id = 0;
   struct prefix_rd *prd = NULL;
-  char label_buf[20];
+  mpls_label_t label = MPLS_INVALID_LABEL;
 
   if (!subgrp)
     return NULL;
@@ -718,7 +718,6 @@ subgroup_update_packet (struct update_subgroup *subgrp)
   stream_reset (s);
   snlri = subgrp->scratch;
   stream_reset (snlri);
-  label_buf[0] = '\0';
 
   bpacket_attr_vec_arr_reset (&vecarr);
 
@@ -807,8 +806,6 @@ subgroup_update_packet (struct update_subgroup *subgrp)
       else
        {
          /* Encode the prefix in MP_REACH_NLRI attribute */
-         mpls_label_t label = MPLS_INVALID_LABEL;
-
          if (rn->prn)
            prd = (struct prefix_rd *) &rn->prn->p;
 
@@ -818,9 +815,6 @@ subgroup_update_packet (struct update_subgroup *subgrp)
             if (binfo && binfo->extra)
               label = binfo->extra->label;
 
-          if (bgp_labeled_safi(safi))
-            sprintf (label_buf, "label %u", label_pton(&label));
-
          if (stream_empty (snlri))
             mpattrlen_pos = bgp_packet_mpattr_start (snlri, peer, afi, safi,
                                                      &vecarr, adv->baa->attr);
@@ -853,12 +847,11 @@ subgroup_update_packet (struct update_subgroup *subgrp)
               send_attr_printed = 1;
             }
 
-          zlog_debug ("u%" PRIu64 ":s%" PRIu64 " send UPDATE %s %s",
-                      subgrp->update_group->id, subgrp->id,
-                      bgp_debug_rdpfxpath2str (prd, &rn->p, addpath_encode,
-                                               addpath_tx_id,
-                                               pfx_buf, sizeof (pfx_buf)),
-                                               label_buf);
+          bgp_debug_rdpfxpath2str (afi, safi, prd, &rn->p, &label,
+                                   addpath_encode, addpath_tx_id,
+                                   pfx_buf, sizeof (pfx_buf));
+          zlog_debug ("u%" PRIu64 ":s%" PRIu64 " send UPDATE %s",
+                      subgrp->update_group->id, subgrp->id, pfx_buf);
        }
 
       /* Synchnorize attribute.  */
@@ -1011,11 +1004,11 @@ subgroup_withdraw_packet (struct update_subgroup *subgrp)
        {
           char pfx_buf[BGP_PRD_PATH_STRLEN];
 
+          bgp_debug_rdpfxpath2str (afi, safi, prd, &rn->p, NULL,
+                                   addpath_encode, addpath_tx_id,
+                                   pfx_buf, sizeof (pfx_buf));
          zlog_debug ("u%" PRIu64 ":s%" PRIu64 " send UPDATE %s -- unreachable",
-                      subgrp->update_group->id, subgrp->id,
-                      bgp_debug_rdpfxpath2str (prd, &rn->p,
-                                               addpath_encode, addpath_tx_id,
-                                               pfx_buf, sizeof (pfx_buf)));
+                      subgrp->update_group->id, subgrp->id, pfx_buf);
        }
 
       subgrp->scount--;