4 * (C)opyright 2000 Darren Reed.
6 * See the IPFILTER.LICENCE file for details on licencing.
8 * WARNING: Attempting to use this .c file on HP-UX 11.00 will cause the
11 #include <sys/param.h>
12 #include <sys/types.h>
13 #include <sys/socket.h>
14 #include <sys/ioctl.h>
17 #include <netinet/in.h>
18 #include <netinet/in_systm.h>
19 #include <netinet/ip.h>
20 #include <netinet/if_ether.h>
21 #include <netinet/ip_var.h>
22 #include <netinet/udp.h>
23 #include <netinet/udp_var.h>
24 #include <netinet/tcp.h>
32 #if !defined(lint) && defined(LIBC_SCCS)
33 static char sirix
[] = "@(#)sirix.c 1.0 10/9/97 (C)1997 Marc Boucher";
37 int initdevice(char *device
, int tout
)
43 memset(&ifr
, 0, sizeof(ifr
));
44 strncpy(ifr
.ifr_name
, device
, sizeof ifr
.ifr_name
);
46 if ((fd
= socket(AF_INET
, SOCK_RAW
, IPPROTO_RAW
)) < 0)
48 perror("socket(AF_INET, SOCK_RAW, IPPROTO_RAW)");
52 if (ioctl(fd
, SIOCGIFADDR
, &ifr
) == -1)
54 perror("ioctl SIOCGIFADDR");
58 bzero((char *)&s
, sizeof(s
));
59 s
.sa_family
= AF_INET
;
60 bcopy(&ifr
.ifr_addr
, s
.sa_data
, 4);
61 if (bind(fd
, &s
, sizeof(s
)) == -1)
70 int sendip(int fd
, char *pkt
, int len
)
72 struct ether_header
*eh
;
73 struct sockaddr_in sin
;
75 eh
= (struct ether_header
*)pkt
;
76 bzero((char *)&sin
, sizeof(sin
));
77 sin
.sin_family
= AF_INET
;
80 bcopy(pkt
+ 12, (char *)&sin
.sin_addr
, 4);
82 if (sendto(fd
, pkt
, len
, 0, &sin
, sizeof(sin
)) == -1)