]> git.proxmox.com Git - mirror_frr.git/blobdiff - vrrpd/vrrp_arp.c
Merge pull request #5793 from ton31337/fix/formatting_show_bgp_summary_failed
[mirror_frr.git] / vrrpd / vrrp_arp.c
index dd3c635beb543d6987d18d4f9aaf5e4548d980c5..750050e8c33bd414921112101c121045d7711732 100644 (file)
@@ -123,31 +123,39 @@ void vrrp_garp_send(struct vrrp_router *r, struct in_addr *v4)
        /* If the interface doesn't support ARP, don't try sending */
        if (ifp->flags & IFF_NOARP) {
                zlog_warn(
-                       VRRP_LOGPFX VRRP_LOGPFX_VRID
-                       "Unable to send gratuitous ARP on %s; has IFF_NOARP\n",
-                       r->vr->vrid, ifp->name);
+                       VRRP_LOGPFX VRRP_LOGPFX_VRID VRRP_LOGPFX_FAM
+                       "Unable to send gratuitous ARP on %s; has IFF_NOARP",
+                       r->vr->vrid, family2str(r->family), ifp->name);
                return;
        }
 
        /* Build garp */
        garpbuf_len = vrrp_build_garp(garpbuf, ifp, v4);
 
+       if (garpbuf_len < 0) {
+               zlog_warn(
+                       VRRP_LOGPFX VRRP_LOGPFX_VRID VRRP_LOGPFX_FAM
+                       "Unable to send gratuitous ARP on %s; MAC address unknown",
+                       r->vr->vrid, family2str(r->family), ifp->name);
+               return;
+       };
+
        /* Send garp */
        inet_ntop(AF_INET, v4, astr, sizeof(astr));
 
        DEBUGD(&vrrp_dbg_arp,
-              VRRP_LOGPFX VRRP_LOGPFX_VRID
+              VRRP_LOGPFX VRRP_LOGPFX_VRID VRRP_LOGPFX_FAM
               "Sending gratuitous ARP on %s for %s",
-              r->vr->vrid, ifp->name, astr);
+              r->vr->vrid, family2str(r->family), ifp->name, astr);
        if (DEBUG_MODE_CHECK(&vrrp_dbg_arp, DEBUG_MODE_ALL))
                zlog_hexdump(garpbuf, garpbuf_len);
 
        sent_len = vrrp_send_garp(ifp, garpbuf, garpbuf_len);
 
        if (sent_len < 0)
-               zlog_warn(VRRP_LOGPFX VRRP_LOGPFX_VRID
+               zlog_warn(VRRP_LOGPFX VRRP_LOGPFX_VRID VRRP_LOGPFX_FAM
                          "Error sending gratuitous ARP on %s for %s",
-                         r->vr->vrid, ifp->name, astr);
+                         r->vr->vrid, family2str(r->family), ifp->name, astr);
        else
                ++r->stats.garp_tx_cnt;
 }
@@ -161,9 +169,9 @@ void vrrp_garp_send_all(struct vrrp_router *r)
        /* If the interface doesn't support ARP, don't try sending */
        if (ifp->flags & IFF_NOARP) {
                zlog_warn(
-                       VRRP_LOGPFX VRRP_LOGPFX_VRID
+                       VRRP_LOGPFX VRRP_LOGPFX_VRID VRRP_LOGPFX_FAM
                        "Unable to send gratuitous ARP on %s; has IFF_NOARP\n",
-                       r->vr->vrid, ifp->name);
+                       r->vr->vrid, family2str(r->family), ifp->name);
                return;
        }
 
@@ -180,7 +188,7 @@ void vrrp_garp_init(void)
        /* Create the socket descriptor */
        /* FIXME: why ETH_P_RARP? */
        errno = 0;
-       frr_elevate_privs(&vrrp_privs) {
+       frr_with_privs(&vrrp_privs) {
                garp_fd = socket(PF_PACKET, SOCK_RAW | SOCK_CLOEXEC,
                                 htons(ETH_P_RARP));
        }