summaryrefslogtreecommitdiffstats
path: root/ax25ipd
diff options
context:
space:
mode:
Diffstat (limited to 'ax25ipd')
-rw-r--r--ax25ipd/ax25ipd.c8
-rw-r--r--ax25ipd/bpqether.c488
-rw-r--r--ax25ipd/io.c22
3 files changed, 259 insertions, 259 deletions
diff --git a/ax25ipd/ax25ipd.c b/ax25ipd/ax25ipd.c
index f664e2e..403a7b4 100644
--- a/ax25ipd/ax25ipd.c
+++ b/ax25ipd/ax25ipd.c
@@ -146,10 +146,10 @@ int main(int argc, char **argv)
/* if we get this far without error, let's fork off ! :-) */
if (opt_nofork == 0) {
- if (!daemon_start(TRUE)) {
- syslog(LOG_DAEMON | LOG_CRIT, "ax25ipd: cannot become a daemon\n");
- return 1;
- }
+ if (!daemon_start(TRUE)) {
+ syslog(LOG_DAEMON | LOG_CRIT, "ax25ipd: cannot become a daemon\n");
+ return 1;
+ }
}
/* we need to close stdin, stdout, stderr: because otherwise
diff --git a/ax25ipd/bpqether.c b/ax25ipd/bpqether.c
index ba675de..b3d7cbe 100644
--- a/ax25ipd/bpqether.c
+++ b/ax25ipd/bpqether.c
@@ -51,8 +51,8 @@ extern int ttyfd;
#define ETHERTAP_HEADER_LEN_MAX ETHERTAP_HEADER_LEN_TUN
struct ethertap_packet {
- char ethernet_header[18];
- char data[MAX_FRAME];
+ char ethernet_header[18];
+ char data[MAX_FRAME];
};
unsigned char hwaddr_remote[6];
@@ -63,58 +63,58 @@ static int ethertap_header_len;
int send_bpq(unsigned char *buf, int l)
{
- struct ethertap_packet ethertap_packet;
- void *addr = &ethertap_packet;
- int offset = ETHERTAP_HEADER_LEN_MAX - ethertap_header_len;
+ struct ethertap_packet ethertap_packet;
+ void *addr = &ethertap_packet;
+ int offset = ETHERTAP_HEADER_LEN_MAX - ethertap_header_len;
- static const unsigned char ethernet_header[18] = {
- 0x00, 0x00, 0x00, 0x02, /* ??? ??? ETH_P_AX25 (16bit) */
- 0xfe, 0xfd, 0x00, 0x00, 0x00, 0x00, /* Destination address (kernel et
+ static const unsigned char ethernet_header[18] = {
+ 0x00, 0x00, 0x00, 0x02, /* ??? ??? ETH_P_AX25 (16bit) */
+ 0xfe, 0xfd, 0x00, 0x00, 0x00, 0x00, /* Destination address (kernel et
hertap module) */
- 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, /* Source address (WAMPES etherta
+ 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, /* Source address (WAMPES etherta
p module) */
- 0x08, 0xff /* Protocol (bpqether) */
- };
-
- if (l <= 0)
- return -1;
-
- if (l > (sizeof(ethertap_packet.data) - 2))
- l = sizeof(ethertap_packet.data);
- memcpy(ethertap_packet.data + 2, buf, l);
- memcpy(ethertap_packet.ethernet_header, (const char *) ethernet_header, sizeof(ethernet_header));
- memcpy(ethertap_packet.ethernet_header + 4, hwaddr_remote, 6);
- memcpy(ethertap_packet.ethernet_header + 4 + 6 + 2, hwaddr_remote +2, 6 -2);
- ethertap_packet.data[0] = (l + 5) % 256;
- ethertap_packet.data[1] = (l + 5) / 256;
- l += 2;
-
- /*send_tty(addr + offset, l + sizeof(ethertap_packet.ethernet_header) - offset);*/
- write(ttyfd, addr + offset, l + sizeof(ethertap_packet.ethernet_header) - offset);
- return l;
+ 0x08, 0xff /* Protocol (bpqether) */
+ };
+
+ if (l <= 0)
+ return -1;
+
+ if (l > (sizeof(ethertap_packet.data) - 2))
+ l = sizeof(ethertap_packet.data);
+ memcpy(ethertap_packet.data + 2, buf, l);
+ memcpy(ethertap_packet.ethernet_header, (const char *) ethernet_header, sizeof(ethernet_header));
+ memcpy(ethertap_packet.ethernet_header + 4, hwaddr_remote, 6);
+ memcpy(ethertap_packet.ethernet_header + 4 + 6 + 2, hwaddr_remote +2, 6 -2);
+ ethertap_packet.data[0] = (l + 5) % 256;
+ ethertap_packet.data[1] = (l + 5) / 256;
+ l += 2;
+
+ /*send_tty(addr + offset, l + sizeof(ethertap_packet.ethernet_header) - offset);*/
+ write(ttyfd, addr + offset, l + sizeof(ethertap_packet.ethernet_header) - offset);
+ return l;
}
/*---------------------------------------------------------------------------*/
int receive_bpq(unsigned char *buf, int l)
{
- if ((l -= ethertap_header_len) <= 0 ||
- (buf[ethertap_header_len-2] & 0xff) != 0x08 ||
- (buf[ethertap_header_len-1] & 0xff) != 0xff) {
- /* not a bpqether packet.
- * drop silently - ethernet.ax25 is not the only protocol spoken
- * on ethernet ;)
- */
- return -1;
- }
- l -= 2;
- if (l <= 0 && buf[ethertap_header_len] + buf[ethertap_header_len] * 256 - 5 != l) {
- /* length error in bpqether packet */
- return 0;
- }
-
- from_kiss(buf + ethertap_header_len + 2, l);
- return l;
+ if ((l -= ethertap_header_len) <= 0 ||
+ (buf[ethertap_header_len-2] & 0xff) != 0x08 ||
+ (buf[ethertap_header_len-1] & 0xff) != 0xff) {
+ /* not a bpqether packet.
+ * drop silently - ethernet.ax25 is not the only protocol spoken
+ * on ethernet ;)
+ */
+ return -1;
+ }
+ l -= 2;
+ if (l <= 0 && buf[ethertap_header_len] + buf[ethertap_header_len] * 256 - 5 != l) {
+ /* length error in bpqether packet */
+ return 0;
+ }
+
+ from_kiss(buf + ethertap_header_len + 2, l);
+ return l;
}
/*---------------------------------------------------------------------------*/
@@ -123,44 +123,44 @@ int receive_bpq(unsigned char *buf, int l)
#ifdef TRY_TUNTAP
static int tun_alloc(char *dev)
{
- struct ifreq ifr;
- int fd, err;
-
- if ((fd = open("/dev/net/tun", O_RDWR)) < 0)
- return -1;
-
- memset(&ifr, 0, sizeof(ifr));
-
- /* Flags: IFF_TUN - TUN device (no Ethernet headers)
- * IFF_TAP - TAP device
- *
- * IFF_NO_PI - Do not provide packet information
- */
- ifr.ifr_flags = IFF_TAP;
- if (*dev) {
- strncpy(ifr.ifr_name, dev, IFNAMSIZ);
- ifr.ifr_name[IFNAMSIZ-1] = 0;
- }
-
- if ((err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ) {
- close(fd);
- return err;
- }
- strcpy(dev, ifr.ifr_name);
-
- /* persist mode */
+ struct ifreq ifr;
+ int fd, err;
+
+ if ((fd = open("/dev/net/tun", O_RDWR)) < 0)
+ return -1;
+
+ memset(&ifr, 0, sizeof(ifr));
+
+ /* Flags: IFF_TUN - TUN device (no Ethernet headers)
+ * IFF_TAP - TAP device
+ *
+ * IFF_NO_PI - Do not provide packet information
+ */
+ ifr.ifr_flags = IFF_TAP;
+ if (*dev) {
+ strncpy(ifr.ifr_name, dev, IFNAMSIZ);
+ ifr.ifr_name[IFNAMSIZ-1] = 0;
+ }
+
+ if ((err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ) {
+ close(fd);
+ return err;
+ }
+ strcpy(dev, ifr.ifr_name);
+
+ /* persist mode */
#if 0
- if (ioctl(fd, TUNSETPERSIST, 1) < 0)
- perror("TUNSETPERSIST");
+ if (ioctl(fd, TUNSETPERSIST, 1) < 0)
+ perror("TUNSETPERSIST");
#endif
- /* don't checksum */
+ /* don't checksum */
#if 0
- if (ioctl(fd, TUNSETNOCSUM, 1) < 0)
- perror("TUNSETNOCSUM");
+ if (ioctl(fd, TUNSETNOCSUM, 1) < 0)
+ perror("TUNSETNOCSUM");
#endif
- return fd;
+ return fd;
}
#endif
@@ -169,90 +169,90 @@ static int tun_alloc(char *dev)
int open_ethertap(char *ifname)
{
- int fd;
- char devname[PATH_MAX];
- struct ifreq ifr;
- struct stat statbuf;
- int tuntap = 0;
- int mtu = 0;
- int skfd;
-
- strcpy(devname, "/dev/");
- strncpy(devname + 5, ifname, sizeof(devname) - 5 -1);
- devname[sizeof(devname) -1] = 0;
-
- /* tuntap == 0: original ethertap. works on a real character device */
- if (!stat(devname, &statbuf)) {
- fd = open(devname, O_RDWR);
- if (fd < 0) {
- LOGL2("%s: %s\n", devname, strerror(errno));
- return -1;
- }
+ int fd;
+ char devname[PATH_MAX];
+ struct ifreq ifr;
+ struct stat statbuf;
+ int tuntap = 0;
+ int mtu = 0;
+ int skfd;
+
+ strcpy(devname, "/dev/");
+ strncpy(devname + 5, ifname, sizeof(devname) - 5 -1);
+ devname[sizeof(devname) -1] = 0;
+
+ /* tuntap == 0: original ethertap. works on a real character device */
+ if (!stat(devname, &statbuf)) {
+ fd = open(devname, O_RDWR);
+ if (fd < 0) {
+ LOGL2("%s: %s\n", devname, strerror(errno));
+ return -1;
+ }
#ifdef TRY_TUNTAP
- } else {
- strcpy(devname, ifname);
- if ((fd = tun_alloc(devname)) < 0) {
- LOGL2("%s: %s\n", devname, strerror(errno));
- return -1;
- }
- ifname = devname;
- tuntap = 1;
+ } else {
+ strcpy(devname, ifname);
+ if ((fd = tun_alloc(devname)) < 0) {
+ LOGL2("%s: %s\n", devname, strerror(errno));
+ return -1;
+ }
+ ifname = devname;
+ tuntap = 1;
#endif
- }
- ethertap_header_len = (tuntap ? ETHERTAP_HEADER_LEN_TUN : ETHERTAP_HEADER_LEN_ETHERTAP);
-
- if ((skfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- perror("socket()");
- close(fd);
- return -1;
- }
-
- memset(&ifr, 0, sizeof(ifr));
-
- strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
- ifr.ifr_name[IFNAMSIZ-1] = 0;
- if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0)
- perror("SIOCGIFFLAGS");
-
- ifr.ifr_flags |= (IFF_UP | IFF_NOARP);
- if (ioctl(skfd, SIOCSIFFLAGS, &ifr) < 0)
- perror("SIOCSIFFLAGS");
-
- strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
- ifr.ifr_name[IFNAMSIZ-1] = 0;
- if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0) {
- perror("SIOCGIFHWADDR");
- hwaddr_remote[0] = 0xfe;
- hwaddr_remote[1] = 0xfd;
- hwaddr_remote[2] = 0x0;
- hwaddr_remote[3] = 0x0;
- hwaddr_remote[4] = 0x0;
- hwaddr_remote[5] = 0x0;
- } else
- memcpy(hwaddr_remote, ifr.ifr_hwaddr.sa_data, 6);
-
- if (ttyspeed > ETAP_MTU_MIN && ttyspeed != 9600) {
- mtu = ttyspeed;
- } else {
- strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
- ifr.ifr_name[IFNAMSIZ-1] = 0;
- strcpy(ifr.ifr_name, ifname);
- if (ioctl(skfd, SIOCGIFMTU, &ifr) < 0)
- perror("SIOCGIFMTU");
- else
- mtu = ifr.ifr_mtu;
- }
- if (mtu < ETAP_MTU_MIN || mtu > ETAP_MTU_MAX)
- mtu = ETAP_MTU;
- strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
- ifr.ifr_name[IFNAMSIZ-1] = 0;
- ifr.ifr_mtu = mtu;
- if (ioctl(skfd, SIOCSIFMTU, &ifr) < 0)
- perror("SIOSGIFMTU");
-
- close(skfd);
-
- return fd;
+ }
+ ethertap_header_len = (tuntap ? ETHERTAP_HEADER_LEN_TUN : ETHERTAP_HEADER_LEN_ETHERTAP);
+
+ if ((skfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ perror("socket()");
+ close(fd);
+ return -1;
+ }
+
+ memset(&ifr, 0, sizeof(ifr));
+
+ strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+ ifr.ifr_name[IFNAMSIZ-1] = 0;
+ if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0)
+ perror("SIOCGIFFLAGS");
+
+ ifr.ifr_flags |= (IFF_UP | IFF_NOARP);
+ if (ioctl(skfd, SIOCSIFFLAGS, &ifr) < 0)
+ perror("SIOCSIFFLAGS");
+
+ strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+ ifr.ifr_name[IFNAMSIZ-1] = 0;
+ if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0) {
+ perror("SIOCGIFHWADDR");
+ hwaddr_remote[0] = 0xfe;
+ hwaddr_remote[1] = 0xfd;
+ hwaddr_remote[2] = 0x0;
+ hwaddr_remote[3] = 0x0;
+ hwaddr_remote[4] = 0x0;
+ hwaddr_remote[5] = 0x0;
+ } else
+ memcpy(hwaddr_remote, ifr.ifr_hwaddr.sa_data, 6);
+
+ if (ttyspeed > ETAP_MTU_MIN && ttyspeed != 9600) {
+ mtu = ttyspeed;
+ } else {
+ strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+ ifr.ifr_name[IFNAMSIZ-1] = 0;
+ strcpy(ifr.ifr_name, ifname);
+ if (ioctl(skfd, SIOCGIFMTU, &ifr) < 0)
+ perror("SIOCGIFMTU");
+ else
+ mtu = ifr.ifr_mtu;
+ }
+ if (mtu < ETAP_MTU_MIN || mtu > ETAP_MTU_MAX)
+ mtu = ETAP_MTU;
+ strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+ ifr.ifr_name[IFNAMSIZ-1] = 0;
+ ifr.ifr_mtu = mtu;
+ if (ioctl(skfd, SIOCSIFMTU, &ifr) < 0)
+ perror("SIOSGIFMTU");
+
+ close(skfd);
+
+ return fd;
}
@@ -260,89 +260,89 @@ int open_ethertap(char *ifname)
int set_bpq_dev_call_and_up(char *ifname)
{
- FILE * fp;
- char buf[1024];
- char bpq_name[IFNAMSIZ];
- char dev_name[IFNAMSIZ];
- struct ifreq ifr;
- int drop;
- int skfd;
- int err = -1;
-
- /*
- * 1. find correspondent bpqether device in /proc (i.e. bpq0 for tap0)
- * 2. set the ax25 call of bpq0 (in this example)
- * 3. ifup bpq0
- */
-
- if (!(fp = fopen("/proc/net/bpqether", "r"))) {
- perror("/proc/net/bpqether");
- return -1;
- }
-
- /*
- * look up bpqether devce in /proc:
- * dev ether destination accept from
- * bpq0 tap0 FF:FF:FF:FF:FF:FF *
- */
-
- drop = 1;
- *bpq_name = *dev_name = 0;
- while (fgets(buf, sizeof(buf), fp)) {
- if (drop) {
- /* header line */
- drop = 0;
- continue;
- }
- sscanf(buf, "%s %s ", bpq_name, dev_name);
- if (!strcmp(dev_name, ifname))
- break;
- *bpq_name = *dev_name = 0;
- }
- fclose(fp);
- if (!*bpq_name) {
- LOGL2("Did not found bpqether device for %s in /proc/net/bpqether: %s", ifr.ifr_name, strerror(errno));
- return -1;
- }
-
- LOGL1("found bpq device %s for %s\n", bpq_name, dev_name);
-
- if ((skfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- perror("socket()");
- return -1;
- }
- memset(&ifr, 0, sizeof(ifr));
- memcpy(ifr.ifr_name, bpq_name, IFNAMSIZ);
- ifr.ifr_name[IFNAMSIZ-1] = 0;
-
- ifr.ifr_hwaddr.sa_family = PF_AX25;
- memcpy(ifr.ifr_hwaddr.sa_data, mycallsign, 7);
-
- if (ioctl(skfd, SIOCSIFHWADDR, &ifr) < 0) {
- perror("SIOCSIFHWADDR");
- close(skfd);
- return -1;
- }
- strncpy(ifr.ifr_name, bpq_name, IFNAMSIZ);
- ifr.ifr_name[IFNAMSIZ-1] = 0;
- ifr.ifr_mtu = 256;
- if (ioctl(skfd, SIOCSIFMTU, &ifr) < 0)
- perror("SIOSGIFMTU");
-
- strncpy(ifr.ifr_name, bpq_name, IFNAMSIZ);
- ifr.ifr_name[IFNAMSIZ-1] = 0;
- if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) {
- perror("SIOCGIFFLAGS");
- ifr.ifr_flags = 0;
- }
-
- ifr.ifr_flags |= (IFF_UP);
- if (ioctl(skfd, SIOCSIFFLAGS, &ifr) < 0) {
- perror("SIOCSIFFLAGS");
- err = -1;
- }
-
- close(skfd);
-
- return err;
+ FILE * fp;
+ char buf[1024];
+ char bpq_name[IFNAMSIZ];
+ char dev_name[IFNAMSIZ];
+ struct ifreq ifr;
+ int drop;
+ int skfd;
+ int err = -1;
+
+ /*
+ * 1. find correspondent bpqether device in /proc (i.e. bpq0 for tap0)
+ * 2. set the ax25 call of bpq0 (in this example)
+ * 3. ifup bpq0
+ */
+
+ if (!(fp = fopen("/proc/net/bpqether", "r"))) {
+ perror("/proc/net/bpqether");
+ return -1;
+ }
+
+ /*
+ * look up bpqether devce in /proc:
+ * dev ether destination accept from
+ * bpq0 tap0 FF:FF:FF:FF:FF:FF *
+ */
+
+ drop = 1;
+ *bpq_name = *dev_name = 0;
+ while (fgets(buf, sizeof(buf), fp)) {
+ if (drop) {
+ /* header line */
+ drop = 0;
+ continue;
+ }
+ sscanf(buf, "%s %s ", bpq_name, dev_name);
+ if (!strcmp(dev_name, ifname))
+ break;
+ *bpq_name = *dev_name = 0;
+ }
+ fclose(fp);
+ if (!*bpq_name) {
+ LOGL2("Did not found bpqether device for %s in /proc/net/bpqether: %s", ifr.ifr_name, strerror(errno));
+ return -1;
+ }
+
+ LOGL1("found bpq device %s for %s\n", bpq_name, dev_name);
+
+ if ((skfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ perror("socket()");
+ return -1;
+ }
+ memset(&ifr, 0, sizeof(ifr));
+ memcpy(ifr.ifr_name, bpq_name, IFNAMSIZ);
+ ifr.ifr_name[IFNAMSIZ-1] = 0;
+
+ ifr.ifr_hwaddr.sa_family = PF_AX25;
+ memcpy(ifr.ifr_hwaddr.sa_data, mycallsign, 7);
+
+ if (ioctl(skfd, SIOCSIFHWADDR, &ifr) < 0) {
+ perror("SIOCSIFHWADDR");
+ close(skfd);
+ return -1;
+ }
+ strncpy(ifr.ifr_name, bpq_name, IFNAMSIZ);
+ ifr.ifr_name[IFNAMSIZ-1] = 0;
+ ifr.ifr_mtu = 256;
+ if (ioctl(skfd, SIOCSIFMTU, &ifr) < 0)
+ perror("SIOSGIFMTU");
+
+ strncpy(ifr.ifr_name, bpq_name, IFNAMSIZ);
+ ifr.ifr_name[IFNAMSIZ-1] = 0;
+ if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) {
+ perror("SIOCGIFFLAGS");
+ ifr.ifr_flags = 0;
+ }
+
+ ifr.ifr_flags |= (IFF_UP);
+ if (ioctl(skfd, SIOCSIFFLAGS, &ifr) < 0) {
+ perror("SIOCSIFFLAGS");
+ err = -1;
+ }
+
+ close(skfd);
+
+ return err;
}
diff --git a/ax25ipd/io.c b/ax25ipd/io.c
index db26657..368aae2 100644
--- a/ax25ipd/io.c
+++ b/ax25ipd/io.c
@@ -568,7 +568,7 @@ int io_error(
#ifdef notdef
/* select() said that data is available, but recvfrom sais
* EAGAIN - i really do not know what's the sense in this.. */
- if (dir == READ_MSG && oops != TTY_MODE /* && != TCP_MODE, if we'd implement this */ )
+ if (dir == READ_MSG && oops != TTY_MODE /* && != TCP_MODE, if we'd implement this */ )
return 0;
perror("System 5 I/O error!");
fprintf(stderr, "A System 5 style I/O error was detected. This rogram requires BSD 4.2\n");
@@ -576,16 +576,16 @@ int io_error(
fprintf(stderr, "Mode 0x%2.2x, LINE: %d. During %s\n", mode, where, (dir == READ_MSG ? "READ" : "WRITE"));
exit(3);
#else
- int ret = 0;
- if (dir == READ_MSG) {
- LOGL4("read / recv returned -1 EAGAIN\n");
- ret = 0;
- } else if (dir == SEND_MSG) {
- LOGL4("write / send returned -1 EAGAIN, sleeping and retrying!\n");
- usleep(100000);
- ret = 1;
- }
- return ret;
+ int ret = 0;
+ if (dir == READ_MSG) {
+ LOGL4("read / recv returned -1 EAGAIN\n");
+ ret = 0;
+ } else if (dir == SEND_MSG) {
+ LOGL4("write / send returned -1 EAGAIN, sleeping and retrying!\n");
+ usleep(100000);
+ ret = 1;
+ }
+ return ret;
#endif
}
#endif