15eed48af2516ebce0412121713d285bc30edb10dRusty Russell/*
25eed48af2516ebce0412121713d285bc30edb10dRusty Russell * Author: Paul.Russell@rustcorp.com.au and mneuling@radlogic.com.au
35eed48af2516ebce0412121713d285bc30edb10dRusty Russell *
410a907f6736864f3f60d36f78c78e655b6bb64eeHarald Welte * (C) 2000-2002 by the netfilter coreteam <coreteam@netfilter.org>:
510a907f6736864f3f60d36f78c78e655b6bb64eeHarald Welte * 		    Paul 'Rusty' Russell <rusty@rustcorp.com.au>
610a907f6736864f3f60d36f78c78e655b6bb64eeHarald Welte * 		    Marc Boucher <marc+nf@mbsi.ca>
710a907f6736864f3f60d36f78c78e655b6bb64eeHarald Welte * 		    James Morris <jmorris@intercode.com.au>
810a907f6736864f3f60d36f78c78e655b6bb64eeHarald Welte * 		    Harald Welte <laforge@gnumonks.org>
910a907f6736864f3f60d36f78c78e655b6bb64eeHarald Welte * 		    Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
1010a907f6736864f3f60d36f78c78e655b6bb64eeHarald Welte *
115eed48af2516ebce0412121713d285bc30edb10dRusty Russell * Based on the ipchains code by Paul Russell and Michael Neuling
125eed48af2516ebce0412121713d285bc30edb10dRusty Russell *
135eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	iptables -- IP firewall administration for kernels with
145eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	firewall table (aimed for the 2.3 kernels)
155eed48af2516ebce0412121713d285bc30edb10dRusty Russell *
165eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	See the accompanying manual page iptables(8) for information
175eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	about proper usage of this program.
185eed48af2516ebce0412121713d285bc30edb10dRusty Russell *
195eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	This program is free software; you can redistribute it and/or modify
205eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	it under the terms of the GNU General Public License as published by
215eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	the Free Software Foundation; either version 2 of the License, or
225eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	(at your option) any later version.
235eed48af2516ebce0412121713d285bc30edb10dRusty Russell *
245eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	This program is distributed in the hope that it will be useful,
255eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	but WITHOUT ANY WARRANTY; without even the implied warranty of
265eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
275eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	GNU General Public License for more details.
285eed48af2516ebce0412121713d285bc30edb10dRusty Russell *
295eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	You should have received a copy of the GNU General Public License
305eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	along with this program; if not, write to the Free Software
315eed48af2516ebce0412121713d285bc30edb10dRusty Russell *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
325eed48af2516ebce0412121713d285bc30edb10dRusty Russell */
335eed48af2516ebce0412121713d285bc30edb10dRusty Russell
345eed48af2516ebce0412121713d285bc30edb10dRusty Russell#include <stdio.h>
35d8e6563430ab692cf093a81b9b6ac997739d9504Harald Welte#include <stdlib.h>
365eed48af2516ebce0412121713d285bc30edb10dRusty Russell#include <errno.h>
375eed48af2516ebce0412121713d285bc30edb10dRusty Russell#include <ip6tables.h>
3833690a1aec0b6309ff90066ca56285b6e43013f2Jan Engelhardt#include "ip6tables-multi.h"
395eed48af2516ebce0412121713d285bc30edb10dRusty Russell
404bc48331d2d1ef64ba452329f2c77137036f6437Hann-Huei Chiou#ifdef IPTABLES_MULTI
414bc48331d2d1ef64ba452329f2c77137036f6437Hann-Huei Chiouint
424bc48331d2d1ef64ba452329f2c77137036f6437Hann-Huei Chiouip6tables_main(int argc, char *argv[])
434bc48331d2d1ef64ba452329f2c77137036f6437Hann-Huei Chiou#else
445eed48af2516ebce0412121713d285bc30edb10dRusty Russellint
455eed48af2516ebce0412121713d285bc30edb10dRusty Russellmain(int argc, char *argv[])
464bc48331d2d1ef64ba452329f2c77137036f6437Hann-Huei Chiou#endif
475eed48af2516ebce0412121713d285bc30edb10dRusty Russell{
485eed48af2516ebce0412121713d285bc30edb10dRusty Russell	int ret;
495eed48af2516ebce0412121713d285bc30edb10dRusty Russell	char *table = "filter";
50fd1873110f8e57be578df17fc9d03536b10f4f73Jan Engelhardt	struct ip6tc_handle *handle = NULL;
515eed48af2516ebce0412121713d285bc30edb10dRusty Russell
52617d3d140f4739558dce2ef8ed01aef251cf5487Jamal Hadi Salim	ip6tables_globals.program_name = "ip6tables";
537e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim	ret = xtables_init_all(&ip6tables_globals, NFPROTO_IPV6);
547e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim	if (ret < 0) {
557e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim		fprintf(stderr, "%s/%s Failed to initialize xtables\n",
567e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim				ip6tables_globals.program_name,
577e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim				ip6tables_globals.program_version);
587e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim		exit(1);
597e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim	}
607e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim
61b79ec69027fd8b65e7eccd78a445b6665e8ad53bJan Engelhardt#if defined(ALL_INCLUSIVE) || defined(NO_SHARED_LIBS)
629a9694fbf1796a6a5011b60b2a15c01fa3c61368Maciej Żenczykowski	init_extensions();
6349d8c5d564cad70c5c1bef2d5571e8e494454210Maciej Zenczykowski	init_extensions6();
643efb6ead2e51fe1eca55bcb2b06afb4dc4b8cb7cHarald Welte#endif
653efb6ead2e51fe1eca55bcb2b06afb4dc4b8cb7cHarald Welte
665eed48af2516ebce0412121713d285bc30edb10dRusty Russell	ret = do_command6(argc, argv, &table, &handle);
671c9015b2cb483678f153121255e10ec0bbfde3e6Jan Engelhardt	if (ret) {
681c9015b2cb483678f153121255e10ec0bbfde3e6Jan Engelhardt		ret = ip6tc_commit(handle);
691c9015b2cb483678f153121255e10ec0bbfde3e6Jan Engelhardt		ip6tc_free(handle);
701c9015b2cb483678f153121255e10ec0bbfde3e6Jan Engelhardt	}
715eed48af2516ebce0412121713d285bc30edb10dRusty Russell
726e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso	if (!ret) {
736e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso		if (errno == EINVAL) {
746e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso			fprintf(stderr, "ip6tables: %s. "
756e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso					"Run `dmesg' for more information.\n",
766e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso				ip6tc_strerror(errno));
776e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso		} else {
786e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso			fprintf(stderr, "ip6tables: %s.\n",
796e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso				ip6tc_strerror(errno));
806e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso		}
816e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso	}
825eed48af2516ebce0412121713d285bc30edb10dRusty Russell
835eed48af2516ebce0412121713d285bc30edb10dRusty Russell	exit(!ret);
845eed48af2516ebce0412121713d285bc30edb10dRusty Russell}
85