Add support for advertising the service we support if the

PADI packet contains a NULL service.  This is apparently the desired
behaviour in this case, though we only allow advertising one
service. You could run multiple pppoeds to advertise multiple services.
This commit is contained in:
Julian Elischer 2000-12-13 00:27:33 +00:00
parent c0c2557090
commit 05eff81e04
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=69948

View file

@ -247,7 +247,8 @@ ConfigureNode(const char *prog, const char *iface, const char *provider,
}
static void
Spawn(const char *prog, const char *acname, const char *exec,
Spawn(const char *prog, const char *acname, const char *provider,
const char *exec,
struct ngm_connect ngc, int cs, int ds, void *request, int sz,
int debug)
{
@ -328,6 +329,22 @@ Spawn(const char *prog, const char *acname, const char *exec,
syslog(LOG_INFO, "%s: Cannot OFFER on netgraph node: %m", path);
_exit(EX_OSERR);
}
/* If we have a provider code, set it */
if (provider ) {
slen = strlen(provider);
data = (struct ngpppoe_init_data *)alloca(sizeof *data + slen);
snprintf(data->hook, sizeof data->hook, "%s", ngc.ourhook);
memcpy(data->data, provider, slen);
data->data_len = slen;
syslog(LOG_INFO, "adding to %s as offered service %s",
path, acname);
if (NgSendMsg(cs, path, NGM_PPPOE_COOKIE, NGM_PPPOE_SERVICE,
data, sizeof *data + slen) == -1) {
syslog(LOG_INFO, "%s: Cannot add service on netgraph node: %m", path);
_exit(EX_OSERR);
}
}
/* And send our request data to the waiting node */
if (debug)
@ -607,7 +624,7 @@ main(int argc, char **argv)
ret = EX_UNAVAILABLE;
break;
}
Spawn(prog, acname, exec, ngc, cs, ds, response, sz, optd);
Spawn(prog, acname, provider, exec, ngc, cs, ds, response, sz, optd);
}
if (pidfile)