aboutsummaryrefslogtreecommitdiffstats
path: root/net/ieee802154/6lowpan_rtnl.c
diff options
context:
space:
mode:
authorPhoebe Buckheister <phoebe.buckheister@itwm.fraunhofer.de>2014-05-14 11:43:08 -0400
committerDavid S. Miller <davem@davemloft.net>2014-05-15 15:51:42 -0400
commit32edc40ae65cf84e1ab69f6f8316ce81559e115d (patch)
treee3e4435e356a0e10038c3a2a16383f6089660c9c /net/ieee802154/6lowpan_rtnl.c
parent8c84296fd2867118944399ab7e9051515a70d60d (diff)
ieee802154: change _cb handling slightly
The current mac_cb handling of ieee802154 is rather awkward and limited. Decompose the single flags field into multiple fields with the meanings of each subfield of the flags field to make future extensions (for example, link-layer security) easier. Also don't set the frame sequence number in upper layers, since that's a thing the MAC is supposed to set on frame transmit - we set it on header creation, but assuming that upper layers do not blindly duplicate our headers, this is fine. Signed-off-by: Phoebe Buckheister <phoebe.buckheister@itwm.fraunhofer.de> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ieee802154/6lowpan_rtnl.c')
-rw-r--r--net/ieee802154/6lowpan_rtnl.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/net/ieee802154/6lowpan_rtnl.c b/net/ieee802154/6lowpan_rtnl.c
index 0f5a69ed746d..d0191c53cbd8 100644
--- a/net/ieee802154/6lowpan_rtnl.c
+++ b/net/ieee802154/6lowpan_rtnl.c
@@ -92,6 +92,7 @@ static int lowpan_header_create(struct sk_buff *skb,
92 const u8 *saddr = _saddr; 92 const u8 *saddr = _saddr;
93 const u8 *daddr = _daddr; 93 const u8 *daddr = _daddr;
94 struct ieee802154_addr sa, da; 94 struct ieee802154_addr sa, da;
95 struct ieee802154_mac_cb *cb = mac_cb_init(skb);
95 96
96 /* TODO: 97 /* TODO:
97 * if this package isn't ipv6 one, where should it be routed? 98 * if this package isn't ipv6 one, where should it be routed?
@@ -115,8 +116,7 @@ static int lowpan_header_create(struct sk_buff *skb,
115 * from MAC subif of the 'dev' and 'real_dev' network devices, but 116 * from MAC subif of the 'dev' and 'real_dev' network devices, but
116 * this isn't implemented in mainline yet, so currently we assign 0xff 117 * this isn't implemented in mainline yet, so currently we assign 0xff
117 */ 118 */
118 mac_cb(skb)->flags = IEEE802154_FC_TYPE_DATA; 119 cb->type = IEEE802154_FC_TYPE_DATA;
119 mac_cb(skb)->seq = ieee802154_mlme_ops(dev)->get_dsn(dev);
120 120
121 /* prepare wpan address data */ 121 /* prepare wpan address data */
122 sa.mode = IEEE802154_ADDR_LONG; 122 sa.mode = IEEE802154_ADDR_LONG;
@@ -135,11 +135,10 @@ static int lowpan_header_create(struct sk_buff *skb,
135 } else { 135 } else {
136 da.mode = IEEE802154_ADDR_LONG; 136 da.mode = IEEE802154_ADDR_LONG;
137 da.extended_addr = ieee802154_devaddr_from_raw(daddr); 137 da.extended_addr = ieee802154_devaddr_from_raw(daddr);
138
139 /* request acknowledgment */
140 mac_cb(skb)->flags |= MAC_CB_FLAG_ACKREQ;
141 } 138 }
142 139
140 cb->ackreq = !lowpan_is_addr_broadcast(daddr);
141
143 return dev_hard_header(skb, lowpan_dev_info(dev)->real_dev, 142 return dev_hard_header(skb, lowpan_dev_info(dev)->real_dev,
144 type, (void *)&da, (void *)&sa, 0); 143 type, (void *)&da, (void *)&sa, 0);
145} 144}