6 #include <netinet/in.h>
10 #include <sys/socket.h>
12 #include <asm/types.h>
13 #include <linux/netlink.h>
18 static void receive_argument(int control_fd, unsigned int *value)
20 if (recv(control_fd, value, sizeof(unsigned int), 0) != sizeof(unsigned int)) {
21 fprintf(stderr, "receiving argument failed\n");
26 int main(int argc, char *argv[])
28 int control_channel_fd, magic_socket;
29 struct sockaddr_nl addr;
31 unsigned int gmask = 1;
34 printf("This script is called by vsys.\n");
38 control_channel_fd = atoi(argv[2]);
40 /* receive pid paramater */
41 receive_argument(control_channel_fd, &pid);
43 /* receive gmask paramater */
44 receive_argument(control_channel_fd, &gmask);
46 magic_socket = receive_fd(control_channel_fd);
47 if (magic_socket == -1) {
48 fprintf(stderr, "Error creating socket: %d\n", errno);
52 memset(&addr, 0, sizeof(struct sockaddr_nl));
53 addr.nl_family = AF_NETLINK;
55 addr.nl_groups = gmask;
56 if (bind(magic_socket, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
57 fprintf(stderr, "Error calling bind for AF_NETLINK: %d\n", errno);
61 send_fd(control_channel_fd, magic_socket);