/* Shared library add-on to iptables for IPV4OPTSSTRIP
 * This modules strip all the IP options.
 *
 * (C) 2001 by Fabrice MARIE <fabrice@celestix.com>
 * This program is distributed under the terms of GNU GPL v2, 1991
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <getopt.h>

#include <iptables.h>
#include <linux/netfilter_ipv4/ip_tables.h>

static void init(struct ipt_entry_target *t, unsigned int *nfcache) 
{
        *nfcache |= NFC_UNKNOWN;
}

static void help(void) 
{
	printf("IPV4OPTSSTRIP v%s target takes no option !! Make sure you use it in the mangle table.\n",
	       NETFILTER_VERSION);
}

static struct option opts[] = {
	{ 0 }
};

/* Function which parses command options; returns true if it
   ate an option */
static int
parse(int c, char **argv, int invert, unsigned int *flags,
      const struct ipt_entry *entry,
      struct ipt_entry_target **target)
{
	return 0;
}

static void
final_check(unsigned int flags)
{
}

/* Prints out the targinfo. */
static void
print(const struct ipt_ip *ip,
      const struct ipt_entry_target *target,
      int numeric)
{
	/* nothing to print, we don't take option... */
}

/* Saves the stuff in parsable form to stdout. */
static void
save(const struct ipt_ip *ip, const struct ipt_entry_target *target)
{
	/* nothing to print, we don't take option... */
}

static
struct iptables_target IPV4OPTSSTRIP
= { NULL,
    "IPV4OPTSSTRIP",
    NETFILTER_VERSION,
    IPT_ALIGN(0),
    IPT_ALIGN(0),
    &help,
    &init,
    &parse,
    &final_check,
    &print,
    &save,
    opts
};

void _init(void)
{
	register_target(&IPV4OPTSSTRIP);
}
