net: Make qdisc_skb_cb upper size bound explicit.
Just like skb->cb[], so that qdisc_skb_cb can be encapsulated inside of other data structures. This is intended to be used by IPoIB so that it can remember addressing information stored at hard_header_ops->create() time that it can fetch when the packet gets to the transmit routine. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c056b734e5
commit
a0417fa3a1
|
@ -220,9 +220,16 @@ struct tcf_proto {
|
||||||
|
|
||||||
struct qdisc_skb_cb {
|
struct qdisc_skb_cb {
|
||||||
unsigned int pkt_len;
|
unsigned int pkt_len;
|
||||||
long data[];
|
unsigned char data[24];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline void qdisc_cb_private_validate(const struct sk_buff *skb, int sz)
|
||||||
|
{
|
||||||
|
struct qdisc_skb_cb *qcb;
|
||||||
|
BUILD_BUG_ON(sizeof(skb->cb) < sizeof(unsigned int) + sz);
|
||||||
|
BUILD_BUG_ON(sizeof(qcb->data) < sz);
|
||||||
|
}
|
||||||
|
|
||||||
static inline int qdisc_qlen(const struct Qdisc *q)
|
static inline int qdisc_qlen(const struct Qdisc *q)
|
||||||
{
|
{
|
||||||
return q->q.qlen;
|
return q->q.qlen;
|
||||||
|
|
|
@ -148,8 +148,7 @@ struct choke_skb_cb {
|
||||||
|
|
||||||
static inline struct choke_skb_cb *choke_skb_cb(const struct sk_buff *skb)
|
static inline struct choke_skb_cb *choke_skb_cb(const struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
BUILD_BUG_ON(sizeof(skb->cb) <
|
qdisc_cb_private_validate(skb, sizeof(struct choke_skb_cb));
|
||||||
sizeof(struct qdisc_skb_cb) + sizeof(struct choke_skb_cb));
|
|
||||||
return (struct choke_skb_cb *)qdisc_skb_cb(skb)->data;
|
return (struct choke_skb_cb *)qdisc_skb_cb(skb)->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -130,8 +130,7 @@ struct netem_skb_cb {
|
||||||
|
|
||||||
static inline struct netem_skb_cb *netem_skb_cb(struct sk_buff *skb)
|
static inline struct netem_skb_cb *netem_skb_cb(struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
BUILD_BUG_ON(sizeof(skb->cb) <
|
qdisc_cb_private_validate(skb, sizeof(struct netem_skb_cb));
|
||||||
sizeof(struct qdisc_skb_cb) + sizeof(struct netem_skb_cb));
|
|
||||||
return (struct netem_skb_cb *)qdisc_skb_cb(skb)->data;
|
return (struct netem_skb_cb *)qdisc_skb_cb(skb)->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -94,8 +94,7 @@ struct sfb_skb_cb {
|
||||||
|
|
||||||
static inline struct sfb_skb_cb *sfb_skb_cb(const struct sk_buff *skb)
|
static inline struct sfb_skb_cb *sfb_skb_cb(const struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
BUILD_BUG_ON(sizeof(skb->cb) <
|
qdisc_cb_private_validate(skb, sizeof(struct sfb_skb_cb));
|
||||||
sizeof(struct qdisc_skb_cb) + sizeof(struct sfb_skb_cb));
|
|
||||||
return (struct sfb_skb_cb *)qdisc_skb_cb(skb)->data;
|
return (struct sfb_skb_cb *)qdisc_skb_cb(skb)->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -166,9 +166,8 @@ struct sfq_skb_cb {
|
||||||
|
|
||||||
static inline struct sfq_skb_cb *sfq_skb_cb(const struct sk_buff *skb)
|
static inline struct sfq_skb_cb *sfq_skb_cb(const struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
BUILD_BUG_ON(sizeof(skb->cb) <
|
qdisc_cb_private_validate(skb, sizeof(struct sfq_skb_cb));
|
||||||
sizeof(struct qdisc_skb_cb) + sizeof(struct sfq_skb_cb));
|
return (struct sfq_skb_cb *)qdisc_skb_cb(skb)->data;
|
||||||
return (struct sfq_skb_cb *)qdisc_skb_cb(skb)->data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int sfq_hash(const struct sfq_sched_data *q,
|
static unsigned int sfq_hash(const struct sfq_sched_data *q,
|
||||||
|
|
Loading…
Reference in New Issue