return __add_match(IP6TC_IPRANGE, start, 1, sizeof(ip6t_iprange_info_t), &iprange);
}
-static void __add_iprange(unsigned char *entry, unsigned int *size_mask,
- unsigned int *size_match, ip6tables_rule_s *rule)
+static void __add_iprange(unsigned char *entry, unsigned int *size_match, ip6tables_rule_s *rule)
{
ip6t_entry_t *e = (ip6t_entry_t *)(entry);
rule->s_ip1, rule->s_ip2, rule->d_ip_type, rule->d_ip1,
rule->d_ip2, (ip6t_entry_match_t *)(e->elems + (*size_match)));
- (*size_mask) += sizeof(ip6t_entry_match_t);
e->target_offset += SIZE_IPRANGE_MATCH;
e->next_offset += SIZE_IPRANGE_MATCH;
}
return 0;
}
-static void __add_port(unsigned char *entry, unsigned int *size_mask,
- unsigned int *size_match, ip6tables_rule_s *rule, unsigned int match_size)
+static void __add_port(unsigned char *entry, unsigned int *size_match,
+ ip6tables_rule_s *rule, unsigned int match_size)
{
if ((rule->s_port_type > IP6TABLES_PORT_NONE &&
rule->s_port_type <= IP6TABLES_PORT_RANGE) ||
rule->d_port_type, rule->d_port1, rule->d_port2,
(ip6t_entry_match_t *) (e->elems + (*size_match)));
- (*size_mask) += sizeof(ip6t_entry_match_t);
e->target_offset += match_size;
e->next_offset += match_size;
}
{
ip6t_entry_t *e = NULL;
ip6t_entry_target_t *target = NULL;
- unsigned int size_mask = 0;
unsigned int size_match = 0;
if (!rule->chain) {
/* entry size */
e->target_offset = SIZE_ENTRY;
e->next_offset = SIZE_ENTRY;
- size_mask = sizeof(ip6t_entry_t);
if (rule->ifname && rule->ifname[0] != '\0') {
switch (rule->direction) {
if (rule->s_ip_type == IP6TABLES_IP_RANGE ||
rule->d_ip_type == IP6TABLES_IP_RANGE)
- __add_iprange(entry, &size_mask, &size_match, rule);
+ __add_iprange(entry, &size_match, rule);
/* -p tcp */
switch (rule->protocol) {
case IP6TABLES_PROTOCOL_TCP:
e->ipv6.proto = IPPROTO_TCP;
- __add_port(entry, &size_mask, &size_match, rule, SIZE_TCP_MATCH);
+ __add_port(entry, &size_match, rule, SIZE_TCP_MATCH);
break;
case IP6TABLES_PROTOCOL_UDP:
e->ipv6.proto = IPPROTO_UDP;
- __add_port(entry, &size_mask, &size_match, rule, SIZE_UDP_MATCH);
+ __add_port(entry, &size_match, rule, SIZE_UDP_MATCH);
break;
case IP6TABLES_PROTOCOL_ICMP:
e->ipv6.proto = IPPROTO_ICMP;
/* -m cgroup --cgroup 33 */
if (rule->classid > 0) {
size_match += __add_cgroup_match(rule->classid, (ip6t_entry_match_t *) e->elems);
- size_mask += sizeof(ip6t_entry_match_t);
e->target_offset += SIZE_CGROUP_MATCH;
e->next_offset += SIZE_CGROUP_MATCH;
}
/* -m nfacct --nfacct-name c2_1_33_seth_w0 */
if (rule->nfacct_name && rule->nfacct_name[0] != '\0') {
size_match += __add_nfacct_match(rule->nfacct_name, (ip6t_entry_match_t *) (e->elems + size_match));
- size_mask += sizeof(ip6t_entry_match_t);
e->target_offset += SIZE_NFACCT_MATCH;
e->next_offset += SIZE_NFACCT_MATCH;
}
break;
}
- memset(mask, 0xFF, size_mask);
+ memset(mask, 0xFF, e->next_offset);
return STC_ERROR_NONE;
}
return __add_match(IPTC_IPRANGE, start, 1, sizeof(ipt_iprange_info_t), &iprange);
}
-static void __add_iprange(unsigned char *entry, unsigned int *size_mask,
- unsigned int *size_match, iptables_rule_s *rule)
+static void __add_iprange(unsigned char *entry, unsigned int *size_match, iptables_rule_s *rule)
{
ipt_entry_t *e = (ipt_entry_t *)(entry);
rule->s_ip1, rule->s_ip2, rule->d_ip_type, rule->d_ip1,
rule->d_ip2, (ipt_entry_match_t *)(e->elems + (*size_match)));
- (*size_mask) += sizeof(ipt_entry_match_t);
e->target_offset += SIZE_IPRANGE_MATCH;
e->next_offset += SIZE_IPRANGE_MATCH;
}
return 0;
}
-static void __add_port(unsigned char *entry, unsigned int *size_mask,
- unsigned int *size_match, iptables_rule_s *rule, unsigned int match_size)
+static void __add_port(unsigned char *entry, unsigned int *size_match,
+ iptables_rule_s *rule, unsigned int match_size)
{
if ((rule->s_port_type > IPTABLES_PORT_NONE &&
rule->s_port_type <= IPTABLES_PORT_RANGE) ||
rule->d_port_type, rule->d_port1, rule->d_port2,
(ipt_entry_match_t *) (e->elems + (*size_match)));
- (*size_mask) += sizeof(ipt_entry_match_t);
e->target_offset += match_size;
e->next_offset += match_size;
}
{
ipt_entry_t *e = NULL;
ipt_entry_target_t *target = NULL;
- unsigned int size_mask = 0;
unsigned int size_match = 0;
if (!rule->chain) {
/* entry size */
e->target_offset = SIZE_ENTRY;
e->next_offset = SIZE_ENTRY;
- size_mask = sizeof(ipt_entry_t);
if (rule->ifname && rule->ifname[0] != '\0') {
switch (rule->direction) {
if (rule->s_ip_type == IPTABLES_IP_RANGE ||
rule->d_ip_type == IPTABLES_IP_RANGE)
- __add_iprange(entry, &size_mask, &size_match, rule);
+ __add_iprange(entry, &size_match, rule);
/* -p tcp */
switch (rule->protocol) {
case IPTABLES_PROTOCOL_TCP:
e->ip.proto = IPPROTO_TCP;
- __add_port(entry, &size_mask, &size_match, rule, SIZE_TCP_MATCH);
+ __add_port(entry, &size_match, rule, SIZE_TCP_MATCH);
break;
case IPTABLES_PROTOCOL_UDP:
e->ip.proto = IPPROTO_UDP;
- __add_port(entry, &size_mask, &size_match, rule, SIZE_UDP_MATCH);
+ __add_port(entry, &size_match, rule, SIZE_UDP_MATCH);
break;
case IPTABLES_PROTOCOL_ICMP:
e->ip.proto = IPPROTO_ICMP;
if (rule->classid > 0) {
size_match += __add_cgroup_match(rule->classid,
(ipt_entry_match_t *) (e->elems + size_match));
- size_mask += sizeof(ipt_entry_match_t);
e->target_offset += SIZE_CGROUP_MATCH;
e->next_offset += SIZE_CGROUP_MATCH;
}
if (rule->nfacct_name && rule->nfacct_name[0] != '\0') {
size_match += __add_nfacct_match(rule->nfacct_name,
(ipt_entry_match_t *) (e->elems + size_match));
- size_mask += sizeof(ipt_entry_match_t);
e->target_offset += SIZE_NFACCT_MATCH;
e->next_offset += SIZE_NFACCT_MATCH;
}
break;
}
- memset(mask, 0xFF, size_mask);
+ memset(mask, 0xFF, e->next_offset); // TODO: is this the correct way to write the mask?
return STC_ERROR_NONE;
}