Index: src/pppoe.c =================================================================== --- src/pppoe.c +++ src/pppoe.c @@ -71,6 +71,7 @@ /* Per link private info */ struct pppoeinfo { + char iface[IFNAMSIZ]; /* PPPoE interface name */ char path[MAX_PATH]; /* PPPoE node path */ char hook[NG_HOOKSIZ]; /* hook on that node */ char session[MAX_SESSION]; /* session name */ @@ -165,7 +166,7 @@ static int PppoeUnListen(Link l); static void PppoeNodeUpdate(Link l); static void PppoeListenEvent(int type, void *arg); -static int CreatePppoeNode(struct PppoeIf *PIf, const char *path, const char *hook); +static int CreatePppoeNode(struct PppoeIf *PIf, const char *iface, const char *path, const char *hook); static void PppoeDoClose(Link l); @@ -282,6 +283,7 @@ pe = (PppoeInfo)(l->info = Malloc(MB_PHYS, sizeof(*pe))); pe->incoming = 0; pe->opened = 0; + snprintf(pe->iface, sizeof(pe->iface), "undefined"); snprintf(pe->path, sizeof(pe->path), "undefined:"); snprintf(pe->hook, sizeof(pe->hook), "undefined"); snprintf(pe->session, sizeof(pe->session), "*"); @@ -660,6 +662,16 @@ break; } #endif +#ifdef NGM_PPPOE_PADM_COOKIE + case NGM_PPPOE_HURL: + Log(LG_PHYS, ("PPPoE: rec'd HURL \"%s\"", + ((struct ngpppoe_padm *)u.resp.data)->msg)); + break; + case NGM_PPPOE_MOTM: + Log(LG_PHYS, ("PPPoE: rec'd MOTM \"%s\"", + ((struct ngpppoe_padm *)u.resp.data)->msg)); + break; +#endif default: Log(LG_PHYS, ("PPPoE: rec'd command %lu from \"%s\"", (u_long)u.resp.header.cmd, path)); @@ -695,6 +707,7 @@ } Printf("PPPoE configuration:\r\n"); + Printf("\tIface Name : %s\r\n", pe->iface); Printf("\tIface Node : %s\r\n", pe->path); Printf("\tIface Hook : %s\r\n", pe->hook); Printf("\tSession : %s\r\n", pe->session); @@ -748,12 +761,8 @@ PppoePeerIface(Link l, void *buf, size_t buf_len) { PppoeInfo const pppoe = (PppoeInfo)l->info; - char iface[IFNAMSIZ]; - strlcpy(iface, pppoe->path, sizeof(iface)); - if (iface[strlen(iface) - 1] == ':') - iface[strlen(iface) - 1] = '\0'; - strlcpy(buf, iface, buf_len); + strlcpy(buf, pppoe->iface, buf_len); return (0); } @@ -880,7 +889,7 @@ } static int -CreatePppoeNode(struct PppoeIf *PIf, const char *path, const char *hook) +CreatePppoeNode(struct PppoeIf *PIf, const char *iface, const char *path, const char *hook) { union { u_char buf[sizeof(struct ng_mesg) + 2048]; @@ -892,11 +901,6 @@ uint32_t f; /* Make sure interface is up. */ - char iface[IFNAMSIZ]; - - strlcpy(iface, path, sizeof(iface)); - if (iface[strlen(iface) - 1] == ':') - iface[strlen(iface) - 1] = '\0'; if (ExecCmdNosh(LG_PHYS2, iface, "%s %s up", _PATH_IFCONFIG, iface) != 0) { Log(LG_ERR, ("PPPoE: can't bring up interface %s", iface)); @@ -1501,7 +1505,7 @@ l->name)); return; } - if (CreatePppoeNode(&PppoeIfs[free], pi->path, pi->hook)) { + if (CreatePppoeNode(&PppoeIfs[free], pi->iface, pi->path, pi->hook)) { strlcpy(PppoeIfs[free].ifnodepath, pi->path, sizeof(PppoeIfs[free].ifnodepath)); @@ -1673,7 +1677,7 @@ { const PppoeInfo pi = (PppoeInfo) ctx->lnk->info; const char *hookname = ETHER_DEFAULT_HOOK; - const char *colon; + int i; #ifdef NGM_PPPOE_SETMAXP_COOKIE int ap; #endif @@ -1684,9 +1688,17 @@ hookname = av[1]; /* fall through */ case 1: - colon = (av[0][strlen(av[0]) - 1] == ':') ? "" : ":"; - snprintf(pi->path, sizeof(pi->path), - "%s%s", av[0], colon); + strlcpy(pi->iface, av[0], sizeof(pi->iface)); + strlcpy(pi->path, pi->iface, sizeof(pi->path) - 1); + for (i = 0; i < sizeof(pi->path) - 1; i++) { + if (pi->path[i] == '.' || pi->path[i] == ':') + pi->path[i] = '_'; + else if (pi->path[i] == '\0') { + pi->path[i] = ':'; + pi->path[i + 1] = '\0'; + break; + } + } strlcpy(pi->hook, hookname, sizeof(pi->hook)); break; default: