CC=gcc
CFLAGS=-g -O2
-all: dcookie fd_bmsocket fd_udpsocket fd_fusemount fd_tuntap fd_tos fd_packetseer fd_netlink
+all: dcookie fd_bmsocket fd_udpsocket fd_fusemount fd_tuntap fd_tos fd_packetseer fd_netlink fd_bind53
fd_tuntap: fd_tuntap.c
gcc fd_tuntap.c -o exec/fd_tuntap
fdpass.o: fdpass.c
gcc -c fdpass.c -o fdpass.o
+fd_bind53: fd_bind53.c fdpass.o
+ gcc fd_bind53.c fdpass.o -o exec/fd_bind53
+
fd_bmsocket: fd_bmsocket.c fdpass.o
gcc fd_bmsocket.c fdpass.o -o exec/fd_bmsocket
--- /dev/null
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include "fdpass.h"
+
+int
+main(int argc, char *argv[])
+{
+ int control_channel_fd, magic_socket;
+ struct sockaddr_in my_addr;
+
+ if (argc < 3) {
+ printf("This script is called by vsys.\n");
+ exit(1);
+ }
+
+ sscanf(argv[2],"%d", &control_channel_fd);
+
+ magic_socket = socket(AF_INET, SOCK_DGRAM, 0);
+
+ if (magic_socket == -1) {
+ fprintf(stderr, "Error creating socket: %d\n", errno);
+ exit(1);
+ }
+
+ memset((void *) &my_addr, 0, sizeof(my_addr));
+ my_addr.sin_family = AF_INET;
+ my_addr.sin_port = htons(53);
+ my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+ if (bind(magic_socket, (struct sockaddr *) &my_addr, sizeof(my_addr))==-1) {
+ printf("Could not bind to port 53");
+ exit(1);
+ }
+
+ send_fd(control_channel_fd, magic_socket);
+}