Lines Matching defs:optptr
210 unsigned char *optptr = skb_network_header(skb) + sizeof(struct iphdr);
216 switch (*optptr) {
221 optptr++;
224 optlen = optptr[1];
227 if (!IPOPT_COPIED(*optptr))
228 memset(optptr, IPOPT_NOOP, optlen);
230 optptr += optlen;
261 unsigned char *optptr;
267 optptr = (unsigned char *)&(ip_hdr(skb)[1]);
269 optptr = opt->__data;
270 iph = optptr - sizeof(struct iphdr);
273 switch (*optptr) {
275 for (optptr++, l--; l > 0; optptr++, l--) {
276 if (*optptr != IPOPT_END) {
277 *optptr = IPOPT_END;
284 optptr++;
288 pp_ptr = optptr;
291 optlen = optptr[1];
293 pp_ptr = optptr;
296 switch (*optptr) {
300 pp_ptr = optptr + 1;
303 if (optptr[2] < 4) {
304 pp_ptr = optptr + 2;
309 pp_ptr = optptr;
313 if (optptr[2] != 4 || optlen < 7 || ((optlen-3) & 3)) {
314 pp_ptr = optptr + 1;
317 memcpy(&opt->faddr, &optptr[3], 4);
319 memmove(&optptr[3], &optptr[7], optlen-7);
321 opt->is_strictroute = (optptr[0] == IPOPT_SSRR);
322 opt->srr = optptr - iph;
326 pp_ptr = optptr;
330 pp_ptr = optptr + 1;
333 if (optptr[2] < 4) {
334 pp_ptr = optptr + 2;
337 if (optptr[2] <= optlen) {
338 if (optptr[2]+3 > optlen) {
339 pp_ptr = optptr + 2;
344 memcpy(&optptr[optptr[2]-1], &spec_dst, 4);
347 optptr[2] += 4;
350 opt->rr = optptr - iph;
354 pp_ptr = optptr;
358 pp_ptr = optptr + 1;
361 if (optptr[2] < 5) {
362 pp_ptr = optptr + 2;
365 if (optptr[2] <= optlen) {
367 if (optptr[2]+3 > optlen) {
368 pp_ptr = optptr + 2;
371 switch (optptr[3]&0xF) {
374 timeptr = &optptr[optptr[2]-1];
376 optptr[2] += 4;
379 if (optptr[2]+7 > optlen) {
380 pp_ptr = optptr + 2;
385 memcpy(&optptr[optptr[2]-1], &spec_dst, 4);
386 timeptr = &optptr[optptr[2]+3];
390 optptr[2] += 8;
393 if (optptr[2]+7 > optlen) {
394 pp_ptr = optptr + 2;
399 memcpy(&addr, &optptr[optptr[2]-1], 4);
403 timeptr = &optptr[optptr[2]+3];
406 optptr[2] += 8;
410 pp_ptr = optptr + 3;
422 } else if ((optptr[3]&0xF) != IPOPT_TS_PRESPEC) {
423 unsigned int overflow = optptr[3]>>4;
425 pp_ptr = optptr + 3;
429 optptr[3] = (optptr[3]&0xF)|((overflow+1)<<4);
433 opt->ts = optptr - iph;
437 pp_ptr = optptr + 1;
440 if (optptr[2] == 0 && optptr[3] == 0)
441 opt->router_alert = optptr - iph;
445 pp_ptr = optptr;
448 opt->cipso = optptr - iph;
449 if (cipso_v4_validate(skb, &optptr)) {
450 pp_ptr = optptr;
458 pp_ptr = optptr;
464 optptr += optlen;
498 unsigned char *optptr = opt->__data + opt->srr - sizeof(struct iphdr);
500 memmove(optptr + 7, optptr + 3, optptr[1] - 7);
501 memcpy(optptr + 3, &opt->faddr, 4);
504 unsigned char *optptr = opt->__data + opt->rr - sizeof(struct iphdr);
506 optptr[2] -= 4;
507 memset(&optptr[optptr[2] - 1], 0, 4);
510 unsigned char *optptr = opt->__data + opt->ts - sizeof(struct iphdr);
513 optptr[2] -= 4;
514 memset(&optptr[optptr[2] - 1], 0, 4);
515 if ((optptr[3] & 0xF) == IPOPT_TS_PRESPEC)
516 optptr[2] -= 4;
519 optptr[2] -= 4;
520 memset(&optptr[optptr[2] - 1], 0, 4);
554 unsigned char *optptr;
559 optptr = (unsigned char *)raw + opt->rr;
560 ip_rt_get_source(&optptr[optptr[2]-5], skb, rt);
566 optptr = raw + opt->srr;
568 for ( srrptr = optptr[2], srrspace = optptr[1];
574 if (memcmp(&opt->nexthop, &optptr[srrptr-1], 4) == 0)
580 ip_rt_get_source(&optptr[srrptr-1], skb, rt);
581 optptr[2] = srrptr+4;
587 optptr = raw + opt->ts;
588 ip_rt_get_source(&optptr[optptr[2]-9], skb, rt);
604 unsigned char *optptr = skb_network_header(skb) + opt->srr;
624 for (srrptr = optptr[2], srrspace = optptr[1]; srrptr <= srrspace; srrptr += 4) {
629 memcpy(&nexthop, &optptr[srrptr-1], 4);