NETLINK_CB(skb).dst_groups = XFRMGRP_POLICY;  
static int xfrm_notify_policy(struct xfrm_policy *xp, int dir, struct km_event *c){	struct xfrm_userpolicy_info *p;	struct xfrm_userpolicy_id *id;	struct nlmsghdr *nlh;	struct sk_buff *skb;	unsigned char *b;	int len = RTA_SPACE(sizeof(struct xfrm_user_tmpl) * xp->xfrm_nr);	int headlen;	headlen = sizeof(*p);	if (c->event == XFRM_MSG_DELPOLICY) {		len += RTA_SPACE(headlen);		headlen = sizeof(*id);	}	len += NLMSG_SPACE(headlen);	skb = alloc_skb(len, GFP_ATOMIC);	if (skb == NULL)		return -ENOMEM;	b = skb->tail;	nlh = NLMSG_PUT(skb, c->pid, c->seq, c->event, headlen);	p = NLMSG_DATA(nlh);	if (c->event == XFRM_MSG_DELPOLICY) {		id = NLMSG_DATA(nlh);		memset(id, 0, sizeof(*id));		id->dir = dir;		if (c->data.byid)			id->index = xp->index;		else			memcpy(&id->sel, &xp->selector, sizeof(id->sel));		p = RTA_DATA(__RTA_PUT(skb, XFRMA_POLICY, sizeof(*p)));	}	nlh->nlmsg_flags = 0;	copy_to_user_policy(xp, p, dir);	if (copy_to_user_tmpl(xp, skb) < 0)		goto nlmsg_failure;	nlh->nlmsg_len = skb->tail - b;	return netlink_broadcast(xfrm_nl, skb, 0, XFRMGRP_POLICY, GFP_ATOMIC);nlmsg_failure:rtattr_failure:	kfree_skb(skb);	return -1;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/43e943c32b9213b5d25407b281c94aaa474fd9a6/xfrm_user.c/clean/net/xfrm/xfrm_user.c