[SK_BUFF]: Introduce skb_mac_header()
Arnaldo Carvalho de Melo [Mon, 19 Mar 2007 22:33:04 +0000 (15:33 -0700)]
For the places where we need a pointer to the mac header, it is still legal to
touch skb->mac.raw directly if just adding to, subtracting from or setting it
to another layer header.

This one also converts some more cases to skb_reset_mac_header() that my
regex missed as it had no spaces before nor after '=', ugh.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

49 files changed:
arch/um/drivers/daemon_kern.c
arch/um/drivers/mcast_kern.c
arch/um/drivers/pcap_kern.c
arch/um/drivers/slip_kern.c
arch/um/drivers/slirp_kern.c
arch/um/os-Linux/drivers/ethertap_kern.c
arch/um/os-Linux/drivers/tuntap_kern.c
drivers/block/aoe/aoe.h
drivers/ieee1394/eth1394.h
drivers/media/dvb/dvb-core/dvb_net.c
drivers/message/fusion/mptlan.c
drivers/net/arcnet/capmode.c
drivers/net/plip.c
drivers/net/slip.c
drivers/net/wan/hostess_sv11.c
drivers/net/wan/sealevel.c
drivers/net/wan/syncppp.c
drivers/net/wireless/airo.c
drivers/net/wireless/hostap/hostap_main.c
drivers/net/wireless/orinoco.c
drivers/net/wireless/wavelan.c
drivers/net/wireless/wavelan_cs.c
drivers/s390/net/claw.c
include/linux/if_ether.h
include/linux/if_tr.h
include/linux/if_vlan.h
include/linux/netfilter_bridge/ebt_802_3.h
include/linux/skbuff.h
net/802/hippi.c
net/appletalk/ddp.c
net/ax25/af_ax25.c
net/bluetooth/bnep/core.c
net/bridge/br_netfilter.c
net/core/dev.c
net/core/filter.c
net/core/skbuff.c
net/ipv4/netfilter/ipt_LOG.c
net/ipv4/netfilter/ipt_ULOG.c
net/ipv4/route.c
net/ipv4/tcp_input.c
net/ipv4/xfrm4_mode_tunnel.c
net/ipv6/ndisc.c
net/ipv6/netfilter/ip6t_LOG.c
net/ipv6/netfilter/ip6t_eui64.c
net/ipv6/xfrm6_mode_beet.c
net/ipv6/xfrm6_mode_tunnel.c
net/netfilter/xt_mac.c
net/packet/af_packet.c
net/tipc/eth_media.c

index 9c2e7a7..adeece1 100644 (file)
@@ -46,7 +46,7 @@ static int daemon_read(int fd, struct sk_buff **skb,
 {
        *skb = ether_adjust_skb(*skb, ETH_HEADER_OTHER);
        if(*skb == NULL) return(-ENOMEM);
-       return(net_recvfrom(fd, (*skb)->mac.raw, 
+       return(net_recvfrom(fd, skb_mac_header(*skb),
                            (*skb)->dev->mtu + ETH_HEADER_OTHER));
 }
 
index 52ccb7b..e6b8e0d 100644 (file)
@@ -50,7 +50,7 @@ static int mcast_read(int fd, struct sk_buff **skb, struct uml_net_private *lp)
 {
        *skb = ether_adjust_skb(*skb, ETH_HEADER_OTHER);
        if(*skb == NULL) return(-ENOMEM);
-       return(net_recvfrom(fd, (*skb)->mac.raw, 
+       return(net_recvfrom(fd, skb_mac_header(*skb),
                            (*skb)->dev->mtu + ETH_HEADER_OTHER));
 }
 
index e67362a..9488493 100644 (file)
@@ -36,7 +36,7 @@ static int pcap_read(int fd, struct sk_buff **skb,
 {
        *skb = ether_adjust_skb(*skb, ETH_HEADER_OTHER);
        if(*skb == NULL) return(-ENOMEM);
-       return(pcap_user_read(fd, (*skb)->mac.raw, 
+       return(pcap_user_read(fd, skb_mac_header(*skb),
                              (*skb)->dev->mtu + ETH_HEADER_OTHER,
                              (struct pcap_data *) &lp->user));
 }
index 25634bd..125c44f 100644 (file)
@@ -49,7 +49,7 @@ static unsigned short slip_protocol(struct sk_buff *skbuff)
 static int slip_read(int fd, struct sk_buff **skb, 
                       struct uml_net_private *lp)
 {
-       return(slip_user_read(fd, (*skb)->mac.raw, (*skb)->dev->mtu, 
+       return(slip_user_read(fd, skb_mac_header(*skb), (*skb)->dev->mtu,
                              (struct slip_data *) &lp->user));
 }
 
index b3ed8fb..0a0324a 100644 (file)
@@ -53,7 +53,7 @@ static unsigned short slirp_protocol(struct sk_buff *skbuff)
 static int slirp_read(int fd, struct sk_buff **skb, 
                       struct uml_net_private *lp)
 {
-       return(slirp_user_read(fd, (*skb)->mac.raw, (*skb)->dev->mtu, 
+       return(slirp_user_read(fd, skb_mac_header(*skb), (*skb)->dev->mtu,
                              (struct slirp_data *) &lp->user));
 }
 
index 7054182..1268914 100644 (file)
@@ -43,7 +43,7 @@ static int etap_read(int fd, struct sk_buff **skb, struct uml_net_private *lp)
 
        *skb = ether_adjust_skb(*skb, ETH_HEADER_ETHERTAP);
        if(*skb == NULL) return(-ENOMEM);
-       len = net_recvfrom(fd, (*skb)->mac.raw, 
+       len = net_recvfrom(fd, skb_mac_header(*skb),
                           (*skb)->dev->mtu + 2 * ETH_HEADER_ETHERTAP);
        if(len <= 0) return(len);
        skb_pull(*skb, 2);
index 76570a2..f1714e7 100644 (file)
@@ -43,7 +43,7 @@ static int tuntap_read(int fd, struct sk_buff **skb,
 {
        *skb = ether_adjust_skb(*skb, ETH_HEADER_OTHER);
        if(*skb == NULL) return(-ENOMEM);
-       return(net_read(fd, (*skb)->mac.raw, 
+       return(net_read(fd, skb_mac_header(*skb),
                        (*skb)->dev->mtu + ETH_HEADER_OTHER));
 }
 
index 4c34f8d..1d84668 100644 (file)
@@ -53,7 +53,7 @@ struct aoe_hdr {
 
 static inline struct aoe_hdr *aoe_hdr(const struct sk_buff *skb)
 {
-       return (struct aoe_hdr *)skb->mac.raw;
+       return (struct aoe_hdr *)skb_mac_header(skb);
 }
 #endif
 
index c45cbff..1e83565 100644 (file)
@@ -90,7 +90,7 @@ struct eth1394hdr {
 
 static inline struct eth1394hdr *eth1394_hdr(const struct sk_buff *skb)
 {
-       return (struct eth1394hdr *)skb->mac.raw;
+       return (struct eth1394hdr *)skb_mac_header(skb);
 }
 #endif
 
index 76e9c36..c6b0041 100644 (file)
@@ -174,7 +174,7 @@ static unsigned short dvb_net_eth_type_trans(struct sk_buff *skb,
        struct ethhdr *eth;
        unsigned char *rawp;
 
-       skb->mac.raw=skb->data;
+       skb_reset_mac_header(skb);
        skb_pull(skb,dev->hard_header_len);
        eth = eth_hdr(skb);
 
index d5b878d..21fe1b6 100644 (file)
@@ -714,6 +714,7 @@ mpt_lan_sdu_send (struct sk_buff *skb, struct net_device *dev)
        LANSendRequest_t *pSendReq;
        SGETransaction32_t *pTrans;
        SGESimple64_t *pSimple;
+       const unsigned char *mac;
        dma_addr_t dma;
        unsigned long flags;
        int ctx;
@@ -784,6 +785,7 @@ mpt_lan_sdu_send (struct sk_buff *skb, struct net_device *dev)
 //                     IOC_AND_NETDEV_NAMES_s_s(dev),
 //                     ctx, skb, skb->data));
 
+       mac = skb_mac_header(skb);
 #ifdef QLOGIC_NAA_WORKAROUND
 {
        struct NAA_Hosed *nh;
@@ -793,12 +795,12 @@ mpt_lan_sdu_send (struct sk_buff *skb, struct net_device *dev)
           drops. */
        read_lock_irq(&bad_naa_lock);
        for (nh = mpt_bad_naa; nh != NULL; nh=nh->next) {
-               if ((nh->ieee[0] == skb->mac.raw[0]) &&
-                   (nh->ieee[1] == skb->mac.raw[1]) &&
-                   (nh->ieee[2] == skb->mac.raw[2]) &&
-                   (nh->ieee[3] == skb->mac.raw[3]) &&
-                   (nh->ieee[4] == skb->mac.raw[4]) &&
-                   (nh->ieee[5] == skb->mac.raw[5])) {
+               if ((nh->ieee[0] == mac[0]) &&
+                   (nh->ieee[1] == mac[1]) &&
+                   (nh->ieee[2] == mac[2]) &&
+                   (nh->ieee[3] == mac[3]) &&
+                   (nh->ieee[4] == mac[4]) &&
+                   (nh->ieee[5] == mac[5])) {
                        cur_naa = nh->NAA;
                        dlprintk ((KERN_INFO "mptlan/sdu_send: using NAA value "
                                  "= %04x.\n", cur_naa));
@@ -810,12 +812,12 @@ mpt_lan_sdu_send (struct sk_buff *skb, struct net_device *dev)
 #endif
 
        pTrans->TransactionDetails[0] = cpu_to_le32((cur_naa         << 16) |
-                                                   (skb->mac.raw[0] <<  8) |
-                                                   (skb->mac.raw[1] <<  0));
-       pTrans->TransactionDetails[1] = cpu_to_le32((skb->mac.raw[2] << 24) |
-                                                   (skb->mac.raw[3] << 16) |
-                                                   (skb->mac.raw[4] <<  8) |
-                                                   (skb->mac.raw[5] <<  0));
+                                                   (mac[0] <<  8) |
+                                                   (mac[1] <<  0));
+       pTrans->TransactionDetails[1] = cpu_to_le32((mac[2] << 24) |
+                                                   (mac[3] << 16) |
+                                                   (mac[4] <<  8) |
+                                                   (mac[5] <<  0));
 
        pSimple = (SGESimple64_t *) &pTrans->TransactionDetails[2];
 
index 6c764b6..f6a87bd 100644 (file)
@@ -123,7 +123,7 @@ static void rx(struct net_device *dev, int bufnum,
        skb_put(skb, length + ARC_HDR_SIZE + sizeof(int));
        skb->dev = dev;
        skb_reset_mac_header(skb);
-       pkt = (struct archdr *)skb->mac.raw;
+       pkt = (struct archdr *)skb_mac_header(skb);
        skb_pull(skb, ARC_HDR_SIZE);
 
        /* up to sizeof(pkt->soft) has already been copied from the card */
@@ -269,7 +269,7 @@ static int ack_tx(struct net_device *dev, int acked)
   ackskb->dev = dev;
 
   skb_reset_mac_header(ackskb);
-  ackpkt = (struct archdr *)ackskb->mac.raw;
+  ackpkt = (struct archdr *)skb_mac_header(ackskb);
   /* skb_pull(ackskb, ARC_HDR_SIZE); */
 
 
index 6bb085f..8754cf3 100644 (file)
@@ -546,7 +546,7 @@ static __be16 plip_type_trans(struct sk_buff *skb, struct net_device *dev)
        struct ethhdr *eth;
        unsigned char *rawp;
 
-       skb->mac.raw=skb->data;
+       skb_reset_mac_header(skb);
        skb_pull(skb,dev->hard_header_len);
        eth = eth_hdr(skb);
 
index 2f4b1de..65bd20f 100644 (file)
@@ -363,7 +363,7 @@ sl_bump(struct slip *sl)
        }
        skb->dev = sl->dev;
        memcpy(skb_put(skb,count), sl->rbuff, count);
-       skb->mac.raw=skb->data;
+       skb_reset_mac_header(skb);
        skb->protocol=htons(ETH_P_IP);
        netif_rx(skb);
        sl->dev->last_rx = jiffies;
index a02c5fb..9ba3e4e 100644 (file)
@@ -59,7 +59,7 @@ static void hostess_input(struct z8530_channel *c, struct sk_buff *skb)
        /* Drop the CRC - it's not a good idea to try and negotiate it ;) */
        skb_trim(skb, skb->len-2);
        skb->protocol=__constant_htons(ETH_P_WAN_PPP);
-       skb->mac.raw=skb->data;
+       skb_reset_mac_header(skb);
        skb->dev=c->netdevice;
        /*
         *      Send it to the PPP layer. We don't have time to process
index 70fb1b9..1313581 100644 (file)
@@ -61,7 +61,7 @@ static void sealevel_input(struct z8530_channel *c, struct sk_buff *skb)
        /* Drop the CRC - it's not a good idea to try and negotiate it ;) */
        skb_trim(skb, skb->len-2);
        skb->protocol=htons(ETH_P_WAN_PPP);
-       skb->mac.raw=skb->data;
+       skb_reset_mac_header(skb);
        skb->dev=c->netdevice;
        /*
         *      Send it to the PPP layer. We don't have time to process
index 218f7b5..67fc67c 100644 (file)
@@ -227,7 +227,7 @@ static void sppp_input (struct net_device *dev, struct sk_buff *skb)
        unsigned long flags;
 
        skb->dev=dev;
-       skb->mac.raw=skb->data;
+       skb_reset_mac_header(skb);
 
        if (dev->flags & IFF_RUNNING)
        {
index 692a23f..7fe0a61 100644 (file)
@@ -2444,7 +2444,7 @@ static int add_airo_dev( struct net_device *dev );
 
 static int wll_header_parse(struct sk_buff *skb, unsigned char *haddr)
 {
-       memcpy(haddr, skb->mac.raw + 10, ETH_ALEN);
+       memcpy(haddr, skb_mac_header(skb) + 10, ETH_ALEN);
        return ETH_ALEN;
 }
 
index 0e29ff7..c2616e7 100644 (file)
@@ -590,20 +590,20 @@ void hostap_dump_tx_header(const char *name, const struct hfa384x_tx_frame *tx)
 
 int hostap_80211_header_parse(struct sk_buff *skb, unsigned char *haddr)
 {
-       memcpy(haddr, skb->mac.raw + 10, ETH_ALEN); /* addr2 */
+       memcpy(haddr, skb_mac_header(skb) + 10, ETH_ALEN); /* addr2 */
        return ETH_ALEN;
 }
 
 
 int hostap_80211_prism_header_parse(struct sk_buff *skb, unsigned char *haddr)
 {
-       if (*(u32 *)skb->mac.raw == LWNG_CAP_DID_BASE) {
-               memcpy(haddr, skb->mac.raw +
-                      sizeof(struct linux_wlan_ng_prism_hdr) + 10,
+       const unsigned char *mac = skb_mac_header(skb);
+
+       if (*(u32 *)mac == LWNG_CAP_DID_BASE) {
+               memcpy(haddr, mac + sizeof(struct linux_wlan_ng_prism_hdr) + 10,
                       ETH_ALEN); /* addr2 */
-       } else { /* (*(u32 *)skb->mac.raw == htonl(LWNG_CAPHDR_VERSION)) */
-               memcpy(haddr, skb->mac.raw +
-                      sizeof(struct linux_wlan_ng_cap_hdr) + 10,
+       } else { /* (*(u32 *)mac == htonl(LWNG_CAPHDR_VERSION)) */
+               memcpy(haddr, mac + sizeof(struct linux_wlan_ng_cap_hdr) + 10,
                       ETH_ALEN); /* addr2 */
        }
        return ETH_ALEN;
index f1415bf..062286d 100644 (file)
@@ -689,7 +689,7 @@ static void orinoco_stat_gather(struct net_device *dev,
        /* Note : gcc will optimise the whole section away if
         * WIRELESS_SPY is not defined... - Jean II */
        if (SPY_NUMBER(priv)) {
-               orinoco_spy_gather(dev, skb->mac.raw + ETH_ALEN,
+               orinoco_spy_gather(dev, skb_mac_header(skb) + ETH_ALEN,
                                   desc->signal, desc->silence);
        }
 }
index 69cb147..2bf77b1 100644 (file)
@@ -2517,7 +2517,8 @@ wv_packet_read(struct net_device * dev, u16 buf_off, int sksize)
        skb->protocol = eth_type_trans(skb, dev);
 
 #ifdef DEBUG_RX_INFO
-       wv_packet_info(skb->mac.raw, sksize, dev->name, "wv_packet_read");
+       wv_packet_info(skb_mac_header(skb), sksize, dev->name,
+                      "wv_packet_read");
 #endif                         /* DEBUG_RX_INFO */
 
        /* Statistics-gathering and associated stuff.
@@ -2553,7 +2554,7 @@ wv_packet_read(struct net_device * dev, u16 buf_off, int sksize)
 
                /* Spying stuff */
 #ifdef IW_WIRELESS_SPY
-               wl_spy_gather(dev, skb->mac.raw + WAVELAN_ADDR_SIZE,
+               wl_spy_gather(dev, skb_mac_header(skb) + WAVELAN_ADDR_SIZE,
                              stats);
 #endif /* IW_WIRELESS_SPY */
 #ifdef HISTOGRAM
index 9351ee7..67b867f 100644 (file)
@@ -2889,7 +2889,7 @@ wv_packet_read(struct net_device *                dev,
   skb->protocol = eth_type_trans(skb, dev);
 
 #ifdef DEBUG_RX_INFO
-  wv_packet_info(skb->mac.raw, sksize, dev->name, "wv_packet_read");
+  wv_packet_info(skb_mac_header(skb), sksize, dev->name, "wv_packet_read");
 #endif /* DEBUG_RX_INFO */
      
   /* Statistics gathering & stuff associated.
@@ -2923,7 +2923,7 @@ wv_packet_read(struct net_device *                dev,
 #endif /* WAVELAN_ROAMING */
          
 #ifdef WIRELESS_SPY
-      wl_spy_gather(dev, skb->mac.raw + WAVELAN_ADDR_SIZE, stats);
+      wl_spy_gather(dev, skb_mac_header(skb) + WAVELAN_ADDR_SIZE, stats);
 #endif /* WIRELESS_SPY */
 #ifdef HISTOGRAM
       wl_his_gather(dev, stats);
index 7809a79..6dd64d0 100644 (file)
@@ -3525,8 +3525,8 @@ unpack_next:
                                 memcpy(skb_put(skb,len_of_data),
                                        privptr->p_mtc_envelope,
                                        len_of_data);
-                                skb->mac.raw=skb->data;
                                 skb->dev=dev;
+                               skb_reset_mac_header(skb);
                                 skb->protocol=htons(ETH_P_IP);
                                 skb->ip_summed=CHECKSUM_UNNECESSARY;
                                 privptr->stats.rx_packets++;
index ab08f35..f6863fb 100644 (file)
@@ -112,7 +112,7 @@ struct ethhdr {
 
 static inline struct ethhdr *eth_hdr(const struct sk_buff *skb)
 {
-       return (struct ethhdr *)skb->mac.raw;
+       return (struct ethhdr *)skb_mac_header(skb);
 }
 
 #ifdef CONFIG_SYSCTL
index 2f94cf2..046e9d9 100644 (file)
@@ -47,7 +47,7 @@ struct trh_hdr {
 
 static inline struct trh_hdr *tr_hdr(const struct sk_buff *skb)
 {
-       return (struct trh_hdr *)skb->mac.raw;
+       return (struct trh_hdr *)skb_mac_header(skb);
 }
 #ifdef CONFIG_SYSCTL
 extern struct ctl_table tr_table[];
index d103580..544490d 100644 (file)
@@ -51,7 +51,7 @@ struct vlan_ethhdr {
 
 static inline struct vlan_ethhdr *vlan_eth_hdr(const struct sk_buff *skb)
 {
-       return (struct vlan_ethhdr *)skb->mac.raw;
+       return (struct vlan_ethhdr *)skb_mac_header(skb);
 }
 
 struct vlan_hdr {
index 07f044f..a11b0c2 100644 (file)
@@ -54,7 +54,7 @@ struct ebt_802_3_hdr {
 
 static inline struct ebt_802_3_hdr *ebt_802_3_hdr(const struct sk_buff *skb)
 {
-       return (struct ebt_802_3_hdr *)skb->mac.raw;
+       return (struct ebt_802_3_hdr *)skb_mac_header(skb);
 }
 #endif
 
index 43ab6cb..dff81af 100644 (file)
@@ -960,6 +960,16 @@ static inline void skb_reserve(struct sk_buff *skb, int len)
        skb->tail += len;
 }
 
+static inline unsigned char *skb_mac_header(const struct sk_buff *skb)
+{
+       return skb->mac.raw;
+}
+
+static inline int skb_mac_header_was_set(const struct sk_buff *skb)
+{
+       return skb->mac.raw != NULL;
+}
+
 static inline void skb_reset_mac_header(struct sk_buff *skb)
 {
        skb->mac.raw = skb->data;
index d871900..87ffc12 100644 (file)
@@ -132,7 +132,7 @@ __be16 hippi_type_trans(struct sk_buff *skb, struct net_device *dev)
         */
        skb->dev = dev;
        skb_reset_mac_header(skb);
-       hip = (struct hippi_hdr *)skb->mac.raw;
+       hip = (struct hippi_hdr *)skb_mac_header(skb);
        skb_pull(skb, HIPPI_HLEN);
 
        /*
index 32b8270..934f259 100644 (file)
@@ -1484,7 +1484,7 @@ static int ltalk_rcv(struct sk_buff *skb, struct net_device *dev,
                     struct packet_type *pt, struct net_device *orig_dev)
 {
        /* Expand any short form frames */
-       if (skb->mac.raw[2] == 1) {
+       if (skb_mac_header(skb)[2] == 1) {
                struct ddpehdr *ddp;
                /* Find our address */
                struct atalk_addr *ap = atalk_find_dev_addr(dev);
@@ -1510,8 +1510,8 @@ static int ltalk_rcv(struct sk_buff *skb, struct net_device *dev,
                 * we write the network numbers !
                 */
 
-               ddp->deh_dnode = skb->mac.raw[0];     /* From physical header */
-               ddp->deh_snode = skb->mac.raw[1];     /* From physical header */
+               ddp->deh_dnode = skb_mac_header(skb)[0];     /* From physical header */
+               ddp->deh_snode = skb_mac_header(skb)[1];     /* From physical header */
 
                ddp->deh_dnet  = ap->s_net;     /* Network number */
                ddp->deh_snet  = ap->s_net;
index 62605dc..c89e4f6 100644 (file)
@@ -1645,9 +1645,10 @@ static int ax25_recvmsg(struct kiocb *iocb, struct socket *sock,
                struct sockaddr_ax25 *sax = (struct sockaddr_ax25 *)msg->msg_name;
                ax25_digi digi;
                ax25_address src;
+               const unsigned char *mac = skb_mac_header(skb);
 
-               ax25_addr_parse(skb->mac.raw+1, skb->data-skb->mac.raw-1, &src, NULL, &digi, NULL, NULL);
-
+               ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
+                               &digi, NULL, NULL);
                sax->sax25_family = AF_AX25;
                /* We set this correctly, even though we may not let the
                   application know the digi calls further down (because it
index b1c2fa9..97156c4 100644 (file)
@@ -364,17 +364,20 @@ static inline int bnep_rx_frame(struct bnep_session *s, struct sk_buff *skb)
 
        case BNEP_COMPRESSED_SRC_ONLY:
                memcpy(__skb_put(nskb, ETH_ALEN), s->eh.h_dest, ETH_ALEN);
-               memcpy(__skb_put(nskb, ETH_ALEN), skb->mac.raw, ETH_ALEN);
+               memcpy(__skb_put(nskb, ETH_ALEN), skb_mac_header(skb), ETH_ALEN);
                put_unaligned(s->eh.h_proto, (__be16 *) __skb_put(nskb, 2));
                break;
 
        case BNEP_COMPRESSED_DST_ONLY:
-               memcpy(__skb_put(nskb, ETH_ALEN), skb->mac.raw, ETH_ALEN);
-               memcpy(__skb_put(nskb, ETH_ALEN + 2), s->eh.h_source, ETH_ALEN + 2);
+               memcpy(__skb_put(nskb, ETH_ALEN), skb_mac_header(skb),
+                      ETH_ALEN);
+               memcpy(__skb_put(nskb, ETH_ALEN + 2), s->eh.h_source,
+                      ETH_ALEN + 2);
                break;
 
        case BNEP_GENERAL:
-               memcpy(__skb_put(nskb, ETH_ALEN * 2), skb->mac.raw, ETH_ALEN * 2);
+               memcpy(__skb_put(nskb, ETH_ALEN * 2), skb_mac_header(skb),
+                      ETH_ALEN * 2);
                put_unaligned(s->eh.h_proto, (__be16 *) __skb_put(nskb, 2));
                break;
        }
index 5439a3c..1163c4f 100644 (file)
@@ -753,7 +753,8 @@ static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff **pskb,
 #ifdef CONFIG_NETFILTER_DEBUG
        /* Be very paranoid. This probably won't happen anymore, but let's
         * keep the check just to be sure... */
-       if (skb->mac.raw < skb->head || skb->mac.raw + ETH_HLEN > skb->data) {
+       if (skb_mac_header(skb) < skb->head ||
+           skb_mac_header(skb) + ETH_HLEN > skb->data) {
                printk(KERN_CRIT "br_netfilter: Argh!! br_nf_post_routing: "
                       "bad mac.raw pointer.\n");
                goto print_error;
@@ -808,7 +809,7 @@ print_error:
                if (realoutdev)
                        printk("[%s]", realoutdev->name);
        }
-       printk(" head:%p, raw:%p, data:%p\n", skb->head, skb->mac.raw,
+       printk(" head:%p, raw:%p, data:%p\n", skb->head, skb_mac_header(skb),
               skb->data);
        dump_stack();
        return NF_ACCEPT;
index 2fcaf5b..560560f 100644 (file)
@@ -1232,7 +1232,7 @@ struct sk_buff *skb_gso_segment(struct sk_buff *skb, int features)
        }
        rcu_read_unlock();
 
-       __skb_push(skb, skb->data - skb->mac.raw);
+       __skb_push(skb, skb->data - skb_mac_header(skb));
 
        return segs;
 }
index 8d185a0..1cc128d 100644 (file)
@@ -44,7 +44,7 @@ static void *__load_pointer(struct sk_buff *skb, int k)
        if (k >= SKF_NET_OFF)
                ptr = skb->nh.raw + k - SKF_NET_OFF;
        else if (k >= SKF_LL_OFF)
-               ptr = skb->mac.raw + k - SKF_LL_OFF;
+               ptr = skb_mac_header(skb) + k - SKF_LL_OFF;
 
        if (ptr >= skb->head && ptr < skb->tail)
                return ptr;
index 8f6ebd0..1493c95 100644 (file)
@@ -1878,7 +1878,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int features)
        struct sk_buff *segs = NULL;
        struct sk_buff *tail = NULL;
        unsigned int mss = skb_shinfo(skb)->gso_size;
-       unsigned int doffset = skb->data - skb->mac.raw;
+       unsigned int doffset = skb->data - skb_mac_header(skb);
        unsigned int offset = doffset;
        unsigned int headroom;
        unsigned int len;
index d9c37fd..c697971 100644 (file)
@@ -399,9 +399,9 @@ ipt_log_packet(unsigned int pf,
                /* MAC logging for input chain only. */
                printk("MAC=");
                if (skb->dev && skb->dev->hard_header_len
-                   && skb->mac.raw != (void*)skb->nh.iph) {
+                   && skb->mac.raw != skb->nh.raw) {
                        int i;
-                       unsigned char *p = skb->mac.raw;
+                       const unsigned char *p = skb_mac_header(skb);
                        for (i = 0; i < skb->dev->hard_header_len; i++,p++)
                                printk("%02x%c", *p,
                                       i==skb->dev->hard_header_len - 1
index 9718b66..fae2a34 100644 (file)
@@ -251,9 +251,9 @@ static void ipt_ulog_packet(unsigned int hooknum,
                *(pm->prefix) = '\0';
 
        if (in && in->hard_header_len > 0
-           && skb->mac.raw != (void *) skb->nh.iph
+           && skb->mac.raw != skb->nh.raw
            && in->hard_header_len <= ULOG_MAC_LEN) {
-               memcpy(pm->mac, skb->mac.raw, in->hard_header_len);
+               memcpy(pm->mac, skb_mac_header(skb), in->hard_header_len);
                pm->mac_len = in->hard_header_len;
        } else
                pm->mac_len = 0;
index 29ee7be..486ab93 100644 (file)
@@ -1698,9 +1698,9 @@ static void ip_handle_martian_source(struct net_device *dev,
                printk(KERN_WARNING "martian source %u.%u.%u.%u from "
                        "%u.%u.%u.%u, on dev %s\n",
                        NIPQUAD(daddr), NIPQUAD(saddr), dev->name);
-               if (dev->hard_header_len && skb->mac.raw) {
+               if (dev->hard_header_len && skb_mac_header_was_set(skb)) {
                        int i;
-                       unsigned char *p = skb->mac.raw;
+                       const unsigned char *p = skb_mac_header(skb);
                        printk(KERN_WARNING "ll header: ");
                        for (i = 0; i < dev->hard_header_len; i++, p++) {
                                printk("%02x", *p);
index 1ec05bd..f5e019c 100644 (file)
@@ -3633,7 +3633,7 @@ tcp_collapse(struct sock *sk, struct sk_buff_head *list,
                if (!nskb)
                        return;
 
-               skb_set_mac_header(nskb, skb->mac.raw - skb->head);
+               skb_set_mac_header(nskb, skb_mac_header(skb) - skb->head);
                nskb->nh.raw = nskb->data + (skb->nh.raw - skb->head);
                nskb->h.raw = nskb->data + (skb->h.raw - skb->head);
 
index f09055d..8e123e3 100644 (file)
@@ -126,9 +126,9 @@ static int xfrm4_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
                skb->protocol = htons(ETH_P_IPV6);
        }
 #endif
-       old_mac = skb->mac.raw;
+       old_mac = skb_mac_header(skb);
        skb_set_mac_header(skb, -skb->mac_len);
-       memmove(skb->mac.raw, old_mac, skb->mac_len);
+       memmove(skb_mac_header(skb), old_mac, skb->mac_len);
        skb->nh.raw = skb->data;
        err = 0;
 
index 053147a..a3e3d9e 100644 (file)
@@ -828,7 +828,8 @@ static void ndisc_recv_ns(struct sk_buff *skb)
                if (ifp->flags & (IFA_F_TENTATIVE|IFA_F_OPTIMISTIC)) {
                        if (dad) {
                                if (dev->type == ARPHRD_IEEE802_TR) {
-                                       unsigned char *sadr = skb->mac.raw;
+                                       const unsigned char *sadr;
+                                       sadr = skb_mac_header(skb);
                                        if (((sadr[8] ^ dev->dev_addr[0]) & 0x7f) == 0 &&
                                            sadr[9] == dev->dev_addr[1] &&
                                            sadr[10] == dev->dev_addr[2] &&
index afaa039..fc9e51a 100644 (file)
@@ -397,7 +397,7 @@ ip6t_log_packet(unsigned int pf,
                printk("MAC=");
                if (skb->dev && (len = skb->dev->hard_header_len) &&
                    skb->mac.raw != skb->nh.raw) {
-                       unsigned char *p = skb->mac.raw;
+                       const unsigned char *p = skb_mac_header(skb);
                        int i;
 
                        if (skb->dev->type == ARPHRD_SIT &&
@@ -412,7 +412,8 @@ ip6t_log_packet(unsigned int pf,
                        printk(" ");
 
                        if (skb->dev->type == ARPHRD_SIT) {
-                               struct iphdr *iph = (struct iphdr *)skb->mac.raw;
+                               const struct iphdr *iph =
+                                       (struct iphdr *)skb_mac_header(skb);
                                printk("TUNNEL=%u.%u.%u.%u->%u.%u.%u.%u ",
                                       NIPQUAD(iph->saddr),
                                       NIPQUAD(iph->daddr));
index 967bed7..c267606 100644 (file)
@@ -32,8 +32,8 @@ match(const struct sk_buff *skb,
        unsigned char eui64[8];
        int i = 0;
 
-       if (!(skb->mac.raw >= skb->head &&
-             (skb->mac.raw + ETH_HLEN) <= skb->data) &&
+       if (!(skb_mac_header(skb) >= skb->head &&
+             (skb_mac_header(skb) + ETH_HLEN) <= skb->data) &&
            offset != 0) {
                *hotdrop = 1;
                return 0;
index 53cfe1a..79364b1 100644 (file)
@@ -70,9 +70,9 @@ static int xfrm6_beet_input(struct xfrm_state *x, struct sk_buff *skb)
        memmove(skb->data, skb->nh.raw, size);
        skb->nh.raw = skb->data;
 
-       old_mac = skb->mac.raw;
+       old_mac = skb_mac_header(skb);
        skb_set_mac_header(skb, -skb->mac_len);
-       memmove(skb->mac.raw, old_mac, skb->mac_len);
+       memmove(skb_mac_header(skb), old_mac, skb->mac_len);
 
        ip6h = skb->nh.ipv6h;
        ip6h->payload_len = htons(skb->len - size);
index d2c560c..5bb0677 100644 (file)
@@ -108,9 +108,9 @@ static int xfrm6_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
                        ip6ip_ecn_decapsulate(skb);
                skb->protocol = htons(ETH_P_IP);
        }
-       old_mac = skb->mac.raw;
+       old_mac = skb_mac_header(skb);
        skb_set_mac_header(skb, -skb->mac_len);
-       memmove(skb->mac.raw, old_mac, skb->mac_len);
+       memmove(skb_mac_header(skb), old_mac, skb->mac_len);
        skb->nh.raw = skb->data;
        err = 0;
 
index d430d90..1d3a1d9 100644 (file)
@@ -37,8 +37,8 @@ match(const struct sk_buff *skb,
     const struct xt_mac_info *info = matchinfo;
 
     /* Is mac pointer valid? */
-    return (skb->mac.raw >= skb->head
-           && (skb->mac.raw + ETH_HLEN) <= skb->data
+    return (skb_mac_header(skb) >= skb->head &&
+           (skb_mac_header(skb) + ETH_HLEN) <= skb->data
            /* If so, compare... */
            && ((!compare_ether_addr(eth_hdr(skb)->h_source, info->srcaddr))
                ^ info->invert));
index 6f8c72d..73cb2d3 100644 (file)
@@ -284,7 +284,7 @@ static int packet_rcv_spkt(struct sk_buff *skb, struct net_device *dev,  struct
         *      Incoming packets have ll header pulled,
         *      push it back.
         *
-        *      For outgoing ones skb->data == skb->mac.raw
+        *      For outgoing ones skb->data == skb_mac_header(skb)
         *      so that this procedure is noop.
         */
 
@@ -303,7 +303,7 @@ static int packet_rcv_spkt(struct sk_buff *skb, struct net_device *dev,  struct
 
        spkt = &PACKET_SKB_CB(skb)->sa.pkt;
 
-       skb_push(skb, skb->data-skb->mac.raw);
+       skb_push(skb, skb->data - skb_mac_header(skb));
 
        /*
         *      The SOCK_PACKET socket receives _all_ frames.
@@ -488,7 +488,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev, struct packet
                   never delivered to user.
                 */
                if (sk->sk_type != SOCK_DGRAM)
-                       skb_push(skb, skb->data - skb->mac.raw);
+                       skb_push(skb, skb->data - skb_mac_header(skb));
                else if (skb->pkt_type == PACKET_OUTGOING) {
                        /* Special case: outgoing packets have ll header at head */
                        skb_pull(skb, skb->nh.raw - skb->data);
@@ -592,7 +592,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, struct packe
 
        if (dev->hard_header) {
                if (sk->sk_type != SOCK_DGRAM)
-                       skb_push(skb, skb->data - skb->mac.raw);
+                       skb_push(skb, skb->data - skb_mac_header(skb));
                else if (skb->pkt_type == PACKET_OUTGOING) {
                        /* Special case: outgoing packets have ll header at head */
                        skb_pull(skb, skb->nh.raw - skb->data);
index f71ba9d..03a9db3 100644 (file)
@@ -99,8 +99,8 @@ static int recv_msg(struct sk_buff *buf, struct net_device *dev,
 
        if (likely(eb_ptr->bearer)) {
               if (likely(!dev->promiscuity) ||
-                  !memcmp(buf->mac.raw,dev->dev_addr,ETH_ALEN) ||
-                  !memcmp(buf->mac.raw,dev->broadcast,ETH_ALEN)) {
+                  !memcmp(skb_mac_header(buf), dev->dev_addr, ETH_ALEN) ||
+                  !memcmp(skb_mac_header(buf), dev->broadcast, ETH_ALEN)) {
                        size = msg_size((struct tipc_msg *)buf->data);
                        skb_trim(buf, size);
                        if (likely(buf->len == size)) {