[ovs-dev] [PATCH ovn] controller: bfd: improve debugging logs

Lorenzo Bianconi lorenzo.bianconi at redhat.com
Sat Apr 24 12:46:29 UTC 2021


Add new debug logs in pinctrl_handle_bfd_msg flow path useful for
debugging

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi at redhat.com>
---
 controller/pinctrl.c | 28 +++++++++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/controller/pinctrl.c b/controller/pinctrl.c
index 523a45b9a..bef9b23fa 100644
--- a/controller/pinctrl.c
+++ b/controller/pinctrl.c
@@ -6819,54 +6819,71 @@ next:
 static bool
 pinctrl_check_bfd_msg(const struct flow *ip_flow, struct dp_packet *pkt_in)
 {
+    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(30, 30);
     if (ip_flow->dl_type != htons(ETH_TYPE_IP) &&
         ip_flow->dl_type != htons(ETH_TYPE_IPV6)) {
+        VLOG_DBG_RL(&rl, "BFD action on non-IP packet (%"PRIx16")",
+                    ntohs(ip_flow->dl_type));
         return false;
     }
 
     if (ip_flow->nw_proto != IPPROTO_UDP) {
+        VLOG_DBG_RL(&rl, "BFD action on non-UDP packet %02x",
+                    ip_flow->nw_proto);
         return false;
     }
 
     struct udp_header *udp_hdr = dp_packet_l4(pkt_in);
     if (udp_hdr->udp_dst != htons(BFD_DEST_PORT)) {
+        VLOG_DBG_RL(&rl, "BFD action on wrong UDP dst port (%"PRIx16")",
+                    ntohs(udp_hdr->udp_dst));
         return false;
     }
 
     const struct bfd_msg *msg = dp_packet_get_udp_payload(pkt_in);
     uint8_t version = msg->vers_diag >> 5;
     if (version != BFD_VERSION) {
+        VLOG_DBG_RL(&rl, "BFD action: unsupported version %d", version);
         return false;
     }
 
     enum bfd_flags flags = msg->flags & BFD_FLAGS_MASK;
     if (flags & BFD_FLAG_AUTH) {
         /* AUTH not supported yet */
+        VLOG_DBG_RL(&rl, "BFD action: AUTH not supported yet");
         return false;
     }
 
     if (msg->length < BFD_PACKET_LEN) {
+        VLOG_DBG_RL(&rl, "BFD action: packet is too short %d", msg->length);
         return false;
     }
 
     if (!msg->mult) {
+        VLOG_DBG_RL(&rl, "BFD action: multiplier not set");
         return false;
     }
 
     if (flags & BFD_FLAG_MULTIPOINT) {
+        VLOG_DBG_RL(&rl, "BFD action: MULTIPOINT not supported yet");
         return false;
     }
 
     if (!msg->my_disc) {
+        VLOG_DBG_RL(&rl, "BFD action: my_disc not set");
         return false;
     }
 
     if ((flags & BFD_FLAG_FINAL) && (flags & BFD_FLAG_POLL)) {
+        VLOG_DBG_RL(&rl, "BFD action: wrong flags combination %08x", flags);
         return false;
     }
 
     enum bfd_state peer_state = msg->flags >> 6;
     if (peer_state >= BFD_STATE_INIT && !msg->your_disc) {
+        VLOG_DBG_RL(&rl,
+                    "BFD action: remote state is %s and your_disc is not set",
+                    bfd_get_status(peer_state));
         return false;
     }
 
@@ -6879,8 +6896,6 @@ pinctrl_handle_bfd_msg(struct rconn *swconn, const struct flow *ip_flow,
     OVS_REQUIRES(pinctrl_mutex)
 {
     if (!pinctrl_check_bfd_msg(ip_flow, pkt_in)) {
-        static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
-        VLOG_WARN_RL(&rl, "BFD packet discarded");
         return;
     }
 
@@ -6894,9 +6909,9 @@ pinctrl_handle_bfd_msg(struct rconn *swconn, const struct flow *ip_flow,
     const struct bfd_msg *msg = dp_packet_get_udp_payload(pkt_in);
     struct bfd_entry *entry =
         pinctrl_find_bfd_monitor_entry_by_disc(ip_src, msg->your_disc);
-    free(ip_src);
 
     if (!entry) {
+        free(ip_src);
         return;
     }
 
@@ -6908,6 +6923,13 @@ pinctrl_handle_bfd_msg(struct rconn *swconn, const struct flow *ip_flow,
                                                entry->local_min_rx);
 
     enum bfd_state peer_state = msg->flags >> 6;
+
+    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(30, 30);
+    VLOG_DBG_RL(&rl, "rx BFD packets from %s, remote state %s, local state %s",
+                ip_src, bfd_get_status(peer_state),
+                bfd_get_status(entry->state));
+    free(ip_src);
+
     if (peer_state == BFD_STATE_ADMIN_DOWN &&
         entry->state >= BFD_STATE_INIT) {
         entry->state = BFD_STATE_DOWN;
-- 
2.30.2



More information about the dev mailing list