diff options
Diffstat (limited to 'net/ipv6/exthdrs.c')
-rw-r--r-- | net/ipv6/exthdrs.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/net/ipv6/exthdrs.c b/net/ipv6/exthdrs.c index 113374dc342c..2a1e7e45b890 100644 --- a/net/ipv6/exthdrs.c +++ b/net/ipv6/exthdrs.c | |||
@@ -152,7 +152,7 @@ static struct tlvtype_proc tlvprocdestopt_lst[] = { | |||
152 | {-1, NULL} | 152 | {-1, NULL} |
153 | }; | 153 | }; |
154 | 154 | ||
155 | static int ipv6_destopt_rcv(struct sk_buff **skbp, unsigned int *nhoffp) | 155 | static int ipv6_destopt_rcv(struct sk_buff **skbp) |
156 | { | 156 | { |
157 | struct sk_buff *skb = *skbp; | 157 | struct sk_buff *skb = *skbp; |
158 | struct inet6_skb_parm *opt = IP6CB(skb); | 158 | struct inet6_skb_parm *opt = IP6CB(skb); |
@@ -169,7 +169,7 @@ static int ipv6_destopt_rcv(struct sk_buff **skbp, unsigned int *nhoffp) | |||
169 | 169 | ||
170 | if (ip6_parse_tlv(tlvprocdestopt_lst, skb)) { | 170 | if (ip6_parse_tlv(tlvprocdestopt_lst, skb)) { |
171 | skb->h.raw += ((skb->h.raw[1]+1)<<3); | 171 | skb->h.raw += ((skb->h.raw[1]+1)<<3); |
172 | *nhoffp = opt->dst1; | 172 | opt->nhoff = opt->dst1; |
173 | return 1; | 173 | return 1; |
174 | } | 174 | } |
175 | 175 | ||
@@ -192,7 +192,7 @@ void __init ipv6_destopt_init(void) | |||
192 | NONE header. No data in packet. | 192 | NONE header. No data in packet. |
193 | ********************************/ | 193 | ********************************/ |
194 | 194 | ||
195 | static int ipv6_nodata_rcv(struct sk_buff **skbp, unsigned int *nhoffp) | 195 | static int ipv6_nodata_rcv(struct sk_buff **skbp) |
196 | { | 196 | { |
197 | struct sk_buff *skb = *skbp; | 197 | struct sk_buff *skb = *skbp; |
198 | 198 | ||
@@ -215,7 +215,7 @@ void __init ipv6_nodata_init(void) | |||
215 | Routing header. | 215 | Routing header. |
216 | ********************************/ | 216 | ********************************/ |
217 | 217 | ||
218 | static int ipv6_rthdr_rcv(struct sk_buff **skbp, unsigned int *nhoffp) | 218 | static int ipv6_rthdr_rcv(struct sk_buff **skbp) |
219 | { | 219 | { |
220 | struct sk_buff *skb = *skbp; | 220 | struct sk_buff *skb = *skbp; |
221 | struct inet6_skb_parm *opt = IP6CB(skb); | 221 | struct inet6_skb_parm *opt = IP6CB(skb); |
@@ -249,7 +249,7 @@ looped_back: | |||
249 | skb->h.raw += (hdr->hdrlen + 1) << 3; | 249 | skb->h.raw += (hdr->hdrlen + 1) << 3; |
250 | opt->dst0 = opt->dst1; | 250 | opt->dst0 = opt->dst1; |
251 | opt->dst1 = 0; | 251 | opt->dst1 = 0; |
252 | *nhoffp = (&hdr->nexthdr) - skb->nh.raw; | 252 | opt->nhoff = (&hdr->nexthdr) - skb->nh.raw; |
253 | return 1; | 253 | return 1; |
254 | } | 254 | } |
255 | 255 | ||
@@ -487,9 +487,14 @@ static struct tlvtype_proc tlvprochopopt_lst[] = { | |||
487 | 487 | ||
488 | int ipv6_parse_hopopts(struct sk_buff *skb, int nhoff) | 488 | int ipv6_parse_hopopts(struct sk_buff *skb, int nhoff) |
489 | { | 489 | { |
490 | IP6CB(skb)->hop = sizeof(struct ipv6hdr); | 490 | struct inet6_skb_parm *opt = IP6CB(skb); |
491 | if (ip6_parse_tlv(tlvprochopopt_lst, skb)) | 491 | |
492 | opt->hop = sizeof(struct ipv6hdr); | ||
493 | if (ip6_parse_tlv(tlvprochopopt_lst, skb)) { | ||
494 | skb->h.raw += (skb->h.raw[1]+1)<<3; | ||
495 | opt->nhoff = sizeof(struct ipv6hdr); | ||
492 | return sizeof(struct ipv6hdr); | 496 | return sizeof(struct ipv6hdr); |
497 | } | ||
493 | return -1; | 498 | return -1; |
494 | } | 499 | } |
495 | 500 | ||