rem: sprintf(path, IP6T_LIB_DIR "/libip6t_%s.so", name);
add: if (!icmphack) sprintf(path, IP6T_LIB_DIR "/libip6t_%s.so", name); else sprintf(path, IP6T_LIB_DIR "/libip6t_%s.so", "icmpv6");
context: find_match(const char *name, enum ip6t_tryload tryload){	struct ip6tables_match *ptr;	for (ptr = ip6tables_matches; ptr; ptr = ptr->next) {		if (strcmp(name, ptr->name) == 0)			break;	}#ifndef NO_SHARED_LIBS	if (!ptr && tryload != DONT_LOAD) {		char path[sizeof(IP6T_LIB_DIR) + sizeof("/libip6t_.so")			 + strlen(name)];		sprintf(path, IP6T_LIB_DIR "/libip6t_%s.so", name);		if (dlopen(path, RTLD_NOW)) {			/* Found library.  If it didn't register itself,			   maybe they specified target as match. */			ptr = find_match(name, DONT_LOAD);			if (!ptr)				exit_error(PARAMETER_PROBLEM,					   "Couldn't load match `%s'\n",					   name);		} else if (tryload == LOAD_MUST_SUCCEED)			exit_error(PARAMETER_PROBLEM,				   "Couldn't load match `%s'\n", name);	}#else	if (ptr && !ptr->loaded) {		if (tryload != DONT_LOAD)			ptr->loaded = 1;		else			ptr = NULL;	}#endif        if (ptr)                ptr->used = 1;	return ptr;}