summaryrefslogtreecommitdiff
path: root/include/net
diff options
context:
space:
mode:
authorAlexey Kuznetsov <kuznet@ms2.inr.ac.ru>2003-03-19 03:54:09 -0800
committerDavid S. Miller <davem@nuts.ninka.net>2003-03-19 03:54:09 -0800
commitd970778686ff6440d9c3682f1dd91ac5110807c7 (patch)
tree7cda13a2933229e6a75b1f657e680e66b694ec00 /include/net
parentcd931326e4732c76fb6452b6b1835321d6f564ed (diff)
[IPSEC]: fragmentation & tcp mss calculation.
1. Add local_df field to struct sk_buff to mark packets which are to be fragmented locally despite of their IPv6ness of IP DF flag 2. Add ext2_header_len to tcp_opt to keep memory of part of header length depending on route 3. Add trailer_len to struct dst_entry and xfrm_state to know how much of space should be reserved at tail of frame for subsequent transformations. 4. [BUG] icv_trun_len must be used while mss claculation, not icv_full_length.
Diffstat (limited to 'include/net')
-rw-r--r--include/net/dst.h3
-rw-r--r--include/net/tcp.h3
-rw-r--r--include/net/xfrm.h6
3 files changed, 10 insertions, 2 deletions
diff --git a/include/net/dst.h b/include/net/dst.h
index 1dcd50ff5496..e43ae2bb92b1 100644
--- a/include/net/dst.h
+++ b/include/net/dst.h
@@ -50,7 +50,8 @@ struct dst_entry
unsigned long lastuse;
unsigned long expires;
- unsigned header_len; /* more space at head required */
+ unsigned short header_len; /* more space at head required */
+ unsigned short trailer_len; /* space to reserve at tail */
u32 metrics[RTAX_MAX];
struct dst_entry *path;
diff --git a/include/net/tcp.h b/include/net/tcp.h
index f1a634dfeb9b..b652650286fe 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -927,7 +927,8 @@ static __inline__ unsigned int tcp_current_mss(struct sock *sk, int large)
if (dst) {
u32 mtu = dst_pmtu(dst);
- if (mtu != tp->pmtu_cookie)
+ if (mtu != tp->pmtu_cookie ||
+ tp->ext2_header_len != dst->header_len)
mss_now = tcp_sync_mss(sk, mtu);
}
if (tp->eff_sacks)
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index e77805c63601..fd99637a96bc 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -107,6 +107,7 @@ struct xfrm_state
u16 family;
xfrm_address_t saddr;
int header_len;
+ int trailer_len;
} props;
struct xfrm_lifetime_cfg lft;
@@ -255,6 +256,11 @@ static inline void xfrm_state_put(struct xfrm_state *x)
__xfrm_state_destroy(x);
}
+static inline void xfrm_state_hold(struct xfrm_state *x)
+{
+ atomic_inc(&x->refcnt);
+}
+
static inline int
xfrm4_selector_match(struct xfrm_selector *sel, struct flowi *fl)
{