--- zzzz-none-000/linux-2.6.28.10/net/8021q/vlan_dev.c 2009-05-02 18:54:43.000000000 +0000 +++ puma5-6360-529/linux-2.6.28.10/net/8021q/vlan_dev.c 2010-10-01 08:25:34.000000000 +0000 @@ -256,6 +256,11 @@ if (WARN_ON(skb_headroom(skb) < dev->hard_header_len)) return -ENOSPC; +#if defined(CONFIG_FUSIV_KERNEL_POLICY_VLAN) || defined(CONFIG_FUSIV_KERNEL_POLICY_VLAN_MODULE) + if((vlan_dev_info(dev)->txAction) == 1) + { + //printk("\nvlan_dev: adding the tag %d\n",(VLAN_DEV_INFO(dev)->txAction)); +#endif if (!(vlan_dev_info(dev)->flags & VLAN_FLAG_REORDER_HDR)) { vhdr = (struct vlan_hdr *) skb_push(skb, VLAN_HLEN); @@ -277,6 +282,9 @@ type = ETH_P_8021Q; vhdrlen = VLAN_HLEN; } +#if defined(CONFIG_FUSIV_KERNEL_POLICY_VLAN) || defined(CONFIG_FUSIV_KERNEL_POLICY_VLAN_MODULE) + } +#endif /* Before delegating work to the lower layer, enter our MAC-address */ if (saddr == NULL) @@ -300,6 +308,10 @@ * NOTE: THIS ASSUMES DIX ETHERNET, SPECIFICALLY NOT SUPPORTING * OTHER THINGS LIKE FDDI/TokenRing/802.3 SNAPs... */ +#if defined(CONFIG_FUSIV_KERNEL_POLICY_VLAN) || defined(CONFIG_FUSIV_KERNEL_POLICY_VLAN_MODULE) + if((vlan_dev_info(dev)->txAction) == 1) + { +#endif if (veth->h_vlan_proto != htons(ETH_P_8021Q) || vlan_dev_info(dev)->flags & VLAN_FLAG_REORDER_HDR) { unsigned int orig_headroom = skb_headroom(skb); @@ -318,7 +330,9 @@ if (orig_headroom < VLAN_HLEN) vlan_dev_info(dev)->cnt_inc_headroom_on_tx++; } - +#if defined(CONFIG_FUSIV_KERNEL_POLICY_VLAN) || defined(CONFIG_FUSIV_KERNEL_POLICY_VLAN_MODULE) + } +#endif stats->tx_packets++; stats->tx_bytes += skb->len; @@ -699,3 +713,24 @@ memset(dev->broadcast, 0, ETH_ALEN); } + +#if defined(CONFIG_IFX_PPA_API_MODULE) +int vlan_dev_get_vid(const char *dev_name, unsigned short* result) +{ + struct net_device *dev = dev_get_by_name(dev_name); + int rv = 0; + if (dev) { + if (dev->priv_flags & IFF_802_1Q_VLAN) { + *result = VLAN_DEV_INFO(dev)->vlan_id; + rv = 0; + } else { + rv = -EINVAL; + } + dev_put(dev); + } else { + rv = -ENODEV; + } + return rv; +} +EXPORT_SYMBOL(vlan_dev_get_vid); +#endif