aboutsummaryrefslogtreecommitdiff
path: root/net/mpd5
diff options
context:
space:
mode:
authorAlex Dupre <ale@FreeBSD.org>2018-02-26 09:16:11 +0000
committerAlex Dupre <ale@FreeBSD.org>2018-02-26 09:16:11 +0000
commit589e5afc8fcd289b5b7fa54d2b26d15b3c5c4e96 (patch)
treecbcdee07c631d33f2fdb2a13c85eb91ba43ba067 /net/mpd5
parent9c8ccaf3673e2051788ecdc57d3f1b65be3e5d61 (diff)
downloadports-589e5afc8fcd289b5b7fa54d2b26d15b3c5c4e96.tar.gz
ports-589e5afc8fcd289b5b7fa54d2b26d15b3c5c4e96.zip
Fix support of PPPoE over VLAN and add basic parsing of PADM messages.
Submitted by: ale Reviewed by: mav julian Differential Revision: https://reviews.freebsd.org/D9848
Notes
Notes: svn path=/head/; revision=463007
Diffstat (limited to 'net/mpd5')
-rw-r--r--net/mpd5/Makefile2
-rw-r--r--net/mpd5/files/patch-src_pppoe.c126
2 files changed, 127 insertions, 1 deletions
diff --git a/net/mpd5/Makefile b/net/mpd5/Makefile
index 1e05b326256d..29798ef251cc 100644
--- a/net/mpd5/Makefile
+++ b/net/mpd5/Makefile
@@ -3,7 +3,7 @@
PORTNAME= mpd
DISTVERSION= 5.8
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= net
MASTER_SITES= SF/${PORTNAME}/Mpd5/Mpd-${PORTVERSION}
PKGNAMESUFFIX= 5
diff --git a/net/mpd5/files/patch-src_pppoe.c b/net/mpd5/files/patch-src_pppoe.c
new file mode 100644
index 000000000000..639cfcd4668f
--- /dev/null
+++ b/net/mpd5/files/patch-src_pppoe.c
@@ -0,0 +1,126 @@
+--- 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: