1 /* Shared library add-on to ip6tables to add EUI64 address checking support. */ 2 #include <stdio.h> 3 #include <netdb.h> 4 #include <string.h> 5 #include <stdlib.h> 6 #include <getopt.h> 7 #if defined(__GLIBC__) && __GLIBC__ == 2 8 #include <net/ethernet.h> 9 #else 10 #include <linux/if_ether.h> 11 #endif 12 #include <ip6tables.h> 13 14 /* Function which prints out usage message. */ 15 static void 16 help(void) 17 { 18 printf( 19 "eui64 v%s options:\n" 20 " This module hasn't got any option\n" 21 " This module checks for EUI64 IPv6 addresses\n" 22 "\n", IPTABLES_VERSION); 23 } 24 25 static struct option opts[] = { 26 {0} 27 }; 28 29 /* Function which parses command options; returns true if it 30 ate an option */ 31 static int 32 parse(int c, char **argv, int invert, unsigned int *flags, 33 const struct ip6t_entry *entry, 34 unsigned int *nfcache, 35 struct ip6t_entry_match **match) 36 { 37 return 0; 38 } 39 40 /* Final check */ 41 static void final_check(unsigned int flags) 42 { 43 } 44 45 /* Prints out the matchinfo. */ 46 static void 47 print(const struct ip6t_ip6 *ip, 48 const struct ip6t_entry_match *match, 49 int numeric) 50 { 51 printf("eui64 "); 52 } 53 54 /* Saves the union ip6t_matchinfo in parsable form to stdout. */ 55 static void save(const struct ip6t_ip6 *ip, const struct ip6t_entry_match *match) 56 { 57 58 } 59 60 static struct ip6tables_match eui64 = { 61 .name = "eui64", 62 .version = IPTABLES_VERSION, 63 .size = IP6T_ALIGN(sizeof(int)), 64 .userspacesize = IP6T_ALIGN(sizeof(int)), 65 .help = &help, 66 .parse = &parse, 67 .final_check = &final_check, 68 .print = &print, 69 .save = &save, 70 .extra_opts = opts, 71 }; 72 73 void _init(void) 74 { 75 register_match6(&eui64); 76 } 77