/* Shared library add-on to ip6tables to add EUI64 address checking support. */ #include #include #include #include #include #if defined(__GLIBC__) && __GLIBC__ == 2 #include #else #include #endif #include /* Function which prints out usage message. */ static void help(void) { printf( "eui64 v%s options:\n" " This module hasn't got any option\n" " This module checks for EUI64 IPv6 addresses\n" "\n", IPTABLES_VERSION); } static struct option opts[] = { {0} }; /* Initialize the match. */ static void init(struct ip6t_entry_match *m, unsigned int *nfcache) { /* Can't cache this */ *nfcache |= NFC_UNKNOWN; } /* 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 ip6t_entry *entry, unsigned int *nfcache, struct ip6t_entry_match **match) { return 0; } /* Final check */ static void final_check(unsigned int flags) { } /* Prints out the matchinfo. */ static void print(const struct ip6t_ip6 *ip, const struct ip6t_entry_match *match, int numeric) { printf("eui64 "); } /* Saves the union ip6t_matchinfo in parsable form to stdout. */ static void save(const struct ip6t_ip6 *ip, const struct ip6t_entry_match *match) { } static struct ip6tables_match eui64 = { NULL, "eui64", IPTABLES_VERSION, IP6T_ALIGN(sizeof(int)), IP6T_ALIGN(sizeof(int)), &help, &init, &parse, &final_check, &print, &save, opts }; void _init(void) { register_match6(&eui64); }