From 3643aca580531eb795832feb8a83cca57f57dc0e Mon Sep 17 00:00:00 2001 From: KOVACS Krisztian Date: Mon, 19 Sep 2005 14:50:06 +0000 Subject: * specifying random seed for the Jenkins hash works as documented * iptables-save seems to work now Signed-off-by: KOVACS Krisztian Signed-off-by: Harald Welte --- extensions/libipt_CLUSTERIP.c | 65 ++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 28 deletions(-) (limited to 'extensions/libipt_CLUSTERIP.c') diff --git a/extensions/libipt_CLUSTERIP.c b/extensions/libipt_CLUSTERIP.c index d2bee976..69313527 100644 --- a/extensions/libipt_CLUSTERIP.c +++ b/extensions/libipt_CLUSTERIP.c @@ -32,17 +32,25 @@ help(void) " --clustermac Set clusterIP MAC address\n" " --total-nodes Set number of total nodes in cluster\n" " --local-node Set the local node number\n" -" --hash-init\n" +" --hash-init Set init value of the Jenkins hash\n" "\n", IPTABLES_VERSION); } +#define PARAM_NEW 0x0001 +#define PARAM_HMODE 0x0002 +#define PARAM_MAC 0x0004 +#define PARAM_TOTALNODE 0x0008 +#define PARAM_LOCALNODE 0x0010 +#define PARAM_HASHINIT 0x0020 + static struct option opts[] = { { "new", 0, 0, '1' }, { "hashmode", 1, 0, '2' }, { "clustermac", 1, 0, '3' }, { "total-nodes", 1, 0, '4' }, { "local-node", 1, 0, '5' }, + { "hash-init", 1, 0, '6' }, { 0 } }; @@ -75,12 +83,6 @@ parse_mac(const char *mac, char *macbuf) } } -#define PARAM_NEW 0x0001 -#define PARAM_HMODE 0x0002 -#define PARAM_MAC 0x0004 -#define PARAM_TOTALNODE 0x0008 -#define PARAM_LOCALNODE 0x0010 - static int parse(int c, char **argv, int invert, unsigned int *flags, const struct ipt_entry *entry, @@ -144,6 +146,16 @@ parse(int c, char **argv, int invert, unsigned int *flags, cipinfo->local_nodes[0] = (u_int16_t)num; *flags |= PARAM_LOCALNODE; break; + case '6': + if (!(*flags & PARAM_NEW)) + exit_error(PARAMETER_PROBLEM, "Can only specify hash init value combined with `--new'\n"); + if (*flags & PARAM_HASHINIT) + exit_error(PARAMETER_PROBLEM, "Can specify hash init value only once\n"); + if (string_to_number(optarg, 0, UINT_MAX, &num) < 0) + exit_error(PARAMETER_PROBLEM, "Unable to parse `%s'\n", optarg); + cipinfo->hash_initval = num; + *flags |= PARAM_HASHINIT; + break; default: return 0; } @@ -157,7 +169,8 @@ final_check(unsigned int flags) if (flags == 0) return; - if (flags == (PARAM_NEW|PARAM_HMODE|PARAM_MAC|PARAM_TOTALNODE|PARAM_LOCALNODE)) + if (flags & (PARAM_NEW|PARAM_HMODE|PARAM_MAC|PARAM_TOTALNODE|PARAM_LOCALNODE) + == (PARAM_NEW|PARAM_HMODE|PARAM_MAC|PARAM_TOTALNODE|PARAM_LOCALNODE)) return; exit_error(PARAMETER_PROBLEM, "CLUSTERIP target: Invalid parameter combination\n"); @@ -206,36 +219,32 @@ print(const struct ipt_ip *ip, return; } - printf("CLUSTERIP hashmode=%s clustermac=%s total_nodes=%u local_node=%u ", + printf("CLUSTERIP hashmode=%s clustermac=%s total_nodes=%u local_node=%u hash_init=%u", hashmode2str(cipinfo->hash_mode), mac2str(cipinfo->clustermac), cipinfo->num_total_nodes, - cipinfo->local_nodes[0]); + cipinfo->local_nodes[0], + cipinfo->hash_initval); } /* Saves the union ipt_targinfo in parsable form to stdout. */ static void save(const struct ipt_ip *ip, const struct ipt_entry_target *target) { - /* - const struct ipt_connmark_target_info *markinfo = - (const struct ipt_connmark_target_info *)target->data; + const struct ipt_clusterip_tgt_info *cipinfo = + (const struct ipt_clusterip_tgt_info *)target->data; - switch (markinfo->mode) { - case IPT_CONNMARK_SET: - printf("--set-mark 0x%lx ", markinfo->mark); - break; - case IPT_CONNMARK_SAVE: - printf("--save-mark "); - break; - case IPT_CONNMARK_RESTORE: - printf("--restore-mark "); - break; - default: - printf("ERROR: UNKNOWN CONNMARK MODE "); - break; - } - */ + /* if this is not a new entry, we don't need to save target + * parameters */ + if (!cipinfo->flags & CLUSTERIP_FLAG_NEW) + return; + + printf("--new --hashmode %s --clustermac %s --total-nodes %d --local-node %d --hash-init %u", + hashmode2str(cipinfo->hash_mode), + mac2str(cipinfo->clustermac), + cipinfo->num_total_nodes, + cipinfo->local_nodes[0], + cipinfo->hash_initval); } static struct iptables_target clusterip = { -- cgit v1.2.3