From mboxrd@z Thu Jan 1 00:00:00 1970 From: KOVACS Krisztian Subject: Re: [PATCH] CLUSTERIP: iptables extension update Date: Wed, 31 Aug 2005 10:01:35 +0200 Message-ID: <200508311001.35275@nienna> References: <200508301742.08929@nienna> <20050831074850.GF4556@rama.de.gnumonks.org> Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_fPWFDaXhNGW99vP" Cc: netfilter-devel@lists.netfilter.org Return-path: To: Harald Welte In-Reply-To: <20050831074850.GF4556@rama.de.gnumonks.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: netfilter-devel-bounces@lists.netfilter.org Errors-To: netfilter-devel-bounces@lists.netfilter.org List-Id: netfilter-devel.vger.kernel.org --Boundary-00=_fPWFDaXhNGW99vP Content-Type: text/plain; charset="iso-8859-2" Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi, On Wednesday 31 August 2005 09.48, Harald Welte wrote: > I have no objections to the patch, but to the line-wrapping or other > disturbance that your client inserted. At least for me, the patch > doesn't apply: > > Please resend as mime attachment (which is my preferred > format anyway). Also (for future patches), please make it apply with > "-p1" to make my job a bit easier. Thanks! Sorry for the inconvenience, I've attached the hopefully fixed patch. -- Regards, Krisztian Kovacs --Boundary-00=_fPWFDaXhNGW99vP Content-Type: text/x-diff; charset="iso-8859-2"; name="iptables.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="iptables.patch" Index: iptables/extensions/libipt_CLUSTERIP.c =================================================================== --- iptables/extensions/libipt_CLUSTERIP.c (revision 4253) +++ iptables/extensions/libipt_CLUSTERIP.c (working copy) @@ -32,17 +32,25 @@ " --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 @@ } } -#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 @@ 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 @@ 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 @@ 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 = { --Boundary-00=_fPWFDaXhNGW99vP--