Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 87851
b: refs/heads/master
c: 732c8bd
h: refs/heads/master
i:
  87849: 816a8c6
  87847: fa0471d
v: v3
  • Loading branch information
Herbert Xu authored and David S. Miller committed Mar 26, 2008
1 parent 2dd18e4 commit 53b04ea
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 0e5606e4f46b7cf52dd445af01e71ed9dbb7f735
refs/heads/master: 732c8bd590625e8bc0b88313b82930e336b2bec4
6 changes: 6 additions & 0 deletions trunk/include/net/xfrm.h
Original file line number Diff line number Diff line change
Expand Up @@ -552,6 +552,9 @@ struct xfrm_mode_skb_cb {
__be16 id;
__be16 frag_off;

/* IP header length (excluding options or extension headers). */
u8 ihl;

/* TOS for IPv4, class for IPv6. */
u8 tos;

Expand All @@ -561,6 +564,9 @@ struct xfrm_mode_skb_cb {
/* Protocol for IPv4, NH for IPv6. */
u8 protocol;

/* Option length for IPv4, zero for IPv6. */
u8 optlen;

/* Used by IPv6 only, zero for IPv4. */
u8 flow_lbl[3];
};
Expand Down
11 changes: 5 additions & 6 deletions trunk/net/ipv4/xfrm4_mode_beet.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,25 +39,24 @@ static void xfrm4_beet_make_header(struct sk_buff *skb)
static int xfrm4_beet_output(struct xfrm_state *x, struct sk_buff *skb)
{
struct ip_beet_phdr *ph;
struct iphdr *iph, *top_iph;
struct iphdr *top_iph;
int hdrlen, optlen;

iph = ip_hdr(skb);

hdrlen = 0;
optlen = iph->ihl * 4 - sizeof(*iph);
optlen = XFRM_MODE_SKB_CB(skb)->optlen;
if (unlikely(optlen))
hdrlen += IPV4_BEET_PHMAXLEN - (optlen & 4);

skb_set_network_header(skb, IPV4_BEET_PHMAXLEN - x->props.header_len -
hdrlen);
skb->mac_header = skb->network_header +
offsetof(struct iphdr, protocol);
skb->transport_header = skb->network_header + sizeof(*iph);
skb->transport_header = skb->network_header + sizeof(*top_iph);

xfrm4_beet_make_header(skb);

ph = (struct ip_beet_phdr *)__skb_pull(skb, sizeof(*iph) - hdrlen);
ph = (struct ip_beet_phdr *)
__skb_pull(skb, XFRM_MODE_SKB_CB(skb)->ihl - hdrlen);

top_iph = ip_hdr(skb);

Expand Down
2 changes: 2 additions & 0 deletions trunk/net/ipv4/xfrm4_state.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,12 @@ int xfrm4_extract_header(struct sk_buff *skb)
{
struct iphdr *iph = ip_hdr(skb);

XFRM_MODE_SKB_CB(skb)->ihl = sizeof(*iph);
XFRM_MODE_SKB_CB(skb)->id = iph->id;
XFRM_MODE_SKB_CB(skb)->frag_off = iph->frag_off;
XFRM_MODE_SKB_CB(skb)->tos = iph->tos;
XFRM_MODE_SKB_CB(skb)->ttl = iph->ttl;
XFRM_MODE_SKB_CB(skb)->optlen = iph->ihl * 4 - sizeof(*iph);
memset(XFRM_MODE_SKB_CB(skb)->flow_lbl, 0,
sizeof(XFRM_MODE_SKB_CB(skb)->flow_lbl));

Expand Down
1 change: 1 addition & 0 deletions trunk/net/ipv6/xfrm6_mode_beet.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ static int xfrm6_beet_output(struct xfrm_state *x, struct sk_buff *skb)
skb->mac_header = skb->network_header +
offsetof(struct ipv6hdr, nexthdr);
skb->transport_header = skb->network_header + sizeof(*top_iph);
__skb_pull(skb, XFRM_MODE_SKB_CB(skb)->ihl);

xfrm6_beet_make_header(skb);

Expand Down
2 changes: 2 additions & 0 deletions trunk/net/ipv6/xfrm6_state.c
Original file line number Diff line number Diff line change
Expand Up @@ -174,10 +174,12 @@ int xfrm6_extract_header(struct sk_buff *skb)
{
struct ipv6hdr *iph = ipv6_hdr(skb);

XFRM_MODE_SKB_CB(skb)->ihl = sizeof(*iph);
XFRM_MODE_SKB_CB(skb)->id = 0;
XFRM_MODE_SKB_CB(skb)->frag_off = htons(IP_DF);
XFRM_MODE_SKB_CB(skb)->tos = ipv6_get_dsfield(iph);
XFRM_MODE_SKB_CB(skb)->ttl = iph->hop_limit;
XFRM_MODE_SKB_CB(skb)->optlen = 0;
memcpy(XFRM_MODE_SKB_CB(skb)->flow_lbl, iph->flow_lbl,
sizeof(XFRM_MODE_SKB_CB(skb)->flow_lbl));

Expand Down

0 comments on commit 53b04ea

Please sign in to comment.