diff options
author | Jakob Schlyter <jakob@cvs.openbsd.org> | 2003-12-26 20:52:15 +0000 |
---|---|---|
committer | Jakob Schlyter <jakob@cvs.openbsd.org> | 2003-12-26 20:52:15 +0000 |
commit | c4e8f05dc74bc167e19c10fa6246513737c64199 (patch) | |
tree | 5b7973090d5664fae7e69052f4835f2cac2c1a16 /usr.sbin/bgpd/rde.c | |
parent | 80546cee49628606ea0a02fa0b72ba955cd3b05f (diff) |
add option 'log updates' to log updates. ok henning@
Diffstat (limited to 'usr.sbin/bgpd/rde.c')
-rw-r--r-- | usr.sbin/bgpd/rde.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/usr.sbin/bgpd/rde.c b/usr.sbin/bgpd/rde.c index 2f48e8a402b..7c9bd4d99a2 100644 --- a/usr.sbin/bgpd/rde.c +++ b/usr.sbin/bgpd/rde.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rde.c,v 1.33 2003/12/26 18:33:11 henning Exp $ */ +/* $OpenBSD: rde.c,v 1.34 2003/12/26 20:52:14 jakob Exp $ */ /* * Copyright (c) 2003 Henning Brauer <henning@openbsd.org> @@ -41,6 +41,9 @@ int rde_update_get_prefix(u_char *, u_int16_t, struct in_addr *, void init_attr_flags(struct attr_flags *); int rde_update_get_attr(u_char *, u_int16_t, struct attr_flags *); void rde_update_err(u_int32_t, enum suberr_update); +void rde_update_log(const char *, + const struct rde_peer *, const struct attr_flags *, + const struct in_addr *, u_int8_t); void peer_init(struct bgpd_config *, u_long); struct rde_peer *peer_add(u_int32_t, struct peer_config *); @@ -312,6 +315,7 @@ rde_update_dispatch(struct imsg *imsg) } p += pos; withdrawn_len -= pos; + rde_update_log("withdraw", peer, NULL, &prefix, prefixlen); prefix_remove(peer, prefix, prefixlen); } @@ -346,6 +350,7 @@ rde_update_dispatch(struct imsg *imsg) } p += pos; nlri_len -= pos; + rde_update_log("update", peer, &attrs, &prefix, prefixlen); path_update(peer, &attrs, prefix, prefixlen); } @@ -503,6 +508,27 @@ rde_update_err(u_int32_t peerid, enum suberr_update errorcode) fatal("imsg_compose error"); } +void +rde_update_log(const char *message, + const struct rde_peer *peer, const struct attr_flags *attr, + const struct in_addr *prefix, u_int8_t prefixlen) +{ + char *neighbor; + + if (! (conf->log & BGPD_LOG_UPDATES)) + return; + + neighbor = strdup(inet_ntoa(peer->conf.remote_addr.sin_addr)); + if (neighbor == NULL) + return; + + logit(LOG_DEBUG, "neighbor %s (AS%u) %s %s/%u", + neighbor, peer->conf.remote_as, message, + inet_ntoa(*prefix), prefixlen); + + free(neighbor); +} + /* * kroute specific functions */ |