|
|
@@ -1985,6 +1985,30 @@ static inline void skb_reserve(struct sk_buff *skb, int len)
|
|
|
skb->tail += len;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * skb_tailroom_reserve - adjust reserved_tailroom
|
|
|
+ * @skb: buffer to alter
|
|
|
+ * @mtu: maximum amount of headlen permitted
|
|
|
+ * @needed_tailroom: minimum amount of reserved_tailroom
|
|
|
+ *
|
|
|
+ * Set reserved_tailroom so that headlen can be as large as possible but
|
|
|
+ * not larger than mtu and tailroom cannot be smaller than
|
|
|
+ * needed_tailroom.
|
|
|
+ * The required headroom should already have been reserved before using
|
|
|
+ * this function.
|
|
|
+ */
|
|
|
+static inline void skb_tailroom_reserve(struct sk_buff *skb, unsigned int mtu,
|
|
|
+ unsigned int needed_tailroom)
|
|
|
+{
|
|
|
+ SKB_LINEAR_ASSERT(skb);
|
|
|
+ if (mtu < skb_tailroom(skb) - needed_tailroom)
|
|
|
+ /* use at most mtu */
|
|
|
+ skb->reserved_tailroom = skb_tailroom(skb) - mtu;
|
|
|
+ else
|
|
|
+ /* use up to all available space */
|
|
|
+ skb->reserved_tailroom = needed_tailroom;
|
|
|
+}
|
|
|
+
|
|
|
#define ENCAP_TYPE_ETHER 0
|
|
|
#define ENCAP_TYPE_IPPROTO 1
|
|
|
|