Lines Matching refs:optlen
49 memcpy(iph+sizeof(struct iphdr), opt->__data, opt->optlen); in ip_options_build()
95 int optlen; in __ip_options_echo() local
99 if (sopt->optlen == 0) in __ip_options_echo()
106 optlen = sptr[sopt->rr+1]; in __ip_options_echo()
108 dopt->rr = dopt->optlen + sizeof(struct iphdr); in __ip_options_echo()
109 memcpy(dptr, sptr+sopt->rr, optlen); in __ip_options_echo()
110 if (sopt->rr_needaddr && soffset <= optlen) { in __ip_options_echo()
111 if (soffset + 3 > optlen) in __ip_options_echo()
116 dptr += optlen; in __ip_options_echo()
117 dopt->optlen += optlen; in __ip_options_echo()
120 optlen = sptr[sopt->ts+1]; in __ip_options_echo()
122 dopt->ts = dopt->optlen + sizeof(struct iphdr); in __ip_options_echo()
123 memcpy(dptr, sptr+sopt->ts, optlen); in __ip_options_echo()
124 if (soffset <= optlen) { in __ip_options_echo()
126 if (soffset + 3 > optlen) in __ip_options_echo()
132 if (soffset + 3 > optlen) in __ip_options_echo()
140 if (soffset + 7 <= optlen) { in __ip_options_echo()
153 dptr += optlen; in __ip_options_echo()
154 dopt->optlen += optlen; in __ip_options_echo()
160 optlen = start[1]; in __ip_options_echo()
163 if (soffset > optlen) in __ip_options_echo()
164 soffset = optlen + 1; in __ip_options_echo()
186 dopt->srr = dopt->optlen + sizeof(struct iphdr); in __ip_options_echo()
187 dopt->optlen += doffset+3; in __ip_options_echo()
192 optlen = sptr[sopt->cipso+1]; in __ip_options_echo()
193 dopt->cipso = dopt->optlen+sizeof(struct iphdr); in __ip_options_echo()
194 memcpy(dptr, sptr+sopt->cipso, optlen); in __ip_options_echo()
195 dptr += optlen; in __ip_options_echo()
196 dopt->optlen += optlen; in __ip_options_echo()
198 while (dopt->optlen & 3) { in __ip_options_echo()
200 dopt->optlen++; in __ip_options_echo()
215 int l = opt->optlen; in ip_options_fragment()
216 int optlen; in ip_options_fragment() local
227 optlen = optptr[1]; in ip_options_fragment()
228 if (optlen < 2 || optlen > l) in ip_options_fragment()
231 memset(optptr, IPOPT_NOOP, optlen); in ip_options_fragment()
232 l -= optlen; in ip_options_fragment()
233 optptr += optlen; in ip_options_fragment()
265 int optlen, l; in ip_options_compile() local
274 for (l = opt->optlen; l > 0; ) { in ip_options_compile()
293 optlen = optptr[1]; in ip_options_compile()
294 if (optlen < 2 || optlen > l) { in ip_options_compile()
301 if (optlen < 3) { in ip_options_compile()
315 if (optptr[2] != 4 || optlen < 7 || ((optlen-3) & 3)) { in ip_options_compile()
320 if (optlen > 7) in ip_options_compile()
321 memmove(&optptr[3], &optptr[7], optlen-7); in ip_options_compile()
331 if (optlen < 3) { in ip_options_compile()
339 if (optptr[2] <= optlen) { in ip_options_compile()
340 if (optptr[2]+3 > optlen) { in ip_options_compile()
359 if (optlen < 4) { in ip_options_compile()
367 if (optptr[2] <= optlen) { in ip_options_compile()
369 if (optptr[2]+3 > optlen) { in ip_options_compile()
381 if (optptr[2]+7 > optlen) { in ip_options_compile()
395 if (optptr[2]+7 > optlen) { in ip_options_compile()
439 if (optlen < 4) { in ip_options_compile()
466 l -= optlen; in ip_options_compile()
467 optptr += optlen; in ip_options_compile()
513 static struct ip_options_rcu *ip_options_get_alloc(const int optlen) in ip_options_get_alloc() argument
515 return kzalloc(sizeof(struct ip_options_rcu) + ((optlen + 3) & ~3), in ip_options_get_alloc()
520 struct ip_options_rcu *opt, int optlen) in ip_options_get_finish() argument
522 while (optlen & 3) in ip_options_get_finish()
523 opt->opt.__data[optlen++] = IPOPT_END; in ip_options_get_finish()
524 opt->opt.optlen = optlen; in ip_options_get_finish()
525 if (optlen && ip_options_compile(net, &opt->opt, NULL)) { in ip_options_get_finish()
535 unsigned char __user *data, int optlen) in ip_options_get_from_user() argument
537 struct ip_options_rcu *opt = ip_options_get_alloc(optlen); in ip_options_get_from_user()
541 if (optlen && copy_from_user(opt->opt.__data, data, optlen)) { in ip_options_get_from_user()
545 return ip_options_get_finish(net, optp, opt, optlen); in ip_options_get_from_user()
549 unsigned char *data, int optlen) in ip_options_get() argument
551 struct ip_options_rcu *opt = ip_options_get_alloc(optlen); in ip_options_get()
555 if (optlen) in ip_options_get()
556 memcpy(opt->opt.__data, data, optlen); in ip_options_get()
557 return ip_options_get_finish(net, optp, opt, optlen); in ip_options_get()