/*
* Perform PPPoE discovery
*
* Copyright (C) 2000-2001 by Roaring Penguin Software Inc.
* Copyright (C) 2004 Marco d'Itri <md@linux.it>
*
* This program may be distributed according to the terms of the GNU
* General Public License, version 2 or (at your option) any later version.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include "pppoe.h"
char *xstrdup(const char *s);
void usage(void);
void die(int status)
{
exit(status);
}
int main(int argc, char *argv[])
{
int opt;
PPPoEConnection *conn;
conn = malloc(sizeof(PPPoEConnection));
if (!conn)
fatalSys("malloc");
memset(conn, 0, sizeof(PPPoEConnection));
while ((opt = getopt(argc, argv, "I:D:VUAS:C:h")) > 0) {
switch(opt) {
case 'S':
conn->serviceName = xstrdup(optarg);
break;
case 'C':
conn->acName = xstrdup(optarg);
break;
case 'U':
conn->useHostUniq = 1;
break;
case 'D':
conn->debugFile = fopen(optarg, "w");
if (!conn->debugFile) {
fprintf(stderr, "Could not open %s: %s\n",
optarg, strerror(errno));
exit(1);
}
fprintf(conn->debugFile, "pppoe-discovery %s\n", VERSION);
break;
case 'I':
conn->ifName = xstrdup(optarg);
break;
case 'A':
/* this is the default */
break;
case 'V':
case 'h':
usage();
exit(0);
default:
usage();
exit(1);
}
}
/* default interface name */
if (!conn->ifName)
conn->ifName = strdup("eth0");
conn->discoverySocket = -1;
conn->sessionSocket = -1;
conn->printACNames = 1;
discovery(conn);
exit(0);
}
void rp_fatal(char const *str)
{
char buf[1024];
printErr(str);
sprintf(buf, "pppoe-discovery: %.256s", str);
exit(1);
}
void fatalSys(char const *str)
{
char buf[1024];
int i = errno;
sprintf(buf, "%.256s: %.256s", str, strerror(i));
printErr(buf);
sprintf(buf, "pppoe-discovery: %.256s: %.256s", str, strerror(i));
exit(1);
}
void sysErr(char const *str)
{
rp_fatal(str);
}
char *xstrdup(const char *s)
{
register char *ret = strdup(s);
if (!ret)
sysErr("strdup");
return ret;
}
void usage(void)
{
fprintf(stderr, "Usage: pppoe-discovery [options]\n");
fprintf(stderr, "\nVersion " VERSION "\n");
}