diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2009-06-02 01:19:30 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-06-03 05:51:04 -0400 |
commit | adf30907d63893e4208dfe3f5c88ae12bc2f25d5 (patch) | |
tree | 0f07542bb95de2ad537540868aba6cf87a86e17d /include/net/dst.h | |
parent | 511c3f92ad5b6d9f8f6464be1b4f85f0422be91a (diff) |
net: skb->dst accessors
Define three accessors to get/set dst attached to a skb
struct dst_entry *skb_dst(const struct sk_buff *skb)
void skb_dst_set(struct sk_buff *skb, struct dst_entry *dst)
void skb_dst_drop(struct sk_buff *skb)
This one should replace occurrences of :
dst_release(skb->dst)
skb->dst = NULL;
Delete skb->dst field
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/dst.h')
-rw-r--r-- | include/net/dst.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/include/net/dst.h b/include/net/dst.h index 6be3b082a070..7fc409c19b37 100644 --- a/include/net/dst.h +++ b/include/net/dst.h | |||
@@ -195,6 +195,12 @@ struct dst_entry * dst_clone(struct dst_entry * dst) | |||
195 | } | 195 | } |
196 | 196 | ||
197 | extern void dst_release(struct dst_entry *dst); | 197 | extern void dst_release(struct dst_entry *dst); |
198 | static inline void skb_dst_drop(struct sk_buff *skb) | ||
199 | { | ||
200 | if (skb->_skb_dst) | ||
201 | dst_release(skb_dst(skb)); | ||
202 | skb->_skb_dst = 0UL; | ||
203 | } | ||
198 | 204 | ||
199 | /* Children define the path of the packet through the | 205 | /* Children define the path of the packet through the |
200 | * Linux networking. Thus, destinations are stackable. | 206 | * Linux networking. Thus, destinations are stackable. |
@@ -246,7 +252,7 @@ static inline void dst_negative_advice(struct dst_entry **dst_p) | |||
246 | 252 | ||
247 | static inline void dst_link_failure(struct sk_buff *skb) | 253 | static inline void dst_link_failure(struct sk_buff *skb) |
248 | { | 254 | { |
249 | struct dst_entry * dst = skb->dst; | 255 | struct dst_entry *dst = skb_dst(skb); |
250 | if (dst && dst->ops && dst->ops->link_failure) | 256 | if (dst && dst->ops && dst->ops->link_failure) |
251 | dst->ops->link_failure(skb); | 257 | dst->ops->link_failure(skb); |
252 | } | 258 | } |
@@ -265,13 +271,13 @@ static inline void dst_set_expires(struct dst_entry *dst, int timeout) | |||
265 | /* Output packet to network from transport. */ | 271 | /* Output packet to network from transport. */ |
266 | static inline int dst_output(struct sk_buff *skb) | 272 | static inline int dst_output(struct sk_buff *skb) |
267 | { | 273 | { |
268 | return skb->dst->output(skb); | 274 | return skb_dst(skb)->output(skb); |
269 | } | 275 | } |
270 | 276 | ||
271 | /* Input packet from network to transport. */ | 277 | /* Input packet from network to transport. */ |
272 | static inline int dst_input(struct sk_buff *skb) | 278 | static inline int dst_input(struct sk_buff *skb) |
273 | { | 279 | { |
274 | return skb->dst->input(skb); | 280 | return skb_dst(skb)->input(skb); |
275 | } | 281 | } |
276 | 282 | ||
277 | static inline struct dst_entry *dst_check(struct dst_entry *dst, u32 cookie) | 283 | static inline struct dst_entry *dst_check(struct dst_entry *dst, u32 cookie) |