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;
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;
}
int sendPacket(PPPoEConnection *conn, int sock, PPPoEPacket *pkt, int size);
int receivePacket(int sock, PPPoEPacket *pkt, int *size);
void fatalSys(char const *str);
-void rp_fatal(char const *str);
-void printErr(char const *str);
-void sysErr(char const *str);
void dumpPacket(FILE *fp, PPPoEPacket *packet, char const *dir);
void dumpHex(FILE *fp, unsigned char const *buf, int len);
int parsePacket(PPPoEPacket *packet, ParseFunc *func, void *extra);