X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/7ed14135434df136e971a43b1774b827714ef7f9..98fdb08d96bd62384e5f4f18d63bd2045c302e1f:/peer.c diff --git a/peer.c b/peer.c index e9fd280c..15243b71 100644 --- a/peer.c +++ b/peer.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: peer.c,v 1.9 2003/07/13 11:19:49 mdw Exp $ + * $Id$ * * Communication with the peer * @@ -26,44 +26,6 @@ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: peer.c,v $ - * Revision 1.9 2003/07/13 11:19:49 mdw - * Incopatible protocol fix! Include message type code under MAC tag to prevent - * cut-and-paste from key-exchange messages to general packet transport. - * - * Revision 1.8 2003/05/16 12:09:03 mdw - * Allow binding to a chosen address. - * - * Revision 1.7 2003/04/15 14:12:05 mdw - * Insert a newline to improve readability. - * - * Revision 1.6 2001/06/19 22:07:59 mdw - * Use magic number for packet size. - * - * Revision 1.5 2001/03/03 11:15:19 mdw - * Set the socket send and receive buffers to maximum. At least this way, - * we won't drop large packets on the floor. If the administrator wants to - * prevent fragmentation of TrIPE messages, he can lower the MTU on the - * tunnel interface. Getting path-MTU stuff out of the kernel is too much - * system-specific hard work for this program. - * - * Revision 1.4 2001/02/16 21:40:24 mdw - * Change key exchange message interface. Maintain statistics. - * - * Revision 1.3 2001/02/04 17:10:58 mdw - * Make file descriptors be nonblocking and close-on-exec. - * - * Revision 1.2 2001/02/03 22:40:29 mdw - * Put timer information into the entropy pool when packets are received - * and on similar events. Reseed the generator on the interval timer. - * - * Revision 1.1 2001/02/03 20:26:37 mdw - * Initial checkin. - * - */ - /*----- Header files ------------------------------------------------------*/ #include "tripe.h" @@ -101,7 +63,7 @@ static void p_read(int fd, unsigned mode, void *v) sz = sizeof(addr); n = recvfrom(fd, buf_i, sizeof(buf_i), 0, &a.sa, &sz); if (n < 0) { - a_warn("error reading socket: %s", strerror(errno)); + a_warn("PEER - socket-read-error -- %s", strerror(errno)); return; } @@ -113,13 +75,15 @@ static void p_read(int fd, unsigned mode, void *v) p->peer.sin.sin_port == a.sin.sin_port) goto found; } - a_warn("packet from unexpected peer: %s:%u", - inet_ntoa(a.sin.sin_addr), (unsigned)ntohs(a.sin.sin_port)); + a_warn("PEER - unexpected-source INET %s %u", + inet_ntoa(a.sin.sin_addr), (unsigned)ntohs(a.sin.sin_port)); return; found: - T( trace(T_PEER, "peer: packet received from `%s'", p->name); - trace_block(T_PACKET, "peer: packet contents", buf_i, n); ) + IF_TRACING(T_PEER, { + trace(T_PEER, "peer: packet received from `%s'", p->name); + trace_block(T_PACKET, "peer: packet contents", buf_i, n); + }) /* --- Pick the packet apart --- */ @@ -128,20 +92,20 @@ found: p->st.sz_in += n; buf_init(&b, buf_i, n); if ((ch = buf_getbyte(&b)) < 0) { - a_warn("bad packet from `%s': no type byte", p->name); + a_warn("PEER %s bad-packet no-type", p->name); return; } switch (ch & MSG_CATMASK) { case MSG_PACKET: if (ch & MSG_TYPEMASK) { - a_warn("unknown packet type from `%s'", p->name); + a_warn("PEER %s bad-packet unknown-type 0x%02x", p->name, ch); p->st.n_reject++; return; } buf_init(&bb, buf_o, sizeof(buf_o)); if (ksl_decrypt(&p->ks, MSG_PACKET, &b, &bb)) { p->st.n_reject++; - a_warn("couldn't decrypt inbound packet from `%s'", p->name); + a_warn("PEER %s decrypt-failed", p->name); return; } if (BOK(&bb)) { @@ -150,7 +114,7 @@ found: tun_inject(&p->t, &bb); } else { p->st.n_reject++; - a_warn("packet build failed"); + a_warn("PEER %s packet-build-failed", p->name); } break; case MSG_KEYEXCH: @@ -158,7 +122,7 @@ found: break; default: p->st.n_reject++; - a_warn("bad packet from `%s': unknown packet type", p->name); + a_warn("PEER %s bad-packet unknown-category 0x%02x", p->name, ch); break; } } @@ -193,14 +157,14 @@ buf *p_txstart(peer *p, unsigned msg) void p_txend(peer *p) { if (!BOK(&p->b)) { - a_warn("packet build failed"); + a_warn("PEER %s packet-build-failed", p->name); return; } IF_TRACING(T_PEER, trace_block(T_PACKET, "peer: sending packet", BBASE(&p->b), BLEN(&p->b)); ) if (sendto(sock.fd, BBASE(&p->b), BLEN(&p->b), 0, &p->peer.sa, p->sasz) < 0) - a_warn("packet send to `%s' failed: %s", p->name, strerror(errno)); + a_warn("PEER %s socket-write-error -- %s", p->name, strerror(errno)); else { p->st.n_out++; p->st.sz_out += BLEN(&p->b); @@ -373,6 +337,18 @@ peer *p_create(const char *name, struct sockaddr *sa, size_t sz) if (peers) peers->prev = p; peers = p; + switch (p->peer.sa.sa_family) { + case AF_INET: + a_notify("ADD %s INET %s %u", + name, + inet_ntoa(p->peer.sin.sin_addr), + (unsigned)ntohs(p->peer.sin.sin_port)); + break; + default: + a_notify("ADD %s UNKNOWN", name); + break; + } + a_notify("KXSTART %s", name); /* Couldn't tell anyone before */ return (p); tidy_1: @@ -423,6 +399,7 @@ peer *p_find(const char *name) void p_destroy(peer *p) { T( trace(T_PEER, "peer: destroying peer `%s'", p->name); ) + a_notify("KILL %s", p->name); ksl_free(&p->ks); kx_free(&p->kx); tun_destroy(&p->t);