/* -*-c-*-
*
- * $Id: peer.c,v 1.11 2004/04/08 01:36:17 mdw Exp $
+ * $Id$
*
* Communication with the peer
*
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;
}
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:
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)) {
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:
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;
}
}
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);
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;
+ }
return (p);
tidy_1:
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);