rem: mptr = matchmask + sizeof(struct STRUCT_ENTRY); if (IP6T_MATCH_ITERATE(a, match_different, a->elems, b->elems))
add: mptr = matchmask + sizeof(STRUCT_ENTRY); if (IP6T_MATCH_ITERATE(a, match_different, a->elems, b->elems, &mptr))
context: is_same(const struct STRUCT_ENTRY *a, const struct STRUCT_ENTRY *b,	unsigned char *matchmask){	unsigned int i;	struct STRUCT_ENTRY_TARGET *ta, *tb;	unsigned char *mptr;	/* Always compare head structures: ignore mask here. */	if (memcmp(&a->ipv6.src, &b->ipv6.src, sizeof(struct in6_addr))	    || memcmp(&a->ipv6.dst, &b->ipv6.dst, sizeof(struct in6_addr))	    || memcmp(&a->ipv6.smsk, &b->ipv6.smsk, sizeof(struct in6_addr))	    || memcmp(&a->ipv6.dmsk, &b->ipv6.dmsk, sizeof(struct in6_addr))	    || a->ipv6.proto != b->ipv6.proto	    || a->ipv6.tos != b->ipv6.tos	    || a->ipv6.flags != b->ipv6.flags	    || a->ipv6.invflags != b->ipv6.invflags)		return 0;	for (i = 0; i < IFNAMSIZ; i++) {		if (a->ipv6.iniface_mask[i] != b->ipv6.iniface_mask[i])			return 0;		if ((a->ipv6.iniface[i] & a->ipv6.iniface_mask[i])		    != (b->ipv6.iniface[i] & b->ipv6.iniface_mask[i]))			return 0;		if (a->ipv6.outiface_mask[i] != b->ipv6.outiface_mask[i])			return 0;		if ((a->ipv6.outiface[i] & a->ipv6.outiface_mask[i])		    != (b->ipv6.outiface[i] & b->ipv6.outiface_mask[i]))			return 0;	}	if (a->nfcache != b->nfcache	    || a->target_offset != b->target_offset	    || a->next_offset != b->next_offset)		return 0;	mptr = matchmask + sizeof(struct STRUCT_ENTRY);	if (IP6T_MATCH_ITERATE(a, match_different, a->elems, b->elems))		return 0;	ta = GET_TARGET((struct STRUCT_ENTRY *)a);	tb = GET_TARGET((struct STRUCT_ENTRY *)b);	if (ta->target_size != tb->target_size)		return 0;	if (strcmp(ta->u.name, tb->u.name) != 0)		return 0;	mptr += sizeof(*ta);	if (target_different(ta->data, tb->data,			     ta->u.target_size - sizeof(*ta), mptr))		return 0;	return 1;}