summaryrefslogtreecommitdiffstats
path: root/ipsend/ultrix.c
diff options
context:
space:
mode:
Diffstat (limited to 'ipsend/ultrix.c')
-rw-r--r--ipsend/ultrix.c84
1 files changed, 84 insertions, 0 deletions
diff --git a/ipsend/ultrix.c b/ipsend/ultrix.c
new file mode 100644
index 0000000..f41a8a9
--- /dev/null
+++ b/ipsend/ultrix.c
@@ -0,0 +1,84 @@
+/*
+ * (C)opyright 1998 Darren Reed. (from tcplog)
+ *
+ * See the IPFILTER.LICENCE file for details on licencing.
+ */
+#include <stdio.h>
+#include <strings.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/socket.h>
+#include <sys/file.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
+#include <netinet/in.h>
+#include <netinet/if_ether.h>
+#include <netdnet/dli_var.h>
+
+
+static struct dli_devid dli_devid;
+
+
+int initdevice(device, sport, tout)
+char *device;
+int sport, tout;
+{
+ u_char *s;
+ int fd;
+
+ fd = socket(AF_DLI, SOCK_DGRAM, 0);
+ if (fd == -1)
+ perror("socket(AF_DLI,SOCK_DGRAM)");
+ else {
+ strncpy(dli_devid.dli_devname, device, DLI_DEVSIZE);
+ dli_devid.dli_devname[DLI_DEVSIZE] ='\0';
+ for (s = dli_devid.dli_devname; *s && isalpha((char)*s); s++)
+ ;
+ if (*s && isdigit((char)*s)) {
+ dli_devid.dli_devnumber = atoi(s);
+ }
+ }
+ return fd;
+}
+
+
+/*
+ * output an IP packet onto a fd opened for /dev/bpf
+ */
+int sendip(fd, pkt, len)
+int fd, len;
+char *pkt;
+{
+ struct sockaddr_dl dl;
+ struct sockaddr_edl *edl = &dl.choose_addr.dli_eaddr;
+
+ dl.dli_family = AF_DLI;
+ dl.dli_substructype = DLI_ETHERNET;
+ bcopy((char *)&dli_devid, (char *)&dl.dli_device, sizeof(dli_devid));
+ bcopy(pkt, edl->dli_target, DLI_EADDRSIZE);
+ bcopy(pkt, edl->dli_dest, DLI_EADDRSIZE);
+ bcopy(pkt + DLI_EADDRSIZE * 2, (char *)&edl->dli_protype, 2);
+ edl->dli_ioctlflg = 0;
+
+ if (sendto(fd, pkt, len, 0, (struct sockaddr *)&dl, sizeof(dl)) == -1)
+ {
+ perror("send");
+ return -1;
+ }
+
+ return len;
+}
+
+
+char *strdup(str)
+char *str;
+{
+ char *s;
+
+ if ((s = (char *)malloc(strlen(str) + 1)))
+ return strcpy(s, str);
+ return NULL;
+}
OpenPOWER on IntegriCloud