Lines Matching defs:optptr

197 	unsigned char *optptr = skb_network_header(skb) + sizeof(struct iphdr);
203 switch (*optptr) {
208 optptr++;
211 optlen = optptr[1];
214 if (!IPOPT_COPIED(*optptr))
215 memset(optptr, IPOPT_NOOP, optlen);
217 optptr += optlen;
248 unsigned char *optptr;
254 optptr = (unsigned char *)&(ip_hdr(skb)[1]);
256 optptr = opt->__data;
257 iph = optptr - sizeof(struct iphdr);
260 switch (*optptr) {
262 for (optptr++, l--; l > 0; optptr++, l--) {
263 if (*optptr != IPOPT_END) {
264 *optptr = IPOPT_END;
271 optptr++;
275 pp_ptr = optptr;
278 optlen = optptr[1];
280 pp_ptr = optptr;
283 switch (*optptr) {
287 pp_ptr = optptr + 1;
290 if (optptr[2] < 4) {
291 pp_ptr = optptr + 2;
296 pp_ptr = optptr;
300 if (optptr[2] != 4 || optlen < 7 || ((optlen-3) & 3)) {
301 pp_ptr = optptr + 1;
304 memcpy(&opt->faddr, &optptr[3], 4);
306 memmove(&optptr[3], &optptr[7], optlen-7);
308 opt->is_strictroute = (optptr[0] == IPOPT_SSRR);
309 opt->srr = optptr - iph;
313 pp_ptr = optptr;
317 pp_ptr = optptr + 1;
320 if (optptr[2] < 4) {
321 pp_ptr = optptr + 2;
324 if (optptr[2] <= optlen) {
325 if (optptr[2]+3 > optlen) {
326 pp_ptr = optptr + 2;
331 memcpy(&optptr[optptr[2]-1], &spec_dst, 4);
334 optptr[2] += 4;
337 opt->rr = optptr - iph;
341 pp_ptr = optptr;
345 pp_ptr = optptr + 1;
348 if (optptr[2] < 5) {
349 pp_ptr = optptr + 2;
352 if (optptr[2] <= optlen) {
354 if (optptr[2]+3 > optlen) {
355 pp_ptr = optptr + 2;
358 switch (optptr[3]&0xF) {
361 timeptr = &optptr[optptr[2]-1];
363 optptr[2] += 4;
366 if (optptr[2]+7 > optlen) {
367 pp_ptr = optptr + 2;
372 memcpy(&optptr[optptr[2]-1], &spec_dst, 4);
373 timeptr = &optptr[optptr[2]+3];
377 optptr[2] += 8;
380 if (optptr[2]+7 > optlen) {
381 pp_ptr = optptr + 2;
386 memcpy(&addr, &optptr[optptr[2]-1], 4);
390 timeptr = &optptr[optptr[2]+3];
393 optptr[2] += 8;
397 pp_ptr = optptr + 3;
409 } else if ((optptr[3]&0xF) != IPOPT_TS_PRESPEC) {
410 unsigned int overflow = optptr[3]>>4;
412 pp_ptr = optptr + 3;
416 optptr[3] = (optptr[3]&0xF)|((overflow+1)<<4);
420 opt->ts = optptr - iph;
424 pp_ptr = optptr + 1;
427 if (optptr[2] == 0 && optptr[3] == 0)
428 opt->router_alert = optptr - iph;
432 pp_ptr = optptr;
435 opt->cipso = optptr - iph;
436 if (cipso_v4_validate(skb, &optptr)) {
437 pp_ptr = optptr;
445 pp_ptr = optptr;
451 optptr += optlen;
485 unsigned char *optptr = opt->__data + opt->srr - sizeof(struct iphdr);
487 memmove(optptr + 7, optptr + 3, optptr[1] - 7);
488 memcpy(optptr + 3, &opt->faddr, 4);
491 unsigned char *optptr = opt->__data + opt->rr - sizeof(struct iphdr);
493 optptr[2] -= 4;
494 memset(&optptr[optptr[2] - 1], 0, 4);
497 unsigned char *optptr = opt->__data + opt->ts - sizeof(struct iphdr);
500 optptr[2] -= 4;
501 memset(&optptr[optptr[2] - 1], 0, 4);
502 if ((optptr[3] & 0xF) == IPOPT_TS_PRESPEC)
503 optptr[2] -= 4;
506 optptr[2] -= 4;
507 memset(&optptr[optptr[2] - 1], 0, 4);
541 unsigned char *optptr;
546 optptr = (unsigned char *)raw + opt->rr;
547 ip_rt_get_source(&optptr[optptr[2]-5], skb, rt);
553 optptr = raw + opt->srr;
555 for ( srrptr = optptr[2], srrspace = optptr[1];
561 if (memcmp(&opt->nexthop, &optptr[srrptr-1], 4) == 0)
567 ip_rt_get_source(&optptr[srrptr-1], skb, rt);
568 optptr[2] = srrptr+4;
574 optptr = raw + opt->ts;
575 ip_rt_get_source(&optptr[optptr[2]-9], skb, rt);
591 unsigned char *optptr = skb_network_header(skb) + opt->srr;
611 for (srrptr = optptr[2], srrspace = optptr[1]; srrptr <= srrspace; srrptr += 4) {
616 memcpy(&nexthop, &optptr[srrptr-1], 4);