Changeset View
Changeset View
Standalone View
Standalone View
head/net/mpd5/files/patch-src_pppoe.c
| Property | Old Value | New Value |
|---|---|---|
| fbsd:nokeywords | null | yes \ No newline at end of property |
| svn:eol-style | null | native \ No newline at end of property |
| svn:mime-type | null | text/plain \ No newline at end of property |
| --- src/pppoe.c.orig 2016-01-06 15:42:06 UTC | |||||
| +++ 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 PppoeListen(Link l); | |||||
| 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 @@ PppoeInit(Link l) | |||||
| 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 @@ PppoeCtrlReadEvent(int type, void *arg) | |||||
| 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 @@ PppoeStat(Context ctx) | |||||
| } | |||||
| 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 @@ static int | |||||
| 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 @@ PppoeGetMru(Link l, int conf) | |||||
| } | |||||
| 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 @@ CreatePppoeNode(struct PppoeIf *PIf, con | |||||
| 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 @@ PppoeGetNode(Link l) | |||||
| 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 @@ PppoeSetCommand(Context ctx, int ac, cha | |||||
| { | |||||
| 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 @@ PppoeSetCommand(Context ctx, int ac, cha | |||||
| 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: | |||||