ret = nf_register_queue_handler(ntohs(cmd->pf), nfqnl_enqueue_packet, NULL);  
ret = nf_register_queue_handler(ntohs(cmd->pf), &nfqh); 
nfqnl_recv_config(struct sock *ctnl, struct sk_buff *skb,		  struct nlmsghdr *nlh, struct nfattr *nfqa[], int *errp){	struct nfgenmsg *nfmsg = NLMSG_DATA(nlh);	u_int16_t queue_num = ntohs(nfmsg->res_id);	struct nfqnl_instance *queue;	int ret = 0;	QDEBUG("entering for msg %u\n", NFNL_MSG_TYPE(nlh->nlmsg_type));	if (nfattr_bad_size(nfqa, NFQA_CFG_MAX, nfqa_cfg_min)) {		QDEBUG("bad attribute size\n");		return -EINVAL;	}	queue = instance_lookup_get(queue_num);	if (nfqa[NFQA_CFG_CMD-1]) {		struct nfqnl_msg_config_cmd *cmd;		cmd = NFA_DATA(nfqa[NFQA_CFG_CMD-1]);		QDEBUG("found CFG_CMD\n");		switch (cmd->command) {		case NFQNL_CFG_CMD_BIND:			if (queue)				return -EBUSY;			queue = instance_create(queue_num, NETLINK_CB(skb).pid);			if (!queue)				return -EINVAL;			break;		case NFQNL_CFG_CMD_UNBIND:			if (!queue)				return -ENODEV;			if (queue->peer_pid != NETLINK_CB(skb).pid) {				ret = -EPERM;				goto out_put;			}			instance_destroy(queue);			break;		case NFQNL_CFG_CMD_PF_BIND:			QDEBUG("registering queue handler for pf=%u\n",				ntohs(cmd->pf));			ret = nf_register_queue_handler(ntohs(cmd->pf),							nfqnl_enqueue_packet,							NULL);			break;		case NFQNL_CFG_CMD_PF_UNBIND:			QDEBUG("unregistering queue handler for pf=%u\n",				ntohs(cmd->pf));			/* This is a bug and a feature.  We can unregister			 * other handlers(!) */			ret = nf_unregister_queue_handler(ntohs(cmd->pf));			break;		default:			ret = -EINVAL;			break;		}	} else {		if (!queue) {			QDEBUG("no config command, and no instance ENOENT\n");			ret = -ENOENT;			goto out_put;		}		if (queue->peer_pid != NETLINK_CB(skb).pid) {			QDEBUG("no config command, and wrong pid\n");			ret = -EPERM;			goto out_put;		}	}	if (nfqa[NFQA_CFG_PARAMS-1]) {		struct nfqnl_msg_config_params *params;		params = NFA_DATA(nfqa[NFQA_CFG_PARAMS-1]);		nfqnl_set_mode(queue, params->copy_mode,				ntohl(params->copy_range));	}out_put:	instance_put(queue);	return ret;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/bbd86b9fc469b7e91dc7444e6abb8930811d79cb/nfnetlink_queue.c/clean/net/netfilter/nfnetlink_queue.c