From 4ec944086b343d30a3467eabf234e2670fbd0c2c Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Sat, 8 Dec 2018 00:16:27 +0000 Subject: [PATCH] vrrpd: improve logging Signed-off-by: Quentin Young --- vrrpd/vrrp.c | 53 ++++++++++++++++++++++++++++++++++++++---------- vrrpd/vrrp.h | 15 +++++++++----- vrrpd/vrrp_arp.c | 23 +++++++++++++-------- vrrpd/vrrp_vty.c | 14 +------------ 4 files changed, 68 insertions(+), 37 deletions(-) diff --git a/vrrpd/vrrp.c b/vrrpd/vrrp.c index c7ef6dc6f8..73493fc15b 100644 --- a/vrrpd/vrrp.c +++ b/vrrpd/vrrp.c @@ -31,6 +31,20 @@ #include "vrrp_arp.h" #include "vrrp_packet.h" +#define VRRP_LOGPFX "[CORE] " + +const char *vrrp_state_names[3] = { + [VRRP_STATE_INITIALIZE] = "Initialize", + [VRRP_STATE_MASTER] = "Master", + [VRRP_STATE_BACKUP] = "Backup", +}; + +const char *vrrp_event_names[2] = { + [VRRP_EVENT_STARTUP] = "Startup", + [VRRP_EVENT_SHUTDOWN] = "Shutdown", +}; + + /* Utility functions ------------------------------------------------------- */ /* @@ -201,6 +215,12 @@ static void vrrp_send_advertisement(struct vrrp_vrouter *vr) ssize_t sent = sendto(vr->sock, pkt, (size_t)pktlen, 0, &dest, sizeof(struct sockaddr_in)); + + if (sent < 0) { + zlog_warn(VRRP_LOGPFX VRRP_LOGPFX_VRID + "Failed to send VRRP Advertisement", + vr->vrid); + } } /* FIXME: @@ -224,13 +244,16 @@ static int vrrp_socket(struct vrrp_vrouter *vr) int ret; struct connected *c; - errno = 0; frr_elevate_privs(&vrrp_privs) { vr->sock = socket(AF_INET, SOCK_RAW, IPPROTO_VRRP); } - if (vr->sock < 0) - perror("Error opening VRRP socket"); + if (vr->sock < 0) { + zlog_warn(VRRP_LOGPFX VRRP_LOGPFX_VRID + "Can't create VRRP socket", + vr->vrid); + return errno; + } /* Join the multicast group.*/ @@ -248,9 +271,10 @@ static int vrrp_socket(struct vrrp_vrouter *vr) ret = setsockopt(vr->sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&req, sizeof(struct ip_mreq)); if (ret < 0) { - // int err = errno; - /* VRRP_LOG(("cant do IP_ADD_MEMBERSHIP errno=%d\n", err)); */ - return -1; + zlog_warn(VRRP_LOGPFX VRRP_LOGPFX_VRID + "Can't join VRRP multicast group", + vr->vrid); + return errno; } return 0; } @@ -318,6 +342,8 @@ static void vrrp_change_state(struct vrrp_vrouter *vr, int to) /* Call our handlers, then any subscribers */ vrrp_change_state_handlers[to](vr); hook_call(vrrp_change_state_hook, vr, to); + zlog_info(VRRP_LOGPFX VRRP_LOGPFX_VRID "%s -> %s", vr->vrid, + vrrp_state_names[vr->fsm.state], vrrp_state_names[to]); vr->fsm.state = to; } @@ -328,6 +354,8 @@ static int vrrp_adver_timer_expire(struct thread *thread) { struct vrrp_vrouter *vr = thread->arg; + zlog_info(VRRP_LOGPFX VRRP_LOGPFX_VRID "Adver_Timer expired", vr->vrid); + if (vr->fsm.state == VRRP_STATE_BACKUP) { vrrp_send_advertisement(vr); /* FIXME: vrrp_send_gratuitous_arp(vr); */ @@ -340,11 +368,14 @@ static int vrrp_adver_timer_expire(struct thread *thread) } /* - * Called when Master_Down timer expires. + * Called when Master_Down_Timer expires. */ static int vrrp_master_down_timer_expire(struct thread *thread) { - /* struct vrrp_vrouter *vr = thread->arg; */ + struct vrrp_vrouter *vr = thread->arg; + + zlog_info(VRRP_LOGPFX VRRP_LOGPFX_VRID "Master_Down_Timer expired", + vr->vrid); return 0; } @@ -378,10 +409,8 @@ static int vrrp_startup(struct vrrp_vrouter *vr) /* Create socket */ int ret = vrrp_socket(vr); - if (ret < 0) { - zlog_warn("Cannot create VRRP socket\n"); + if (ret < 0) return ret; - } /* Schedule listener */ /* ... */ @@ -442,6 +471,8 @@ static int (*vrrp_event_handlers[])(struct vrrp_vrouter *vr) = { */ int vrrp_event(struct vrrp_vrouter *vr, int event) { + zlog_info(VRRP_LOGPFX VRRP_LOGPFX_VRID "'%s' event", vr->vrid, + vrrp_event_names[vr->fsm.state]); return vrrp_event_handlers[event](vr); } diff --git a/vrrpd/vrrp.h b/vrrpd/vrrp.h index 1564cced59..6ce0e03bf4 100644 --- a/vrrpd/vrrp.h +++ b/vrrpd/vrrp.h @@ -37,6 +37,8 @@ #define VRRP_MCAST_GROUP_HEX 0xe0000012 #define IPPROTO_VRRP 112 +#define VRRP_LOGPFX_VRID "[VRID: %u] " + /* threadmaster */ extern struct thread_master *master; @@ -195,11 +197,14 @@ void vrrp_add_ip(struct vrrp_vrouter *vr, struct in_addr v4); /* State machine ----------------------------------------------------------- */ -#define VRRP_STATE_INITIALIZE 1 -#define VRRP_STATE_MASTER 2 -#define VRRP_STATE_BACKUP 3 -#define VRRP_EVENT_STARTUP 1 -#define VRRP_EVENT_SHUTDOWN 2 +#define VRRP_STATE_INITIALIZE 0 +#define VRRP_STATE_MASTER 1 +#define VRRP_STATE_BACKUP 2 +#define VRRP_EVENT_STARTUP 0 +#define VRRP_EVENT_SHUTDOWN 1 + +extern const char *vrrp_state_names[3]; +extern const char *vrrp_event_names[2]; /* * This hook called whenever the state of a Virtual Router changes, after the diff --git a/vrrpd/vrrp_arp.c b/vrrpd/vrrp_arp.c index f917c7ec3a..45c4071875 100644 --- a/vrrpd/vrrp_arp.c +++ b/vrrpd/vrrp_arp.c @@ -36,6 +36,8 @@ #include "vrrp.h" #include "vrrp_arp.h" +#define VRRP_LOGPFX "[ARP] " + /* * The size of the garp packet buffer should be the large enough to hold the * largest arp packet to be sent + the size of the link layer header for the @@ -121,8 +123,9 @@ void vrrp_garp_send(struct vrrp_vrouter *vr, 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", - ifp->name); + vr->vrid, ifp->name); return; } @@ -131,12 +134,15 @@ void vrrp_garp_send(struct vrrp_vrouter *vr, struct in_addr *v4) /* Send garp */ inet_ntop(AF_INET, v4, astr, sizeof(astr)); - zlog_info("Sending gratuitous ARP on %s for %s", ifp->name, astr); + zlog_info(VRRP_LOGPFX VRRP_LOGPFX_VRID + "Sending gratuitous ARP on %s for %s", + vr->vrid, ifp->name, astr); sent_len = vrrp_send_garp(ifp, garpbuf, garpbuf_len); if (sent_len < 0) - zlog_warn("Error sending gratuitous ARP on %s for %s", - ifp->name, astr); + zlog_warn(VRRP_LOGPFX VRRP_LOGPFX_VRID + "Error sending gratuitous ARP on %s for %s", + vr->vrid, ifp->name, astr); } void vrrp_garp_send_all(struct vrrp_vrouter *vr) @@ -146,8 +152,9 @@ void vrrp_garp_send_all(struct vrrp_vrouter *vr) /* 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", - ifp->name); + vr->vrid, ifp->name); return; } @@ -170,10 +177,10 @@ void vrrp_garp_init(void) } if (garp_fd > 0) - zlog_info("Initialized gratuitous ARP socket"); + zlog_info(VRRP_LOGPFX "Initialized gratuitous ARP socket"); else { - perror("Error initializing gratuitous ARP socket"); - zlog_err("Error initializing gratuitous ARP socket"); + zlog_err(VRRP_LOGPFX + "Error initializing gratuitous ARP socket"); return; } } diff --git a/vrrpd/vrrp_vty.c b/vrrpd/vrrp_vty.c index 4a03dc785b..7da6646999 100644 --- a/vrrpd/vrrp_vty.c +++ b/vrrpd/vrrp_vty.c @@ -162,19 +162,7 @@ static void vrrp_show(struct vty *vty, struct vrrp_vrouter *vr) { char ethstr[ETHER_ADDR_STRLEN]; char ipstr[INET_ADDRSTRLEN]; - const char *stastr; - - switch (vr->fsm.state) { - case VRRP_STATE_INITIALIZE: - stastr = "Initialize"; - break; - case VRRP_STATE_MASTER: - stastr = "Master"; - break; - case VRRP_STATE_BACKUP: - stastr = "Backup"; - break; - } + const char *stastr = vrrp_state_names[vr->fsm.state]; struct ttable *tt = ttable_new(&ttable_styles[TTSTYLE_BLANK]); -- 2.39.5