/* Bridged-and-DNAT'ed traffic doesn't * require ip_forwarding. */ if (((struct dst_entry *)rt)->dev == dev) { 
/* - Bridged-and-DNAT'ed traffic doesn't *   require ip_forwarding. * - Deal with redirected traffic. */ if (((struct dst_entry *)rt)->dev == dev || rt->rt_type == RTN_LOCAL) { 
static int br_nf_pre_routing_finish(struct sk_buff *skb){	struct net_device *dev = skb->dev;	struct iphdr *iph = skb->nh.iph;	struct nf_bridge_info *nf_bridge = skb->nf_bridge;	if (nf_bridge->mask & BRNF_PKT_TYPE) {		skb->pkt_type = PACKET_OTHERHOST;		nf_bridge->mask ^= BRNF_PKT_TYPE;	}	nf_bridge->mask ^= BRNF_NF_BRIDGE_PREROUTING;	if (dnat_took_place(skb)) {		if (ip_route_input(skb, iph->daddr, iph->saddr, iph->tos,		    dev)) {			struct rtable *rt;			struct flowi fl = { .nl_u = 			{ .ip4_u = { .daddr = iph->daddr, .saddr = 0 ,				     .tos = RT_TOS(iph->tos)} }, .proto = 0};			if (!ip_route_output_key(&rt, &fl)) {				/* Bridged-and-DNAT'ed traffic doesn't				 * require ip_forwarding. */				if (((struct dst_entry *)rt)->dev == dev) {					skb->dst = (struct dst_entry *)rt;					goto bridged_dnat;				}				__br_dnat_complain();				dst_release((struct dst_entry *)rt);			}			kfree_skb(skb);			return 0;		} else {			if (skb->dst->dev == dev) {bridged_dnat:				/* Tell br_nf_local_out this is a				 * bridged frame */				nf_bridge->mask |= BRNF_BRIDGED_DNAT;				skb->dev = nf_bridge->physindev;				if (skb->protocol ==				    __constant_htons(ETH_P_8021Q)) {					skb_push(skb, VLAN_HLEN);					skb->nh.raw -= VLAN_HLEN;				}				NF_HOOK_THRESH(PF_BRIDGE, NF_BR_PRE_ROUTING,					       skb, skb->dev, NULL,					       br_nf_pre_routing_finish_bridge,					       1);				return 0;			}			memcpy(eth_hdr(skb)->h_dest, dev->dev_addr,			       ETH_ALEN);			skb->pkt_type = PACKET_HOST;		}	} else {		skb->dst = (struct dst_entry *)&__fake_rtable;		dst_hold(skb->dst);	}	skb->dev = nf_bridge->physindev;	if (skb->protocol == __constant_htons(ETH_P_8021Q)) {		skb_push(skb, VLAN_HLEN);		skb->nh.raw -= VLAN_HLEN;	}	NF_HOOK_THRESH(PF_BRIDGE, NF_BR_PRE_ROUTING, skb, skb->dev, NULL,		       br_handle_frame_finish, 1);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/1c011bed5f49ce9e6193b18b226106a41ecfa95c/br_netfilter.c/clean/net/bridge/br_netfilter.c