static int init(void) { struct config_prefix6 pool6; struct pool4_entry_usr entry; int error; pool6.set = true; pool6.prefix.len = 96; error = str_to_addr6("3::", &pool6.prefix.addr); if (error) return error; error = xlator_add(FW_NETFILTER, INAME_DEFAULT, &pool6, &jool); if (error) return error; entry.mark = 0; entry.iterations = 0; entry.flags = ITERATIONS_SET | ITERATIONS_INFINITE; error = str_to_addr4("192.0.2.128", &entry.range.prefix.addr); if (error) goto fail; entry.range.prefix.len = 32; entry.range.ports.min = 1024; entry.range.ports.max = 1024; entry.proto = L4PROTO_TCP; error = pool4db_add(jool.nat64.pool4, &entry); if (error) goto fail; entry.proto = L4PROTO_UDP; error = pool4db_add(jool.nat64.pool4, &entry); if (error) goto fail; entry.proto = L4PROTO_ICMP; error = pool4db_add(jool.nat64.pool4, &entry); if (error) goto fail; return 0; fail: xlator_put(&jool); xlator_rm(INAME_DEFAULT); return error; }
static int __init jool_init(void) { int error; log_debug("Inserting %s...", xlat_get_name()); /* Init Jool's submodules. */ error = xlator_init(); if (error) goto xlator_fail; error = logtime_init(); if (error) goto log_time_fail; error = nlhandler_init(); if (error) goto nlhandler_fail; /* This needs to be last! (except for the hook registering.) */ error = add_instance(); if (error) goto instance_fail; /* Hook Jool to Netfilter. */ error = nf_register_hooks(nfho, ARRAY_SIZE(nfho)); if (error) goto nf_register_hooks_fail; /* Yay */ log_info("%s v" JOOL_VERSION_STR " module inserted.", xlat_get_name()); return 0; nf_register_hooks_fail: xlator_rm(); instance_fail: nlhandler_destroy(); nlhandler_fail: logtime_destroy(); log_time_fail: xlator_destroy(); xlator_fail: return error; }
static void clean(void) { icmp64_pop(); xlator_put(&jool); xlator_rm(INAME_DEFAULT); }