/* relaycmd - an application to talk to the iptables RELAY module with, * via libnlrelay. * * 2003-10-29, Don Mahurin, Creation */ #include #include #include #include "librelaynl.h" #define BUFSIZE 2048 static void die(struct relay_handle *h); int main(int argc, char **argv) { int status; unsigned char inbuf[BUFSIZE]; struct relay_handle *h; int port = 0; char *op; int opn; in_addr_t addr1 = 0UL; in_addr_t addr2 = 0UL; argv++; argc--; if(argc < 1) exit(1); op = argv[0]; argv++; argc--; if(argc > 0) { port = atoi(argv[0]); argv++; argc--; } if(argc > 0) { addr1 = inet_aton(argv[0]); argv++; argc--; } if(argc > 0) { addr2 = inet_aton(argv[0]); argv++; argc--; } if(!strcmp(op, "enable-all")) opn = RELAY_NLM_ENABLE_ALL; else if(!strcmp(op, "disable-all")) opn = RELAY_NLM_DISABLE_ALL; else if(!argc) { printf ("not enough arguments\n"); exit(1); } else if(!strcmp(op, "enable")) opn = RELAY_NLM_ENABLE; else if(!strcmp(op, "disable")) opn = RELAY_NLM_DISABLE; else { printf ("unknown op: %s\n", op); exit(1); } h = relay_create_handle(0,PF_INET); if (!h) die(h); printf ("sending %d %d\n", opn, port); status = relay_send_op(h, opn, port, addr1, addr2); if (status < 0) die(h); relay_destroy_handle(h); return 0; } static void die(struct relay_handle *h) { relay_perror("passer"); relay_destroy_handle(h); exit(1); }