Lines Matching refs:optlen
49 memcpy(iph+sizeof(struct iphdr), opt->__data, opt->optlen); in ip_options_build()
94 int optlen; in __ip_options_echo() local
98 if (sopt->optlen == 0) in __ip_options_echo()
105 optlen = sptr[sopt->rr+1]; in __ip_options_echo()
107 dopt->rr = dopt->optlen + sizeof(struct iphdr); in __ip_options_echo()
108 memcpy(dptr, sptr+sopt->rr, optlen); in __ip_options_echo()
109 if (sopt->rr_needaddr && soffset <= optlen) { in __ip_options_echo()
110 if (soffset + 3 > optlen) in __ip_options_echo()
115 dptr += optlen; in __ip_options_echo()
116 dopt->optlen += optlen; in __ip_options_echo()
119 optlen = sptr[sopt->ts+1]; in __ip_options_echo()
121 dopt->ts = dopt->optlen + sizeof(struct iphdr); in __ip_options_echo()
122 memcpy(dptr, sptr+sopt->ts, optlen); in __ip_options_echo()
123 if (soffset <= optlen) { in __ip_options_echo()
125 if (soffset + 3 > optlen) in __ip_options_echo()
131 if (soffset + 3 > optlen) in __ip_options_echo()
139 if (soffset + 7 <= optlen) { in __ip_options_echo()
152 dptr += optlen; in __ip_options_echo()
153 dopt->optlen += optlen; in __ip_options_echo()
159 optlen = start[1]; in __ip_options_echo()
162 if (soffset > optlen) in __ip_options_echo()
163 soffset = optlen + 1; in __ip_options_echo()
185 dopt->srr = dopt->optlen + sizeof(struct iphdr); in __ip_options_echo()
186 dopt->optlen += doffset+3; in __ip_options_echo()
191 optlen = sptr[sopt->cipso+1]; in __ip_options_echo()
192 dopt->cipso = dopt->optlen+sizeof(struct iphdr); in __ip_options_echo()
193 memcpy(dptr, sptr+sopt->cipso, optlen); in __ip_options_echo()
194 dptr += optlen; in __ip_options_echo()
195 dopt->optlen += optlen; in __ip_options_echo()
197 while (dopt->optlen & 3) { in __ip_options_echo()
199 dopt->optlen++; in __ip_options_echo()
214 int l = opt->optlen; in ip_options_fragment()
215 int optlen; in ip_options_fragment() local
226 optlen = optptr[1]; in ip_options_fragment()
227 if (optlen < 2 || optlen > l) in ip_options_fragment()
230 memset(optptr, IPOPT_NOOP, optlen); in ip_options_fragment()
231 l -= optlen; in ip_options_fragment()
232 optptr += optlen; in ip_options_fragment()
264 int optlen, l; in ip_options_compile() local
273 for (l = opt->optlen; l > 0; ) { in ip_options_compile()
292 optlen = optptr[1]; in ip_options_compile()
293 if (optlen < 2 || optlen > l) { in ip_options_compile()
300 if (optlen < 3) { in ip_options_compile()
314 if (optptr[2] != 4 || optlen < 7 || ((optlen-3) & 3)) { in ip_options_compile()
319 if (optlen > 7) in ip_options_compile()
320 memmove(&optptr[3], &optptr[7], optlen-7); in ip_options_compile()
330 if (optlen < 3) { in ip_options_compile()
338 if (optptr[2] <= optlen) { in ip_options_compile()
339 if (optptr[2]+3 > optlen) { in ip_options_compile()
358 if (optlen < 4) { in ip_options_compile()
366 if (optptr[2] <= optlen) { in ip_options_compile()
368 if (optptr[2]+3 > optlen) { in ip_options_compile()
380 if (optptr[2]+7 > optlen) { in ip_options_compile()
394 if (optptr[2]+7 > optlen) { in ip_options_compile()
437 if (optlen < 4) { in ip_options_compile()
464 l -= optlen; in ip_options_compile()
465 optptr += optlen; in ip_options_compile()
511 static struct ip_options_rcu *ip_options_get_alloc(const int optlen) in ip_options_get_alloc() argument
513 return kzalloc(sizeof(struct ip_options_rcu) + ((optlen + 3) & ~3), in ip_options_get_alloc()
518 struct ip_options_rcu *opt, int optlen) in ip_options_get_finish() argument
520 while (optlen & 3) in ip_options_get_finish()
521 opt->opt.__data[optlen++] = IPOPT_END; in ip_options_get_finish()
522 opt->opt.optlen = optlen; in ip_options_get_finish()
523 if (optlen && ip_options_compile(net, &opt->opt, NULL)) { in ip_options_get_finish()
533 unsigned char __user *data, int optlen) in ip_options_get_from_user() argument
535 struct ip_options_rcu *opt = ip_options_get_alloc(optlen); in ip_options_get_from_user()
539 if (optlen && copy_from_user(opt->opt.__data, data, optlen)) { in ip_options_get_from_user()
543 return ip_options_get_finish(net, optp, opt, optlen); in ip_options_get_from_user()
547 unsigned char *data, int optlen) in ip_options_get() argument
549 struct ip_options_rcu *opt = ip_options_get_alloc(optlen); in ip_options_get()
553 if (optlen) in ip_options_get()
554 memcpy(opt->opt.__data, data, optlen); in ip_options_get()
555 return ip_options_get_finish(net, optp, opt, optlen); in ip_options_get()