Skip to content

Commit

Permalink
work on making log.c similar in all daemons:
Browse files Browse the repository at this point in the history
move daemon-local functions into new logmsg.c, and reduce
the (mostly whitespace) differences so that log.c's can be diffed easily.

ok claudio@
  • Loading branch information
benno committed Sep 2, 2016
1 parent 6b7ee92 commit a8dc55d
Show file tree
Hide file tree
Showing 7 changed files with 284 additions and 243 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

PROG= eigrpd
SRCS= control.c eigrpd.c eigrpe.c hello.c in_cksum.c interface.c \
kroute.c log.c neighbor.c packet.c parse.y printconf.c query.c \
rde.c rde_dual.c reply.c rtp.c tlv.c update.c util.c
kroute.c log.c logmsg.c neighbor.c packet.c parse.y printconf.c \
query.c rde.c rde_dual.c reply.c rtp.c tlv.c update.c util.c

MAN= eigrpd.8 eigrpd.conf.5

Expand Down
1 change: 1 addition & 0 deletions eigrpd.c
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ main(int argc, char *argv[])

conffile = CONF_FILE;
eigrpd_process = PROC_MAIN;
log_procname = log_procnames[eigrpd_process];
sockname = EIGRPD_SOCKET;

log_init(1); /* log to stderr until daemonized */
Expand Down
19 changes: 19 additions & 0 deletions eigrpd.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,12 @@
#define F_CTL_ACTIVE 0x0400
#define F_CTL_ALLLINKS 0x0800

static const char * const log_procnames[] = {
"parent",
"eigrpe",
"rde"
};

struct imsgev {
struct imsgbuf ibuf;
void (*handler)(int, short, void *);
Expand Down Expand Up @@ -502,4 +508,17 @@ void config_clear(struct eigrpd_conf *);
/* printconf.c */
void print_config(struct eigrpd_conf *);

/* logmsg.c */
const char *log_in6addr(const struct in6_addr *);
const char *log_in6addr_scope(const struct in6_addr *, unsigned int);
const char *log_sockaddr(void *);
const char *log_addr(int, union eigrpd_addr *);
const char *log_prefix(struct rt_node *);
const char *log_route_origin(int, struct rde_nbr *);
const char *opcode_name(uint8_t);
const char *af_name(int);
const char *if_type_name(enum iface_type);
const char *dual_state_name(int);
const char *ext_proto_name(int);

#endif /* _EIGRPD_H_ */
1 change: 1 addition & 0 deletions eigrpe.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ eigrpe(int debug, int verbose, char *sockname)

setproctitle("eigrp engine");
eigrpd_process = PROC_EIGRP_ENGINE;
log_procname = log_procnames[eigrpd_process];

if (setgroups(1, &pw->pw_gid) ||
setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) ||
Expand Down
218 changes: 9 additions & 209 deletions log.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,20 +26,17 @@
#include <stdlib.h>
#include <string.h>
#include <syslog.h>
#include <time.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netdb.h>

#include "eigrpd.h"
#include "rde.h"
#include "log.h"

static const char * const procnames[] = {
"parent",
"eigrpe",
"rde"
};

int debug;
int verbose;
int debug;
int verbose;
const char *log_procname;

void
log_init(int n_debug)
Expand Down Expand Up @@ -149,15 +146,15 @@ void
fatal(const char *emsg)
{
if (emsg == NULL)
logit(LOG_CRIT, "fatal in %s: %s", procnames[eigrpd_process],
logit(LOG_CRIT, "fatal in %s: %s", log_procnames[eigrpd_process],
strerror(errno));
else
if (errno)
logit(LOG_CRIT, "fatal in %s: %s: %s",
procnames[eigrpd_process], emsg, strerror(errno));
log_procnames[eigrpd_process], emsg, strerror(errno));
else
logit(LOG_CRIT, "fatal in %s: %s",
procnames[eigrpd_process], emsg);
log_procnames[eigrpd_process], emsg);

exit(1);
}
Expand All @@ -168,200 +165,3 @@ fatalx(const char *emsg)
errno = 0;
fatal(emsg);
}

#define NUM_LOGS 4
const char *
log_sockaddr(void *vp)
{
static char buf[NUM_LOGS][NI_MAXHOST];
static int round = 0;
struct sockaddr *sa = vp;

round = (round + 1) % NUM_LOGS;

if (getnameinfo(sa, sa->sa_len, buf[round], NI_MAXHOST, NULL, 0,
NI_NUMERICHOST))
return ("(unknown)");
else
return (buf[round]);
}

const char *
log_in6addr(const struct in6_addr *addr)
{
struct sockaddr_in6 sa_in6;

memset(&sa_in6, 0, sizeof(sa_in6));
sa_in6.sin6_len = sizeof(sa_in6);
sa_in6.sin6_family = AF_INET6;
sa_in6.sin6_addr = *addr;

recoverscope(&sa_in6);

return (log_sockaddr(&sa_in6));
}

const char *
log_in6addr_scope(const struct in6_addr *addr, unsigned int ifindex)
{
struct sockaddr_in6 sa_in6;

memset(&sa_in6, 0, sizeof(sa_in6));
sa_in6.sin6_len = sizeof(sa_in6);
sa_in6.sin6_family = AF_INET6;
sa_in6.sin6_addr = *addr;

addscope(&sa_in6, ifindex);

return (log_sockaddr(&sa_in6));
}

const char *
log_addr(int af, union eigrpd_addr *addr)
{
static char buf[NUM_LOGS][INET6_ADDRSTRLEN];
static int round = 0;

switch (af) {
case AF_INET:
round = (round + 1) % NUM_LOGS;
if (inet_ntop(AF_INET, &addr->v4, buf[round],
sizeof(buf[round])) == NULL)
return ("???");
return (buf[round]);
case AF_INET6:
return (log_in6addr(&addr->v6));
default:
break;
}

return ("???");
}

const char *
log_prefix(struct rt_node *rn)
{
static char buf[64];

if (snprintf(buf, sizeof(buf), "%s/%u", log_addr(rn->eigrp->af,
&rn->prefix), rn->prefixlen) == -1)
return ("???");

return (buf);
}

const char *
log_route_origin(int af, struct rde_nbr *nbr)
{
if (nbr->flags & F_RDE_NBR_SELF) {
if (nbr->flags & F_RDE_NBR_REDIST)
return ("redistribute");
if (nbr->flags & F_RDE_NBR_SUMMARY)
return ("summary");
else
return ("connected");
}

return (log_addr(af, &nbr->addr));
}

const char *
opcode_name(uint8_t opcode)
{
switch (opcode) {
case EIGRP_OPC_UPDATE:
return ("UPDATE");
case EIGRP_OPC_REQUEST:
return ("REQUEST");
case EIGRP_OPC_QUERY:
return ("QUERY");
case EIGRP_OPC_REPLY:
return ("REPLY");
case EIGRP_OPC_HELLO:
return ("HELLO");
case EIGRP_OPC_PROBE:
return ("PROBE");
case EIGRP_OPC_SIAQUERY:
return ("SIAQUERY");
case EIGRP_OPC_SIAREPLY:
return ("SIAREPLY");
default:
return ("UNKNOWN");
}
}

const char *
af_name(int af)
{
switch (af) {
case AF_INET:
return ("ipv4");
case AF_INET6:
return ("ipv6");
default:
return ("UNKNOWN");
}
}

const char *
if_type_name(enum iface_type type)
{
switch (type) {
case IF_TYPE_POINTOPOINT:
return ("POINTOPOINT");
case IF_TYPE_BROADCAST:
return ("BROADCAST");
default:
return ("UNKNOWN");
}
}

const char *
dual_state_name(int state)
{
switch (state) {
case DUAL_STA_PASSIVE:
return ("PASSIVE");
case DUAL_STA_ACTIVE0:
return ("ACTIVE(Oij=0)");
case DUAL_STA_ACTIVE1:
return ("ACTIVE(Oij=1)");
case DUAL_STA_ACTIVE2:
return ("ACTIVE(Oij=2)");
case DUAL_STA_ACTIVE3:
return ("ACTIVE(Oij=3)");
default:
return ("UNKNOWN");
}
}

const char *
ext_proto_name(int proto)
{
switch (proto) {
case EIGRP_EXT_PROTO_IGRP:
return ("IGRP");
case EIGRP_EXT_PROTO_EIGRP:
return ("EIGRP");
case EIGRP_EXT_PROTO_STATIC:
return ("Static");
case EIGRP_EXT_PROTO_RIP:
return ("RIP");
case EIGRP_EXT_PROTO_HELLO:
return ("HELLO");
case EIGRP_EXT_PROTO_OSPF:
return ("OSPF");
case EIGRP_EXT_PROTO_ISIS:
return ("ISIS");
case EIGRP_EXT_PROTO_EGP:
return ("EGP");
case EIGRP_EXT_PROTO_BGP:
return ("BGP");
case EIGRP_EXT_PROTO_IDRP:
return ("IDRP");
case EIGRP_EXT_PROTO_CONN:
return ("Connected");
default:
return ("UNKNOWN");
}
}
56 changes: 24 additions & 32 deletions log.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,39 +16,31 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

#ifndef _LOG_H_
#define _LOG_H_
#ifndef LOG_H
#define LOG_H

#include <stdarg.h>
#include <sys/cdefs.h>

void log_init(int);
void log_verbose(int);
void logit(int, const char *, ...)
__attribute__((__format__ (printf, 2, 3)));
void vlog(int, const char *, va_list)
__attribute__((__format__ (printf, 2, 0)));
void log_warn(const char *, ...)
__attribute__((__format__ (printf, 1, 2)));
void log_warnx(const char *, ...)
__attribute__((__format__ (printf, 1, 2)));
void log_info(const char *, ...)
__attribute__((__format__ (printf, 1, 2)));
void log_debug(const char *, ...)
__attribute__((__format__ (printf, 1, 2)));
void fatal(const char *) __dead
__attribute__((__format__ (printf, 1, 0)));
void fatalx(const char *) __dead
__attribute__((__format__ (printf, 1, 0)));
const char *log_in6addr(const struct in6_addr *);
const char *log_in6addr_scope(const struct in6_addr *, unsigned int);
const char *log_sockaddr(void *);
const char *log_addr(int, union eigrpd_addr *);
const char *log_prefix(struct rt_node *);
const char *log_route_origin(int, struct rde_nbr *);
const char *opcode_name(uint8_t);
const char *af_name(int);
const char *if_type_name(enum iface_type);
const char *dual_state_name(int);
const char *ext_proto_name(int);
extern const char *log_procname;

#endif /* _LOG_H_ */
void log_init(int);
void log_verbose(int);
void logit(int, const char *, ...)
__attribute__((__format__ (printf, 2, 3)));
void vlog(int, const char *, va_list)
__attribute__((__format__ (printf, 2, 0)));
void log_warn(const char *, ...)
__attribute__((__format__ (printf, 1, 2)));
void log_warnx(const char *, ...)
__attribute__((__format__ (printf, 1, 2)));
void log_info(const char *, ...)
__attribute__((__format__ (printf, 1, 2)));
void log_debug(const char *, ...)
__attribute__((__format__ (printf, 1, 2)));
void fatal(const char *) __dead
__attribute__((__format__ (printf, 1, 0)));
void fatalx(const char *) __dead
__attribute__((__format__ (printf, 1, 0)));

#endif /* LOG_H */
Loading

0 comments on commit a8dc55d

Please sign in to comment.