1392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include <stdio.h> 2392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include <xtables.h> 3392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include <linux/netfilter/xt_cpu.h> 4392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 5392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromenum { 6392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom O_CPU = 0, 7392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom}; 8392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 9392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromstatic void cpu_help(void) 10392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom{ 11392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom printf( 12392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom"cpu match options:\n" 13392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom"[!] --cpu number Match CPU number\n"); 14392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom} 15392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 16392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromstatic const struct xt_option_entry cpu_opts[] = { 17392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom {.name = "cpu", .id = O_CPU, .type = XTTYPE_UINT32, 18392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .flags = XTOPT_INVERT | XTOPT_MAND | XTOPT_PUT, 19392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom XTOPT_POINTER(struct xt_cpu_info, cpu)}, 20392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom XTOPT_TABLEEND, 21392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom}; 22392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 23392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromstatic void cpu_parse(struct xt_option_call *cb) 24392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom{ 25392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom struct xt_cpu_info *cpuinfo = cb->data; 26392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 27392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom xtables_option_parse(cb); 28392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom if (cb->invert) 29392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cpuinfo->invert = true; 30392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom} 31392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 32392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromstatic void 33392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromcpu_print(const void *ip, const struct xt_entry_match *match, int numeric) 34392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom{ 35392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom const struct xt_cpu_info *info = (void *)match->data; 36392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 37392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom printf(" cpu %s%u", info->invert ? "! ":"", info->cpu); 38392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom} 39392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 40392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromstatic void cpu_save(const void *ip, const struct xt_entry_match *match) 41392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom{ 42392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom const struct xt_cpu_info *info = (void *)match->data; 43392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 44392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom printf("%s --cpu %u", info->invert ? " !" : "", info->cpu); 45392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom} 46392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 47392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromstatic struct xtables_match cpu_match = { 48392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .family = NFPROTO_UNSPEC, 49392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .name = "cpu", 50392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .version = XTABLES_VERSION, 51392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .size = XT_ALIGN(sizeof(struct xt_cpu_info)), 52392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .userspacesize = XT_ALIGN(sizeof(struct xt_cpu_info)), 53392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .help = cpu_help, 54392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .print = cpu_print, 55392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .save = cpu_save, 56392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .x6_parse = cpu_parse, 57392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .x6_options = cpu_opts, 58392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom}; 59392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 60392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromvoid _init(void) 61392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom{ 62392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom xtables_register_match(&cpu_match); 63392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom} 64392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom