aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac802154/wpan.c
diff options
context:
space:
mode:
authorPhoebe Buckheister <phoebe.buckheister@itwm.fraunhofer.de>2014-03-14 16:23:59 -0400
committerDavid S. Miller <davem@davemloft.net>2014-03-14 22:15:26 -0400
commitb70ab2e87f17176d18f67ef331064441a032b5f3 (patch)
tree634b1482ab909ebe4d62b2a786378ad9584f922a /net/mac802154/wpan.c
parent46ef0eb3ea65e7043aac17cb92982be879c65366 (diff)
ieee802154: enforce consistent endianness in the 802.15.4 stack
Enable sparse warnings about endianness, replace the remaining fields regarding network operations without explicit endianness annotations with such that are annotated, and propagate this through the entire stack. Uses of ieee802154_addr_sa are not changed yet, this patch is only concerned with all other fields (such as address filters, operation parameters and the likes). Signed-off-by: Phoebe Buckheister <phoebe.buckheister@itwm.fraunhofer.de> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/mac802154/wpan.c')
-rw-r--r--net/mac802154/wpan.c43
1 files changed, 27 insertions, 16 deletions
diff --git a/net/mac802154/wpan.c b/net/mac802154/wpan.c
index b2bc3f030190..43e886bb9073 100644
--- a/net/mac802154/wpan.c
+++ b/net/mac802154/wpan.c
@@ -76,19 +76,25 @@ mac802154_wpan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
76 76
77 switch (cmd) { 77 switch (cmd) {
78 case SIOCGIFADDR: 78 case SIOCGIFADDR:
79 if (priv->pan_id == IEEE802154_PANID_BROADCAST || 79 {
80 priv->short_addr == IEEE802154_ADDR_BROADCAST) { 80 u16 pan_id, short_addr;
81
82 pan_id = le16_to_cpu(priv->pan_id);
83 short_addr = le16_to_cpu(priv->short_addr);
84 if (pan_id == IEEE802154_PANID_BROADCAST ||
85 short_addr == IEEE802154_ADDR_BROADCAST) {
81 err = -EADDRNOTAVAIL; 86 err = -EADDRNOTAVAIL;
82 break; 87 break;
83 } 88 }
84 89
85 sa->family = AF_IEEE802154; 90 sa->family = AF_IEEE802154;
86 sa->addr.addr_type = IEEE802154_ADDR_SHORT; 91 sa->addr.addr_type = IEEE802154_ADDR_SHORT;
87 sa->addr.pan_id = priv->pan_id; 92 sa->addr.pan_id = pan_id;
88 sa->addr.short_addr = priv->short_addr; 93 sa->addr.short_addr = short_addr;
89 94
90 err = 0; 95 err = 0;
91 break; 96 break;
97 }
92 case SIOCSIFADDR: 98 case SIOCSIFADDR:
93 dev_warn(&dev->dev, 99 dev_warn(&dev->dev,
94 "Using DEBUGing ioctl SIOCSIFADDR isn't recommened!\n"); 100 "Using DEBUGing ioctl SIOCSIFADDR isn't recommened!\n");
@@ -101,8 +107,8 @@ mac802154_wpan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
101 break; 107 break;
102 } 108 }
103 109
104 priv->pan_id = sa->addr.pan_id; 110 priv->pan_id = cpu_to_le16(sa->addr.pan_id);
105 priv->short_addr = sa->addr.short_addr; 111 priv->short_addr = cpu_to_le16(sa->addr.short_addr);
106 112
107 err = 0; 113 err = 0;
108 break; 114 break;
@@ -151,18 +157,18 @@ static int mac802154_header_create(struct sk_buff *skb,
151 if (!saddr) { 157 if (!saddr) {
152 spin_lock_bh(&priv->mib_lock); 158 spin_lock_bh(&priv->mib_lock);
153 159
154 if (priv->short_addr == IEEE802154_ADDR_BROADCAST || 160 if (priv->short_addr == cpu_to_le16(IEEE802154_ADDR_BROADCAST) ||
155 priv->short_addr == IEEE802154_ADDR_UNDEF || 161 priv->short_addr == cpu_to_le16(IEEE802154_ADDR_UNDEF) ||
156 priv->pan_id == IEEE802154_PANID_BROADCAST) { 162 priv->pan_id == cpu_to_le16(IEEE802154_PANID_BROADCAST)) {
157 dev_addr.addr_type = IEEE802154_ADDR_LONG; 163 dev_addr.addr_type = IEEE802154_ADDR_LONG;
158 memcpy(dev_addr.hwaddr, dev->dev_addr, 164 memcpy(dev_addr.hwaddr, dev->dev_addr,
159 IEEE802154_ADDR_LEN); 165 IEEE802154_ADDR_LEN);
160 } else { 166 } else {
161 dev_addr.addr_type = IEEE802154_ADDR_SHORT; 167 dev_addr.addr_type = IEEE802154_ADDR_SHORT;
162 dev_addr.short_addr = priv->short_addr; 168 dev_addr.short_addr = le16_to_cpu(priv->short_addr);
163 } 169 }
164 170
165 dev_addr.pan_id = priv->pan_id; 171 dev_addr.pan_id = le16_to_cpu(priv->pan_id);
166 saddr = &dev_addr; 172 saddr = &dev_addr;
167 173
168 spin_unlock_bh(&priv->mib_lock); 174 spin_unlock_bh(&priv->mib_lock);
@@ -382,8 +388,8 @@ void mac802154_wpan_setup(struct net_device *dev)
382 get_random_bytes(&priv->bsn, 1); 388 get_random_bytes(&priv->bsn, 1);
383 get_random_bytes(&priv->dsn, 1); 389 get_random_bytes(&priv->dsn, 1);
384 390
385 priv->pan_id = IEEE802154_PANID_BROADCAST; 391 priv->pan_id = cpu_to_le16(IEEE802154_PANID_BROADCAST);
386 priv->short_addr = IEEE802154_ADDR_BROADCAST; 392 priv->short_addr = cpu_to_le16(IEEE802154_ADDR_BROADCAST);
387} 393}
388 394
389static int mac802154_process_data(struct net_device *dev, struct sk_buff *skb) 395static int mac802154_process_data(struct net_device *dev, struct sk_buff *skb)
@@ -394,10 +400,15 @@ static int mac802154_process_data(struct net_device *dev, struct sk_buff *skb)
394static int 400static int
395mac802154_subif_frame(struct mac802154_sub_if_data *sdata, struct sk_buff *skb) 401mac802154_subif_frame(struct mac802154_sub_if_data *sdata, struct sk_buff *skb)
396{ 402{
403 u16 span, sshort;
404
397 pr_debug("getting packet via slave interface %s\n", sdata->dev->name); 405 pr_debug("getting packet via slave interface %s\n", sdata->dev->name);
398 406
399 spin_lock_bh(&sdata->mib_lock); 407 spin_lock_bh(&sdata->mib_lock);
400 408
409 span = le16_to_cpu(sdata->pan_id);
410 sshort = le16_to_cpu(sdata->short_addr);
411
401 switch (mac_cb(skb)->da.addr_type) { 412 switch (mac_cb(skb)->da.addr_type) {
402 case IEEE802154_ADDR_NONE: 413 case IEEE802154_ADDR_NONE:
403 if (mac_cb(skb)->sa.addr_type != IEEE802154_ADDR_NONE) 414 if (mac_cb(skb)->sa.addr_type != IEEE802154_ADDR_NONE)
@@ -408,7 +419,7 @@ mac802154_subif_frame(struct mac802154_sub_if_data *sdata, struct sk_buff *skb)
408 skb->pkt_type = PACKET_HOST; 419 skb->pkt_type = PACKET_HOST;
409 break; 420 break;
410 case IEEE802154_ADDR_LONG: 421 case IEEE802154_ADDR_LONG:
411 if (mac_cb(skb)->da.pan_id != sdata->pan_id && 422 if (mac_cb(skb)->da.pan_id != span &&
412 mac_cb(skb)->da.pan_id != IEEE802154_PANID_BROADCAST) 423 mac_cb(skb)->da.pan_id != IEEE802154_PANID_BROADCAST)
413 skb->pkt_type = PACKET_OTHERHOST; 424 skb->pkt_type = PACKET_OTHERHOST;
414 else if (!memcmp(mac_cb(skb)->da.hwaddr, sdata->dev->dev_addr, 425 else if (!memcmp(mac_cb(skb)->da.hwaddr, sdata->dev->dev_addr,
@@ -418,10 +429,10 @@ mac802154_subif_frame(struct mac802154_sub_if_data *sdata, struct sk_buff *skb)
418 skb->pkt_type = PACKET_OTHERHOST; 429 skb->pkt_type = PACKET_OTHERHOST;
419 break; 430 break;
420 case IEEE802154_ADDR_SHORT: 431 case IEEE802154_ADDR_SHORT:
421 if (mac_cb(skb)->da.pan_id != sdata->pan_id && 432 if (mac_cb(skb)->da.pan_id != span &&
422 mac_cb(skb)->da.pan_id != IEEE802154_PANID_BROADCAST) 433 mac_cb(skb)->da.pan_id != IEEE802154_PANID_BROADCAST)
423 skb->pkt_type = PACKET_OTHERHOST; 434 skb->pkt_type = PACKET_OTHERHOST;
424 else if (mac_cb(skb)->da.short_addr == sdata->short_addr) 435 else if (mac_cb(skb)->da.short_addr == sshort)
425 skb->pkt_type = PACKET_HOST; 436 skb->pkt_type = PACKET_HOST;
426 else if (mac_cb(skb)->da.short_addr == 437 else if (mac_cb(skb)->da.short_addr ==
427 IEEE802154_ADDR_BROADCAST) 438 IEEE802154_ADDR_BROADCAST)