err = dn_rt_fill_info(skb, NETLINK_CB(in_skb).pid, nlh->nlmsg_seq, RTM_NEWROUTE, 0); 
err = dn_rt_fill_info(skb, NETLINK_CB(in_skb).pid, nlh->nlmsg_seq, RTM_NEWROUTE, 0, 0); 
int dn_cache_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, void *arg){	struct rtattr **rta = arg;	struct rtmsg *rtm = NLMSG_DATA(nlh);	struct dn_route *rt = NULL;	struct dn_skb_cb *cb;	int err;	struct sk_buff *skb;	struct flowi fl;	memset(&fl, 0, sizeof(fl));	fl.proto = DNPROTO_NSP;	skb = alloc_skb(NLMSG_GOODSIZE, GFP_KERNEL);	if (skb == NULL)		return -ENOBUFS;	skb->mac.raw = skb->data;	cb = DN_SKB_CB(skb);	if (rta[RTA_SRC-1])		memcpy(&fl.fld_src, RTA_DATA(rta[RTA_SRC-1]), 2);	if (rta[RTA_DST-1])		memcpy(&fl.fld_dst, RTA_DATA(rta[RTA_DST-1]), 2);	if (rta[RTA_IIF-1])		memcpy(&fl.iif, RTA_DATA(rta[RTA_IIF-1]), sizeof(int));	if (fl.iif) {		struct net_device *dev;		if ((dev = dev_get_by_index(fl.iif)) == NULL) {			kfree_skb(skb);			return -ENODEV;		}		if (!dev->dn_ptr) {			dev_put(dev);			kfree_skb(skb);			return -ENODEV;		}		skb->protocol = __constant_htons(ETH_P_DNA_RT);		skb->dev = dev;		cb->src = fl.fld_src;		cb->dst = fl.fld_dst;		local_bh_disable();		err = dn_route_input(skb);		local_bh_enable();		memset(cb, 0, sizeof(struct dn_skb_cb));		rt = (struct dn_route *)skb->dst;		if (!err && -rt->u.dst.error)			err = rt->u.dst.error;	} else {		int oif = 0;		if (rta[RTA_OIF - 1])			memcpy(&oif, RTA_DATA(rta[RTA_OIF - 1]), sizeof(int));		fl.oif = oif;		err = dn_route_output_key((struct dst_entry **)&rt, &fl, 0);	}	if (skb->dev)		dev_put(skb->dev);	skb->dev = NULL;	if (err)		goto out_free;	skb->dst = &rt->u.dst;	if (rtm->rtm_flags & RTM_F_NOTIFY)		rt->rt_flags |= RTCF_NOTIFY;	NETLINK_CB(skb).dst_pid = NETLINK_CB(in_skb).pid;	err = dn_rt_fill_info(skb, NETLINK_CB(in_skb).pid, nlh->nlmsg_seq, RTM_NEWROUTE, 0);	if (err == 0)		goto out_free;	if (err < 0) {		err = -EMSGSIZE;		goto out_free;	}	err = netlink_unicast(rtnl, skb, NETLINK_CB(in_skb).pid, MSG_DONTWAIT);	return err;out_free:	kfree_skb(skb);	return err;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/b6544c0b4cf2bd96195f3cdb7cebfb35090fc557/dn_route.c/clean/net/decnet/dn_route.c