]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/llc/llc_output.c
llc: use dev_hard_header
[mv-sheeva.git] / net / llc / llc_output.c
index f4291f349e92c458f8181e9ac085904a9605dfd2..b38a1079a98eac59dd1737b6f5bb7e7bf5437a54 100644 (file)
 int llc_mac_hdr_init(struct sk_buff *skb,
                     const unsigned char *sa, const unsigned char *da)
 {
-       int rc = 0;
+       int rc = -EINVAL;
 
        switch (skb->dev->type) {
-#ifdef CONFIG_TR
-       case ARPHRD_IEEE802_TR: {
-               struct net_device *dev = skb->dev;
-               struct trh_hdr *trh;
-
-               skb->mac.raw = skb_push(skb, sizeof(*trh));
-               trh = tr_hdr(skb);
-               trh->ac = AC;
-               trh->fc = LLC_FRAME;
-               if (sa)
-                       memcpy(trh->saddr, sa, dev->addr_len);
-               else
-                       memset(trh->saddr, 0, dev->addr_len);
-               if (da) {
-                       memcpy(trh->daddr, da, dev->addr_len);
-                       tr_source_route(skb, trh, dev);
-                       skb->mac.raw = skb->data;
-               }
-               break;
-       }
-#endif
+       case ARPHRD_IEEE802_TR:
        case ARPHRD_ETHER:
-       case ARPHRD_LOOPBACK: {
-               unsigned short len = skb->len;
-               struct ethhdr *eth;
-
-               skb->mac.raw = skb_push(skb, sizeof(*eth));
-               eth = eth_hdr(skb);
-               eth->h_proto = htons(len);
-               memcpy(eth->h_dest, da, ETH_ALEN);
-               memcpy(eth->h_source, sa, ETH_ALEN);
+       case ARPHRD_LOOPBACK:
+               rc = dev_hard_header(skb, skb->dev, ETH_P_802_2, da, sa,
+                                    skb->len);
+               if (rc > 0)
+                       rc = 0;
                break;
-       }
        default:
-               printk(KERN_WARNING "device type not supported: %d\n",
-                      skb->dev->type);
-               rc = -EINVAL;
+               WARN(1, "device type not supported: %d\n", skb->dev->type);
        }
        return rc;
 }