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 Chiouint
414bc48331d2d1ef64ba452329f2c77137036f6437Hann-Huei Chiouip6tables_main(int argc, char *argv[])
425eed48af2516ebce0412121713d285bc30edb10dRusty Russell{
435eed48af2516ebce0412121713d285bc30edb10dRusty Russell	int ret;
445eed48af2516ebce0412121713d285bc30edb10dRusty Russell	char *table = "filter";
451639fe86579f86f5f6a954a9b0adde2e16ad1980Jan Engelhardt	struct xtc_handle *handle = NULL;
465eed48af2516ebce0412121713d285bc30edb10dRusty Russell
47617d3d140f4739558dce2ef8ed01aef251cf5487Jamal Hadi Salim	ip6tables_globals.program_name = "ip6tables";
487e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim	ret = xtables_init_all(&ip6tables_globals, NFPROTO_IPV6);
497e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim	if (ret < 0) {
507e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim		fprintf(stderr, "%s/%s Failed to initialize xtables\n",
517e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim				ip6tables_globals.program_name,
527e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim				ip6tables_globals.program_version);
537e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim		exit(1);
547e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim	}
557e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim
56b79ec69027fd8b65e7eccd78a445b6665e8ad53bJan Engelhardt#if defined(ALL_INCLUSIVE) || defined(NO_SHARED_LIBS)
579a9694fbf1796a6a5011b60b2a15c01fa3c61368Maciej Żenczykowski	init_extensions();
5849d8c5d564cad70c5c1bef2d5571e8e494454210Maciej Zenczykowski	init_extensions6();
593efb6ead2e51fe1eca55bcb2b06afb4dc4b8cb7cHarald Welte#endif
603efb6ead2e51fe1eca55bcb2b06afb4dc4b8cb7cHarald Welte
61d7aeda5ed45ac7ca959f12180690caa371b5b14bPablo Neira Ayuso	ret = do_command6(argc, argv, &table, &handle, false);
621c9015b2cb483678f153121255e10ec0bbfde3e6Jan Engelhardt	if (ret) {
631c9015b2cb483678f153121255e10ec0bbfde3e6Jan Engelhardt		ret = ip6tc_commit(handle);
641c9015b2cb483678f153121255e10ec0bbfde3e6Jan Engelhardt		ip6tc_free(handle);
651c9015b2cb483678f153121255e10ec0bbfde3e6Jan Engelhardt	}
665eed48af2516ebce0412121713d285bc30edb10dRusty Russell
676e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso	if (!ret) {
686e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso		if (errno == EINVAL) {
696e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso			fprintf(stderr, "ip6tables: %s. "
706e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso					"Run `dmesg' for more information.\n",
716e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso				ip6tc_strerror(errno));
726e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso		} else {
736e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso			fprintf(stderr, "ip6tables: %s.\n",
746e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso				ip6tc_strerror(errno));
756e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso		}
766e70f46f2a146bb7c657f71724c999147a5925dcPablo Neira Ayuso	}
775eed48af2516ebce0412121713d285bc30edb10dRusty Russell
785eed48af2516ebce0412121713d285bc30edb10dRusty Russell	exit(!ret);
795eed48af2516ebce0412121713d285bc30edb10dRusty Russell}
80