rem: || entry->ip.proto == IPPROTO_UDP)
add: || entry->ip.proto == IPPROTO_UDP || entry->ip.proto == IPPROTO_ICMP)
context: parse(int c, char **argv, int invert, unsigned int *flags,      const struct ipt_entry *entry,      struct ipt_entry_target **target){	struct ipt_natinfo *info = (void *)*target;	int portok;	if (entry->ip.proto == IPPROTO_TCP	    || entry->ip.proto == IPPROTO_UDP)		portok = 1;	else		portok = 0;	switch (c) {	case '1':		if (check_inverse(optarg, &invert, NULL, 0))			exit_error(PARAMETER_PROBLEM,				   "Unexpected `!' after --to-source");		*target = parse_to(optarg, portok, info);		*flags = 1;		return 1;	default:		return 0;	}}