CLUSTERIP: iptables extension update
PATCH 1/1 CLUSTERIP: iptables extension update
Hi,
Some CLUSTERIP iptables extension updates:
* specifying random seed for the Jenkins hash works as documented
* iptables-save seems to work now
Harald, could you please review this patch and commit it to SVN if
you have no objections?
libipt_CLUSTERIP.c +12 -7
@@ -32,17 +32,25 @@" --clustermac <mac> Set clusterIP MAC address\n" " --total-nodes <num> Set number of total nodes in cluster\n" " --local-node <num> Set the local node number\n" -" --hash-init\n" +" --hash-init <num> 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 = {
Signature · 2 lines
Regards, Krisztian Kovacs
Quoted 7 lines · KOVACS Krisztian
Hi,
Some CLUSTERIP iptables extension updates:
* specifying random seed for the Jenkins hash works as documented
* iptables-save seems to work now
Thanks, Krisztian!
Quoted 2 lines
Harald, could you please review this patch and commit it to SVN if
you have no objections?
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:
patch: **** malformed patch at line 79: combined with `--new'\n");
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!
Signature · 5 lines
- Harald Welte <[email protected]> http://netfilter.org/ ============================================================================ "Fragmentation is like classful addressing -- an interesting early architectural error that shows how much experimentation was going on while IP was being designed." -- Paul Vixie
Hi,
Quoted 7 lines · Harald Welte
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.
Signature · 2 lines
Regards, Krisztian Kovacs
extensions/libipt_CLUSTERIP.c +37 -28
@@ -32,17 +32,25 @@" --clustermac <mac> Set clusterIP MAC address\n" " --total-nodes <num> Set number of total nodes in cluster\n" " --local-node <num> Set the local node number\n" -" --hash-init\n" +" --hash-init <num> 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 = {
Quoted 10 lines · KOVACS Krisztian
Hi,
Some CLUSTERIP iptables extension updates:
* specifying random seed for the Jenkins hash works as documented
* iptables-save seems to work nowHarald, could you please review this patch and commit it to SVN if
you have no objections?
finally catching up, patch applied.
Signature · 5 lines
- Harald Welte <[email protected]> http://netfilter.org/ ============================================================================ "Fragmentation is like classful addressing -- an interesting early architectural error that shows how much experimentation was going on while IP was being designed." -- Paul Vixie