summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--usr.sbin/ppp/udp.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/usr.sbin/ppp/udp.c b/usr.sbin/ppp/udp.c
index 8307a4a..7ffa708 100644
--- a/usr.sbin/ppp/udp.c
+++ b/usr.sbin/ppp/udp.c
@@ -293,21 +293,30 @@ udp_Create(struct physical *p)
}
if (sz == sizeof type && type == SOCK_DGRAM) {
+ struct sockaddr_in sock;
+ struct sockaddr *sockp = (struct sockaddr *)&sock;
+
if ((dev = malloc(sizeof *dev)) == NULL) {
log_Printf(LogWARN, "%s: Cannot allocate a udp device: %s\n",
p->link.name, strerror(errno));
return NULL;
}
- /* We can't getpeername().... */
- dev->connected = UDP_MAYBEUNCONNECTED;
+ if (getpeername(p->fd, sockp, &sz) == 0) {
+ log_Printf(LogPHASE, "%s: Link is a connected udp socket\n",
+ p->link.name);
+ dev->connected = UDP_CONNECTED;
+ } else {
+ log_Printf(LogPHASE, "%s: Link is a disconnected udp socket\n",
+ p->link.name);
- log_Printf(LogPHASE, "%s: Link is a udp socket\n", p->link.name);
+ dev->connected = UDP_MAYBEUNCONNECTED;
- if (p->link.lcp.cfg.openmode != OPEN_PASSIVE) {
- log_Printf(LogPHASE, "%s: Changing openmode to PASSIVE\n",
- p->link.name);
- p->link.lcp.cfg.openmode = OPEN_PASSIVE;
+ if (p->link.lcp.cfg.openmode != OPEN_PASSIVE) {
+ log_Printf(LogPHASE, "%s: Changing openmode to PASSIVE\n",
+ p->link.name);
+ p->link.lcp.cfg.openmode = OPEN_PASSIVE;
+ }
}
}
}
OpenPOWER on IntegriCloud