#include <net/if_arp.h>
#endif
+int pppoe_verbose;
+
char *xstrdup(const char *s);
void usage(void);
if ((fd = socket(domain, stype, htons(type))) < 0) {
/* Give a more helpful message for the common error case */
if (errno == EPERM) {
- rp_fatal("Cannot create raw socket -- pppoe must be run as root.");
+ fatal("Cannot create raw socket -- pppoe must be run as root.");
}
fatalSys("socket");
}
memcpy(hwaddr, ifr.ifr_hwaddr.sa_data, ETH_ALEN);
#ifdef ARPHRD_ETHER
if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) {
- char buffer[256];
- sprintf(buffer, "Interface %.16s is not Ethernet", ifname);
- rp_fatal(buffer);
+ fatal("Interface %.16s is not Ethernet", ifname);
}
#endif
if (NOT_UNICAST(hwaddr)) {
- char buffer[256];
- sprintf(buffer,
- "Interface %.16s has broadcast/multicast MAC address??",
- ifname);
- rp_fatal(buffer);
+ fatal("Interface %.16s has broadcast/multicast MAC address??", ifname);
}
}
{
#if defined(HAVE_STRUCT_SOCKADDR_LL)
if (send(sock, pkt, size, 0) < 0) {
- sysErr("send (sendPacket)");
+ fatalSys("send (sendPacket)");
return -1;
}
#else
struct sockaddr sa;
if (!conn) {
- rp_fatal("relay and server not supported on Linux 2.0 kernels");
+ fatal("relay and server not supported on Linux 2.0 kernels");
}
strcpy(sa.sa_data, conn->ifName);
if (sendto(sock, pkt, size, 0, &sa, sizeof(sa)) < 0) {
- sysErr("sendto (sendPacket)");
+ fatalSys("sendto (sendPacket)");
return -1;
}
#endif
receivePacket(int sock, PPPoEPacket *pkt, int *size)
{
if ((*size = recv(sock, pkt, sizeof(PPPoEPacket), 0)) < 0) {
- sysErr("recv (receivePacket)");
+ fatalSys("recv (receivePacket)");
return -1;
}
return 0;
switch(type) {
case TAG_AC_NAME:
pc->seenACName = 1;
- if (conn->printACNames) {
+ if (pppoe_verbose >= 1) {
printf("Access-Concentrator: %.*s\n", (int) len, data);
}
if (conn->acName && len == strlen(conn->acName) &&
break;
case TAG_SERVICE_NAME:
pc->seenServiceName = 1;
- if (conn->printACNames && len > 0) {
+ if (pppoe_verbose >= 1 && len > 0) {
printf(" Service-Name: %.*s\n", (int) len, data);
}
if (conn->serviceName && len == strlen(conn->serviceName) &&
}
break;
case TAG_AC_COOKIE:
- if (conn->printACNames) {
+ if (pppoe_verbose >= 1) {
printf("Got a cookie:");
/* Print first 20 bytes of cookie */
for (i=0; i<len && i < 20; i++) {
memcpy(conn->cookie.payload, data, len);
break;
case TAG_RELAY_SESSION_ID:
- if (conn->printACNames) {
+ if (pppoe_verbose >= 1) {
printf("Got a Relay-ID:");
/* Print first 20 bytes of relay ID */
for (i=0; i<len && i < 20; i++) {
memcpy(conn->relayId.payload, data, len);
break;
case TAG_SERVICE_NAME_ERROR:
- if (conn->printACNames) {
+ if (pppoe_verbose >= 1) {
printf("Got a Service-Name-Error tag: %.*s\n", (int) len, data);
}
break;
case TAG_AC_SYSTEM_ERROR:
- if (conn->printACNames) {
+ if (pppoe_verbose >= 1) {
printf("Got a System-Error tag: %.*s\n", (int) len, data);
}
break;
case TAG_GENERIC_ERROR:
- if (conn->printACNames) {
+ if (pppoe_verbose >= 1) {
printf("Got a Generic-Error tag: %.*s\n", (int) len, data);
}
break;
conn->numPADOs++;
if (pc.acNameOK && pc.serviceNameOK) {
memcpy(conn->peerEth, packet.ethHdr.h_source, ETH_ALEN);
- if (conn->printACNames) {
+ if (pppoe_verbose >= 1) {
printf("AC-Ethernet-Address: %02x:%02x:%02x:%02x:%02x:%02x\n",
(unsigned) conn->peerEth[0],
(unsigned) conn->peerEth[1],
memset(conn, 0, sizeof(PPPoEConnection));
- conn->printACNames = 1;
+ pppoe_verbose = 1;
conn->discoveryTimeout = PADI_TIMEOUT;
conn->discoveryAttempts = MAX_PADI_ATTEMPTS;
conn->ifName = xstrdup(optarg);
break;
case 'Q':
- conn->printACNames = 0;
+ pppoe_verbose = 0;
break;
case 'V':
case 'h':
exit(0);
}
-void rp_fatal(char const *str)
+void fatal(char * fmt, ...)
{
- fprintf(stderr, "%s\n", str);
+ va_list ap;
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ fputc('\n', stderr);
exit(1);
}
exit(1);
}
-void sysErr(char const *str)
-{
- rp_fatal(str);
-}
-
char *xstrdup(const char *s)
{
register char *ret = strdup(s);
if (!ret)
- sysErr("strdup");
+ fatalSys("strdup");
return ret;
}